Mercurial > repos > IBDev-IBBoard.WarFoundry.GUI.GTK
changeset 142:f23e5b40ca9d
Re #344: Show unit requirement failures
* Add new widget for displaying failures nicely
* Use widget for displaying failures in main window
* Use widget for displaying failures in new unit dialog
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Tue, 18 Oct 2011 21:03:35 +0100 |
parents | 1ce4fe9ae3c1 |
children | aca4623b7bdf |
files | FrmMainWindow.cs FrmNewUnit.cs IBBoard.WarFoundry.GUI.GTK.csproj Widgets/ValidationFailureWidget.cs gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmNewUnit.cs gtk-gui/IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget.cs gtk-gui/gui.stetic gtk-gui/objects.xml |
diffstat | 8 files changed, 173 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/FrmMainWindow.cs Mon Oct 17 20:53:07 2011 +0100 +++ b/FrmMainWindow.cs Tue Oct 18 21:03:35 2011 +0100 @@ -1258,6 +1258,7 @@ protected void OnTransformedXmlActionActivated(object sender, System.EventArgs e) { FrmExportXml form = new FrmExportXml(WarFoundryCore.CurrentArmy); + form.ParentWindow = this.GdkWindow; form.Run(); form.Hide(); form.Dispose(); @@ -1266,6 +1267,8 @@ protected void OnMiEditArmyActivated(object sender, System.EventArgs e) { FrmEditArmy form = new FrmEditArmy(commandStack, WarFoundryCore.CurrentArmy); + form.TransientFor = this; + form.WindowPosition = WindowPosition.CenterOnParent; form.Run(); form.Hide(); form.Dispose(); @@ -1282,15 +1285,8 @@ if (failureMessages != null && failureMessages.Count > 0) { - StringBuilder sb = new StringBuilder(); - - foreach (string msg in failureMessages) - { - sb.AppendLine(msg); - } - - MessageDialog dialog = new MessageDialog(this, DialogFlags.Modal, MessageType.Warning, ButtonsType.Ok, false, sb.ToString()); - dialog.Title = "Validation errors"; + ValidationFailureWidget failureWidget = new ValidationFailureWidget(failureMessages); + Dialog dialog = new SimpleDialog("Validation errors", this, DialogFlags.Modal, failureWidget); dialog.Run(); dialog.Hide(); dialog.Dispose();
--- a/FrmNewUnit.cs Mon Oct 17 20:53:07 2011 +0100 +++ b/FrmNewUnit.cs Tue Oct 18 21:03:35 2011 +0100 @@ -108,24 +108,17 @@ ICollection<string> failureMessages; Validation result = RequirementHandler.AllowsAdding(type, unitArmy, out failureMessages); bool validationFailed = !Validates.AsOkay(result); - lblNewUnitWarning.Visible = validationFailed; + validationWidget.Visible = validationFailed; if (validationFailed) { - StringBuilder sb = new StringBuilder(); - - foreach (string msg in failureMessages) - { - sb.AppendLine(msg); - } - - lblNewUnitWarning.Text = sb.ToString(); + validationWidget.SetMessages(failureMessages); } } else { bttnCreate.Sensitive = false; - lblNewUnitWarning.Visible = false; + validationWidget.Visible = false; } }
--- a/IBBoard.WarFoundry.GUI.GTK.csproj Mon Oct 17 20:53:07 2011 +0100 +++ b/IBBoard.WarFoundry.GUI.GTK.csproj Tue Oct 18 21:03:35 2011 +0100 @@ -77,6 +77,8 @@ <Compile Include="gtk-gui\IBBoard.WarFoundry.GUI.GTK.TransformXmlWidget.cs" /> <Compile Include="FrmEditArmy.cs" /> <Compile Include="gtk-gui\IBBoard.WarFoundry.GUI.GTK.FrmEditArmy.cs" /> + <Compile Include="Widgets\ValidationFailureWidget.cs" /> + <Compile Include="gtk-gui\IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget.cs" /> </ItemGroup> <ItemGroup> <Content Include="App.png" />
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Widgets/ValidationFailureWidget.cs Tue Oct 18 21:03:35 2011 +0100 @@ -0,0 +1,36 @@ +// This file (ValidationFailureWidget.cs) is a part of the IBBoard.WarFoundry.GUI.GTK project and is copyright 2011 IBBoard +// +// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. +using System; +using System.Collections.Generic; +using System.Text; + +namespace IBBoard.WarFoundry.GUI.GTK +{ + [System.ComponentModel.ToolboxItem(true)] + public partial class ValidationFailureWidget : Gtk.Bin + { + public ValidationFailureWidget() + { + this.Build(); + } + + public ValidationFailureWidget(ICollection<string> messages) : this() + { + SetMessages(messages); + } + + public void SetMessages(ICollection<string> messages) + { + StringBuilder sb = new StringBuilder(); + + foreach (string msg in messages) + { + sb.AppendLine("• " + msg); + } + + validationMessages.Text = sb.ToString(); + } + } +} +
--- a/gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmNewUnit.cs Mon Oct 17 20:53:07 2011 +0100 +++ b/gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmNewUnit.cs Tue Oct 18 21:03:35 2011 +0100 @@ -9,7 +9,7 @@ private global::IBBoard.GtkSharp.Translatable.TranslatableLabel lblUnitList; private global::Gtk.ScrolledWindow GtkScrolledWindow; private global::Gtk.TreeView lstUnitTypes; - private global::IBBoard.GtkSharp.Translatable.TranslatableLabel lblNewUnitWarning; + private global::IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget validationWidget; private global::IBBoard.GtkSharp.Translatable.TranslatableButton bttnCancel; private global::IBBoard.GtkSharp.Translatable.TranslatableButton bttnCreate; @@ -65,12 +65,14 @@ w5.Expand = false; w5.Fill = false; // Container child vbox2.Gtk.Box+BoxChild - this.lblNewUnitWarning = new global::IBBoard.GtkSharp.Translatable.TranslatableLabel (); - this.lblNewUnitWarning.Name = "lblNewUnitWarning"; - this.lblNewUnitWarning.Xalign = 0F; - this.vbox2.Add (this.lblNewUnitWarning); - global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.lblNewUnitWarning])); + this.validationWidget = new global::IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget (); + this.validationWidget.Events = ((global::Gdk.EventMask)(256)); + this.validationWidget.Name = "validationWidget"; + this.vbox2.Add (this.validationWidget); + global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.validationWidget])); w6.Position = 1; + w6.Expand = false; + w6.Fill = false; w1.Add (this.vbox2); global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(w1 [this.vbox2])); w7.Position = 0; @@ -109,8 +111,7 @@ this.Child.ShowAll (); } this.DefaultWidth = 403; - this.DefaultHeight = 259; - this.lblNewUnitWarning.Hide (); + this.DefaultHeight = 311; this.Show (); this.lstUnitTypes.RowActivated += new global::Gtk.RowActivatedHandler (this.OnRowActivated); this.bttnCancel.Clicked += new global::System.EventHandler (this.OnButtonCancelActivated);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk-gui/IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget.cs Tue Oct 18 21:03:35 2011 +0100 @@ -0,0 +1,59 @@ + +// This file has been generated by the GUI designer. Do not modify. +namespace IBBoard.WarFoundry.GUI.GTK +{ + public partial class ValidationFailureWidget + { + private global::Gtk.HBox hbox1; + private global::Gtk.Image image1; + private global::Gtk.ScrolledWindow scrolledwindow1; + private global::Gtk.Label validationMessages; + + protected virtual void Build () + { + global::Stetic.Gui.Initialize (this); + // Widget IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget + global::Stetic.BinContainer.Attach (this); + this.Name = "IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget"; + // Container child IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget.Gtk.Container+ContainerChild + this.hbox1 = new global::Gtk.HBox (); + this.hbox1.Name = "hbox1"; + this.hbox1.Spacing = 6; + // Container child hbox1.Gtk.Box+BoxChild + this.image1 = new global::Gtk.Image (); + this.image1.Name = "image1"; + this.image1.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-dialog-warning", global::Gtk.IconSize.Dialog); + this.hbox1.Add (this.image1); + global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.image1])); + w1.Position = 0; + w1.Expand = false; + w1.Fill = false; + // Container child hbox1.Gtk.Box+BoxChild + this.scrolledwindow1 = new global::Gtk.ScrolledWindow (); + this.scrolledwindow1.CanFocus = true; + this.scrolledwindow1.Name = "scrolledwindow1"; + this.scrolledwindow1.HscrollbarPolicy = ((global::Gtk.PolicyType)(2)); + this.scrolledwindow1.ShadowType = ((global::Gtk.ShadowType)(1)); + // Container child scrolledwindow1.Gtk.Container+ContainerChild + global::Gtk.Viewport w2 = new global::Gtk.Viewport (); + w2.ShadowType = ((global::Gtk.ShadowType)(0)); + // Container child GtkViewport.Gtk.Container+ContainerChild + this.validationMessages = new global::Gtk.Label (); + this.validationMessages.Name = "validationMessages"; + this.validationMessages.Xalign = 0F; + this.validationMessages.Yalign = 0F; + this.validationMessages.LabelProp = global::Mono.Unix.Catalog.GetString ("Fibble"); + this.validationMessages.Wrap = true; + w2.Add (this.validationMessages); + this.scrolledwindow1.Add (w2); + this.hbox1.Add (this.scrolledwindow1); + global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.scrolledwindow1])); + w5.Position = 1; + this.Add (this.hbox1); + if ((this.Child != null)) { + this.Child.ShowAll (); + } + this.Hide (); + } + } +}
--- a/gtk-gui/gui.stetic Mon Oct 17 20:53:07 2011 +0100 +++ b/gtk-gui/gui.stetic Tue Oct 18 21:03:35 2011 +0100 @@ -186,7 +186,6 @@ <child> <widget class="Gtk.VBox" id="vbox1"> <property name="MemberName" /> - <property name="Spacing">0</property> <child> <widget class="Gtk.MenuBar" id="menubar1"> <property name="MemberName" /> @@ -378,7 +377,6 @@ <child> <widget class="Gtk.HBox" id="hbox2"> <property name="MemberName" /> - <property name="Spacing">0</property> <child> <widget class="Gtk.SpinButton" id="sbPointsValue"> <property name="MemberName" /> @@ -597,7 +595,7 @@ </widget> </child> </widget> - <widget class="Gtk.Dialog" id="IBBoard.WarFoundry.GUI.GTK.FrmNewUnit" design-size="403 259"> + <widget class="Gtk.Dialog" id="IBBoard.WarFoundry.GUI.GTK.FrmNewUnit" design-size="403 311"> <property name="MemberName" /> <property name="Title" translatable="yes">Add new unit</property> <property name="Icon">stock:gtk-new Menu</property> @@ -660,14 +658,15 @@ </packing> </child> <child> - <widget class="IBBoard.GtkSharp.Translatable.TranslatableLabel" id="lblNewUnitWarning"> + <widget class="IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget" id="validationWidget"> <property name="MemberName" /> - <property name="Visible">False</property> - <property name="Xalign">0</property> + <property name="Events">ButtonPressMask</property> </widget> <packing> <property name="Position">1</property> - <property name="AutoSize">False</property> + <property name="AutoSize">True</property> + <property name="Expand">False</property> + <property name="Fill">False</property> </packing> </child> </widget> @@ -2647,7 +2646,6 @@ <child> <widget class="Gtk.HBox" id="hbox2"> <property name="MemberName" /> - <property name="Spacing">0</property> <child> <widget class="Gtk.SpinButton" id="sbPointsValue"> <property name="MemberName" /> @@ -2797,4 +2795,53 @@ </widget> </child> </widget> + <widget class="Gtk.Bin" id="IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget" design-size="300 104"> + <property name="MemberName" /> + <property name="Visible">False</property> + <child> + <widget class="Gtk.HBox" id="hbox1"> + <property name="MemberName" /> + <property name="Spacing">6</property> + <child> + <widget class="Gtk.Image" id="image1"> + <property name="MemberName" /> + <property name="Pixbuf">stock:gtk-dialog-warning Dialog</property> + </widget> + <packing> + <property name="Position">0</property> + <property name="AutoSize">True</property> + <property name="Expand">False</property> + <property name="Fill">False</property> + </packing> + </child> + <child> + <widget class="Gtk.ScrolledWindow" id="scrolledwindow1"> + <property name="MemberName" /> + <property name="CanFocus">True</property> + <property name="HscrollbarPolicy">Never</property> + <property name="ShadowType">In</property> + <child> + <widget class="Gtk.Viewport" id="GtkViewport"> + <property name="MemberName" /> + <property name="ShadowType">None</property> + <child> + <widget class="Gtk.Label" id="validationMessages"> + <property name="MemberName" /> + <property name="Xalign">0</property> + <property name="Yalign">0</property> + <property name="LabelProp" translatable="yes">Fibble</property> + <property name="Wrap">True</property> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="Position">1</property> + <property name="AutoSize">True</property> + </packing> + </child> + </widget> + </child> + </widget> </stetic-interface> \ No newline at end of file
--- a/gtk-gui/objects.xml Mon Oct 17 20:53:07 2011 +0100 +++ b/gtk-gui/objects.xml Tue Oct 18 21:03:35 2011 +0100 @@ -11,4 +11,8 @@ <itemgroups /> <signals /> </object> + <object type="IBBoard.WarFoundry.GUI.GTK.ValidationFailureWidget" palette-category="General" allow-children="false" base-type="Gtk.Bin"> + <itemgroups /> + <signals /> + </object> </objects> \ No newline at end of file