2 // * This file is part of dui.
4 // * dui is free software; you can redistribute it and/or modify
5 // * it under the terms of the GNU Lesser General Public License as published by
6 // * the Free Software Foundation; either version 2.1 of the License, or
7 // * (at your option) any later version.
9 // * dui is distributed in the hope that it will be useful,
10 // * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // * GNU Lesser General Public License for more details.
14 // * You should have received a copy of the GNU Lesser General Public License
15 // * along with dui; if not, write to the Free Software
16 // * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 //module duit.TEditableCells;
21 //private import gtk.gtktypes;
23 //private import gtk.Window;
25 //private import gtk.TreeView;
26 //private import gtk.TreeModel;
27 //private import gtk.CellRenderer;
28 //private import gtk.Button;
29 //private import gtk.MenuItem;
30 //private import gtk.VBox;
31 //private import gtk.HBox;
32 //private import gtk.ScrolledWindow;
33 //private import gtk.Label;
34 //private import gtk.ListStore;
35 //private import gtk.TreeView;
36 //private import gtk.TreeIter;
37 //private import gtk.TreePath;
38 //private import gtk.CellRendererText;
39 //private import gtk.TreeViewColumn;
40 //private import gtk.Item;
41 //private import gtk.TreeSelection;
42 //private import gtk.MessageDialog;
44 //private import std.string;
45 //private import std.stdio;
47 //private import gtk.TreeNode;
50 // * reproduces the gtk-demo Editable Cells
51 // * \todo review array of chars copy
54 //class TEditableCells : Window
56 // ListRow[] listRows;
60 // * ctor. must reactivate the constructor name change loby
64 // super("Shopping list");
65 // setDefaultSize(320,200);
73 // private void setup()
81 // /* create window, etc */
83 // vbox = new VBox(false, 5);
85 // vbox.packStart(new Label("Shopping list (you can edit the cells!)"),false,false, 0);
87 // sw = new ScrolledWindow(null,null);
88 // sw.setShadowType(ShadowType.ETCHED_IN);
89 // sw.setPolicy(PolicyType.AUTOMATIC,PolicyType.AUTOMATIC);
90 // vbox.packStart(sw,true,true, 0);
93 // model = createModel();
95 // /* create tree view */
96 // treeView = new TreeView(model); // add model here
97 // //g_object_unref (model); // do we need this???
98 // treeView.setRulesHint(true);
99 // treeView.getSelection().setMode(SelectionMode.SINGLE);
101 // addColumns(treeView);
104 // /* some buttons */
105 // hbox = new HBox(true,4);
106 // vbox.packStart(hbox,false,false,0);
108 // button = new Button("Add item",&addItem);
109 // hbox.packStart(button,true,true,0);
111 // button = new Button("Remove item",&removeItem);
112 // hbox.packStart(button,true,true,0);
124 // TreeModel createModel()
130 // TreeIter iter = new TreeIter();
132 // /* create array */
133 // //articles = g_array_sized_new (FALSE, FALSE, sizeof (Item), 1);
137 // DUIType []columns;
138 //// columns ~= DUIType.INT;
139 //// columns ~= DUIType.STRING;
140 //// columns ~= DUIType.BOOLEAN;
142 // columns ~= DUIType.STRING;
143 // columns ~= DUIType.STRING;
144 // columns ~= DUIType.BOOLEAN;
146 // /* create list store */
147 // model = new ListStore(columns);
150 // foreach(ListRow row ; listRows)
152 // model.append(iter);
153 // model.set(iter,row);
159 // void editedCallback(CellRenderer renderer, TreeModel model, char[] pathString, char[] newText,int column)
161 // //printf("path string %.*s\n",pathString);
162 // //printf("newText %.*s\n",newText);
163 // //printf("column %d\n",column);
165 // TreeIter iter = new TreeIter();
167 // ListStore store = cast(ListStore)model;
169 // TreePath path = new TreePath(pathString);
170 // model.getIter(iter,path);
171 // //store.getIter(iter,path);
172 // int row = path.getIndices()[0];
179 // listRows[row].setNumber(Integer.toInt(newText));
181 // catch(Error error)
183 // //printf("catch error\n");
184 // // ignore to keep old value
186 // //model.set(iter, listRows[row]);
187 // store.setValue(iter, column, listRows[row].getNumber().toString());
191 // listRows[row].setProduct(newText);
192 // //model.set(iter, listRows[row]);
193 // store.setValue(iter, column, listRows[row].getProduct().toString());
197 // printf("TEditableCells.editedCallback : Unexpected column edited %d\n",column);
203 // void addColumns(TreeView treeView)
205 // Dispatcher dispatcher = Dispatcher.getDispatcher();
206 // CellRenderer renderer;
207 // TreeModel model = treeView.getModel();
208 // renderer = new CellRendererText();
209 // int pos = treeView.insertEditableColumn(0, "Number", renderer, true);
210 // //TreeViewColumn column = new TreeViewColumn("Number",new CellRendererText(),"text", 0);
211 // //treeView.appendColumn(column);
212 // TreeViewColumn column = treeView.getColumn(pos-1);
213 // column.setResizable(true);
214 // column.setSortColumnID(0);
215 // column.setSortIndicator(true);
216 // dispatcher.addCellListener(this,renderer,model,pos-1);
218 // renderer = new CellRendererText();
219 // pos = treeView.insertEditableColumn(1, "Product", renderer, true);
220 // //column = new TreeViewColumn("Product",new CellRendererText(),"text", 1);
221 // //treeView.appendColumn(column);
222 // column = treeView.getColumn(pos-1);
223 // column.setResizable(true);
224 // column.setSortColumnID(1);
225 // column.setSortIndicator(true);
226 // dispatcher.addCellListener(this,renderer,model,pos-1);
230 // class ListRow : TreeNode
235 // this(int number, char[] prod, bit editable)
237 // this.number = number;
239 // this.editable = editable;
241 // void setNumber(int number)
243 // this.number = number;
245 // char[] getNumber()
249 // void setProduct(char[] prod)
253 // char[] getProduct()
257 // void* getNodeValue(int column)
261 // case 0: return number; break;
262 // case 1: return product; break;
263 // case 2: return editable; break;
268 // return ""~number ~ "\t" ~ product ~ "\t" ~ editable;
274 // listRows ~= new ListRow(3,"bottles of coke",true);
275 // listRows ~= new ListRow(5,"packages of noodles",true);
276 // listRows ~= new ListRow(2,"packages of chocolate chip cookies",true);
277 // listRows ~= new ListRow(1,"can vanilla ice cream",true);
278 // listRows ~= new ListRow(6,"eggs",true);
281 // void addItem(Button button)
284 // TreeIter iter = new TreeIter;
285 // ListStore model = treeView.getListStore();
287 // ListRow row = new ListRow(0,"Description here",true);
289 // model.append(iter);
290 // model.set(iter,row);
295 // void removeItem(Button button)
298 // TreeIter iter = new TreeIter;
299 // ListStore model = treeView.getListStore();
301 // TreeSelection selection = treeView.getSelection();
303 // if ( selection.getSelected(model,iter) )
306 // path = model.getPath(iter);
307 // int row = path.getIndices()[0];
308 // model.remove(iter);
311 // //listRows = listRows[0..row] ~ listRows[row+1..listRows.length];
312 // listRows[row..listRows.length-1] = listRows[row+1..listRows.length];
313 // listRows.length = listRows.length-1;
320 // void dump(Object[] oArray)
323 // foreach(Object o ; oArray)