From f93488a9750d1274de876f2f900591f457ce3e0d Mon Sep 17 00:00:00 2001 From: "Crom (Thibaut CHARLES)" Date: Tue, 18 Nov 2014 11:46:07 +0100 Subject: [PATCH] Open button and re-open functions --- source/app.d | 125 +++++++++++++++++++++++++++++++++++---------------- test2.2da | 5 +++ 2 files changed, 91 insertions(+), 39 deletions(-) create mode 100644 test2.2da diff --git a/source/app.d b/source/app.d index aa10947..a6372ac 100644 --- a/source/app.d +++ b/source/app.d @@ -1,4 +1,5 @@ import std.stdio; +import std.file; import std.string; import std.conv : to; @@ -17,19 +18,12 @@ import gtk.VBox; import gtk.Button; -void[] Serialize(VT...)(VT data){ - void[] ret; - foreach(d ; data){ - ret~=cast(void[])([d]); - } - return ret; -} + + + void main(string[] args) { - //Parse 2da - auto twoda = new TwoDA(args[1]); - Main.init(args); //Window @@ -38,7 +32,12 @@ void main(string[] args) auto cont = new VBox(false, 0); window.add(cont); - Button saveButton = new Button(StockID.SAVE); + auto buttonSave = new Button("document-save-symbolic", GtkIconSize.MENU); + auto buttonOpen = new Button("document-open-symbolic", GtkIconSize.MENU); + + //"user-trash-symbolic" + //"format-text-direction-ltr-symbolic" + //"view-list-symbolic" version(Windows){ //Menu bar import gtk.HBox; @@ -46,7 +45,8 @@ void main(string[] args) auto cont2 = new HBox(false, 0); cont.packStart(cont2, false, false, 0); - cont2.packEnd(saveButton, false, false, 0); + cont2.packStart(buttonOpen, false, false, 0); + cont2.packEnd(buttonSave, false, false, 0); } else{ //Header bar @@ -57,29 +57,92 @@ void main(string[] args) header.setTitle("2DAEdit"); header.setSubtitle(args[1]); header.setProperty("show-close-button", true); - saveButton = new Button(StockID.SAVE); - header.packEnd(saveButton); + + header.packStart(buttonOpen); + header.packEnd(buttonSave); + } - //Database for 2da GTK table - GType type[]; - type~=GType.STRING; - foreach(i;1..twoda.header.length)type~=GType.STRING; - auto store = new ListStore(type); - saveButton.addOnClicked((Button){Save(store, twoda.header.length);}); - //TreeView to display database - auto tree = new TreeView(store); + auto tree = new TreeView(); cont.packEnd(tree, true, true, 0); tree.setHeadersVisible(true); tree.setEnableSearch(true); - tree.setModel(store); tree.setProperty("enable-grid-lines", GtkTreeViewGridLines.VERTICAL); tree.setProperty("tooltip-column", 0); tree.setProperty("reorderable", true); tree.setProperty("headers-clickable", true); + + //Configure button callbacks + buttonSave.addOnClicked((Button){ + Save(tree); + }); + + buttonOpen.addOnClicked((Button){ + import gtk.Dialog; + import gtk.FileChooserDialog; + + auto fc = new FileChooserDialog("Open 2DA", window, FileChooserAction.OPEN); + auto res = fc.run(); + if(res==GtkResponseType.OK){ + string filename = fc.getFilename(); + Open(filename, tree); + } + fc.destroy(); + }); + + //Open if exists + if(exists(args[1])){ + Open(args[1], tree); + } + + window.showAll(); + + Main.run(); + +} + +void Save(ref TreeView tree){ + auto store = cast(ListStore)tree.getModel(); + if(store !is null){ + TreeIter it = new TreeIter(); + store.getIterFirst(it);//TODO: fail if first is null + do{ + for(int i=0 ; i