diff --git a/Build/Configurations/Includes/ZDoom_sectors.cfg b/Build/Configurations/Includes/ZDoom_sectors.cfg index e2fad79..b215392 100644 --- a/Build/Configurations/Includes/ZDoom_sectors.cfg +++ b/Build/Configurations/Includes/ZDoom_sectors.cfg @@ -52,6 +52,7 @@ zdoom 84 = "Scroll east + -2 or -5% health (no protection)"; 85 = "Damage Sludge -4% health"; 87 = "Sector uses outside fog"; + 90 = "Skybox sector (GZDoom only)"; 105 = "Delayed damage weak (hazardcount +2/16 per second)"; 115 = "Instant death"; 116 = "Delayed damage strong (hazardcount +4/16 per second)"; diff --git a/Source/Core/Controls/DockersControl.cs b/Source/Core/Controls/DockersControl.cs index 9eb4892..40f71f0 100644 --- a/Source/Core/Controls/DockersControl.cs +++ b/Source/Core/Controls/DockersControl.cs @@ -190,7 +190,7 @@ namespace CodeImp.DoomBuilder.Controls } // This adds a docker - public void Add(Docker d) + public void Add(Docker d, bool notify) { // Set up page TabPage page = new TabPage(d.Title); @@ -202,7 +202,11 @@ namespace CodeImp.DoomBuilder.Controls d.Control.Dock = DockStyle.Fill; tabs.TabPages.Add(page); page.ResumeLayout(true); - if(iscollapsed) tabs.SelectedIndex = -1; + if(iscollapsed) + { + tabs.SelectedIndex = -1; + if(notify) tabs.PlayNotifyAnimation(tabs.TabPages.Count - 1); //mxd + } // Go for all controls to add events Queue todo = new Queue(); diff --git a/Source/Core/Controls/DockersTabsControl.cs b/Source/Core/Controls/DockersTabsControl.cs index 929bc03..bba37ce 100644 --- a/Source/Core/Controls/DockersTabsControl.cs +++ b/Source/Core/Controls/DockersTabsControl.cs @@ -31,12 +31,19 @@ namespace CodeImp.DoomBuilder.Controls { #region ================== Constants + private const int NOTIFY_BLINK_COUNT = 8; //mxd + #endregion #region ================== Variables private int highlighttab; private readonly StringFormat stringformat; + + //mxd. Tab notify anmimation + private int notifytab; + private int notifycounter; + private Timer notifytimer; #endregion @@ -54,12 +61,24 @@ namespace CodeImp.DoomBuilder.Controls stringformat = new StringFormat {Alignment = StringAlignment.Center, HotkeyPrefix = HotkeyPrefix.None, LineAlignment = StringAlignment.Center}; highlighttab = -1; + + //mxd. Tab notify anmimation + notifytimer = new Timer { Interval = 500 }; + notifytimer.Tick += NotifyTimerOnTick; } #endregion #region ================== Methods + //mxd. Start notify animation + internal void PlayNotifyAnimation(int tabindex) + { + notifytab = tabindex; + notifycounter = 1; + notifytimer.Start(); + } + //mxd private void DrawTab(Graphics graphics, int index) { @@ -100,8 +119,18 @@ namespace CodeImp.DoomBuilder.Controls { Rectangle bgbounds = new Rectangle(0, 0, bounds.Width, bounds.Height + 1); bgbounds.Inflate(-1, 0); - renderer.DrawBackground(g, bgbounds); - g.DrawString(this.TabPages[index].Text, this.Font, SystemBrushes.ControlText, new RectangleF(bgbounds.Location, bounds.Size), stringformat); + + // Use alternate colors on odd numbers + if(notifytab == index && notifycounter % 2 != 0) + { + g.FillRectangle(SystemBrushes.Highlight, bgbounds); + g.DrawString(this.TabPages[index].Text, this.Font, SystemBrushes.ControlLightLight, new RectangleF(bgbounds.Location, bounds.Size), stringformat); + } + else + { + renderer.DrawBackground(g, bgbounds); + g.DrawString(this.TabPages[index].Text, this.Font, SystemBrushes.ControlText, new RectangleF(bgbounds.Location, bounds.Size), stringformat); + } } // Rotate image? @@ -122,6 +151,23 @@ namespace CodeImp.DoomBuilder.Controls #endregion #region ================== Events + + //mxd. Stop notify animation if user selects animated tab + protected override void OnSelectedIndexChanged(EventArgs e) + { + // Stop animation + if(notifytab != -1 && this.SelectedIndex == notifytab) + { + notifytimer.Stop(); + notifytab = -1; + + // Redraw needed? + if(notifycounter % 2 != 0) this.Invalidate(); + notifycounter = 0; + } + + base.OnSelectedIndexChanged(e); + } //mxd. Redrawing needed protected override void OnPaint(PaintEventArgs e) @@ -210,6 +256,20 @@ namespace CodeImp.DoomBuilder.Controls // the input controls may not receive certain keys such as delete and arrow keys if(docker != null && !docker.IsFocused) e.Handled = true; } + + //mxd. Update notyfy animation + private void NotifyTimerOnTick(object sender, EventArgs eventArgs) + { + if(notifycounter++ == NOTIFY_BLINK_COUNT) + { + notifytimer.Stop(); + notifycounter = 0; + notifytab = -1; + } + + // Trigger redraw + this.Invalidate(); + } #endregion } diff --git a/Source/Core/Windows/IMainForm.cs b/Source/Core/Windows/IMainForm.cs index 225a5ab..ffc7dac 100644 --- a/Source/Core/Windows/IMainForm.cs +++ b/Source/Core/Windows/IMainForm.cs @@ -206,6 +206,11 @@ namespace CodeImp.DoomBuilder.Windows /// This adds a docker to the side panel. /// void AddDocker(Docker d); + + /// + /// This adds a docker to the side panel and plays notify animation when the control is collapsed + /// + void AddDocker(Docker d, bool notify); //mxd /// /// This removes a docker from the side panel. diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs index fc220d9..3fd3112 100644 --- a/Source/Core/Windows/MainForm.cs +++ b/Source/Core/Windows/MainForm.cs @@ -3560,7 +3560,7 @@ namespace CodeImp.DoomBuilder.Windows //mxd internal void AddHintsDocker() { - if(!dockerspanel.Contains(hintsDocker)) dockerspanel.Add(hintsDocker); + if(!dockerspanel.Contains(hintsDocker)) dockerspanel.Add(hintsDocker, false); } //mxd @@ -4118,11 +4118,23 @@ namespace CodeImp.DoomBuilder.Windows { if(dockerspanel.Contains(d)) return; //mxd + // Make sure the full name is set with the plugin name as prefix + Plugin plugin = General.Plugins.FindPluginByAssembly(Assembly.GetCallingAssembly()); + d.MakeFullName(plugin.Name.ToLowerInvariant()); + + dockerspanel.Add(d, false); + } + + //mxd. This also adds a docker + public void AddDocker(Docker d, bool notify) + { + if(dockerspanel.Contains(d)) return; //mxd + // Make sure the full name is set with the plugin name as prefix Plugin plugin = General.Plugins.FindPluginByAssembly(Assembly.GetCallingAssembly()); d.MakeFullName(plugin.Name.ToLowerInvariant()); - dockerspanel.Add(d); + dockerspanel.Add(d, notify); } // This removes a docker diff --git a/Source/Plugins/BuilderModes/ClassicModes/DrawGridMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DrawGridMode.cs index 994f242..44a1d7e 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/DrawGridMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/DrawGridMode.cs @@ -515,7 +515,7 @@ namespace CodeImp.DoomBuilder.BuilderModes { // Add docker docker = new Docker("drawgrid", "Draw Grid", panel); - General.Interface.AddDocker(docker); + General.Interface.AddDocker(docker, true); General.Interface.SelectDocker(docker); } diff --git a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs index 12c5c2d..29543bb 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs @@ -1051,7 +1051,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // Add docker panel = new EditSelectionPanel(this); docker = new Docker("editselection", "Edit Selection", panel); - General.Interface.AddDocker(docker); + General.Interface.AddDocker(docker, true); General.Interface.SelectDocker(docker); // We don't want to record this for undoing while we move the geometry around. diff --git a/Source/Plugins/BuilderModes/Interface/EditSelectionPanel.Designer.cs b/Source/Plugins/BuilderModes/Interface/EditSelectionPanel.Designer.cs index 637d09b..aecbf6f 100644 --- a/Source/Plugins/BuilderModes/Interface/EditSelectionPanel.Designer.cs +++ b/Source/Plugins/BuilderModes/Interface/EditSelectionPanel.Designer.cs @@ -111,7 +111,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.preciseposition.Location = new System.Drawing.Point(58, 115); this.preciseposition.Name = "preciseposition"; this.preciseposition.Size = new System.Drawing.Size(146, 17); - this.preciseposition.TabIndex = 36; + this.preciseposition.TabIndex = 6; this.preciseposition.Text = "High precision positioning"; this.tooltip.SetToolTip(this.preciseposition, "When checked, thing and vertex positions will be set using floating point precisi" + "on.\r\nOtherwise, they will be rounded to the nearest integer."); @@ -123,7 +123,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.orgposy.Location = new System.Drawing.Point(136, 23); this.orgposy.Name = "orgposy"; this.orgposy.Size = new System.Drawing.Size(72, 24); - this.orgposy.TabIndex = 29; + this.orgposy.TabIndex = 1; this.orgposy.Text = "-2000"; this.orgposy.UseVisualStyleBackColor = true; this.orgposy.Click += new System.EventHandler(this.orgposy_Click); @@ -134,7 +134,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.orgposx.Location = new System.Drawing.Point(58, 23); this.orgposx.Name = "orgposx"; this.orgposx.Size = new System.Drawing.Size(72, 24); - this.orgposx.TabIndex = 28; + this.orgposx.TabIndex = 0; this.orgposx.Text = "-2000"; this.orgposx.UseVisualStyleBackColor = true; this.orgposx.Click += new System.EventHandler(this.orgposx_Click); @@ -190,7 +190,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.relposy.Name = "relposy"; this.relposy.Size = new System.Drawing.Size(72, 24); this.relposy.StepValues = null; - this.relposy.TabIndex = 11; + this.relposy.TabIndex = 5; this.relposy.WhenEnterPressed += new System.EventHandler(this.relposy_Validated); this.relposy.Validated += new System.EventHandler(this.relposy_Validated); this.relposy.WhenButtonsClicked += new System.EventHandler(this.relposy_Validated); @@ -211,7 +211,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.relposx.Name = "relposx"; this.relposx.Size = new System.Drawing.Size(72, 24); this.relposx.StepValues = null; - this.relposx.TabIndex = 10; + this.relposx.TabIndex = 4; this.relposx.WhenEnterPressed += new System.EventHandler(this.relposx_Validated); this.relposx.Validated += new System.EventHandler(this.relposx_Validated); this.relposx.WhenButtonsClicked += new System.EventHandler(this.relposx_Validated); @@ -232,7 +232,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.absposy.Name = "absposy"; this.absposy.Size = new System.Drawing.Size(72, 24); this.absposy.StepValues = null; - this.absposy.TabIndex = 9; + this.absposy.TabIndex = 3; this.absposy.WhenEnterPressed += new System.EventHandler(this.absposy_Validated); this.absposy.Validated += new System.EventHandler(this.absposy_Validated); this.absposy.WhenButtonsClicked += new System.EventHandler(this.absposy_Validated); @@ -253,7 +253,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.absposx.Name = "absposx"; this.absposx.Size = new System.Drawing.Size(72, 24); this.absposx.StepValues = null; - this.absposx.TabIndex = 8; + this.absposx.TabIndex = 2; this.absposx.WhenEnterPressed += new System.EventHandler(this.absposx_Validated); this.absposx.Validated += new System.EventHandler(this.absposx_Validated); this.absposx.WhenButtonsClicked += new System.EventHandler(this.absposx_Validated); @@ -306,7 +306,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.orgsizey.Location = new System.Drawing.Point(136, 23); this.orgsizey.Name = "orgsizey"; this.orgsizey.Size = new System.Drawing.Size(72, 24); - this.orgsizey.TabIndex = 31; + this.orgsizey.TabIndex = 1; this.orgsizey.Text = "-2000"; this.orgsizey.UseVisualStyleBackColor = true; this.orgsizey.Click += new System.EventHandler(this.orgsizey_Click); @@ -317,7 +317,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.orgsizex.Location = new System.Drawing.Point(58, 23); this.orgsizex.Name = "orgsizex"; this.orgsizex.Size = new System.Drawing.Size(72, 24); - this.orgsizex.TabIndex = 30; + this.orgsizex.TabIndex = 0; this.orgsizex.Text = "-2000"; this.orgsizex.UseVisualStyleBackColor = true; this.orgsizex.Click += new System.EventHandler(this.orgsizex_Click); @@ -373,7 +373,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.relsizey.Name = "relsizey"; this.relsizey.Size = new System.Drawing.Size(72, 24); this.relsizey.StepValues = null; - this.relsizey.TabIndex = 15; + this.relsizey.TabIndex = 5; this.relsizey.WhenEnterPressed += new System.EventHandler(this.relsizey_Validated); this.relsizey.Validated += new System.EventHandler(this.relsizey_Validated); this.relsizey.WhenButtonsClicked += new System.EventHandler(this.relsizey_Validated); @@ -394,7 +394,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.relsizex.Name = "relsizex"; this.relsizex.Size = new System.Drawing.Size(72, 24); this.relsizex.StepValues = null; - this.relsizex.TabIndex = 14; + this.relsizex.TabIndex = 4; this.relsizex.WhenEnterPressed += new System.EventHandler(this.relsizex_Validated); this.relsizex.Validated += new System.EventHandler(this.relsizex_Validated); this.relsizex.WhenButtonsClicked += new System.EventHandler(this.relsizex_Validated); @@ -424,7 +424,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.abssizey.Name = "abssizey"; this.abssizey.Size = new System.Drawing.Size(72, 24); this.abssizey.StepValues = null; - this.abssizey.TabIndex = 12; + this.abssizey.TabIndex = 3; this.abssizey.WhenEnterPressed += new System.EventHandler(this.abssizey_Validated); this.abssizey.Validated += new System.EventHandler(this.abssizey_Validated); this.abssizey.WhenButtonsClicked += new System.EventHandler(this.abssizey_Validated); @@ -445,7 +445,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.abssizex.Name = "abssizex"; this.abssizex.Size = new System.Drawing.Size(72, 24); this.abssizex.StepValues = null; - this.abssizex.TabIndex = 11; + this.abssizex.TabIndex = 2; this.abssizex.WhenEnterPressed += new System.EventHandler(this.abssizex_Validated); this.abssizex.Validated += new System.EventHandler(this.abssizex_Validated); this.abssizex.WhenButtonsClicked += new System.EventHandler(this.abssizex_Validated); @@ -493,7 +493,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.flipv.Location = new System.Drawing.Point(94, 53); this.flipv.Name = "flipv"; this.flipv.Size = new System.Drawing.Size(30, 30); - this.flipv.TabIndex = 26; + this.flipv.TabIndex = 2; this.flipv.UseVisualStyleBackColor = true; this.flipv.Click += new System.EventHandler(this.flipv_Click); // @@ -504,7 +504,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.fliph.Location = new System.Drawing.Point(58, 53); this.fliph.Name = "fliph"; this.fliph.Size = new System.Drawing.Size(30, 30); - this.fliph.TabIndex = 25; + this.fliph.TabIndex = 1; this.fliph.UseVisualStyleBackColor = true; this.fliph.Click += new System.EventHandler(this.fliph_Click); // @@ -541,7 +541,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.absrot.Name = "absrot"; this.absrot.Size = new System.Drawing.Size(82, 24); this.absrot.StepValues = null; - this.absrot.TabIndex = 24; + this.absrot.TabIndex = 0; this.absrot.WhenEnterPressed += new System.EventHandler(this.absrot_Validated); this.absrot.Validated += new System.EventHandler(this.absrot_Validated); this.absrot.WhenButtonsClicked += new System.EventHandler(this.absrot_Validated); @@ -567,7 +567,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.ceiltexoffset.Location = new System.Drawing.Point(27, 28); this.ceiltexoffset.Name = "ceiltexoffset"; this.ceiltexoffset.Size = new System.Drawing.Size(54, 17); - this.ceiltexoffset.TabIndex = 30; + this.ceiltexoffset.TabIndex = 0; this.ceiltexoffset.Text = "Offset"; this.ceiltexoffset.UseVisualStyleBackColor = true; this.ceiltexoffset.CheckedChanged += new System.EventHandler(this.ceiltexoffset_CheckedChanged); @@ -578,7 +578,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.ceiltexrotation.Location = new System.Drawing.Point(89, 28); this.ceiltexrotation.Name = "ceiltexrotation"; this.ceiltexrotation.Size = new System.Drawing.Size(66, 17); - this.ceiltexrotation.TabIndex = 32; + this.ceiltexrotation.TabIndex = 1; this.ceiltexrotation.Text = "Rotation"; this.ceiltexrotation.UseVisualStyleBackColor = true; this.ceiltexrotation.CheckedChanged += new System.EventHandler(this.ceiltexrotation_CheckedChanged); @@ -589,7 +589,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.ceiltexscale.Location = new System.Drawing.Point(163, 28); this.ceiltexscale.Name = "ceiltexscale"; this.ceiltexscale.Size = new System.Drawing.Size(53, 17); - this.ceiltexscale.TabIndex = 35; + this.ceiltexscale.TabIndex = 2; this.ceiltexscale.Text = "Scale"; this.ceiltexscale.UseVisualStyleBackColor = true; this.ceiltexscale.CheckedChanged += new System.EventHandler(this.ceiltexscale_CheckedChanged); @@ -600,7 +600,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.ceiltexall.Location = new System.Drawing.Point(14, 368); this.ceiltexall.Name = "ceiltexall"; this.ceiltexall.Size = new System.Drawing.Size(154, 17); - this.ceiltexall.TabIndex = 37; + this.ceiltexall.TabIndex = 0; this.ceiltexall.Text = "Ceiling Textures Transform:"; this.ceiltexall.UseVisualStyleBackColor = true; this.ceiltexall.CheckedChanged += new System.EventHandler(this.ceiltexall_CheckedChanged); @@ -611,7 +611,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.floortexrotation.Location = new System.Drawing.Point(89, 28); this.floortexrotation.Name = "floortexrotation"; this.floortexrotation.Size = new System.Drawing.Size(66, 17); - this.floortexrotation.TabIndex = 31; + this.floortexrotation.TabIndex = 1; this.floortexrotation.Text = "Rotation"; this.floortexrotation.UseVisualStyleBackColor = true; this.floortexrotation.CheckedChanged += new System.EventHandler(this.floortexrotation_CheckedChanged); @@ -622,7 +622,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.floortexoffset.Location = new System.Drawing.Point(27, 28); this.floortexoffset.Name = "floortexoffset"; this.floortexoffset.Size = new System.Drawing.Size(54, 17); - this.floortexoffset.TabIndex = 4; + this.floortexoffset.TabIndex = 0; this.floortexoffset.Text = "Offset"; this.floortexoffset.UseVisualStyleBackColor = true; this.floortexoffset.CheckedChanged += new System.EventHandler(this.floortexoffset_CheckedChanged); @@ -633,7 +633,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.floortexscale.Location = new System.Drawing.Point(163, 28); this.floortexscale.Name = "floortexscale"; this.floortexscale.Size = new System.Drawing.Size(53, 17); - this.floortexscale.TabIndex = 34; + this.floortexscale.TabIndex = 2; this.floortexscale.Text = "Scale"; this.floortexscale.UseVisualStyleBackColor = true; this.floortexscale.CheckedChanged += new System.EventHandler(this.floortexscale_CheckedChanged); @@ -644,7 +644,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.floortexall.Location = new System.Drawing.Point(14, 432); this.floortexall.Name = "floortexall"; this.floortexall.Size = new System.Drawing.Size(146, 17); - this.floortexall.TabIndex = 36; + this.floortexall.TabIndex = 1; this.floortexall.Text = "Floor Textures Transform:"; this.floortexall.UseVisualStyleBackColor = true; this.floortexall.CheckedChanged += new System.EventHandler(this.floortexall_CheckedChanged); diff --git a/Source/Plugins/BuilderModes/Interface/EditSelectionPanel.cs b/Source/Plugins/BuilderModes/Interface/EditSelectionPanel.cs index c90399a..204fa55 100644 --- a/Source/Plugins/BuilderModes/Interface/EditSelectionPanel.cs +++ b/Source/Plugins/BuilderModes/Interface/EditSelectionPanel.cs @@ -70,6 +70,10 @@ namespace CodeImp.DoomBuilder.BuilderModes preciseposition.Checked = false; preciseposition.Enabled = false; } + + //mxd. Otherwise the focus will go to one of TextBoxes + // and stay there forever preventing tab collapsing when in collapsed mode + label1.Focus(); } #endregion diff --git a/Source/Plugins/SoundPropagationMode/SoundEnvironmentMode.cs b/Source/Plugins/SoundPropagationMode/SoundEnvironmentMode.cs index 5af8f4e..4f70ee0 100644 --- a/Source/Plugins/SoundPropagationMode/SoundEnvironmentMode.cs +++ b/Source/Plugins/SoundPropagationMode/SoundEnvironmentMode.cs @@ -163,7 +163,7 @@ namespace CodeImp.DoomBuilder.SoundPropagationMode panel = new SoundEnvironmentPanel(); panel.OnShowWarningsOnlyChanged += PanelOnOnShowWarningsOnlyChanged; docker = new Docker("soundenvironments", "Sound Environments", panel); - General.Interface.AddDocker(docker); + General.Interface.AddDocker(docker, true); General.Interface.SelectDocker(docker); worker = new BackgroundWorker();