Fix #8101 - new roo bjs files fail and fix top drop
[roobuilder] / src / Builder4 / PopoverFileDetails.bjs
index 158deed..6026f73 100644 (file)
@@ -10,6 +10,7 @@
    "@ void success" : "(Project.Project pr, JsRender.JsRender file)",
    "Xcls_MainWindow mainwindow" : "null",
    "bool done" : false,
+   "bool is_new" : true,
    "bool modal" : true,
    "id" : "PopoverFileDetails",
    "items" : [
        "int margin_end" : 4,
        "int margin_start" : 4,
        "items" : [
-        {
-         "$ justify" : "Gtk.Justification.RIGHT",
-         "$ visible" : true,
-         "$ xns" : "Gtk",
-         "id" : "dir_dropdown_lbl",
-         "label" : "Create File in this Directory",
-         "x_options" : 4,
-         "xalign" : 0.90000000000000002,
-         "xtype" : "Label"
-        },
-        {
-         "$ xns" : "Gtk",
-         "id" : "dir_dropdown",
-         "int colspan" : 1,
-         "items" : [
-          {
-           "$ xns" : "Gtk",
-           "* prop" : "model",
-           "id" : "dir_model",
-           "strings" : "{}",
-           "xtype" : "StringList"
-          }
-         ],
-         "xtype" : "DropDown",
-         "| string getValue" : [
-          "() {",
-          "\treturn _this.dir_model.el.get_string(this.el.selected);",
-          "}"
-         ]
-        },
         {
          "$ justify" : "Gtk.Justification.RIGHT",
          "$ xns" : "Gtk",
@@ -77,6 +48,7 @@
         {
          "$ xns" : "Gtk",
          "bool hexpand" : true,
+         "bool in_showhide" : false,
          "id" : "filetype",
          "items" : [
           {
           "notify[\"selected\"]" : [
            "() => {",
            "",
-           " ",
-           "  ",
-           "    // directory is only available for non-bjs ",
-           "    this.showhide( );",
+           " \t_this.onFileTypeChange();",
            "",
            " }"
           ]
          "xtype" : "DropDown",
          "| string getValue" : [
           "() {",
+          "\t",
+          "\tif (!_this.is_new) {",
+          "\t\treturn _this.file.xtype != \"Plainfile\" ? \"bjs\" :  _this.file.file_ext;",
+          "\t}",
+          "\t",
           "\tif (this.el.selected == Gtk.INVALID_LIST_POSITION) {",
           "\t\treturn \"\";",
           "\t}",
           "\t\t}",
           "\t}",
           "}"
+         ]
+        },
+        {
+         "$ justify" : "Gtk.Justification.RIGHT",
+         "$ visible" : true,
+         "$ xns" : "Gtk",
+         "id" : "dir_dropdown_lbl",
+         "label" : "Create File in this Directory",
+         "x_options" : 4,
+         "xalign" : 0.90000000000000002,
+         "xtype" : "Label"
+        },
+        {
+         "$ xns" : "Gtk",
+         "id" : "dir_dropdown",
+         "int colspan" : 1,
+         "items" : [
+          {
+           "$ xns" : "Gtk",
+           "* prop" : "model",
+           "id" : "dir_model",
+           "strings" : "{}",
+           "xtype" : "StringList"
+          }
          ],
-         "| void showhide" : [
-          "()   {",
-          "",
-          "",
-          "\t",
-          "\t",
-          "\t_this.title_lbl.el.hide();",
-          "\t_this.title.el.hide();",
-          "\t",
-          "\t_this.region_lbl.el.hide();",
-          "\t_this.region.el.hide();",
-          "\t",
-          "\t_this.parent_lbl.el.hide();",
-          "\t_this.parent.el.hide();",
-          "\t",
-          "\t_this.permname_lbl.el.hide();",
-          "\t_this.permname.el.hide();",
-          "\t",
-          "\t_this.modOrder_lbl.el.hide();",
-          "\t_this.modOrder.el.hide();",
-          "\t",
-          "\t_this.build_module_lbl.el.hide();",
-          "\t_this.build_module.el.hide();",
-          "\t",
-          "\t_this.gen_lbl.el.hide();",
-          "\t_this.gen.el.hide();",
-          " ",
-          "\tvar sel = this.getValue();",
-          "\t",
-          "\tswitch(_this.project.xtype) {",
-          "\t\tcase \"Roo\":",
-          "\t\t \t",
-          "\t\t\tif (sel == \"bjs\") {",
-          "\t\t\t\t_this.title_lbl.el.show();",
-          "\t\t\t\t_this.title.el.show();",
-          "\t\t\t\t",
-          "\t\t\t\t_this.region_lbl.el.show();",
-          "\t\t\t\t_this.region.el.show();",
-          "\t\t\t\t",
-          "\t\t\t\t_this.parent_lbl.el.show();",
-          "\t\t\t\t_this.parent.el.show();",
-          "\t\t\t\t",
-          "\t\t\t\t_this.permname_lbl.el.show();",
-          "\t\t\t\t_this.permname.el.show();",
-          "\t\t\t\t",
-          "\t\t\t\t_this.modOrder_lbl.el.show();",
-          "\t\t\t\t_this.modOrder.el.show();",
-          "\t\t\t",
-          "\t\t\t}",
-          "\t\t\t_this.build_module_model.load(null);",
-          "\t\t ",
-          "\t\t\t",
-          "\t\t\tbreak;",
-          "\t\tdefault: // vala..",
-          "\t\t",
-          "\t \t\t_this.build_module_lbl.el.show();",
-          "\t\t\t_this.build_module.el.show();",
-          "\t",
-          "\t\t\t_this.gen_lbl.el.show();",
-          "\t\t\t_this.gen.el.show();",
-          "\t\t    ",
+         "listeners" : {
+          "notify[\"selected\"]" : [
+           "() => {",
+           "",
+           "\t _this.onDirChanged();",
+           "\t",
+           "\t",
+           "\t",
+           " } "
+          ]
+         },
+         "xtype" : "DropDown",
+         "| string getValue" : [
+          "() {",
+          "\treturn _this.dir_model.el.get_string(this.el.selected);",
+          "}"
+         ],
+         "| void setValue" : [
+          "(string cur) {",
+          "\tvar el  = _this.dir_model.el;",
+          "\tfor(var i= 0; i < el.get_n_items();i++)  {",
+          "\t\tif (el.get_string(i) == cur) {",
+          "\t\t\tthis.el.selected = i;",
           "\t\t\tbreak;",
+          "\t\t}",
           "\t}",
-          " ",
-          "    // load up the directories",
-          "    //??? why can we not create bjs files in other directories??",
-          "\t//if (!is_bjs && _this.file.path.length < 1) {",
-          "\t",
-          " ",
-          "\t\t",
-          "\t\t",
-          "\t//}",
-          "   ",
-          "    ",
-          "}",
-          ""
+          "}"
          ]
         },
         {
          "$ justify" : "Gtk.Justification.RIGHT",
          "$ xns" : "Gtk",
+         "id" : "name_lbl",
          "label" : "Component Name (File name without extension)",
          "x_options" : 4,
          "xalign" : 0.90000000000000002,
         {
          "$ visible" : true,
          "$ xns" : "Gtk",
-         "* pack" : "attach,1,2,1,1",
          "bool hexpand" : true,
          "id" : "title",
          "xtype" : "Entry"
          "$ xns" : "Gtk",
          "id" : "gen_lbl",
          "int colspan" : 1,
-         "label" : "Generate as Extended (experimental)",
+         "label" : "Generate as Extended (no working)",
          "x_options" : 4,
          "xalign" : 0.90000000000000002,
          "xtype" : "Label"
        ],
        "uint row_spacing" : 2,
        "xtype" : "Grid",
-       "| void hideRow" : [
+       "| void xhideRow" : [
         "(int row) ",
         "{",
         "\tvar el = _this.grid.el.get_child_at(0,row);",
         "",
         "}"
        ],
-       "| void showAllRows" : [
+       "| void xshowAllRows" : [
         "() {",
         "\tfor (var i = 2; i < 10;i++) {",
         "\t\tvar el = _this.grid.el.get_child_at(0,i);",
          "",
          "",
          "\tif (_this.name.el.get_text().length  < 1) {",
-         "\t    Xcls_StandardErrorDialog.singleton().show(",
+         "\t   var msg = new Adw.MessageDialog(",
          "\t        _this.mainwindow.el,",
+         "\t        \"Opps\",",
          "\t        \"You have to set a Component name \"",
          "\t    );",
+         "\t    msg.modal = true;",
+         "\t    msg.present();",
          "\t     ",
          "\t    return;",
          "\t}",
-         "\t// what does this do?",
-         "\t",
-         "\tvar isNew = _this.file.name.length  > 0 ? false : true;",
-         "\t/*",
-         "\tif (!isNew && this.file.name != _this.name.el.get_text()) {",
-         "\t    Xcls_StandardErrorDialog.singleton().show(",
-         "\t        this.el,",
-         "\t        \"Sorry changing names does not work yet. \"",
-         "\t    );",
-         "\t     ",
-         "\t    return;",
-         "\t}",
-         "\t*/",
-         "\t  ",
-         "  ",
-         "\t// FIXME - this may be more complicated...",
-         "\t//for (var i in this.def) {",
-         "\t//    this.file[i] =  this.get(i).el.get_text();",
-         "\t//}",
+         "\t ",
          "",
-         "\tif (!isNew) {",
+         "\tif (!_this.is_new) {",
          "\t  //  try {",
          "\t  ",
          "\t  \tvar old_target = _this.file.build_module;",
          "\t    _this.file.save();",
          "\t    _this.el.hide();",
          "\t    return;",
-         "\t}",
+         "\t}  ",
          "\t",
          "\t// ---------------- NEW FILES...",
          "\tvar ftype = _this.filetype.getValue();",
          "\t_this.file.loaded = true;",
          "\t_this.file.save();",
          "     _this.file.project.addFile(_this.file);",
-         "\t\t ",
+         "     var sel = _this.filetype.getValue();",
+         "\t if (_this.file.project.xtype == \"Gtk\" && ",
+         "\t \t_this.file.build_module.length > 0 &&",
+         "\t \t( sel == \"bjs\" || sel == \"vala\")) {",
+         "\t ",
+         "\t\tvar pr = (Project.Gtk) _this.file.project;",
+         "\t\tif (pr.compilegroups.has_key(_this.file.build_module)) {",
+         "\t\t\tvar cg = pr.compilegroups.get(_this.file.build_module);",
+         "\t\t\tif (!cg.sources.contains(_this.file.relpath)) {",
+         "\t\t\t\tcg.sources.add(_this.file.relpath);",
+         "\t\t\t}",
+         "\t\t}",
+         "\t",
+         "\t}",
          "\t ",
          " ",
          "\t// what about .js ?",
    "string title" : "Add / Edit File",
    "uint border_width" : 0,
    "xtype" : "Window",
+   "| void hideAll" : [
+    "() {",
+    "",
+    "\t// exiting only",
+    "\tthis.path_lbl.el.hide();",
+    "    this.path.el.hide();",
+    "     ",
+    "    // new ",
+    "    this.name_lbl.el.hide();",
+    "    this.name.el.hide();",
+    "    //new ",
+    "    this.dir_dropdown_lbl.el.hide();",
+    "    this.dir_dropdown.el.hide();",
+    "\t// roo",
+    "\tthis.title_lbl.el.hide();",
+    "\tthis.title.el.hide();",
+    "\t",
+    "\tthis.region_lbl.el.hide();",
+    "\tthis.region.el.hide();",
+    "\t",
+    "\tthis.parent_lbl.el.hide();",
+    "\tthis.parent.el.hide();",
+    "\t",
+    "\tthis.permname_lbl.el.hide();",
+    "\tthis.permname.el.hide();",
+    "\t",
+    "\tthis.modOrder_lbl.el.hide();",
+    "\tthis.modOrder.el.hide();",
+    "\t",
+    "\tthis.build_module_lbl.el.hide();",
+    "\tthis.build_module.el.hide();",
+    "\t",
+    "\tthis.gen_lbl.el.hide();",
+    "\tthis.gen.el.hide();",
+    "\t\tthis.filetype_lbl.el.hide();",
+    "\t\tthis.filetype.el.hide();",
+    "}\t"
+   ],
+   "| void onDirChanged" : [
+    "() {",
+    "if (this.dir_dropdown.el.selected == Gtk.INVALID_LIST_POSITION) {",
+    "\t\tthis.build_module_lbl.el.hide();",
+    "\t\tthis.build_module.el.hide();",
+    "\t\tthis.name_lbl.el.hide();",
+    "\t\tthis.name.el.hide();",
+    "\t\t ",
+    "    \tthis.gen_lbl.el.hide();",
+    "\t\tthis.gen.el.hide();",
+    "    ",
+    "\t\treturn;",
+    "\t\t",
+    "\t",
+    "\t}",
+    "\t// directory selected",
+    "\tvar sel = this.filetype.getValue();",
+    "\t",
+    "\tif (this.file.project.xtype==\"Gtk\" && (sel == \"bjs\" || sel == \"vala\")) {",
+    "\t\tthis.build_module_lbl.el.show();",
+    "\t\tthis.build_module.el.show();",
+    "\t}",
+    "\tthis.name_lbl.el.show();",
+    "\tthis.name.el.show();",
+    "\t",
+    "\tif (sel == \"bjs\") {",
+    "        _this.gen_lbl.el.show();",
+    "        _this.gen.el.show();",
+    "    }",
+    "    ",
+    "    if (this.file.project.xtype == \"Roo\" && sel == \"bjs\") {",
+    "    \tthis.title_lbl.el.show();",
+    "\t\tthis.title.el.show();",
+    "\t\t",
+    "\t\tthis.region_lbl.el.show();",
+    "\t\tthis.region.el.show();",
+    "\t\t",
+    "\t\tthis.parent_lbl.el.show();",
+    "\t\tthis.parent.el.show();",
+    "\t\t",
+    "\t\tthis.permname_lbl.el.show();",
+    "\t\tthis.permname.el.show();",
+    "\t\t",
+    "\t\tthis.modOrder_lbl.el.show();",
+    "\t\tthis.modOrder.el.show();",
+    "\t}",
+    "    ",
+    "        ",
+    "}"
+   ],
+   "| void onFileTypeChange" : [
+    "() {",
+    "\tif (this.filetype.el.selected == Gtk.INVALID_LIST_POSITION) {",
+    "\t\tthis.dir_dropdown.el.hide();",
+    "\t\tthis.dir_dropdown_lbl.el.hide();",
+    "\t\tthis.build_module_lbl.el.hide();",
+    "\t\tthis.build_module.el.hide();",
+    "\t\tthis.name_lbl.el.hide();",
+    "\t\tthis.name.el.hide();",
+    "\t ",
+    "    \tthis.gen_lbl.el.hide();",
+    "\t\tthis.gen.el.hide();",
+    "    ",
+    "    ",
+    "    \tthis.title_lbl.el.hide();",
+    "\t\tthis.title.el.hide();",
+    "\t\t",
+    "\t\tthis.region_lbl.el.hide();",
+    "\t\tthis.region.el.hide();",
+    "\t\t",
+    "\t\tthis.parent_lbl.el.hide();",
+    "\t\tthis.parent.el.hide();",
+    "\t\t",
+    "\t\tthis.permname_lbl.el.hide();",
+    "\t\tthis.permname.el.hide();",
+    "\t\t",
+    "\t\tthis.modOrder_lbl.el.hide();",
+    "\t\tthis.modOrder.el.hide();",
+    " ",
+    "\t\treturn;",
+    "\t\t ",
+    "\t}",
+    "\t",
+    "\tthis.dir_dropdown.el.show();",
+    "\tthis.dir_dropdown_lbl.el.show();",
+    "\tvar sel = this.filetype.getValue();",
+    "\t",
+    "\tvar old_sel = _this.dir_dropdown.el.selected != Gtk.INVALID_LIST_POSITION;",
+    "\tvar olddir = this.dir_dropdown.getValue();",
+    "\tGLib.debug(\"old dir = %s\", olddir);",
+    "\tif (this.file.project.xtype==\"Gtk\" && (sel == \"bjs\" || sel == \"vala\")) {",
+    "\t\t_this.project.loadDirsToStringList(_this.dir_model.el, \"/src\");",
+    "\t\tif (old_sel && olddir.has_prefix(\"/src\")) {",
+    "\t\t \tthis.dir_dropdown.setValue(olddir);",
+    " \t\t} else {",
+    "\t \t     _this.dir_dropdown.el.selected = Gtk.INVALID_LIST_POSITION;",
+    " \t    }",
+    "         ",
+    "\t} else {",
+    "",
+    "        _this.project.loadDirsToStringList(_this.dir_model.el, \"\");",
+    "\t\tif (old_sel) {",
+    "\t\t\tthis.dir_dropdown.setValue(olddir);",
+    "\t\t} else {",
+    "\t\t     _this.dir_dropdown.el.selected = Gtk.INVALID_LIST_POSITION;",
+    "\t     }",
+    "       ",
+    "    }",
+    "",
+    " ",
+    "    // is this confusing?  - should we just strip out / add if necessary..",
+    "    if (sel == \"bjs\" || sel == \"vala\" || sel == \"js\" || sel == \"css\" || sel == \"php\") {",
+    "        _this.name_lbl.el.label = \"Component Name (Filename with-out extension)\";\t\t\t\t ",
+    "    } else {",
+    "\t    _this.name_lbl.el.label = \"File Name (with extension)\";",
+    "    }",
+    " ",
+    "}"
+   ],
    "| void show" : [
-    "(JsRender.JsRender c, Gtk.Window pwin, bool new_window) ",
+    "(JsRender.JsRender  c, Gtk.Window pwin, bool new_window) ",
     "{",
     "    ",
     "    this.project = c.project;",
     "        //this.init();",
     "     //} ",
     "     ",
-    "     ",
+    "      this.is_new = c.name == \"\";",
     "",
     "    _this.name.el.set_text(c.name);",
     "    _this.title.el.set_text(c.title);",
     " ",
     "   _this.gen.el.active = c.gen_extended;",
     "   ",
-    "\t_this.path_lbl.el.show();",
-    "    _this.path.el.show();",
-    "    _this.dir_dropdown_lbl.el.hide();",
-    "    _this.dir_dropdown.el.hide();",
-    "    if (c.name == \"\") {",
-    "    \t_this.path_lbl.el.hide();",
-    "\t    _this.path.el.hide();",
-    "\t    this.filetype_model.load();",
-    "        _this.dir_dropdown_lbl.el.show();",
-    "\t    _this.dir_dropdown.el.show();",
-    "\t    ",
-    "    }   else {",
-    "        _this.path.el.set_text(c.relpath);",
-    "    }",
-    "    ",
+    "",
     "    ",
     "    if (this.project.xtype == \"Gtk\") {",
     "    \tvar p = (Project.Gtk) this.project;",
     "\t    this.build_module_model.load(p.compilegroups);",
     "\t    // it will select first if available...",
     "\t    // only for new files.",
-    "\t    if (c.name != \"\") {",
+    "\t    if (!this.is_new) {",
     "\t\t    this.build_module.setValue(c.build_module);",
     "\t    }",
     "    }",
     "    this.el.set_transient_for(pwin);",
     "    ",
     "    // window + header?",
-    "     print(\"SHOWALL - POPIP\\n\");",
+    "     this.hideAll();",
     "    this.el.show();",
-    "    this.name.el.grab_focus();",
+    "   // this.name.el.grab_focus();",
     "    ",
-    "    _this.project.loadDirsToStringList(this.dir_model.el);",
     "    ",
-    "    if (c.path.length > 0) {",
-    "\t    this.save_btn.el.set_label(\"Save\");",
-    "\t\t_this.filetype_lbl.el.hide();",
-    "\t\t_this.filetype.el.hide();",
-    "\t\t_this.filetype.showhide(); // as we only work on bjs files currently",
+    "    if (!this.is_new) {",
+    "\t   this.showEditFile();",
     "    } else {",
-    "        this.save_btn.el.set_label(\"Create\");",
-    "\t    _this.filetype.el.show();",
-    "\t    _this.filetype_lbl.el.show();",
-    "\t    _this.filetype.showhide();",
+    "    \tthis.showNewFile();",
+    "\t\t ",
+    "      ",
+    "\t    ",
     "    }",
     "    ",
     "    ",
     "    ",
     "}"
    ],
+   "| void showEditFile" : [
+    "() {",
+    " \tthis.save_btn.el.set_label(\"Save\");",
+    "\tthis.filetype_lbl.el.hide();",
+    "\tthis.filetype.el.hide();",
+    "\t\t ",
+    "\tvar sel = this.filetype.getValue();",
+    "\tswitch(_this.project.xtype) {",
+    "\t\tcase \"Roo\":\t ",
+    "\t\t\t if (sel == \"bjs\") {",
+    "\t\t\t\t_this.title_lbl.el.show();",
+    "\t\t\t\t_this.title.el.show();",
+    "\t\t\t\t",
+    "\t\t\t\t_this.region_lbl.el.show();",
+    "\t\t\t\t_this.region.el.show();",
+    "\t\t\t\t",
+    "\t\t\t\t_this.parent_lbl.el.show();",
+    "\t\t\t\t_this.parent.el.show();",
+    "\t\t\t\t",
+    "\t\t\t\t_this.permname_lbl.el.show();",
+    "\t\t\t\t_this.permname.el.show();",
+    "\t\t\t\t",
+    "\t\t\t\t_this.modOrder_lbl.el.show();",
+    "\t\t\t\t_this.modOrder.el.show();",
+    "\t\t\t",
+    "\t\t\t}",
+    "\t\t\tbreak;",
+    "\t\tdefault:",
+    "\t\t\t_this.build_module_lbl.el.show();",
+    "\t\t\t_this.build_module.el.show();\t",
+    "\t\t\t",
+    "\t\t\tif (sel == \"bjs\") {",
+    "\t\t\t",
+    "\t\t\t\t _this.gen_lbl.el.show();",
+    "\t\t\t\t_this.gen.el.show();",
+    "\t\t\t}",
+    "\t\t\tbreak;",
+    "\t}",
+    "\tthis.path.el.show();",
+    "\tthis.path_lbl.el.show();",
+    "\tthis.path.el.set_text(_this.file.relpath);",
+    "}"
+   ],
+   "| void showNewFile" : [
+    "() {",
+    " \tthis.save_btn.el.set_label(\"Create\");",
+    " \tthis.hideAll();",
+    " \tthis.filetype.el.show();",
+    "    this.filetype_lbl.el.show();",
+    "    this.filetype_model.load();",
+    "\tthis.filetype.el.selected = Gtk.INVALID_LIST_POSITION;",
+    " ",
+    "\t    ",
+    "}"
+   ],
    "| void updateFileFromEntry" : [
     "() {",
     "",
     "        }",
     "        ",
     "        _this.file.build_module = _this.build_module.getValue();",
-    "        ",
+    "\t\t",
     "        ",
     "        ",
     "",