Mercurial > repos > IBBoard.WarFoundry.GUI.GTK
changeset 125:42d2aa87dfa7
Re #361: Add XML export UI to GTK#
* Add basic UI that works (needs improvement)
* Open the dialog using Run() so that we can close it properly
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 01 Oct 2011 14:52:39 +0100 |
parents | a647afc19fe9 |
children | d4e6bfeb1c61 |
files | FrmExportXml.cs FrmMainWindow.cs gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmExportXml.cs gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmMainWindow.cs gtk-gui/gui.stetic |
diffstat | 5 files changed, 216 insertions(+), 55 deletions(-) [+] |
line wrap: on
line diff
--- a/FrmExportXml.cs Wed Sep 28 21:01:54 2011 +0100 +++ b/FrmExportXml.cs Sat Oct 01 14:52:39 2011 +0100 @@ -5,13 +5,21 @@ using System.IO; using IBBoard.GtkSharp; using System.Collections.Generic; +using Gtk; +using IBBoard.WarFoundry.API.Objects; +using System.Xml.Xsl; +using IBBoard.Lang; +using IBBoard.WarFoundry.API.Exporters; namespace IBBoard.WarFoundry.GUI.GTK { public partial class FrmExportXml : Gtk.Dialog { - public FrmExportXml() + private Army army; + + public FrmExportXml(Army army) { + this.army = army; this.Build(); FillXsltList(); saveAsPath.SetCurrentFolder(Environment.GetFolderPath(Environment.SpecialFolder.Personal)); @@ -34,7 +42,7 @@ private void SetOkayButtonSensitive() { - buttonOk.Sensitive = saveAsPath.Filename != null && (!doTransformWidget.Active || ComboBoxUtils.GetSelectedItem<FileInfo>(transformList) != null); + buttonOk.Sensitive = saveAsName.Text != "" && saveAsPath.Filename != null && saveAsPath.Filename != "" && (!doTransformWidget.Active || ComboBoxUtils.GetSelectedItem<FileInfo>(transformList) != null); } protected void OnTransformListChanged(object sender, System.EventArgs e) @@ -46,6 +54,69 @@ { SetOkayButtonSensitive(); } + + protected void OnButtonOkClicked (object sender, System.EventArgs e) + { + string errorMessage = ""; + // Catch potential errors with the file export or XSL compiliation + try + { + string fileName = System.IO.Path.Combine(saveAsPath.Filename, saveAsName.Text); + + if (doTransformWidget.Active) + { + WarFoundryXmlWithXslExporter.GetDefault().ExportArmyWithTransform(army, fileName, ComboBoxUtils.GetSelectedItem<FileInfo>(transformList).FullName); + } + else + { + WarFoundryXmlWithXslExporter.GetDefault().ExportArmy(army, fileName); + } + } + catch (XsltCompileException ex) + { + errorMessage = Translation.GetTranslation("mbErrorCompileFailed", "") + + ":\n" + ex.Message; + } + catch (XsltException ex) + { + + errorMessage = Translation.GetTranslation("mbErrorXSLTFailed", "") + + ":\n" + ex.Message; + } + catch (FileNotFoundException ex) + { + errorMessage = Translation.GetTranslation("mbErrorFileNotFoundFailed", "") + + ":\n" + ex.Message; + } + catch (IOException ex) + { + errorMessage = Translation.GetTranslation("mbErrorIOFailed", "") + + ":\n" + ex.Message; + } + catch (Exception ex) + { + errorMessage = Translation.GetTranslation("mbErrorFailed", "") + + ":\n" + ex.Message; + } + + if (errorMessage != "") + { + MessageDialog dialog = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok, errorMessage); + dialog.Run(); + } + + Respond(ResponseType.Ok); + } + + protected void OnButtonCancelClicked (object sender, System.EventArgs e) + { + Respond(ResponseType.Cancel); + } + + protected void OnSaveAsNameChanged (object sender, System.EventArgs e) + { + SetOkayButtonSensitive(); + } } }
--- a/FrmMainWindow.cs Wed Sep 28 21:01:54 2011 +0100 +++ b/FrmMainWindow.cs Sat Oct 01 14:52:39 2011 +0100 @@ -1177,8 +1177,10 @@ protected void OnTransformedXmlActionActivated (object sender, System.EventArgs e) { - FrmExportXml form = new FrmExportXml(); - form.ShowNow(); + FrmExportXml form = new FrmExportXml(WarFoundryCore.CurrentArmy); + form.Run(); + form.Hide(); + form.Dispose(); } } }
--- a/gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmExportXml.cs Wed Sep 28 21:01:54 2011 +0100 +++ b/gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmExportXml.cs Sat Oct 01 14:52:39 2011 +0100 @@ -7,7 +7,9 @@ private global::Gtk.Table table; private global::Gtk.CheckButton doTransformWidget; private global::IBBoard.GtkSharp.Translatable.TranslatableLabel lblOutputFile; + private global::IBBoard.GtkSharp.Translatable.TranslatableLabel lblSaveIn; private global::IBBoard.GtkSharp.Translatable.TranslatableLabel lblTransform; + private global::Gtk.Entry saveAsName; private global::Gtk.FileChooserButton saveAsPath; private global::Gtk.ComboBox transformList; private global::Gtk.Button buttonCancel; @@ -18,13 +20,14 @@ global::Stetic.Gui.Initialize (this); // Widget IBBoard.WarFoundry.GUI.GTK.FrmExportXml this.Name = "IBBoard.WarFoundry.GUI.GTK.FrmExportXml"; + this.TypeHint = ((global::Gdk.WindowTypeHint)(1)); this.WindowPosition = ((global::Gtk.WindowPosition)(4)); // Internal child IBBoard.WarFoundry.GUI.GTK.FrmExportXml.VBox global::Gtk.VBox w1 = this.VBox; w1.Name = "dialog1_VBox"; w1.BorderWidth = ((uint)(2)); // Container child dialog1_VBox.Gtk.Box+BoxChild - this.table = new global::Gtk.Table (((uint)(3)), ((uint)(2)), false); + this.table = new global::Gtk.Table (((uint)(4)), ((uint)(2)), false); this.table.Name = "table"; this.table.RowSpacing = ((uint)(6)); this.table.ColumnSpacing = ((uint)(6)); @@ -37,8 +40,8 @@ this.doTransformWidget.UseUnderline = true; this.table.Add (this.doTransformWidget); global::Gtk.Table.TableChild w2 = ((global::Gtk.Table.TableChild)(this.table [this.doTransformWidget])); - w2.TopAttach = ((uint)(1)); - w2.BottomAttach = ((uint)(2)); + w2.TopAttach = ((uint)(2)); + w2.BottomAttach = ((uint)(3)); w2.LeftAttach = ((uint)(1)); w2.RightAttach = ((uint)(2)); w2.XOptions = ((global::Gtk.AttachOptions)(4)); @@ -47,53 +50,80 @@ this.lblOutputFile = new global::IBBoard.GtkSharp.Translatable.TranslatableLabel (); this.lblOutputFile.Name = "lblOutputFile"; this.lblOutputFile.Xalign = 1F; - this.lblOutputFile.LabelProp = global::Mono.Unix.Catalog.GetString ("Save as:"); + this.lblOutputFile.LabelProp = global::Mono.Unix.Catalog.GetString ("save as:"); this.table.Add (this.lblOutputFile); global::Gtk.Table.TableChild w3 = ((global::Gtk.Table.TableChild)(this.table [this.lblOutputFile])); w3.XOptions = ((global::Gtk.AttachOptions)(4)); w3.YOptions = ((global::Gtk.AttachOptions)(4)); // Container child table.Gtk.Table+TableChild + this.lblSaveIn = new global::IBBoard.GtkSharp.Translatable.TranslatableLabel (); + this.lblSaveIn.Name = "lblSaveIn"; + this.lblSaveIn.Xalign = 1F; + this.lblSaveIn.LabelProp = global::Mono.Unix.Catalog.GetString ("in folder"); + this.table.Add (this.lblSaveIn); + global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table [this.lblSaveIn])); + w4.TopAttach = ((uint)(1)); + w4.BottomAttach = ((uint)(2)); + w4.XOptions = ((global::Gtk.AttachOptions)(4)); + w4.YOptions = ((global::Gtk.AttachOptions)(4)); + // Container child table.Gtk.Table+TableChild this.lblTransform = new global::IBBoard.GtkSharp.Translatable.TranslatableLabel (); this.lblTransform.Sensitive = false; this.lblTransform.Name = "lblTransform"; - this.lblTransform.LabelProp = global::Mono.Unix.Catalog.GetString ("Transform:"); + this.lblTransform.LabelProp = global::Mono.Unix.Catalog.GetString ("transform:"); this.table.Add (this.lblTransform); - global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table [this.lblTransform])); - w4.TopAttach = ((uint)(2)); - w4.BottomAttach = ((uint)(3)); - w4.XOptions = ((global::Gtk.AttachOptions)(4)); - w4.YOptions = ((global::Gtk.AttachOptions)(4)); - // Container child table.Gtk.Table+TableChild - this.saveAsPath = new global::Gtk.FileChooserButton (global::Mono.Unix.Catalog.GetString ("Select A File"), ((global::Gtk.FileChooserAction)(0))); - this.saveAsPath.Name = "saveAsPath"; - this.table.Add (this.saveAsPath); - global::Gtk.Table.TableChild w5 = ((global::Gtk.Table.TableChild)(this.table [this.saveAsPath])); - w5.LeftAttach = ((uint)(1)); - w5.RightAttach = ((uint)(2)); + global::Gtk.Table.TableChild w5 = ((global::Gtk.Table.TableChild)(this.table [this.lblTransform])); + w5.TopAttach = ((uint)(3)); + w5.BottomAttach = ((uint)(4)); w5.XOptions = ((global::Gtk.AttachOptions)(4)); w5.YOptions = ((global::Gtk.AttachOptions)(4)); // Container child table.Gtk.Table+TableChild + this.saveAsName = new global::Gtk.Entry (); + this.saveAsName.CanFocus = true; + this.saveAsName.Name = "saveAsName"; + this.saveAsName.IsEditable = true; + this.saveAsName.InvisibleChar = '●'; + this.table.Add (this.saveAsName); + global::Gtk.Table.TableChild w6 = ((global::Gtk.Table.TableChild)(this.table [this.saveAsName])); + w6.LeftAttach = ((uint)(1)); + w6.RightAttach = ((uint)(2)); + w6.XOptions = ((global::Gtk.AttachOptions)(4)); + w6.YOptions = ((global::Gtk.AttachOptions)(4)); + // Container child table.Gtk.Table+TableChild + this.saveAsPath = new global::Gtk.FileChooserButton (global::Mono.Unix.Catalog.GetString ("Select A File"), ((global::Gtk.FileChooserAction)(2))); + this.saveAsPath.Name = "saveAsPath"; + this.saveAsPath.WidthChars = 20; + this.saveAsPath.DoOverwriteConfirmation = true; + this.table.Add (this.saveAsPath); + global::Gtk.Table.TableChild w7 = ((global::Gtk.Table.TableChild)(this.table [this.saveAsPath])); + w7.TopAttach = ((uint)(1)); + w7.BottomAttach = ((uint)(2)); + w7.LeftAttach = ((uint)(1)); + w7.RightAttach = ((uint)(2)); + w7.XOptions = ((global::Gtk.AttachOptions)(4)); + w7.YOptions = ((global::Gtk.AttachOptions)(4)); + // Container child table.Gtk.Table+TableChild this.transformList = global::Gtk.ComboBox.NewText (); this.transformList.Sensitive = false; this.transformList.Name = "transformList"; this.table.Add (this.transformList); - global::Gtk.Table.TableChild w6 = ((global::Gtk.Table.TableChild)(this.table [this.transformList])); - w6.TopAttach = ((uint)(2)); - w6.BottomAttach = ((uint)(3)); - w6.LeftAttach = ((uint)(1)); - w6.RightAttach = ((uint)(2)); - w6.YOptions = ((global::Gtk.AttachOptions)(4)); + global::Gtk.Table.TableChild w8 = ((global::Gtk.Table.TableChild)(this.table [this.transformList])); + w8.TopAttach = ((uint)(3)); + w8.BottomAttach = ((uint)(4)); + w8.LeftAttach = ((uint)(1)); + w8.RightAttach = ((uint)(2)); + w8.YOptions = ((global::Gtk.AttachOptions)(4)); w1.Add (this.table); - global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(w1 [this.table])); - w7.Position = 0; - w7.Expand = false; - w7.Fill = false; + global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(w1 [this.table])); + w9.Position = 0; + w9.Expand = false; + w9.Fill = false; // Internal child IBBoard.WarFoundry.GUI.GTK.FrmExportXml.ActionArea - global::Gtk.HButtonBox w8 = this.ActionArea; - w8.Name = "dialog1_ActionArea"; - w8.Spacing = 10; - w8.BorderWidth = ((uint)(5)); - w8.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4)); + global::Gtk.HButtonBox w10 = this.ActionArea; + w10.Name = "dialog1_ActionArea"; + w10.Spacing = 10; + w10.BorderWidth = ((uint)(5)); + w10.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4)); // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild this.buttonCancel = new global::Gtk.Button (); this.buttonCancel.CanDefault = true; @@ -103,9 +133,9 @@ this.buttonCancel.UseUnderline = true; this.buttonCancel.Label = "gtk-cancel"; this.AddActionWidget (this.buttonCancel, -6); - global::Gtk.ButtonBox.ButtonBoxChild w9 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w8 [this.buttonCancel])); - w9.Expand = false; - w9.Fill = false; + global::Gtk.ButtonBox.ButtonBoxChild w11 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w10 [this.buttonCancel])); + w11.Expand = false; + w11.Fill = false; // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild this.buttonOk = new global::Gtk.Button (); this.buttonOk.CanDefault = true; @@ -115,19 +145,22 @@ this.buttonOk.UseUnderline = true; this.buttonOk.Label = "gtk-ok"; this.AddActionWidget (this.buttonOk, -5); - global::Gtk.ButtonBox.ButtonBoxChild w10 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w8 [this.buttonOk])); - w10.Position = 1; - w10.Expand = false; - w10.Fill = false; + global::Gtk.ButtonBox.ButtonBoxChild w12 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w10 [this.buttonOk])); + w12.Position = 1; + w12.Expand = false; + w12.Fill = false; if ((this.Child != null)) { this.Child.ShowAll (); } - this.DefaultWidth = 336; - this.DefaultHeight = 171; + this.DefaultWidth = 397; + this.DefaultHeight = 300; this.Show (); this.transformList.Changed += new global::System.EventHandler (this.OnTransformListChanged); this.saveAsPath.SelectionChanged += new global::System.EventHandler (this.OnSaveAsPathSelectionChanged); + this.saveAsName.Changed += new global::System.EventHandler (this.OnSaveAsNameChanged); this.doTransformWidget.Toggled += new global::System.EventHandler (this.OnDoTransformWidgetToggled); + this.buttonCancel.Clicked += new global::System.EventHandler (this.OnButtonCancelClicked); + this.buttonOk.Clicked += new global::System.EventHandler (this.OnButtonOkClicked); } } }
--- a/gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmMainWindow.cs Wed Sep 28 21:01:54 2011 +0100 +++ b/gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmMainWindow.cs Sat Oct 01 14:52:39 2011 +0100 @@ -29,6 +29,7 @@ private global::Gtk.Action miExportArmyAs; private global::Gtk.Action miExportArmyAsBasicHTML; private global::Gtk.Action miPreferences; + private global::Gtk.Action transformedXmlAction; private global::Gtk.VBox vbox1; private global::Gtk.MenuBar menubar1; private global::Gtk.Toolbar toolbar; @@ -118,6 +119,9 @@ this.miPreferences = new global::Gtk.Action("miPreferences", global::Mono.Unix.Catalog.GetString("preferences"), null, "gtk-preferences"); this.miPreferences.ShortLabel = global::Mono.Unix.Catalog.GetString("preferences"); w1.Add(this.miPreferences, null); + this.transformedXmlAction = new global::Gtk.Action ("transformedXmlAction", global::Mono.Unix.Catalog.GetString ("transformed xml"), null, null); + this.transformedXmlAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("transformed xml"); + w1.Add (this.transformedXmlAction, null); this.UIManager.InsertActionGroup(w1, 0); this.AddAccelGroup(this.UIManager.AccelGroup); this.Name = "IBBoard.WarFoundry.GUI.GTK.FrmMainWindow"; @@ -211,6 +215,7 @@ this.bttnRedo.Activated += new global::System.EventHandler(this.redoTBButtonActivated); this.miExportArmyAsBasicHTML.Activated += new global::System.EventHandler(this.OnMiExportAsBasicHtmlActivated); this.miPreferences.Activated += new global::System.EventHandler(this.miPreferencesClicked); + this.transformedXmlAction.Activated += new global::System.EventHandler (this.OnTransformedXmlActionActivated); this.treeUnits.RowActivated += new global::Gtk.RowActivatedHandler(this.ArmyRowActivated); this.treeUnits.PopupMenu += new global::Gtk.PopupMenuHandler(this.OnTreeUnitsPopupMenu); this.treeUnits.ButtonPressEvent += new global::Gtk.ButtonPressEventHandler(this.UnitTreeButtonPressed);
--- a/gtk-gui/gui.stetic Wed Sep 28 21:01:54 2011 +0100 +++ b/gtk-gui/gui.stetic Sat Oct 01 14:52:39 2011 +0100 @@ -2532,8 +2532,9 @@ </widget> </child> </widget> - <widget class="Gtk.Dialog" id="IBBoard.WarFoundry.GUI.GTK.FrmExportXml" design-size="336 171"> + <widget class="Gtk.Dialog" id="IBBoard.WarFoundry.GUI.GTK.FrmExportXml" design-size="397 300"> <property name="MemberName" /> + <property name="TypeHint">Dialog</property> <property name="WindowPosition">CenterOnParent</property> <property name="Buttons">2</property> <property name="HelpButton">False</property> @@ -2544,7 +2545,7 @@ <child> <widget class="Gtk.Table" id="table"> <property name="MemberName" /> - <property name="NRows">3</property> + <property name="NRows">4</property> <property name="NColumns">2</property> <property name="RowSpacing">6</property> <property name="ColumnSpacing">6</property> @@ -2562,8 +2563,8 @@ <signal name="Toggled" handler="OnDoTransformWidgetToggled" /> </widget> <packing> - <property name="TopAttach">1</property> - <property name="BottomAttach">2</property> + <property name="TopAttach">2</property> + <property name="BottomAttach">3</property> <property name="LeftAttach">1</property> <property name="RightAttach">2</property> <property name="AutoSize">True</property> @@ -2581,7 +2582,7 @@ <widget class="IBBoard.GtkSharp.Translatable.TranslatableLabel" id="lblOutputFile"> <property name="MemberName" /> <property name="Xalign">1</property> - <property name="LabelProp" translatable="yes">Save as:</property> + <property name="LabelProp" translatable="yes">save as:</property> </widget> <packing> <property name="AutoSize">True</property> @@ -2596,14 +2597,56 @@ </packing> </child> <child> + <widget class="IBBoard.GtkSharp.Translatable.TranslatableLabel" id="lblSaveIn"> + <property name="MemberName" /> + <property name="Xalign">1</property> + <property name="LabelProp" translatable="yes">in folder</property> + </widget> + <packing> + <property name="TopAttach">1</property> + <property name="BottomAttach">2</property> + <property name="AutoSize">True</property> + <property name="XOptions">Fill</property> + <property name="YOptions">Fill</property> + <property name="XExpand">False</property> + <property name="XFill">True</property> + <property name="XShrink">False</property> + <property name="YExpand">False</property> + <property name="YFill">True</property> + <property name="YShrink">False</property> + </packing> + </child> + <child> <widget class="IBBoard.GtkSharp.Translatable.TranslatableLabel" id="lblTransform"> <property name="MemberName" /> <property name="Sensitive">False</property> - <property name="LabelProp" translatable="yes">Transform:</property> + <property name="LabelProp" translatable="yes">transform:</property> </widget> <packing> - <property name="TopAttach">2</property> - <property name="BottomAttach">3</property> + <property name="TopAttach">3</property> + <property name="BottomAttach">4</property> + <property name="AutoSize">True</property> + <property name="XOptions">Fill</property> + <property name="YOptions">Fill</property> + <property name="XExpand">False</property> + <property name="XFill">True</property> + <property name="XShrink">False</property> + <property name="YExpand">False</property> + <property name="YFill">True</property> + <property name="YShrink">False</property> + </packing> + </child> + <child> + <widget class="Gtk.Entry" id="saveAsName"> + <property name="MemberName" /> + <property name="CanFocus">True</property> + <property name="IsEditable">True</property> + <property name="InvisibleChar">●</property> + <signal name="Changed" handler="OnSaveAsNameChanged" /> + </widget> + <packing> + <property name="LeftAttach">1</property> + <property name="RightAttach">2</property> <property name="AutoSize">True</property> <property name="XOptions">Fill</property> <property name="YOptions">Fill</property> @@ -2618,9 +2661,14 @@ <child> <widget class="Gtk.FileChooserButton" id="saveAsPath"> <property name="MemberName" /> + <property name="Action">SelectFolder</property> + <property name="WidthChars">20</property> + <property name="DoOverwriteConfirmation">True</property> <signal name="SelectionChanged" handler="OnSaveAsPathSelectionChanged" /> </widget> <packing> + <property name="TopAttach">1</property> + <property name="BottomAttach">2</property> <property name="LeftAttach">1</property> <property name="RightAttach">2</property> <property name="AutoSize">True</property> @@ -2643,8 +2691,8 @@ <signal name="Changed" handler="OnTransformListChanged" /> </widget> <packing> - <property name="TopAttach">2</property> - <property name="BottomAttach">3</property> + <property name="TopAttach">3</property> + <property name="BottomAttach">4</property> <property name="LeftAttach">1</property> <property name="RightAttach">2</property> <property name="AutoSize">False</property> @@ -2683,6 +2731,7 @@ <property name="Type">StockItem</property> <property name="StockId">gtk-cancel</property> <property name="ResponseId">-6</property> + <signal name="Clicked" handler="OnButtonCancelClicked" /> <property name="label">gtk-cancel</property> </widget> <packing> @@ -2699,6 +2748,7 @@ <property name="Type">StockItem</property> <property name="StockId">gtk-ok</property> <property name="ResponseId">-5</property> + <signal name="Clicked" handler="OnButtonOkClicked" /> <property name="label">gtk-ok</property> </widget> <packing>