# HG changeset patch # User IBBoard # Date 1317477159 -3600 # Node ID 42d2aa87dfa7f160482dd74b318e814af2c1745d # Parent a647afc19fe955e5bdb746223ff7a42c8d31f8ab 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 diff -r a647afc19fe9 -r 42d2aa87dfa7 FrmExportXml.cs --- 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(transformList) != null); + buttonOk.Sensitive = saveAsName.Text != "" && saveAsPath.Filename != null && saveAsPath.Filename != "" && (!doTransformWidget.Active || ComboBoxUtils.GetSelectedItem(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(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(); + } } } diff -r a647afc19fe9 -r 42d2aa87dfa7 FrmMainWindow.cs --- 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(); } } } diff -r a647afc19fe9 -r 42d2aa87dfa7 gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmExportXml.cs --- 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); } } } diff -r a647afc19fe9 -r 42d2aa87dfa7 gtk-gui/IBBoard.WarFoundry.GUI.GTK.FrmMainWindow.cs --- 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); diff -r a647afc19fe9 -r 42d2aa87dfa7 gtk-gui/gui.stetic --- 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 @@ - + + Dialog CenterOnParent 2 False @@ -2544,7 +2545,7 @@ - 3 + 4 2 6 6 @@ -2562,8 +2563,8 @@ - 1 - 2 + 2 + 3 1 2 True @@ -2581,7 +2582,7 @@ 1 - Save as: + save as: True @@ -2596,14 +2597,56 @@ + + + 1 + in folder + + + 1 + 2 + True + Fill + Fill + False + True + False + False + True + False + + + False - Transform: + transform: - 2 - 3 + 3 + 4 + True + Fill + Fill + False + True + False + False + True + False + + + + + + True + True + + + + + 1 + 2 True Fill Fill @@ -2618,9 +2661,14 @@ + SelectFolder + 20 + True + 1 + 2 1 2 True @@ -2643,8 +2691,8 @@ - 2 - 3 + 3 + 4 1 2 False @@ -2683,6 +2731,7 @@ StockItem gtk-cancel -6 + gtk-cancel @@ -2699,6 +2748,7 @@ StockItem gtk-ok -5 + gtk-ok