From 25849a4a84f6d4f550cee23f9a76b701b9856ad3 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 29 May 2017 16:15:18 +1000 Subject: [PATCH] Commands gui now has extra permissions too --- GUI/GuiPerms.cs | 3 +- GUI/PropertyWindow/PropertyWindow.Blocks.cs | 13 +- GUI/PropertyWindow/PropertyWindow.Commands.cs | 74 +++++++- GUI/PropertyWindow/PropertyWindow.Designer.cs | 173 +++++++++++++++++- .../Commands/Permissions/CommandExtraPerms.cs | 13 +- 5 files changed, 259 insertions(+), 17 deletions(-) diff --git a/GUI/GuiPerms.cs b/GUI/GuiPerms.cs index 81ca587cd..aec7971b7 100644 --- a/GUI/GuiPerms.cs +++ b/GUI/GuiPerms.cs @@ -96,9 +96,10 @@ namespace MCGalaxy.Gui { } } - internal static void FillRanks(ComboBox[] boxes) { + internal static void FillRanks(ComboBox[] boxes, bool removeRank = true) { for (int i = 0; i < boxes.Length; i++) { boxes[i].Items.AddRange(RankNames); + if (!removeRank) continue; boxes[i].Items.Add("(remove rank)"); } } diff --git a/GUI/PropertyWindow/PropertyWindow.Blocks.cs b/GUI/PropertyWindow/PropertyWindow.Blocks.cs index 67bb18e30..16b44163b 100644 --- a/GUI/PropertyWindow/PropertyWindow.Blocks.cs +++ b/GUI/PropertyWindow/PropertyWindow.Blocks.cs @@ -25,13 +25,13 @@ namespace MCGalaxy.Gui { bool blockSupressEvents = true; ComboBox[] blockAllowBoxes, blockDisallowBoxes; + byte blockID; + // need to keep a list of changed block perms, because we don't want // to modify the server's live permissions if user clicks 'discard' BlockPerms blockPermsOrig, blockPerms; List blockPermsChanged = new List(); - BlockProps[] blockPropsChanged = new BlockProps[256]; - byte blockID; - + BlockProps[] blockPropsChanged = new BlockProps[256]; void LoadBlocks() { blk_list.Items.Clear(); @@ -97,9 +97,10 @@ namespace MCGalaxy.Gui { blk_cbWater.Checked = props.WaterKills; blockSupressEvents = true; - GuiPerms.SetDefaultIndex(blk_cmbMin, blockPermsOrig.MinRank); - GuiPerms.SetSpecificPerms(blockPermsOrig.Allowed, blockAllowBoxes); - GuiPerms.SetSpecificPerms(blockPermsOrig.Disallowed, blockDisallowBoxes); + BlockPerms perms = blockPerms != null ? blockPerms : blockPermsOrig; + GuiPerms.SetDefaultIndex(blk_cmbMin, perms.MinRank); + GuiPerms.SetSpecificPerms(perms.Allowed, blockAllowBoxes); + GuiPerms.SetSpecificPerms(perms.Disallowed, blockDisallowBoxes); blockSupressEvents = false; } diff --git a/GUI/PropertyWindow/PropertyWindow.Commands.cs b/GUI/PropertyWindow/PropertyWindow.Commands.cs index 4da957ee1..9f2915642 100644 --- a/GUI/PropertyWindow/PropertyWindow.Commands.cs +++ b/GUI/PropertyWindow/PropertyWindow.Commands.cs @@ -22,13 +22,16 @@ namespace MCGalaxy.Gui { public partial class PropertyWindow : Form { bool commandSupressEvents = true; - ComboBox[] commandAllowBoxes, commandDisallowBoxes; + ComboBox[] commandAllowBoxes, commandDisallowBoxes, commandExtraBoxes; + Label[] commandExtraLabels; + string commandName; + // need to keep a list of changed command perms, because we don't want // to modify the server's live permissions if user clicks 'discard' CommandPerms commandPermsOrig, commandPerms; + List extraPermsList; List commandPermsChanged = new List(); List commandExtraPermsChanged = new List(); - string commandName; void LoadCommands() { cmd_list.Items.Clear(); @@ -49,14 +52,20 @@ namespace MCGalaxy.Gui { foreach (CommandPerms changed in commandPermsChanged) { CommandPerms.Set(changed.CmdName, changed.MinRank, changed.Allowed, changed.Disallowed); + } + foreach (CommandExtraPerms changed in commandExtraPermsChanged) { + CommandExtraPerms orig = CommandExtraPerms.Find(changed.CmdName, changed.Number); + orig.MinRank = changed.MinRank; } + + CommandExtraPerms.Save(); CommandPerms.Save(); CommandPerms.Load(); LoadCommands(); } bool CommandsChanged() { - return commandPermsChanged.Count > 0; + return commandExtraPermsChanged.Count > 0 || commandPermsChanged.Count > 0; } @@ -67,9 +76,11 @@ namespace MCGalaxy.Gui { CommandInitSpecificArrays(); commandSupressEvents = true; - GuiPerms.SetDefaultIndex(cmd_cmbMin, commandPermsOrig.MinRank); - GuiPerms.SetSpecificPerms(commandPermsOrig.Allowed, commandAllowBoxes); - GuiPerms.SetSpecificPerms(commandPermsOrig.Disallowed, commandDisallowBoxes); + CommandPerms perms = commandPerms != null ? commandPerms : commandPermsOrig; + GuiPerms.SetDefaultIndex(cmd_cmbMin, perms.MinRank); + GuiPerms.SetSpecificPerms(perms.Allowed, commandAllowBoxes); + GuiPerms.SetSpecificPerms(perms.Disallowed, commandDisallowBoxes); + CommandInitExtraPerms(); commandSupressEvents = false; } @@ -77,8 +88,14 @@ namespace MCGalaxy.Gui { if (commandAllowBoxes != null) return; commandAllowBoxes = new ComboBox[] { cmd_cmbAlw1, cmd_cmbAlw2, cmd_cmbAlw3 }; commandDisallowBoxes = new ComboBox[] { cmd_cmbDis1, cmd_cmbDis2, cmd_cmbDis3 }; + commandExtraBoxes = new ComboBox[] { cmd_cmbExtra1, cmd_cmbExtra2, cmd_cmbExtra3, + cmd_cmbExtra4, cmd_cmbExtra5, cmd_cmbExtra6, cmd_cmbExtra7 }; + commandExtraLabels = new Label[] { cmd_lblExtra1, cmd_lblExtra2, cmd_lblExtra3, + cmd_lblExtra4, cmd_lblExtra5, cmd_lblExtra6, cmd_lblExtra7 }; + GuiPerms.FillRanks(commandAllowBoxes); GuiPerms.FillRanks(commandDisallowBoxes); + GuiPerms.FillRanks(commandExtraBoxes, false); } void CommandGetOrAddPermsChanged() { @@ -133,5 +150,50 @@ namespace MCGalaxy.Gui { form.ShowDialog(); } } + + + void CommandInitExtraPerms() { + extraPermsList = CommandExtraPerms.FindAll(commandName); + for (int i = 0; i < commandExtraBoxes.Length; i++) { + commandExtraBoxes[i].Visible = false; + commandExtraLabels[i].Visible = false; + } + + int height = 12; + for (int i = 0; i < extraPermsList.Count; i++) { + CommandExtraPerms perms = LookupExtraPerms(extraPermsList[i].CmdName, extraPermsList[i].Number); + if (perms == null) perms = extraPermsList[i]; + + GuiPerms.SetDefaultIndex(commandExtraBoxes[i], perms.MinRank); + commandExtraBoxes[i].Visible = true; + commandExtraLabels[i].Text = perms.Description; + commandExtraLabels[i].Visible = true; + height = commandExtraBoxes[i].Bottom + 12; + } + cmd_grpExtra.Visible = extraPermsList.Count > 0; + cmd_grpExtra.Height = height; + } + + CommandExtraPerms LookupExtraPerms(string cmdName, int number) { + return commandExtraPermsChanged.Find( + p => p.CmdName == cmdName && p.Number == number); + } + + void cmd_cmbExtra_SelectedIndexChanged(object sender, EventArgs e) { + ComboBox box = (ComboBox)sender; + if (commandSupressEvents) return; + int idx = box.SelectedIndex; + if (idx == -1) return; + + int boxIdx = Array.IndexOf(commandExtraBoxes, box); + CommandExtraPerms orig = extraPermsList[boxIdx]; + CommandExtraPerms copy = LookupExtraPerms(orig.CmdName, orig.Number); + + if (copy == null) { + copy = orig.Copy(); + commandExtraPermsChanged.Add(copy); + } + copy.MinRank = GuiPerms.RankPerms[idx]; + } } } diff --git a/GUI/PropertyWindow/PropertyWindow.Designer.cs b/GUI/PropertyWindow/PropertyWindow.Designer.cs index 2b677b7e9..014d2ca63 100644 --- a/GUI/PropertyWindow/PropertyWindow.Designer.cs +++ b/GUI/PropertyWindow/PropertyWindow.Designer.cs @@ -367,6 +367,20 @@ namespace MCGalaxy.Gui this.cmd_lblDisallow = new System.Windows.Forms.Label(); this.cmd_lblAllow = new System.Windows.Forms.Label(); this.cmd_grpExtra = new System.Windows.Forms.GroupBox(); + this.cmd_cmbExtra1 = new System.Windows.Forms.ComboBox(); + this.cmd_lblExtra1 = new System.Windows.Forms.Label(); + this.cmd_cmbExtra2 = new System.Windows.Forms.ComboBox(); + this.cmd_lblExtra2 = new System.Windows.Forms.Label(); + this.cmd_cmbExtra3 = new System.Windows.Forms.ComboBox(); + this.cmd_lblExtra3 = new System.Windows.Forms.Label(); + this.cmd_cmbExtra4 = new System.Windows.Forms.ComboBox(); + this.cmd_lblExtra4 = new System.Windows.Forms.Label(); + this.cmd_cmbExtra5 = new System.Windows.Forms.ComboBox(); + this.cmd_lblExtra5 = new System.Windows.Forms.Label(); + this.cmd_cmbExtra6 = new System.Windows.Forms.ComboBox(); + this.cmd_lblExtra6 = new System.Windows.Forms.Label(); + this.cmd_cmbExtra7 = new System.Windows.Forms.ComboBox(); + this.cmd_lblExtra7 = new System.Windows.Forms.Label(); this.tabChat.SuspendLayout(); this.chat_grpTab.SuspendLayout(); this.chat_grpMessages.SuspendLayout(); @@ -3833,7 +3847,6 @@ namespace MCGalaxy.Gui this.pageCommands.Size = new System.Drawing.Size(498, 521); this.pageCommands.TabIndex = 2; this.pageCommands.Text = "Commands"; - this.toolTip.SetToolTip(this.pageCommands, "Which ranks can use which commands."); // // cmd_btnHelp // @@ -3975,13 +3988,153 @@ namespace MCGalaxy.Gui // // cmd_grpExtra // - this.cmd_grpExtra.Location = new System.Drawing.Point(133, 106); + this.cmd_grpExtra.Controls.Add(this.cmd_cmbExtra7); + this.cmd_grpExtra.Controls.Add(this.cmd_lblExtra7); + this.cmd_grpExtra.Controls.Add(this.cmd_cmbExtra6); + this.cmd_grpExtra.Controls.Add(this.cmd_lblExtra6); + this.cmd_grpExtra.Controls.Add(this.cmd_cmbExtra5); + this.cmd_grpExtra.Controls.Add(this.cmd_lblExtra5); + this.cmd_grpExtra.Controls.Add(this.cmd_cmbExtra4); + this.cmd_grpExtra.Controls.Add(this.cmd_lblExtra4); + this.cmd_grpExtra.Controls.Add(this.cmd_cmbExtra3); + this.cmd_grpExtra.Controls.Add(this.cmd_lblExtra3); + this.cmd_grpExtra.Controls.Add(this.cmd_cmbExtra2); + this.cmd_grpExtra.Controls.Add(this.cmd_lblExtra2); + this.cmd_grpExtra.Controls.Add(this.cmd_cmbExtra1); + this.cmd_grpExtra.Controls.Add(this.cmd_lblExtra1); + this.cmd_grpExtra.Location = new System.Drawing.Point(133, 105); this.cmd_grpExtra.Name = "cmd_grpExtra"; - this.cmd_grpExtra.Size = new System.Drawing.Size(360, 258); + this.cmd_grpExtra.Size = new System.Drawing.Size(360, 205); this.cmd_grpExtra.TabIndex = 28; this.cmd_grpExtra.TabStop = false; this.cmd_grpExtra.Text = "Extra permissions"; // + // cmd_cmbExtra1 + // + this.cmd_cmbExtra1.FormattingEnabled = true; + this.cmd_cmbExtra1.Location = new System.Drawing.Point(10, 17); + this.cmd_cmbExtra1.Name = "cmd_cmbExtra1"; + this.cmd_cmbExtra1.Size = new System.Drawing.Size(81, 21); + this.cmd_cmbExtra1.TabIndex = 30; + this.cmd_cmbExtra1.SelectedIndexChanged += new System.EventHandler(this.cmd_cmbExtra_SelectedIndexChanged); + // + // cmd_lblExtra1 + // + this.cmd_lblExtra1.AutoSize = true; + this.cmd_lblExtra1.Location = new System.Drawing.Point(91, 20); + this.cmd_lblExtra1.Name = "cmd_lblExtra1"; + this.cmd_lblExtra1.Size = new System.Drawing.Size(12, 13); + this.cmd_lblExtra1.TabIndex = 29; + this.cmd_lblExtra1.Text = "+"; + // + // cmd_cmbExtra2 + // + this.cmd_cmbExtra2.FormattingEnabled = true; + this.cmd_cmbExtra2.Location = new System.Drawing.Point(10, 43); + this.cmd_cmbExtra2.Name = "cmd_cmbExtra2"; + this.cmd_cmbExtra2.Size = new System.Drawing.Size(81, 21); + this.cmd_cmbExtra2.TabIndex = 32; + this.cmd_cmbExtra2.SelectedIndexChanged += new System.EventHandler(this.cmd_cmbExtra_SelectedIndexChanged); + // + // cmd_lblExtra2 + // + this.cmd_lblExtra2.AutoSize = true; + this.cmd_lblExtra2.Location = new System.Drawing.Point(91, 46); + this.cmd_lblExtra2.Name = "cmd_lblExtra2"; + this.cmd_lblExtra2.Size = new System.Drawing.Size(12, 13); + this.cmd_lblExtra2.TabIndex = 31; + this.cmd_lblExtra2.Text = "+"; + // + // cmd_cmbExtra3 + // + this.cmd_cmbExtra3.FormattingEnabled = true; + this.cmd_cmbExtra3.Location = new System.Drawing.Point(10, 69); + this.cmd_cmbExtra3.Name = "cmd_cmbExtra3"; + this.cmd_cmbExtra3.Size = new System.Drawing.Size(81, 21); + this.cmd_cmbExtra3.TabIndex = 34; + this.cmd_cmbExtra3.SelectedIndexChanged += new System.EventHandler(this.cmd_cmbExtra_SelectedIndexChanged); + // + // cmd_lblExtra3 + // + this.cmd_lblExtra3.AutoSize = true; + this.cmd_lblExtra3.Location = new System.Drawing.Point(91, 72); + this.cmd_lblExtra3.Name = "cmd_lblExtra3"; + this.cmd_lblExtra3.Size = new System.Drawing.Size(12, 13); + this.cmd_lblExtra3.TabIndex = 33; + this.cmd_lblExtra3.Text = "+"; + // + // cmd_cmbExtra4 + // + this.cmd_cmbExtra4.FormattingEnabled = true; + this.cmd_cmbExtra4.Location = new System.Drawing.Point(10, 95); + this.cmd_cmbExtra4.Name = "cmd_cmbExtra4"; + this.cmd_cmbExtra4.Size = new System.Drawing.Size(81, 21); + this.cmd_cmbExtra4.TabIndex = 36; + this.cmd_cmbExtra4.SelectedIndexChanged += new System.EventHandler(this.cmd_cmbExtra_SelectedIndexChanged); + // + // cmd_lblExtra4 + // + this.cmd_lblExtra4.AutoSize = true; + this.cmd_lblExtra4.Location = new System.Drawing.Point(91, 98); + this.cmd_lblExtra4.Name = "cmd_lblExtra4"; + this.cmd_lblExtra4.Size = new System.Drawing.Size(12, 13); + this.cmd_lblExtra4.TabIndex = 35; + this.cmd_lblExtra4.Text = "+"; + // + // cmd_cmbExtra5 + // + this.cmd_cmbExtra5.FormattingEnabled = true; + this.cmd_cmbExtra5.Location = new System.Drawing.Point(10, 121); + this.cmd_cmbExtra5.Name = "cmd_cmbExtra5"; + this.cmd_cmbExtra5.Size = new System.Drawing.Size(81, 21); + this.cmd_cmbExtra5.TabIndex = 38; + this.cmd_cmbExtra5.SelectedIndexChanged += new System.EventHandler(this.cmd_cmbExtra_SelectedIndexChanged); + // + // cmd_lblExtra5 + // + this.cmd_lblExtra5.AutoSize = true; + this.cmd_lblExtra5.Location = new System.Drawing.Point(91, 124); + this.cmd_lblExtra5.Name = "cmd_lblExtra5"; + this.cmd_lblExtra5.Size = new System.Drawing.Size(12, 13); + this.cmd_lblExtra5.TabIndex = 37; + this.cmd_lblExtra5.Text = "+"; + // + // cmd_cmbExtra6 + // + this.cmd_cmbExtra6.FormattingEnabled = true; + this.cmd_cmbExtra6.Location = new System.Drawing.Point(10, 147); + this.cmd_cmbExtra6.Name = "cmd_cmbExtra6"; + this.cmd_cmbExtra6.Size = new System.Drawing.Size(81, 21); + this.cmd_cmbExtra6.TabIndex = 40; + this.cmd_cmbExtra6.SelectedIndexChanged += new System.EventHandler(this.cmd_cmbExtra_SelectedIndexChanged); + // + // cmd_lblExtra6 + // + this.cmd_lblExtra6.AutoSize = true; + this.cmd_lblExtra6.Location = new System.Drawing.Point(91, 150); + this.cmd_lblExtra6.Name = "cmd_lblExtra6"; + this.cmd_lblExtra6.Size = new System.Drawing.Size(12, 13); + this.cmd_lblExtra6.TabIndex = 39; + this.cmd_lblExtra6.Text = "+"; + // + // cmd_cmbExtra7 + // + this.cmd_cmbExtra7.FormattingEnabled = true; + this.cmd_cmbExtra7.Location = new System.Drawing.Point(10, 173); + this.cmd_cmbExtra7.Name = "cmd_cmbExtra7"; + this.cmd_cmbExtra7.Size = new System.Drawing.Size(81, 21); + this.cmd_cmbExtra7.TabIndex = 42; + this.cmd_cmbExtra7.SelectedIndexChanged += new System.EventHandler(this.cmd_cmbExtra_SelectedIndexChanged); + // + // cmd_lblExtra7 + // + this.cmd_lblExtra7.AutoSize = true; + this.cmd_lblExtra7.Location = new System.Drawing.Point(91, 176); + this.cmd_lblExtra7.Name = "cmd_lblExtra7"; + this.cmd_lblExtra7.Size = new System.Drawing.Size(12, 13); + this.cmd_lblExtra7.TabIndex = 41; + this.cmd_lblExtra7.Text = "+"; + // // PropertyWindow // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -4110,6 +4263,20 @@ namespace MCGalaxy.Gui this.cmd_grpPermissions.PerformLayout(); this.ResumeLayout(false); } + private System.Windows.Forms.Label cmd_lblExtra1; + private System.Windows.Forms.ComboBox cmd_cmbExtra1; + private System.Windows.Forms.Label cmd_lblExtra2; + private System.Windows.Forms.ComboBox cmd_cmbExtra2; + private System.Windows.Forms.Label cmd_lblExtra3; + private System.Windows.Forms.ComboBox cmd_cmbExtra3; + private System.Windows.Forms.Label cmd_lblExtra4; + private System.Windows.Forms.ComboBox cmd_cmbExtra4; + private System.Windows.Forms.Label cmd_lblExtra5; + private System.Windows.Forms.ComboBox cmd_cmbExtra5; + private System.Windows.Forms.Label cmd_lblExtra6; + private System.Windows.Forms.ComboBox cmd_cmbExtra6; + private System.Windows.Forms.Label cmd_lblExtra7; + private System.Windows.Forms.ComboBox cmd_cmbExtra7; private System.Windows.Forms.GroupBox cmd_grpExtra; private System.Windows.Forms.ListBox cmd_list; private System.Windows.Forms.Button cmd_btnHelp; diff --git a/MCGalaxy/Commands/Permissions/CommandExtraPerms.cs b/MCGalaxy/Commands/Permissions/CommandExtraPerms.cs index 16d759be1..69365792d 100644 --- a/MCGalaxy/Commands/Permissions/CommandExtraPerms.cs +++ b/MCGalaxy/Commands/Permissions/CommandExtraPerms.cs @@ -35,7 +35,18 @@ namespace MCGalaxy.Commands { public string Description = ""; /// The number / identifier of this extra permission. - public int Number; + public int Number; + + + /// Creates a copy of this instance. + public CommandExtraPerms Copy() { + CommandExtraPerms perms = new CommandExtraPerms(); + perms.CmdName = CmdName; + perms.MinRank = MinRank; + perms.Description = Description; + perms.Number = Number; + return perms; + } static List list = new List();