1 static Xcls_LeftProps _LeftProps;
3 public class Xcls_LeftProps : Object
6 private Xcls_LeftProps _this;
8 public static Xcls_LeftProps singleton()
10 if (_LeftProps == null) {
11 _LeftProps= new Xcls_LeftProps();
15 public Xcls_AddPropertyPopup AddPropertyPopup;
16 public Xcls_EditProps EditProps;
17 public Xcls_view view;
18 public Xcls_model model;
19 public Xcls_keycol keycol;
20 public Xcls_keyrender keyrender;
21 public Xcls_valcol valcol;
22 public Xcls_valrender valrender;
23 public Xcls_valrendermodel valrendermodel;
24 public Xcls_ContextMenu ContextMenu;
27 public bool allow_edit;
28 public JsRender.JsRender file;
29 public signal bool stop_editor ();
30 public signal void show_editor (JsRender.JsRender file, JsRender.Node node, string type, string key);
31 public signal void changed ();
32 public signal void show_add_props (string type);
33 public Xcls_MainWindow main_window;
34 public JsRender.Node node;
37 public Xcls_LeftProps()
40 this.el = new Gtk.Box( Gtk.Orientation.VERTICAL, 0 );
43 this.allow_edit = false;
44 this.main_window = null;
47 this.el.homogeneous = false ;
48 var child_0 = new Xcls_Box2( _this );
50 this.el.pack_start ( child_0.el , false,true,0 );
51 var child_1 = new Xcls_EditProps( _this );
53 this.el.pack_end ( child_1.el , true,true,0 );
56 // user defined functions
57 public void before_edit ()
60 print("before edit - stop editing\n");
62 // these do not appear to trigger save...
63 _this.keyrender.el.stop_editing(false);
64 _this.keyrender.el.editable =false;
66 _this.valrender.el.stop_editing(false);
67 _this.valrender.el.editable =false;
70 // technicall stop the popup editor..
73 public string keySortFormat (string key) {
74 // listeners first - with 0
81 var bits = key.split(" ");
84 return "2 " + bits[bits.length -1];
88 return "3 " + bits[bits.length -1];
93 return "4 " + bits[bits.length -1];
96 return "5 " + bits[bits.length -1];
101 public void finish_editing () {
105 public bool startEditingValue ( Gtk.TreePath path) {
107 // ONLY return true if editing is allowed - eg. combo..
109 print("start editing?\n");
110 if (!this.stop_editor()) {
111 print("stop editor failed\n");
117 var mod = this.model.el;
118 mod.get_iter (out iter, path);
124 2, "<b>" + miter.get_key() + "</b>",
130 mod.get_value(iter, 3 , out gval);
131 var val = (string)gval;
133 mod.get_value(iter, 1 , out gval);
134 var key = (string)gval;
137 string kname, kflag, ktype;
138 this.node.normalize_key(key, out kname, out kflag, out ktype);
141 mod.get_value(iter, 0 , out gval);
142 var type = (string)gval; // listerner or prop..
146 var use_textarea = false;
148 //------------ things that require the text editor...
150 if (type == "listener") {
153 if (key.length > 0 && key[0] == '|') { // user defined method
156 if (key.length > 0 && key[0] == '$') { // raw string
159 if (key.length > 0 && key == "* init") {
162 if (val.length > 40) { // long value...
169 print("Call show editor\n");
170 GLib.Timeout.add_full(GLib.Priority.DEFAULT,10 , () => {
171 this.view.el.get_selection().select_path(path);
173 this.show_editor(file, node, type, key);
182 var pal = Palete.factory(this.file.project.xtype);
185 var has_opts = pal.typeOptions(this.node.fqn(), kname, ktype, out opts);
189 // others... - fill in options for true/false?
190 print("turn on editing %s \n" , mod.get_path(iter).to_string());
194 print("start editing try/false)???");
195 this.valrender.el.has_entry = false;
197 this.valrender.setOptions(opts);
199 this.valrender.el.has_entry = false;
200 this.valrender.el.editable = true;
201 this.allow_edit = true;
202 GLib.Timeout.add_full(GLib.Priority.DEFAULT,100 , () => {
203 this.view.el.set_cursor_on_cell(
214 // see if type is a Enum.
221 this.valrender.setOptions(opts);
223 GLib.Timeout.add_full(GLib.Priority.DEFAULT,10 , () => {
225 // at this point - work out the type...
226 // if its' a combo... then show the options..
227 this.valrender.el.has_entry = true;
229 this.valrender.el.editable = true;
232 this.allow_edit = true;
238 this.view.el.set_cursor_on_cell(
248 public void load (JsRender.JsRender file, JsRender.Node? node)
250 print("load leftprops\n");
256 this.model.el.clear();
258 //this.get('/RightEditor').el.hide();
265 //var provider = this.get('/LeftTree').getPaleteProvider();
268 //typeof(string), // 0 key type
269 //typeof(string), // 1 key
270 //typeof(string), // 2 key (display)
271 //typeof(string), // 3 value
272 //typeof(string), // 4 value (display)
273 //typeof(string), // 5 both (tooltip)
278 // really need a way to sort the hashmap...
279 var m = this.model.el;
281 var miter = node.listeners.map_iterator();
284 while(miter.next()) {
286 m.append(out iter,null);
288 this.updateIter(iter, "listener", miter.get_key(), miter.get_value());
294 miter = node.props.map_iterator();
297 while(miter.next()) {
299 m.append(out iter,null);
300 this.updateIter(iter, "prop", miter.get_key(), miter.get_value());
303 print("clear selection\n");
305 this.model.el.set_sort_column_id(6,Gtk.SortType.ASCENDING); // sort by real key..
307 this.view.el.get_selection().unselect_all();
309 var pane = _this.main_window.editpane.el;
310 var try_size = (i * 25) + 60; // est. 20px per line + 40px header
314 ((try_size * 1.0f) / (pane.max_position * 1.0f)) > 0.8f ?
315 (int) (pane.max_position * 0.2f) :
316 pane.max_position-try_size);
320 public string keyFormat (string val, string type) {
322 // Glib.markup_escape_text(val);
324 if (type == "listener") {
325 return "<span font_weight=\"bold\" color=\"#660000\">" +
326 GLib.Markup.escape_text(val) +
330 if (val.length < 1) {
331 return "<span color=\"#FF0000\">--empty--</span>";
336 //# - object properties
338 // all of these... - display value is last element..
339 var ar = val.strip().split(" ");
342 var dval = GLib.Markup.escape_text(ar[ar.length-1]);
348 case '@': // signal // just bold balck?
349 if (dval[0] == '@') {
350 dval = dval.substring(1);
353 return @"<span font_weight=\"bold\">@ $dval</span>";
354 case '#': // object properties?
355 if (dval[0] == '#') {
356 dval = dval.substring(1);
358 return @"<span font_weight=\"bold\">$dval</span>";
360 if (dval[0] == '*') {
361 dval = dval.substring(1);
363 return @"<span color=\"#0000CC\" font_weight=\"bold\">$dval</span>";
365 if (dval[0] == '$') {
366 dval = dval.substring(1);
368 return @"<span style=\"italic\">$dval</span>";
369 case '|': // user defined methods
370 if (dval[0] == '|') {
371 dval = dval.substring(1);
373 return @"<span color=\"#008000\" font_weight=\"bold\">$dval</span>";
384 public void deleteSelected () {
389 var s = this.view.el.get_selection();
390 s.get_selected(out mod, out iter);
394 mod.get_value(iter, 0 , out gval);
395 var type = (string)gval;
397 mod.get_value(iter, 1 , out gval);
398 var key = (string)gval;
402 this.node.listeners.unset(key);
406 this.node.props.unset(key);
409 this.load(this.file, this.node);
413 public void startEditingKey ( Gtk.TreePath path) {
415 if (!this.stop_editor()) {
419 // others... - fill in options for true/false?
422 GLib.Timeout.add_full(GLib.Priority.DEFAULT,10 , () => {
423 this.allow_edit = true;
424 this.keyrender.el.editable = true;
426 this.view.el.set_cursor_on_cell(
438 public Gtk.TreeIter keyToIter (string oldkey, string type, string key, string kvalue) {
443 m.foreach(((model, path, iter) => {
452 public void addProp (string in_type, string key, string value, string value_type) {
453 // info includes key, val, skel, etype..
454 //console.dump(info);
455 //type = info.type.toLowerCase();
456 //var data = this.toJS();
458 var type = in_type == "signals" ? "listener" : in_type;
460 var fkey = (value_type.length > 0 ? value_type + " " : "") + key;
462 if (type == "listener") {
463 if (this.node.listeners.has_key(key)) {
466 this.node.listeners.set(key,value);
469 if (this.node.props.has_key(fkey)) {
472 this.node.props.set(fkey,value);
477 this.load(this.file, this.node);
481 /// need to find the row which I've just added..
484 var s = this.view.el.get_selection();
487 print("trying to find new iter");
489 this.model.el.foreach((model, path, iter) => {
492 this.model.el.get_value(iter, 0 , out gval);
493 if ((string)gval != type) {
494 print("not type: %s = %s\n", (string)gval , type);
497 this.model.el.get_value(iter, 1 , out gval);
498 if ((string)gval != fkey) {
499 print("not key: %s = %s\n", (string)gval , fkey);
503 GLib.Timeout.add_full(GLib.Priority.DEFAULT,40 , () => {
505 this.startEditingValue(this.model.el.get_path(iter));
508 //s.select_iter(iter);
516 public void updateIter (Gtk.TreeIter iter, string type, string key, string value) {
518 print("update Iter %s, %s\n", key,value);
519 //typeof(string), // 0 key type
520 //typeof(string), // 1 key
521 //typeof(string), // 2 key (display)
522 //typeof(string), // 3 value
523 //typeof(string), // 4 value (display)
524 //typeof(string), // 5 both (tooltip)
525 //typeof(string), // 6 key (sort)
527 var dl = value.strip().split("\n");
529 var dis_val = dl.length > 1 ? (dl[0].strip()+ "...") : dl[0];
531 if (type == "listener") {
535 this.model.el.set(iter,
538 2, this.keyFormat(key ,type),
541 5, "<tt>" + GLib.Markup.escape_text(key + " " +value) + "</tt>",
549 this.model.el.set(iter,
552 2, this.keyFormat(key , "prop"),
555 5, "<tt>" + GLib.Markup.escape_text(key + " " + value) + "</tt>",
556 6, this.keySortFormat(key)
559 public class Xcls_Box2 : Object
562 private Xcls_LeftProps _this;
568 public Xcls_Box2(Xcls_LeftProps _owner )
571 this.el = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
575 // set gobject values
576 var child_0 = new Xcls_Button3( _this );
578 this.el.add ( child_0.el );
581 // user defined functions
583 public class Xcls_Button3 : Object
585 public Gtk.Button el;
586 private Xcls_LeftProps _this;
592 public Xcls_Button3(Xcls_LeftProps _owner )
595 this.el = new Gtk.Button();
599 // set gobject values
600 this.el.hexpand = true;
601 var child_0 = new Xcls_Box4( _this );
603 this.el.add ( child_0.el );
604 var child_1 = new Xcls_AddPropertyPopup( _this );
608 this.el.button_press_event.connect( (self, ev) => {
612 var p = _this.AddPropertyPopup;
613 p.el.set_screen(Gdk.Screen.get_default());
615 p.el.popup(null, null, null, ev.button, ev.time);
620 // user defined functions
622 public class Xcls_Box4 : Object
625 private Xcls_LeftProps _this;
631 public Xcls_Box4(Xcls_LeftProps _owner )
634 this.el = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
638 // set gobject values
639 var child_0 = new Xcls_Image5( _this );
641 this.el.add ( child_0.el );
642 var child_1 = new Xcls_Label6( _this );
644 this.el.add ( child_1.el );
647 // user defined functions
649 public class Xcls_Image5 : Object
652 private Xcls_LeftProps _this;
658 public Xcls_Image5(Xcls_LeftProps _owner )
661 this.el = new Gtk.Image();
665 // set gobject values
666 this.el.stock = Gtk.Stock.ADD;
667 this.el.icon_size = Gtk.IconSize.MENU;
670 // user defined functions
673 public class Xcls_Label6 : Object
676 private Xcls_LeftProps _this;
682 public Xcls_Label6(Xcls_LeftProps _owner )
685 this.el = new Gtk.Label( "Other" );
689 // set gobject values
692 // user defined functions
696 public class Xcls_AddPropertyPopup : Object
699 private Xcls_LeftProps _this;
705 public Xcls_AddPropertyPopup(Xcls_LeftProps _owner )
708 _this.AddPropertyPopup = this;
709 this.el = new Gtk.Menu();
713 // set gobject values
714 var child_0 = new Xcls_MenuItem8( _this );
716 this.el.append ( child_0.el );
717 var child_1 = new Xcls_MenuItem9( _this );
719 this.el.append ( child_1.el );
720 var child_2 = new Xcls_MenuItem10( _this );
722 this.el.append ( child_2.el );
723 var child_3 = new Xcls_MenuItem11( _this );
725 this.el.append ( child_3.el );
726 var child_4 = new Xcls_SeparatorMenuItem12( _this );
728 this.el.add ( child_4.el );
729 var child_5 = new Xcls_MenuItem13( _this );
731 this.el.append ( child_5.el );
732 var child_6 = new Xcls_MenuItem14( _this );
734 this.el.append ( child_6.el );
735 var child_7 = new Xcls_MenuItem15( _this );
737 this.el.append ( child_7.el );
738 var child_8 = new Xcls_SeparatorMenuItem16( _this );
740 this.el.add ( child_8.el );
741 var child_9 = new Xcls_MenuItem17( _this );
743 this.el.append ( child_9.el );
744 var child_10 = new Xcls_MenuItem18( _this );
746 this.el.append ( child_10.el );
747 var child_11 = new Xcls_MenuItem19( _this );
749 this.el.append ( child_11.el );
750 var child_12 = new Xcls_SeparatorMenuItem20( _this );
752 this.el.add ( child_12.el );
753 var child_13 = new Xcls_MenuItem21( _this );
755 this.el.append ( child_13.el );
756 var child_14 = new Xcls_MenuItem22( _this );
758 this.el.append ( child_14.el );
759 var child_15 = new Xcls_MenuItem23( _this );
761 this.el.append ( child_15.el );
764 // user defined functions
766 public class Xcls_MenuItem8 : Object
768 public Gtk.MenuItem el;
769 private Xcls_LeftProps _this;
775 public Xcls_MenuItem8(Xcls_LeftProps _owner )
778 this.el = new Gtk.MenuItem();
782 // set gobject values
783 this.el.tooltip_markup = "Using _this.{ID} will map to this element";
784 this.el.label = "id: _this.{ID} (Vala)";
787 this.el.activate.connect( () => {
788 _this.addProp( "prop", "id", "", "");
792 // user defined functions
795 public class Xcls_MenuItem9 : Object
797 public Gtk.MenuItem el;
798 private Xcls_LeftProps _this;
804 public Xcls_MenuItem9(Xcls_LeftProps _owner )
807 this.el = new Gtk.MenuItem();
811 // set gobject values
812 this.el.tooltip_markup = "how to pack this element onto parent, (method, 2nd arg, 3rd arg) .. the 1st argument is filled by the element";
813 this.el.label = "pack: Pack method (Vala)";
816 this.el.activate.connect( ( ) => {
818 _this.addProp( "prop", "pack","add", "*");
822 // user defined functions
825 public class Xcls_MenuItem10 : Object
827 public Gtk.MenuItem el;
828 private Xcls_LeftProps _this;
834 public Xcls_MenuItem10(Xcls_LeftProps _owner )
837 this.el = new Gtk.MenuItem();
841 // set gobject values
842 this.el.tooltip_markup = "eg. \n\nnew Clutter.Image.from_file(.....)";
843 this.el.label = "ctor: Alterative to default contructor";
846 this.el.activate.connect( ( ) => {
848 _this.addProp( "prop", "ctor","", "*");
852 // user defined functions
855 public class Xcls_MenuItem11 : Object
857 public Gtk.MenuItem el;
858 private Xcls_LeftProps _this;
864 public Xcls_MenuItem11(Xcls_LeftProps _owner )
867 this.el = new Gtk.MenuItem();
871 // set gobject values
872 this.el.tooltip_markup = "This code is called after the ctor";
873 this.el.label = "init: initialziation code (vala)";
876 this.el.activate.connect( ( ) => {
878 _this.addProp( "prop", "init", "{\n\n}\n", "*" );
882 // user defined functions
885 public class Xcls_SeparatorMenuItem12 : Object
887 public Gtk.SeparatorMenuItem el;
888 private Xcls_LeftProps _this;
894 public Xcls_SeparatorMenuItem12(Xcls_LeftProps _owner )
897 this.el = new Gtk.SeparatorMenuItem();
901 // set gobject values
904 // user defined functions
907 public class Xcls_MenuItem13 : Object
909 public Gtk.MenuItem el;
910 private Xcls_LeftProps _this;
916 public Xcls_MenuItem13(Xcls_LeftProps _owner )
919 this.el = new Gtk.MenuItem();
923 // set gobject values
924 this.el.tooltip_markup = "Add a user defined string property";
925 this.el.label = "String";
928 this.el.activate.connect( (self) => {
930 _this.addProp( "prop", "XXXX", "","string");
935 // user defined functions
938 public class Xcls_MenuItem14 : Object
940 public Gtk.MenuItem el;
941 private Xcls_LeftProps _this;
947 public Xcls_MenuItem14(Xcls_LeftProps _owner )
950 this.el = new Gtk.MenuItem();
954 // set gobject values
955 this.el.tooltip_markup = "Add a user defined number property";
956 this.el.label = "Number";
959 this.el.activate.connect( ( ) =>{
961 _this.addProp("prop", "XXX", "0", "int");
965 // user defined functions
968 public class Xcls_MenuItem15 : Object
970 public Gtk.MenuItem el;
971 private Xcls_LeftProps _this;
977 public Xcls_MenuItem15(Xcls_LeftProps _owner )
980 this.el = new Gtk.MenuItem();
984 // set gobject values
985 this.el.tooltip_markup = "Add a user defined boolean property";
986 this.el.label = "Boolean";
989 this.el.activate.connect( ( ) =>{
991 _this.addProp( "prop", "XXX", "true", "bool");
995 // user defined functions
998 public class Xcls_SeparatorMenuItem16 : Object
1000 public Gtk.SeparatorMenuItem el;
1001 private Xcls_LeftProps _this;
1007 public Xcls_SeparatorMenuItem16(Xcls_LeftProps _owner )
1010 this.el = new Gtk.SeparatorMenuItem();
1014 // set gobject values
1017 // user defined functions
1020 public class Xcls_MenuItem17 : Object
1022 public Gtk.MenuItem el;
1023 private Xcls_LeftProps _this;
1029 public Xcls_MenuItem17(Xcls_LeftProps _owner )
1032 this.el = new Gtk.MenuItem();
1036 // set gobject values
1037 this.el.tooltip_markup = "Add a user function boolean property";
1038 this.el.label = "Javascript Function";
1041 this.el.activate.connect( ( ) =>{
1043 _this.addProp("prop", "XXXX", "function() { }", "| function");
1047 // user defined functions
1050 public class Xcls_MenuItem18 : Object
1052 public Gtk.MenuItem el;
1053 private Xcls_LeftProps _this;
1059 public Xcls_MenuItem18(Xcls_LeftProps _owner )
1062 this.el = new Gtk.MenuItem();
1066 // set gobject values
1067 this.el.tooltip_markup = "Add a user function boolean property";
1068 this.el.label = "Vala Method";
1071 this.el.activate.connect( ( ) =>{
1073 _this.addProp( "prop", "XXXX", "() {\n\n}\n", "| return_type");
1077 // user defined functions
1080 public class Xcls_MenuItem19 : Object
1082 public Gtk.MenuItem el;
1083 private Xcls_LeftProps _this;
1089 public Xcls_MenuItem19(Xcls_LeftProps _owner )
1092 this.el = new Gtk.MenuItem();
1096 // set gobject values
1097 this.el.tooltip_markup = "Add a vala signal";
1098 this.el.label = "Vala Signal";
1101 this.el.activate.connect( ( ) =>{
1103 _this.addProp( "prop", "XXXX", "()", "@ void");
1107 // user defined functions
1110 public class Xcls_SeparatorMenuItem20 : Object
1112 public Gtk.SeparatorMenuItem el;
1113 private Xcls_LeftProps _this;
1119 public Xcls_SeparatorMenuItem20(Xcls_LeftProps _owner )
1122 this.el = new Gtk.SeparatorMenuItem();
1126 // set gobject values
1129 // user defined functions
1132 public class Xcls_MenuItem21 : Object
1134 public Gtk.MenuItem el;
1135 private Xcls_LeftProps _this;
1141 public Xcls_MenuItem21(Xcls_LeftProps _owner )
1144 this.el = new Gtk.MenuItem();
1148 // set gobject values
1149 this.el.tooltip_markup = "Add a flexy if (for HTML templates)";
1150 this.el.label = "Flexy - If";
1153 this.el.activate.connect( ( ) =>{
1155 _this.addProp("prop", "flexy:if", "value_or_condition", "string");
1159 // user defined functions
1162 public class Xcls_MenuItem22 : Object
1164 public Gtk.MenuItem el;
1165 private Xcls_LeftProps _this;
1171 public Xcls_MenuItem22(Xcls_LeftProps _owner )
1174 this.el = new Gtk.MenuItem();
1178 // set gobject values
1179 this.el.tooltip_markup = "Add a flexy include (for HTML templates)";
1180 this.el.label = "Flexy - Include";
1183 this.el.activate.connect( ( ) =>{
1185 _this.addProp("prop", "flexy:include", "name_of_file.html", "string");
1189 // user defined functions
1192 public class Xcls_MenuItem23 : Object
1194 public Gtk.MenuItem el;
1195 private Xcls_LeftProps _this;
1201 public Xcls_MenuItem23(Xcls_LeftProps _owner )
1204 this.el = new Gtk.MenuItem();
1208 // set gobject values
1209 this.el.tooltip_markup = "Add a flexy foreach (for HTML templates)";
1210 this.el.label = "Flexy - Foreach";
1213 this.el.activate.connect( ( ) =>{
1215 _this.addProp("prop", "flexy:foreach", "array,key,value", "string");
1219 // user defined functions
1225 public class Xcls_EditProps : Object
1227 public Gtk.ScrolledWindow el;
1228 private Xcls_LeftProps _this;
1232 public bool editing;
1235 public Xcls_EditProps(Xcls_LeftProps _owner )
1238 _this.EditProps = this;
1239 this.el = new Gtk.ScrolledWindow( null, null );
1242 this.editing = false;
1244 // set gobject values
1245 this.el.shadow_type = Gtk.ShadowType.IN;
1246 var child_0 = new Xcls_view( _this );
1248 this.el.add ( child_0.el );
1254 this.el.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
1258 // user defined functions
1260 public class Xcls_view : Object
1262 public Gtk.TreeView el;
1263 private Xcls_LeftProps _this;
1267 public Xcls_PopoverProperty popover;
1270 public Xcls_view(Xcls_LeftProps _owner )
1274 this.el = new Gtk.TreeView();
1277 this.popover = null;
1279 // set gobject values
1280 this.el.tooltip_column = 5;
1281 this.el.enable_tree_lines = true;
1282 this.el.headers_visible = true;
1283 var child_0 = new Xcls_model( _this );
1285 this.el.set_model ( child_0.el );
1286 var child_1 = new Xcls_keycol( _this );
1288 this.el.append_column ( child_1.el );
1289 var child_2 = new Xcls_valcol( _this );
1291 this.el.append_column ( child_2.el );
1292 var child_3 = new Xcls_ContextMenu( _this );
1298 var selection = this.el.get_selection();
1299 selection.set_mode( Gtk.SelectionMode.SINGLE);
1302 var description = new Pango.FontDescription();
1303 description.set_size(10000);
1304 this.el.override_font(description);
1308 this.el.button_press_event.connect( ( ev) => {
1310 Gtk.TreeViewColumn col;
1314 if (!this.el.get_path_at_pos((int)ev.x, (int) ev.y, out path, out col, out cell_x, out cell_y )) {
1315 print("nothing selected on click");
1316 GLib.Timeout.add_full(GLib.Priority.DEFAULT,10 , () => {
1317 this.el.get_selection().unselect_all();
1321 _this.before_edit();
1322 return false; //not on a element.
1326 // double click on name..
1327 if (ev.type == Gdk.EventType.2BUTTON_PRESS && ev.button == 1 && col.title == "Name") {
1330 if (this.popover == null) {
1331 this.popover = new Xcls_PopoverProperty();
1332 this.popover.mainwindow = _this.main_window;
1336 _this.before_edit();
1338 _this.keyrender.el.stop_editing(false);
1339 _this.keyrender.el.editable =false;
1341 _this.valrender.el.stop_editing(false);
1342 _this.valrender.el.editable =false;
1344 var mod = this.el.get_model();
1345 mod.get_iter (out iter, path);
1348 GLib.Value gvaltype, gval;
1349 mod.get_value(iter, 1 , out gval); // one is key..
1351 mod.get_value(iter,0, out gvaltype);
1353 //this.popover.show(this.el, _this.node, (string)gvaltype, (string)gval);
1355 _this.startEditingKey(path);
1364 if (ev.type == Gdk.EventType.BUTTON_PRESS && ev.button == 3) {
1366 //if (col.title == "Value") {
1367 // _this.before_edit();
1371 var p = _this.ContextMenu;
1373 p.el.set_screen(Gdk.Screen.get_default());
1375 p.el.popup(null, null, null, ev.button, ev.time);
1376 //Seed.print("click:" + res.column.title);
1378 GLib.Timeout.add_full(GLib.Priority.DEFAULT,10 , () => {
1380 this.el.get_selection().select_path(path);
1383 _this.before_edit();
1388 if (col.title != "Value") {
1389 print("col title != Value");
1391 GLib.Timeout.add_full(GLib.Priority.DEFAULT,10 , () => {
1392 this.el.get_selection().select_path(path);
1396 _this.before_edit();
1397 // XObject.error("column is not value?");
1398 return false; // ignore.. - key click.. ??? should we do this??
1402 // if the cell can be edited with a pulldown
1403 // then we should return true... - and let the start_editing handle it?
1410 // _this.before_edit(); <<< we really need to stop the other editor..
1411 _this.keyrender.el.stop_editing(false);
1412 _this.keyrender.el.editable =false;
1415 return _this.startEditingValue(path); // assumes selected row..
1424 // user defined functions
1426 public class Xcls_model : Object
1428 public Gtk.TreeStore el;
1429 private Xcls_LeftProps _this;
1435 public Xcls_model(Xcls_LeftProps _owner )
1439 this.el = new Gtk.TreeStore( 7, typeof(string), // 0 key type
1440 typeof(string), // 1 key
1441 typeof(string), // 2 key (display)
1442 typeof(string), // 3 value
1443 typeof(string), // 4 value (display)
1444 typeof(string), // 5 both (tooltip)
1445 typeof(string) // 6 key (for sorting)
1450 // set gobject values
1453 // user defined functions
1456 public class Xcls_keycol : Object
1458 public Gtk.TreeViewColumn el;
1459 private Xcls_LeftProps _this;
1465 public Xcls_keycol(Xcls_LeftProps _owner )
1468 _this.keycol = this;
1469 this.el = new Gtk.TreeViewColumn();
1473 // set gobject values
1474 this.el.title = "Name";
1475 this.el.resizable = true;
1476 var child_0 = new Xcls_keyrender( _this );
1478 this.el.pack_start ( child_0.el , false );
1482 this.el.add_attribute(_this.keyrender.el , "markup", 2 );
1483 this.el.add_attribute(_this.keyrender.el , "text", 1 );
1486 // user defined functions
1488 public class Xcls_keyrender : Object
1490 public Gtk.CellRendererText el;
1491 private Xcls_LeftProps _this;
1497 public Xcls_keyrender(Xcls_LeftProps _owner )
1500 _this.keyrender = this;
1501 this.el = new Gtk.CellRendererText();
1505 // set gobject values
1508 this.el.editing_started.connect( ( editable, path) => {
1511 _this.model.el.get_iter(out iter, new Gtk.TreePath.from_string(path));
1516 // this.get('/LeftPanel.model').activePath = path;
1517 _this.model.el.get_value(iter,1, out gval);
1518 var val = (string)gval;
1520 ((Gtk.Entry)editable).set_text(val);
1522 this.el.edited.connect( (path, newtext) => {
1523 print("Keyrender - signal:edited\n");
1525 this.el.editable = false;
1530 _this.model.el.get_iter(out iter, new Gtk.TreePath.from_string(path));
1533 _this.model.el.get_value(iter,1, out gval);
1534 var oldval = (string)gval;
1536 _this.model.el.get_value(iter,0, out gval);
1537 var ktype = (string)gval;
1539 _this.model.el.set_value(iter, 1, newtext);
1541 if (oldval == newtext) {
1546 print("ktype: %s\n",ktype);
1549 var ov = _this.node.listeners.get(oldval);
1550 _this.node.listeners.set(newtext, ov);
1551 _this.node.listeners.unset(oldval);
1553 _this.updateIter(iter, ktype, newtext, ov);
1557 var ov = _this.node.props.get(oldval);
1558 _this.node.props.set(newtext, ov);
1559 _this.node.props.unset(oldval);
1560 _this.updateIter(iter, ktype, newtext, ov);
1568 // user defined functions
1572 public class Xcls_valcol : Object
1574 public Gtk.TreeViewColumn el;
1575 private Xcls_LeftProps _this;
1581 public Xcls_valcol(Xcls_LeftProps _owner )
1584 _this.valcol = this;
1585 this.el = new Gtk.TreeViewColumn();
1589 // set gobject values
1590 this.el.title = "Value";
1591 this.el.resizable = true;
1592 var child_0 = new Xcls_valrender( _this );
1594 this.el.pack_start ( child_0.el , true );
1600 // typeof(string), // 0 key type
1601 // typeof(string), // 1 key
1602 // typeof(string), // 2 key (display)
1603 // typeof(string), // 3 value
1604 // typeof(string) // 4 value (display)
1607 this.el.add_attribute(_this.valrender.el , "text", 4 );
1608 //this.el.add_attribute(_this.valrender.el , "sensitive", 4 );
1609 //this.el.add_attribute(this.items[0].el , 'editable', 3 );
1610 // this.el.set_cell_data_func(cell, age_cell_data_func, NULL, NULL);
1612 // this.get('/LeftPanel').editableColumn= this;
1616 // user defined functions
1618 public class Xcls_valrender : Object
1620 public Gtk.CellRendererCombo el;
1621 private Xcls_LeftProps _this;
1627 public Xcls_valrender(Xcls_LeftProps _owner )
1630 _this.valrender = this;
1631 this.el = new Gtk.CellRendererCombo();
1635 // set gobject values
1636 this.el.editable = false;
1637 this.el.text_column = 0;
1638 this.el.has_entry = true;
1639 var child_0 = new Xcls_valrendermodel( _this );
1641 this.el.model = child_0.el;
1644 this.el.editing_started.connect( ( editable, path) => {
1645 //_this.editing = true;
1646 print("editing started called\n");
1647 if (!_this.allow_edit) {
1649 print("val - editing_Started\n");
1650 this.el.editable = false; // make sure it's not editor...
1655 _this.allow_edit =false;
1658 if ( this.el.has_entry ) {
1661 _this.model.el.get_iter(out iter, new Gtk.TreePath.from_string(path));
1666 // this.get('/LeftPanel.model').activePath = path;
1667 _this.model.el.get_value(iter,3, out gval);
1670 var val = (string)gval;
1671 var combo = (Gtk.ComboBox)editable;
1673 var entry = (Gtk.Entry) combo.get_child();
1674 entry.set_text(val);
1678 this.el.edited.connect( (path, newtext) => {
1679 print("Valrender - signal:edited\n");
1681 this.el.editable = false;
1686 2, "<b>" + miter.get_key() + "</b>",
1687 3, miter.get_value(),
1688 4, display_value(short);
1694 _this.model.el.get_iter(out iter, new Gtk.TreePath.from_string(path));
1697 _this.model.el.get_value(iter,0, out gval);
1698 var ktype = (string)gval;
1701 _this.model.el.get_value(iter,3, out gval);
1702 var oldval = (string)gval;
1704 _this.model.el.get_value(iter,1, out gval);
1705 var key = (string)gval;
1711 _this.node.listeners.set(key, newtext);
1712 _this.updateIter(iter,ktype,key,newtext);
1715 _this.node.props.set(key,newtext);
1716 _this.updateIter(iter,ktype, key,newtext);
1719 // _this.load(_this.file,_this.node);
1725 // user defined functions
1726 public void setOptions (string[] ar) {
1727 var m = _this.valrendermodel.el;
1730 for (var i =0; i < ar.length; i++) {
1732 m.set_value(iret, 0, ar[i]);
1737 public class Xcls_valrendermodel : Object
1739 public Gtk.ListStore el;
1740 private Xcls_LeftProps _this;
1746 public Xcls_valrendermodel(Xcls_LeftProps _owner )
1749 _this.valrendermodel = this;
1750 this.el = new Gtk.ListStore( 1, typeof(string) );
1754 // set gobject values
1757 // user defined functions
1762 public class Xcls_ContextMenu : Object
1765 private Xcls_LeftProps _this;
1771 public Xcls_ContextMenu(Xcls_LeftProps _owner )
1774 _this.ContextMenu = this;
1775 this.el = new Gtk.Menu();
1779 // set gobject values
1780 var child_0 = new Xcls_MenuItem33( _this );
1782 this.el.append ( child_0.el );
1783 var child_1 = new Xcls_SeparatorMenuItem34( _this );
1785 this.el.append ( child_1.el );
1786 var child_2 = new Xcls_MenuItem35( _this );
1788 this.el.append ( child_2.el );
1791 // user defined functions
1793 public class Xcls_MenuItem33 : Object
1795 public Gtk.MenuItem el;
1796 private Xcls_LeftProps _this;
1802 public Xcls_MenuItem33(Xcls_LeftProps _owner )
1805 this.el = new Gtk.MenuItem();
1809 // set gobject values
1810 this.el.label = "Edit";
1813 this.el.activate.connect( ( ) =>{
1815 var s = _this.view.el.get_selection();
1817 Gtk.TreeModel model;
1818 s.get_selected (out model, out iter);
1819 _this.startEditingKey(model.get_path(iter));
1823 // user defined functions
1826 public class Xcls_SeparatorMenuItem34 : Object
1828 public Gtk.SeparatorMenuItem el;
1829 private Xcls_LeftProps _this;
1835 public Xcls_SeparatorMenuItem34(Xcls_LeftProps _owner )
1838 this.el = new Gtk.SeparatorMenuItem();
1842 // set gobject values
1845 // user defined functions
1848 public class Xcls_MenuItem35 : Object
1850 public Gtk.MenuItem el;
1851 private Xcls_LeftProps _this;
1857 public Xcls_MenuItem35(Xcls_LeftProps _owner )
1860 this.el = new Gtk.MenuItem();
1864 // set gobject values
1865 this.el.label = "Delete";
1868 this.el.activate.connect( ( ) =>{
1869 _this.deleteSelected();
1873 // user defined functions