X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=src%2FBuilder4%2FWindowState.vala;h=359677b662a610bec3b9db3efdd82725be885d9b;hb=1eb7406e95f4a90ed6e88f4a57efa53c329dc46d;hp=de889be55010c832d59d9c68720bbb7e6b5de244;hpb=b554e3bf8c52aeee45009abc48c9f66791b3b1a1;p=app.Builder.js diff --git a/src/Builder4/WindowState.vala b/src/Builder4/WindowState.vala index de889be55..359677b66 100644 --- a/src/Builder4/WindowState.vala +++ b/src/Builder4/WindowState.vala @@ -10,6 +10,7 @@ public class WindowState : Object public Xcls_MainWindow win; public enum State { + NONE, PREVIEW, OBJECT, PROP, @@ -19,7 +20,7 @@ public class WindowState : Object PROJECT // project settings.. } - public State state; + public State state = State.NONE; public bool children_loaded = false; @@ -33,39 +34,48 @@ public class WindowState : Object public Editor code_editor; public Xcls_WindowRooView window_rooview; public Xcls_GtkView window_gladeview; - public Xcls_DialogNewComponent new_file_dialog; + public Xcls_DialogNewComponent new_file_dialog; + public Xcls_ClutterFiles clutterfiles; public Xcls_WindowLeftProjects left_projects; // can not see where this is initialized.. + + public DialogTemplateSelect template_select; + + // dialogs?? + public Xcls_DialogPluginWebkit webkit_plugin; + // ctor public WindowState(Xcls_MainWindow win) { - this.win = win; - // initialize - - // left elements.. - this.leftTreeInit(); - this.propsListInit(); - - // on clutter space... - this.projectEditInit(); - this.codeEditInit(); - this.projectListInit(); - this.fileViewInit(); - - // adding stuff - this.objectAddInit(); - this.propsAddInit(); - - - // previews... - this.gtkViewInit(); - this.webkitViewInit(); + this.win = win; + // initialize + + // left elements.. + this.leftTreeInit(); + this.propsListInit(); - // dialogs + // on clutter space... + this.projectEditInit(); + this.codeEditInit(); + this.projectListInit(); + this.fileViewInit(); - this.fileNewInit(); + // adding stuff + this.objectAddInit(); + this.propsAddInit(); - this.children_loaded = true; + + // previews... + this.gtkViewInit(); + this.webkitViewInit(); + + // dialogs + + this.fileNewInit(); + + this.webkit_plugin = new Xcls_DialogPluginWebkit(); + this.template_select = new DialogTemplateSelect(); + this.children_loaded = true; } @@ -97,7 +107,7 @@ public class WindowState : Object } - public bool leftTreeBeforeChange(JsRender.Node? sel) + public bool leftTreeBeforeChange() { if (this.state != State.CODE) { this.left_props.finish_editing(); @@ -145,14 +155,13 @@ public class WindowState : Object this.add_props.clear(); break; } - this.add_props.show(_this.left_tree.getActiveFile().palete(), "signals", sel.fqn()); + this.add_props.show(this.left_tree.getActiveFile().palete(), "signals", sel.fqn()); break; - case State.CODEEDIT: - // SAVE FIRST??? - - this.codeEditHide(); - break; + case State.CODE: + this.switchState(State.PREVIEW); + + break; } @@ -168,17 +177,25 @@ public class WindowState : Object this.left_props =new Xcls_LeftProps(); this.left_props.ref(); - this.left_props.main_window = _this; + this.left_props.main_window = this.win; this.win.props.el.pack_start(this.left_props.el,true, true,0); this.left_props.el.show_all(); this.left_props.show_editor.connect( (file, node, type, key) => { - this.codeEditShow(file, node, type, key); + this.switchState(State.CODE); + this.code_editor.show( + file, + node, + type, + key + ); + + }); - + this.left_props.stop_editor.connect( () => { - if (this.state != "codeedit") { + if (this.state != State.CODE) { return true; } @@ -186,7 +203,7 @@ public class WindowState : Object if (!ret) { return false; } - this.codeEditHide(); + this.switchState(State.PREVIEW); return ret; }); @@ -214,7 +231,7 @@ public class WindowState : Object this.vala_projectsettings =new ValaProjectSettings(); this.vala_projectsettings.ref(); - this.vala_projectsettings.window = this; + this.vala_projectsettings.window = this.win; ((Gtk.Container)(this.win.projecteditview.el.get_widget())).add(this.projectsettings.el); //this.projectsettings.el.show_all(); @@ -238,8 +255,7 @@ public class WindowState : Object this.win.project.save(); } - - this.projectEditHide(); + this.switchState (State.PREVIEW); }); @@ -253,7 +269,7 @@ public class WindowState : Object ((Gtk.Container)(this.win.objectview.el.get_widget())).add(this.rightpalete.el); //this.projectsettings.el.show_all(); - stage = _this.win.objectview.el.get_stage(); + var stage = this.win.objectview.el.get_stage(); stage.set_background_color( Clutter.Color.from_string("#000")); } @@ -268,7 +284,7 @@ public class WindowState : Object ((Gtk.Container)(this.win.addpropsview.el.get_widget())).add(this.add_props.el); //this.projectsettings.el.show_all(); - var stage = _this.win.addpropsview.el.get_stage(); + var stage = this.win.addpropsview.el.get_stage(); stage.set_background_color( Clutter.Color.from_string("#000")); @@ -310,7 +326,7 @@ public class WindowState : Object ((Gtk.Container)(this.win.codeeditview.el.get_widget())).add(this.code_editor.el); //this.projectsettings.el.show_all(); - stage = _this.win.codeeditview.el.get_stage(); + var stage = this.win.codeeditview.el.get_stage(); stage.set_background_color( Clutter.Color.from_string("#000")); // editor.save... @@ -350,13 +366,22 @@ public class WindowState : Object this.clutterfiles.open.connect((file) => { this.fileViewOpen(file); }); + this.clutterfiles.el.transitions_completed.connect(() => { + if (this.state == State.FILES) { + this.win.rooview.el.hide(); + } else { + this.clutterfiles.el.hide(); + } + + + }); } public void fileNewInit() { this.new_file_dialog = new Xcls_DialogNewComponent(); // force it modal to the main window.. - this.new_file_dialog.el.set_transient_for(this.el); + this.new_file_dialog.el.set_transient_for(this.win.el); this.new_file_dialog.el.set_modal(true); this.new_file_dialog.success.connect((project,file) => @@ -370,8 +395,9 @@ public class WindowState : Object public void fileViewOpen(JsRender.JsRender file) { this.win.project = file.project; - this.previewShow(); - this.left_tree.model.loadFile(file); + this.switchState (State.PREVIEW); + + this.left_tree.model.loadFile(file); var ctr= ((Gtk.Container)(this.win.rooview.el.get_widget())); var ctr_p= ((Gtk.Container)(this.win.projecteditview.el.get_widget())); @@ -395,7 +421,7 @@ public class WindowState : Object this.vala_projectsettings.el.show_all(); } print("OPEN : " + file.name); - this.editpane.el.set_position(_this.editpane.el.max_position); + this.win.editpane.el.set_position(this.win.editpane.el.max_position); this.win.setTitle(file.project.name + " : " +file.name); @@ -410,7 +436,7 @@ public class WindowState : Object ((Gtk.Container)(this.win.rooview.el.get_widget())).add(this.window_rooview.el); this.window_rooview.el.show_all(); - stage = this.win.rooview.el.get_stage(); + var stage = this.win.rooview.el.get_stage(); stage.set_background_color( Clutter.Color.from_string("#000")); } @@ -421,18 +447,32 @@ public class WindowState : Object this.window_gladeview =new Xcls_GtkView(); this.window_gladeview.ref(); } - + + public void easingSaveAll() + { + this.win.addpropsview.el.save_easing_state(); + this.win.codeeditview.el.save_easing_state(); + this.win.objectview.el.save_easing_state(); + this.win.projecteditview.el.save_easing_state(); + this.win.rooview.el.save_easing_state(); + this.clutterfiles.el.save_easing_state(); + + } + public void easingRestoreAll() + { + this.win.addpropsview.el.restore_easing_state(); + this.win.codeeditview.el.restore_easing_state(); + this.win.objectview.el.restore_easing_state(); + this.win.projecteditview.el.restore_easing_state(); + this.win.rooview.el.restore_easing_state(); + this.clutterfiles.el.restore_easing_state(); + + } public void switchState(State new_state) { - if (this.state == State.PREVIEW) { - // try and do a snapshot.. - - - } - - - + // save the easing state of everything.. + this.easingSaveAll(); switch (this.state) { @@ -451,64 +491,92 @@ public class WindowState : Object case State.LISTENER: case State.PROP: - this.win.addpropsview.el.save_easing_state(); + this.win.addpropsview.el.set_scale(0.0f,0.0f); - this.win.addpropsview.el.restore_easing_state(); - break; + break; case State.CODE: - this.win.codeeditview.el.save_easing_state(); + + + this.code_editor.saveContents(); + this.win.codeeditview.el.set_scale(0.0f,0.0f); - this.win.codeeditview.el.restore_easing_state(); - break; + break; case State.OBJECT: - this.win.objectview.el.save_easing_state(); + this.win.objectview.el.set_scale(0.0f,0.0f); - this.win.objectview.el.restore_easing_state(); - break; + break; case State.PROJECT: - this.win.projecteditview.el.save_easing_state(); + if (this.win.project.xtype == "Gtk") { + this.vala_projectsettings.save(); + } + this.win.projecteditview.el.set_scale(0.0f,0.0f); - this.win.projecteditview.el.restore_easing_state(); - break; + break; - case State.FILES: - this.win.rooview.el.save_easing_state(); + case State.FILES: + // hide files... + + this.win.rooview.el.show_all(); + this.win.rooview.el.set_easing_duration(1000); this.win.rooview.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 0.0f); this.win.rooview.el.set_scale(1.0f,1.0f); - this.win.rooview.el.restore_easing_state(); + this.win.rooview.el.set_pivot_point(0.5f,0.5f); + this.win.rooview.el.set_opacity(0xff); + + + + this.clutterfiles.el.set_easing_duration(1000); + this.clutterfiles.el.set_pivot_point(0.5f,0.5f); + this.clutterfiles.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, -180.0f); + this.clutterfiles.el.set_opacity(0); + + //this.clutterfiles.el.hide(); + - this.win.clutterfiles.el.hide(); break; } - + var oldstate =this.state; this.state = new_state; - + + - this.buttonShowHide(); + this.buttonsShowHide(); + switch (this.state) { case State.PREVIEW: // this is the default state when working... - this.win.rooview.el.save_easing_state(); - this.win.rooview.el.set_scale(1.0f,1.0f); - this.win.rooview.el.restore_easing_state(); + this.win.editpane.el.show(); // holder for tree and properties.. + + + this.left_projects.el.hide(); + if (oldstate != State.FILES) { + // it's handled above.. + print ("changing state to preview from NOT files.."); + + + this.win.rooview.el.set_scale(1.0f,1.0f); + } break; case State.LISTENER: + // same as prop? case State.PROP: var ae = this.left_tree.getActiveElement(); if (ae == null) { - this.state = this.oldstate; - this.buttonShowHide(); + this.state = oldstate; + this.buttonsShowHide(); + this.resizeCanvasElements(); + this.easingRestoreAll(); return; } this.add_props.el.show_all(); @@ -520,78 +588,71 @@ public class WindowState : Object - this.win.rooview.el.save_easing_state(); - // -- FIXME? this needs to be State aware? - this.resizeCanvasElementsA(); - this.win.rooview.el.restore_easing_state(); - - this.win.addpropsview.el.save_easing_state(); + // -- FIXME? this needs to be State aware? + + this.win.rooview.el.set_pivot_point(1.0f,0.5f); + this.win.addpropsview.el.set_scale(1.0f,1.0f); - this.win.addpropsview.el.restore_easing_state(); - - - case State.CODE: - - this.code_editor.el.show_all(); - - // caller needs to call editor - show.... - this.win.rooview.el.save_easing_state(); - this.resizeCanvasElementsA(); - this.win.rooview.el.restore_easing_state(); - - - this.win.codeeditview.el.save_easing_state(); - this.win.codeeditview.el.set_scale(1.0f,1.0f); - this.win.codeeditview.el.restore_easing_state(); - break; - - - case State.OBJECT: - var n = _this.left_tree.getActiveElement(); + break; + + case State.OBJECT: + var n = this.left_tree.getActiveElement(); - if (_this.left_tree.model.file == null) { - this.state = this.oldstate; - this.buttonShowHide(); + if (this.left_tree.model.file == null) { + this.state =oldstate; + this.buttonsShowHide(); + this.resizeCanvasElements(); + this.easingRestoreAll(); return; } - if (n == null && _this.left_tree.model.file.tree != null) { - this.state = this.oldstate; - this.buttonShowHide(); + if (n == null && this.left_tree.model.file.tree != null) { + this.state = oldstate; + this.buttonsShowHide(); + this.resizeCanvasElements(); + this.easingRestoreAll(); return; } this.rightpalete.el.show_all(); - this.rightpalete.load(_this.left_tree.getActiveFile().palete(), n == null ? "*top" : n.fqn()); - - this.win.rooview.el.save_easing_state(); - this.resizeCanvasElementsA(); - this.win.rooview.el.restore_easing_state(); + this.rightpalete.load(this.left_tree.getActiveFile().palete(), n == null ? "*top" : n.fqn()); - this.win.objectview.el.save_easing_state(); - this.win.objectview.el.sset_scale(1.0f,1.0f); - this.win.objectview.el.restore_easing_state(); + + + this.win.objectview.el.set_scale(1.0f,1.0f); + break; + + + case State.CODE: + + this.code_editor.el.show_all(); + + // caller needs to call editor - show.... + + + this.win.codeeditview.el.set_scale(1.0f,1.0f); + break; + + case State.PROJECT: - if (this.win.project.xtype == "Roo") { + if (this.win.project.xtype == "Roo") { this.projectsettings.el.show_all(); - this.projectsettings.show(this.project); + this.projectsettings.show(this.win.project); } else { this.vala_projectsettings.el.show_all(); - this.vala_projectsettings.show((Project.Gtk)this.project); + this.vala_projectsettings.show((Project.Gtk)this.win.project); } - this.win.rooview.el.save_easing_state(); - this.resizeCanvasElementsA(); - this.win.rooview.el.restore_easing_state(); - - this.win.projecteditview.el.save_easing_state(); - this.win.projecteditview.el.set_scale(0.0f,0.0f); - this.win.projecteditview.el.restore_easing_state(); + this.win.rooview.el.set_pivot_point(1.0f,1.0f); // bottom right.. + + this.win.projecteditview.el.set_scale(1.0f,1.0f); + + break; case State.FILES: // can only get here from PREVIEW state.. in theory.. @@ -601,28 +662,137 @@ public class WindowState : Object this.left_projects.el.show(); - var el = this.win.rooview.el; - el.save_easing_state(); - el.set_easing_duration(1000); - - el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 360.0f); - el.set_scale(0.0f,0.0f); + this.win.rooview.el.set_easing_duration(1000); + this.win.rooview.el.set_pivot_point(0.5f,0.5f); + this.win.rooview.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 180.0f); + this.win.rooview.el.set_opacity(0); + //el.set_scale(0.0f,0.0f); if (this.win.project != null) { - this.left_projects.selectProject(_this.project); + this.left_projects.selectProject(this.win.project); } - el.restore_easing_state(); + + this.clutterfiles.el.show_all(); + + this.clutterfiles.el.set_easing_duration(1000); + this.clutterfiles.el.set_pivot_point(0.5f,0.5f); + this.clutterfiles.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 0.0f); + this.clutterfiles.el.set_opacity(0xff); + + break; } - + this.resizeCanvasElements(); + this.easingRestoreAll(); + } + public int redraw_count = 0; + public void resizeCanvas() // called by window resize .. delays redraw + { + var rc = this.redraw_count; + this.redraw_count = 2; + if (rc == 0) { + GLib.Timeout.add(100, () =>{ + return this.resizeCanvasQueue(); + }); + } + } + public bool resizeCanvasQueue() + { + //print("WindowState.resizeCanvasQueue %d\n", this.redraw_count); + + if (this.redraw_count < 1) { + return false; // should not really happen... + } + + + this.redraw_count--; + + if (this.redraw_count > 0) { + return true; // do it again in 1 second... + } + // got down to 0 or -1.... + this.redraw_count = 0; + this.resizeCanvasElements(); + return false; + + } + public void resizeCanvasElements() + { + Gtk.Allocation alloc; + this.win.clutterembed.el.get_allocation(out alloc); + + // print("WindowState.resizeCanvasElements\n"); + if (!this.children_loaded || this.win.clutterembed == null) { + print("WindowState.resizeCanvasElements = ingnore not loaded or no clutterfiles\n"); + return; + } + + var avail = alloc.width < 50.0f ? 0 : alloc.width - 50.0f; + var palsize = avail < 300.0f ? avail : 300.0f; + + + // -------- code edit min 600 + + var codesize = avail < 800.0f ? avail : 800.0f; + + + //print("set code size %f\n", codesize); + + + + switch ( this.state) { + case State.PREVIEW: + this.win.rooview.el.set_size(alloc.width-50, alloc.height); + break; + + case State.FILES: + this.clutterfiles.set_size(alloc.width-50, alloc.height); + break; + + case State.PROJECT: + + this.win.projecteditview.el.set_size(alloc.width-50, alloc.height / 2.0f); + + // this.win.rooview.el.save_easing_state(); + //this.win.rooview.el.set_size(alloc.width / 2.0f, alloc.height / 2.0f); + this.win.rooview.el.set_scale(0.5f, 0.5f); + //this.win.rooview.el.restore_easing_state(); + break; + + case State.CODE: + this.win.codeeditview.el.set_size(codesize, alloc.height); + var scale = avail > 0.0f ? (avail - codesize -10 ) / avail : 0.0f; + //this.win.rooview.el.save_easing_state(); + + this.win.rooview.el.set_scale(scale,scale); + // this.win.rooview.el.restore_easing_state(); + break; + + case State.PROP: + case State.LISTENER: + this.win.addpropsview.el.set_size(palsize, alloc.height); + var scale = avail > 0.0f ? (avail - palsize -10 ) / avail : 0.0f; + this.win.rooview.el.set_scale(scale,scale); + break; + + case State.OBJECT: + this.win.objectview.el.set_size(palsize, alloc.height); + var scale = avail > 0.0f ? (avail - palsize -10 ) / avail : 0.0f; + //this.win.rooview.el.save_easing_state(); + this.win.rooview.el.set_scale(scale,scale); + // this.win.rooview.el.restore_easing_state(); + break; + } + } + // -- buttons show hide..... public void buttonsShowHide() @@ -646,7 +816,7 @@ public class WindowState : Object this.win.addfilebutton.el.hide(); this.win.delprojectbutton.el.hide(); this.win.new_window.el.hide(); - + this.win.reload_resources.el.hide(); switch (this.state) { @@ -673,7 +843,13 @@ public class WindowState : Object this.win.addpropbutton.el.show(); this.win.addlistenerbutton.el.show(); break; - + + case State.PROJECT: + // anything else? + this.win.backbutton.el.show(); + break; + + case State.FILES: this.win.backbutton.el.show(); @@ -681,65 +857,13 @@ public class WindowState : Object this.win.addfilebutton.el.show(); this.win.delprojectbutton.el.show(); this.win.new_window.el.show(); + this.win.reload_resources.el.show(); break; } } - public void resizeCanvasElementsA() - { - Gtk.Allocation alloc; - this.win.cluttermebed.get_allocation(out alloc); - this.resizeCanvasElements(alloc); - } - public void resizeCanvasElements(Gtk.Allocation alloc) - { - if (!_this.children_loaded) { - return; - } - - this.win.clutterfiles.set_size(alloc.width-50, alloc.height); - - // ------- project view appears at top... - this.win.projecteditview.el.set_size(alloc.width-50, alloc.height / 2.0f); - - // ------- add property/object left - max 300px, min 50... (or disapear..) - - var avail = alloc.width < 50.0f ? 0 : alloc.width - 50.0f; - var palsize = avail < 300.0f ? avail : 300.0f; - //print("set palsize size %f\n", palsize); - // palate / props : fixed 300 pix - - this.win.objectview.el.set_size(palsize, alloc.height); - this.win.addpropsview.el.set_size(palsize, alloc.height); - - - - // -------- code edit min 600 - - var codesize = avail < 800.0f ? avail : 800.0f; - //print("set code size %f\n", codesize); - - this.win.codeeditview.el.set_size(codesize, alloc.height); - this.win.rooview.el.set_size(alloc.width-50, alloc.height); - - - - switch ( this.state) { - case State.CODE: - var scale = avail > 0.0f ? (avail - codesize -10 ) / avail : 0.0f; - this.win.rooview.el.set_scale(scale,scale); - break; - - case State.PROP: - case State.LISTENER: - case State.OBJECT: - var scale = avail > 0.0f ? (avail - palsize -10 ) / avail : 0.0f; - this.win.rooview.el.set_scale(scale,scale); - break; - } - } } - \ No newline at end of file +