Author: matt
Date: 2011-08-10 09:45:13 -0700 (Wed, 10 Aug 2011)
New Revision: 8940
Log:
Fluid3:
 - more verbose messages when writing build environments (if set)
 - universal properties dialog for workspaces
 - remove redundant menu items


Modified:
   branches/branch-3.0/fltk.flw
   branches/branch-3.0/fltk3/PackedGroup.h
   branches/branch-3.0/fluid/Fl_Type.cxx
   branches/branch-3.0/fluid/Fl_Type.h
   branches/branch-3.0/fluid/Fl_Widget_Type.cxx
   branches/branch-3.0/fluid/file.cxx
   branches/branch-3.0/fluid/fluid.cxx
   branches/branch-3.0/fluid/workspace_panel.cxx
   branches/branch-3.0/fluid/workspace_panel.fl
   branches/branch-3.0/fluid/workspace_panel.h
   branches/branch-3.0/src/Fl_Pack.cxx

Modified: branches/branch-3.0/fltk.flw
===================================================================
--- branches/branch-3.0/fltk.flw        2011-08-09 22:16:47 UTC (rev 8939)
+++ branches/branch-3.0/fltk.flw        2011-08-10 16:45:13 UTC (rev 8940)
@@ -1,9 +1,7 @@
 # data file for the Fltk User Interface Designer (fluid)
 version 3.0000 
 header_name {.h} 
-code_name {.cxx} 
-wks_name FLTK 
-wks_env 64
+code_name {.cxx}
 workspace FLTK {open
   uuid_Xcode4_Root {2204C862-3EAB-44CD-B0A8-6DF16FFDC8F4}
   uuid_Xcode4_ProductsGroup {A3B55F76-F5F9-4F9E-8A45-2778583213A1}
@@ -12,6 +10,7 @@
   uuid_Xcode4_ContainerItemProxy {7DB77C01-F47B-42CE-883F-5CD221F15472}
   uuid_Xcode4_DebugBuildConfiguration {2B180F46-0364-417C-B270-125FAF04B452}
   uuid_Xcode4_ReleaseBuildConfiguration {C5259E66-FBF8-43A2-B30F-8D59BBE3CF16}
+  build_env 64
 } {
   folder Applications {open
     uuid_Xcode4_Group {137F861A-5702-45AC-821B-A2C51A17F780}
@@ -1488,7 +1487,7 @@
           list_env 64
           filename_and_path {src/Fl_Native_File_Chooser_MAC.mm}
         }
-        file_ref {Fl_Quartz_Printer.mm} {
+        file_ref {Fl_Quartz_Printer.mm} {selected
           uuid_Xcode4_BuildFile {982B3E9E-7B79-4E84-A10F-7270A2EB17A5}
           uuid_Xcode4_FileRef {10A048C4-1F53-4215-8F9A-E8829C9F77EA}
           uuid_Xcode4_BuildFileInSources {B7920395-B4B5-480F-BB30-14BE46AA357D}
@@ -4330,7 +4329,7 @@
       uuid_Xcode4_DebugBuildConfiguration 
{6F972745-D600-4ADA-AB19-ED9C538E504C}
       uuid_Xcode4_ReleaseBuildConfiguration 
{73753145-1E68-48F9-8D70-2CEDA9800F23}
     } {
-      file_ref {curve.cxx} {selected
+      file_ref {curve.cxx} {
         uuid_Xcode4_BuildFileInSources {836E1D98-69DD-40A3-A962-62117FED160D}
         uuid_Xcode4_FileRef {FE2E2FF8-0822-4842-B4B2-B204AD098B77}
         filename_and_path {test/curve.cxx}

Modified: branches/branch-3.0/fltk3/PackedGroup.h
===================================================================
--- branches/branch-3.0/fltk3/PackedGroup.h     2011-08-09 22:16:47 UTC (rev 
8939)
+++ branches/branch-3.0/fltk3/PackedGroup.h     2011-08-10 16:45:13 UTC (rev 
8940)
@@ -84,6 +84,8 @@
     void spacing(int i) {spacing_ = i;}
     /** Same as fltk3::Group::type() */
     uchar horizontal() const {return type();}
+    /** Recalculate the size of this widget and reposition all children. */
+    void layout();
   };
   
 }

Modified: branches/branch-3.0/fluid/Fl_Type.cxx
===================================================================
--- branches/branch-3.0/fluid/Fl_Type.cxx       2011-08-09 22:16:47 UTC (rev 
8939)
+++ branches/branch-3.0/fluid/Fl_Type.cxx       2011-08-10 16:45:13 UTC (rev 
8940)
@@ -199,14 +199,10 @@
  &lib_target_pixmap, &workspace_pixmap, &dependency_pixmap};                   
                      /* 57..59 */
 
 extern int show_comments;
+extern Fl_Panel *the_file_panel;
 
 ////////////////////////////////////////////////////////////////
 
-unsigned int wks_env = FL_ENV_ALL;
-char *wks_name = 0L;
-
-////////////////////////////////////////////////////////////////
-
 class Widget_Browser : public fltk3::Browser_ {
   friend class Fl_Type;
 
@@ -1274,10 +1270,9 @@
 }
 
 void Fl_Workspace_Type::open() {
-  const char *lName = fltk3::input("Enter a name for the workspace", name());
-  if (lName) {
-    name(lName);
-  }
+  if (!the_file_panel) the_file_panel = make_file_panel();
+  the_file_panel->load(&Fl_Type::is_tool);
+  if (Fl_Panel::numselected) the_file_panel->show();
 }
 
 
@@ -1307,10 +1302,9 @@
 }
 
 void Fl_Target_Dependency_Type::open() {
-  const char *lName = fltk3::input("Enter a name for the target dependency", 
name());
-  if (lName) {
-    name(lName);
-  }
+  if (!the_file_panel) the_file_panel = make_file_panel();
+  the_file_panel->load(&Fl_Type::is_tool);
+  if (Fl_Panel::numselected) the_file_panel->show();
 }
 
 
@@ -1384,10 +1378,9 @@
 }
 
 void Fl_App_Target_Type::open() {
-  const char *lName = fltk3::input("Enter a name for the application", name());
-  if (lName) {
-    name(lName);
-  }
+  if (!the_file_panel) the_file_panel = make_file_panel();
+  the_file_panel->load(&Fl_Type::is_tool);
+  if (Fl_Panel::numselected) the_file_panel->show();
 }
 
 // ------------ Library Target 
-------------------------------------------------
@@ -1413,15 +1406,13 @@
 }
 
 void Fl_Lib_Target_Type::open() {
-  const char *lName = fltk3::input("Enter a name for the library", name());
-  if (lName) {
-    name(lName);
-  }
+  if (!the_file_panel) the_file_panel = make_file_panel();
+  the_file_panel->load(&Fl_Type::is_tool);
+  if (Fl_Panel::numselected) the_file_panel->show();
 }
 
 // ------------ Generic File 
---------------------------------------------------
 
-extern Fl_Panel *the_file_panel;
 Fl_File_Type Fl_File_type;
 
 Fl_Type *Fl_File_Type::make() {
@@ -1617,7 +1608,7 @@
 
 void Fl_File_Type::open() {
   if (!the_file_panel) the_file_panel = make_file_panel();
-  the_file_panel->load(&Fl_Type::is_file);
+  the_file_panel->load(&Fl_Type::is_tool);
   if (Fl_Panel::numselected) the_file_panel->show();
 }
 
@@ -1644,10 +1635,9 @@
 }
 
 void Fl_Folder_Type::open() {
-  const char *lName = fltk3::input("Enter a name for the folder", name());
-  if (lName) {
-    name(lName);
-  }
+  if (!the_file_panel) the_file_panel = make_file_panel();
+  the_file_panel->load(&Fl_Type::is_tool);
+  if (Fl_Panel::numselected) the_file_panel->show();
 }
 
 // ------------ Panel Base Class 
-----------------------------------------------

Modified: branches/branch-3.0/fluid/Fl_Type.h
===================================================================
--- branches/branch-3.0/fluid/Fl_Type.h 2011-08-09 22:16:47 UTC (rev 8939)
+++ branches/branch-3.0/fluid/Fl_Type.h 2011-08-10 16:45:13 UTC (rev 8940)
@@ -34,6 +34,21 @@
 //     http://www.fltk.org/str.php
 //
 
+/*
+ 
+ Fl_Type
+ +- Fl_Tool_Type
+ |  +- Fl_Workspace_Type
+ |  +- Fl_Target_Dependency_Type
+ |  +- Fl_Target_Type
+ |  |  +- Fl_App_Target
+ |  |  +- Fl_Lib_Target
+ |  +- Fl_File_Type
+ |  +- Fl_Folder_Type (is_folder, is_category)
+ :  
+ 
+ */
+
 #ifndef FLUID_TYPE_H
 #define FLUID_TYPE_H
 
@@ -47,9 +62,6 @@
 
 void set_modflag(int mf);
 
-extern unsigned int wks_env;
-extern char *wks_name;
-
 enum { 
   FL_ENV_NONE=0, 
   FL_ENV_ALL=0x007f, 
@@ -1114,8 +1126,9 @@
   static void *const LOAD;
   static int numselected;
   static Fl_Type *current;
-  static Fl_Widget_Type *current_widget() { return (Fl_Widget_Type*)current; }
-  static Fl_File_Type *current_file() { return (Fl_File_Type*)current; }
+  static Fl_Widget_Type *current_widget() { return 
current->is_widget()?(Fl_Widget_Type*)current:0L; }
+  static Fl_File_Type *current_file() { return 
current->is_file()?(Fl_File_Type*)current:0L; }
+  static Fl_Tool_Type *current_tool() { return 
current->is_tool()?(Fl_File_Type*)current:0L; }
   static void propagate_load(fltk3::Group* g, void* v=LOAD);
 };
 

Modified: branches/branch-3.0/fluid/Fl_Widget_Type.cxx
===================================================================
--- branches/branch-3.0/fluid/Fl_Widget_Type.cxx        2011-08-09 22:16:47 UTC 
(rev 8939)
+++ branches/branch-3.0/fluid/Fl_Widget_Type.cxx        2011-08-10 16:45:13 UTC 
(rev 8940)
@@ -1891,13 +1891,15 @@
   check_redraw_corresponding_parent(p);
   redraw_overlays();
   // load the panel with the new settings:
-  if (p && the_panel && the_panel->visible()) {
+  if (p && p->is_widget() && the_panel && the_panel->visible()) {
     the_panel->load(&Fl_Type::is_widget);
     if (the_file_panel) the_file_panel->hide();
-  }
-  if (p && the_file_panel && the_file_panel->visible()) {
-    the_file_panel->load(&Fl_Type::is_file);
+  } else if (p && p->is_tool() && the_file_panel && the_file_panel->visible()) 
{
+    the_file_panel->load(&Fl_Type::is_tool);
     if (the_panel) the_panel->hide();
+  } else {
+    if (the_panel) the_panel->hide();
+    if (the_file_panel) the_file_panel->hide();
   }
   // update the source viewer to show the code for the selected object
   update_sourceview_position();

Modified: branches/branch-3.0/fluid/file.cxx
===================================================================
--- branches/branch-3.0/fluid/file.cxx  2011-08-09 22:16:47 UTC (rev 8939)
+++ branches/branch-3.0/fluid/file.cxx  2011-08-10 16:45:13 UTC (rev 8940)
@@ -347,12 +347,6 @@
     write_string("\nheader_name"); write_word(header_file_name);
     write_string("\ncode_name"); write_word(code_file_name);
   }
-  if (wks_name) {
-    write_string("\nwks_name "); write_word(wks_name);
-  }
-  if (wks_env!=FL_ENV_ALL) {
-    write_string("\nwks_env %d", wks_env);
-  }
   for (Fl_Type *p = Fl_Type::first; p;) {
     if (!selected_only || p->selected) {
       p->write();
@@ -453,16 +447,6 @@
       goto CONTINUE;
     }
 
-    if (!strcmp(c,"wks_name")) {
-      wks_name = strdup(read_word());
-      goto CONTINUE;
-    }
-    
-    if (!strcmp(c,"wks_env")) {
-      wks_env = atoi(read_word());
-      goto CONTINUE;
-    }
-
     if (!strcmp(c, "snap") || !strcmp(c, "gridx") || !strcmp(c, "gridy")) {
       // grid settings are now global
       read_word();

Modified: branches/branch-3.0/fluid/fluid.cxx
===================================================================
--- branches/branch-3.0/fluid/fluid.cxx 2011-08-09 22:16:47 UTC (rev 8939)
+++ branches/branch-3.0/fluid/fluid.cxx 2011-08-10 16:45:13 UTC (rev 8940)
@@ -662,7 +662,9 @@
 const char* i18n_set = "";
 char i18n_program[FLTK3_PATH_MAX] = "";
 
-void write_cb(fltk3::Widget *, void *) {
+extern void write_makefiles_cb(fltk3::Widget *, void *);
+  
+void write_code_cb(fltk3::Widget *, void *) {
   if (!filename) {
     save_cb(0,0);
     if (!filename) return;
@@ -699,6 +701,14 @@
   }
 }
 
+void write_cb(fltk3::Widget *o, void *v) {
+  if (project_is_workspace()) {
+    write_makefiles_cb(o, v);
+  } else {
+    write_code_cb(0, v);
+  }
+}
+
 void write_strings_cb(fltk3::Widget *, void *) {
   static const char *exts[] = { ".txt", ".po", ".msg" };
   if (!filename) {
@@ -946,37 +956,92 @@
 extern int write_fltk_ide_visualc2010();
 
 void write_makefiles_cb(fltk3::Widget*, void*) {
+  int ret;
+  if (!project_is_workspace()) {
+    fltk3::message("Write Build Environments:\n\n"
+                   "This project is not a Workspace!");
+    return;
+  }
   // make sure that our workspace file has a proper file name and path
   if (!filename) {
-    save_cb(0, 0);
-    if (!filename)
+    if (completion_button->value()) {
+      ret = fltk3::choice("Write Build Environments:\n\n"
+                          "This Workspace must be saved before\n"
+                          "Build Environments can be created!",
+                          "Cancel", "Save Project", 0L);
+      if (ret==0)
+        return;
+      save_cb(0, 0);
+      if (!filename)
+        return;
+    }
+  }
+  
+  Fl_Workspace_Type *workspace = (Fl_Workspace_Type*)Fl_Type::first;
+  int env = workspace->build_env();
+  if (env==0) {
+    fltk3::message("Write Build Environments:\n\n"
+                   "No Build Environments were selected!\n"
+                   "Double-click the Workspace [FL] item to select\n"
+                   "Build Environments.");
+    return;
+  }
+  
+  if (completion_button->value()) {
+    ret = fltk3::choice("Write Build Environments:\n\n"
+                        "You are about to create the following Build 
Environments:\n"
+                        "%s%s%s%s%s%s", "Cancel", "Continue", 0,
+                        workspace->builds_in(FL_ENV_MAKE)?" - 
Autoconf/Makefile\n":"",
+                        workspace->builds_in(FL_ENV_CMAKE)?" - CMake\n":"",
+                        workspace->builds_in(FL_ENV_VC6)?" - VisualC 6\n":"",
+                        workspace->builds_in(FL_ENV_VC2008)?" - VisualC 
2008\n":"",
+                        workspace->builds_in(FL_ENV_VC2010)?" - VisualC 
2010\n":"",
+                        workspace->builds_in(FL_ENV_XC4)?" - Xcode 4\n":"");
+    if (ret==0) 
       return;
   }
+  
+  // TODO: progress indicator
   // TODO: we need to collect error messages and output them
-  if ((wks_env&FL_ENV_MAKE) && write_fltk_makefiles()) {
+  if (workspace->builds_in(FL_ENV_MAKE) && write_fltk_makefiles()) {
     int v = fltk3::choice("Error writing Makefile build system", "Cancel", 
"Continue", 0);
     if (v==0) return;
   }
-  if ((wks_env&FL_ENV_CMAKE) && write_fltk_cmake()) {
+  if (workspace->builds_in(FL_ENV_CMAKE) && write_fltk_cmake()) {
     int v = fltk3::choice("Error writing Makefile build system", "Cancel", 
"Continue", 0);
     if (v==0) return;
   }
-  if ((wks_env&FL_ENV_XC4) && write_fltk_ide_xcode4()) {
+  if (workspace->builds_in(FL_ENV_XC4) && write_fltk_ide_xcode4()) {
     int v = fltk3::choice("Error writing Xcode 4 build system", "Cancel", 
"Continue", 0);
     if (v==0) return;
   }
-  if ((wks_env&FL_ENV_VC6) && write_fltk_ide_visualc6()) {
+  if (workspace->builds_in(FL_ENV_VC6) && write_fltk_ide_visualc6()) {
     int v = fltk3::choice("Error writing VisualC 6 build system", "Cancel", 
"Continue", 0);
     if (v==0) return;
   }
-  if ((wks_env&FL_ENV_VC2008) && write_fltk_ide_visualc2008()) {
+  if (workspace->builds_in(FL_ENV_VC2008) && write_fltk_ide_visualc2008()) {
     int v = fltk3::choice("Error writing VisualC 2008 build system", "Cancel", 
"Continue", 0);
     if (v==0) return;
   }
-  if ((wks_env&FL_ENV_VC2010) && write_fltk_ide_visualc2010()) {
+  if (workspace->builds_in(FL_ENV_VC2010) && write_fltk_ide_visualc2010()) {
     int v = fltk3::choice("Error writing VisualC 2010 build system", "Cancel", 
"Continue", 0);
     if (v==0) return;
   }
+  if (completion_button->value()) {
+    fltk3::message("Wrote all slected build environemtes.");
+  }
+  // FIXME: allow for compiel-only. See below.
+  /*
+  if (compile_only) {
+    if (!x) {fprintf(stderr,"%s : %s\n",cname,strerror(errno)); exit(1);}
+  } else {
+    if (!x) {
+      fltk3::message("Can't write %s: %s", cname, strerror(errno));
+    } else if (completion_button->value()) {
+      fltk3::message("Wrote %s", cname);
+    }
+  }
+   */
 }
 
 
@@ -1058,11 +1123,6 @@
 void convert_2_to_3_cb(fltk3::Widget *, void *);
 void write_makefiles_cb(fltk3::Widget *, void *);
 
-extern fltk3::DoubleWindow* show_workspace_panel();
-void workspace_settings_cb(fltk3::Widget*, void*) {
-  show_workspace_panel();
-}
-
 fltk3::MenuItem Main_Menu[] = {
 {"&File",0,0,0,fltk3::SUBMENU},
   {"&New...", fltk3::COMMAND+'n', new_cb, 0},
@@ -1074,7 +1134,7 @@
   {"Save &Template...", 0, save_template_cb},
   {"&Revert...", 0, revert_cb, 0, fltk3::MENU_DIVIDER},
   {"&Print...", fltk3::COMMAND+'p', print_menu_cb},
-  {"Write &Code...", fltk3::COMMAND+fltk3::SHIFT+'c', write_cb, 0},
+  {"Write &Code...", fltk3::COMMAND+fltk3::SHIFT+'c', write_code_cb, 0},
   {"&Write Strings...", fltk3::COMMAND+fltk3::SHIFT+'w', write_strings_cb, 0, 
fltk3::MENU_DIVIDER},
   {relative_history[0], fltk3::COMMAND+'0', open_history_cb, 
absolute_history[0]},
   {relative_history[1], fltk3::COMMAND+'1', open_history_cb, 
absolute_history[1]},
@@ -1147,16 +1207,12 @@
 {"&Shell",0,0,0,fltk3::SUBMENU},
   {"Execute &Command...",fltk3::ALT+'x',(fltk3::Callback *)show_shell_window},
   {"Execute &Again...",fltk3::ALT+'g',(fltk3::Callback 
*)do_shell_command,0,fltk3::MENU_DIVIDER},
-  {"Workspace",0,0,0,fltk3::SUBMENU},
-    {"Write Makefile",fltk3::COMMAND+'m',write_makefiles_cb},
-    {"Settings...",0,workspace_settings_cb},
-    {0},
   {"Build Application",fltk3::COMMAND+'b',(fltk3::Callback *)0L},
   {"Run Application",fltk3::COMMAND+'r',(fltk3::Callback *)0L},
-  {"Convert", 0, 0, 0, fltk3::SUBMENU},
-    {"FLTK 1 to 3", 0, convert_1_to_3_cb},
-    {"FLTK 2 to 3", 0, convert_2_to_3_cb},
-    {0},
+  //{"Convert", 0, 0, 0, fltk3::SUBMENU},
+  //  {"FLTK 1 to 3", 0, convert_1_to_3_cb},
+  //  {"FLTK 2 to 3", 0, convert_2_to_3_cb},
+  //  {0},
   {0},
 {"&Help",0,0,0,fltk3::SUBMENU},
   {"&Rapid development with FLUID...",0,help_cb},
@@ -1727,8 +1783,9 @@
   }
 
   // Enable/disable the Save menu item...
-  if (modflag) save_item->activate();
-  else save_item->deactivate();
+  // TODO: this is disable while developing until we are certain that the 
modflag is set wherever needed
+  //  if (modflag) save_item->activate();
+  //  else save_item->deactivate();
 }
 
 ////////////////////////////////////////////////////////////////

Modified: branches/branch-3.0/fluid/workspace_panel.cxx
===================================================================
--- branches/branch-3.0/fluid/workspace_panel.cxx       2011-08-09 22:16:47 UTC 
(rev 8939)
+++ branches/branch-3.0/fluid/workspace_panel.cxx       2011-08-10 16:45:13 UTC 
(rev 8940)
@@ -80,7 +80,7 @@
 this->labelcolor(fltk3::FOREGROUND_COLOR);
 this->align(fltk3::Align(fltk3::ALIGN_TOP));
 this->when(fltk3::WHEN_RELEASE);
-{ pEnvMenu = new fltk3::MenuButton(0, 0, 170, 25, "- unknown -");
+{ pEnvMenu = new fltk3::MenuButton(0, 0, 200, 26, "- unknown -");
   pEnvMenu->labelsize(9);
   pEnvMenu->align(fltk3::Align(192));
   pEnvMenu->menu(menu_pEnvMenu);
@@ -168,64 +168,6 @@
 unsigned int Fl_Environment_Choice::value() {
   return pEnv;
 }
-
-fltk3::DoubleWindow *workspace_panel=(fltk3::DoubleWindow *)0;
-
-fltk3::Input *wName=(fltk3::Input *)0;
-
-Fl_Environment_Choice *pEnv=(Fl_Environment_Choice *)0;
-
-static void cb_OK(fltk3::Button*, void*) {
-  if (wks_name) free(wks_name);
-wks_name = strdup(wName->value());
-wks_env = pEnv->value();
-workspace_panel->hide();
-}
-
-fltk3::DoubleWindow* show_workspace_panel() {
-  if (!workspace_panel) {
-    { workspace_panel = new fltk3::DoubleWindow(274, 173, "Workspace 
Properties");
-      { wName = new fltk3::Input(85, 15, 170, 25, "Name:");
-        wName->tooltip("name of the target - this will be used in the IDEs and 
as a general reference\
-.");
-        wName->labelsize(12);
-        wName->textsize(12);
-      } // fltk3::Input* wName
-      { fltk3::Box* o = new fltk3::Box(10, 50, 288, 2, "Create Build 
Enviroments for:");
-        o->box(fltk3::THIN_DOWN_FRAME);
-        o->labelsize(12);
-        o->align(fltk3::Align(fltk3::ALIGN_BOTTOM_LEFT));
-      } // fltk3::Box* o
-      { pEnv = new Fl_Environment_Choice(85, 71, 170, 40);
-        pEnv->box(fltk3::FLAT_BOX);
-        pEnv->color(fltk3::BACKGROUND_COLOR);
-        pEnv->selection_color(fltk3::SELECTION_COLOR);
-        pEnv->labeltype(fltk3::NORMAL_LABEL);
-        pEnv->labelfont(0);
-        pEnv->labelsize(14);
-        pEnv->labelcolor(fltk3::FOREGROUND_COLOR);
-        pEnv->align(fltk3::Align(fltk3::ALIGN_CENTER));
-        pEnv->when(fltk3::WHEN_RELEASE_ALWAYS);
-      } // Fl_Environment_Choice* pEnv
-      { fltk3::Button* o = new fltk3::Button(160, 130, 95, 25, "OK");
-        o->labelsize(12);
-        o->callback((fltk3::Callback*)cb_OK);
-      } // fltk3::Button* o
-      workspace_panel->set_modal();
-      workspace_panel->end();
-    } // fltk3::DoubleWindow* workspace_panel
-      }
-      if (wks_name) 
-        wName->value(wks_name);
-      else
-        wName->value("unnamed workspace");
-      if (wks_env)  
-        pEnv->value(wks_env);  
-      else
-        pEnv->value(FL_ENV_ALL);
-      workspace_panel->show();
-  return workspace_panel;
-}
 extern Fl_Panel *the_file_panel;
 
 void file_panel_set_cb(fltk3::Widget*, void *v) {
@@ -243,27 +185,84 @@
     }
 }
 
-static void cb_Close(fltk3::Button*, void* v) {
+fltk3::ScrollGroup *pScrollGroup=(fltk3::ScrollGroup *)0;
+
+static void cb_(fltk3::PackedGroup* o, void* v) {
   if (v == Fl_Panel::LOAD) {
+  int i, n = o->children();
+  for (i=0; i<n; i++) {
+    o->child(i)->hide();
+  }
+  Fl_Panel::propagate_load(o, v);
+  o->layout();
+  // TODO: if the window grows taller than the screen height,
+  // we can use the pScrollGroup to keep the entire panell accesible.
+  o->window()->size(o->window()->w(), o->y()+o->h()+15+25+10);
+  pScrollGroup->resize(o->x(), o->y(), o->w(), o->h());
+  pCloseGroup->resize(o->x(), o->y()+o->h()+15, o->w(), pCloseGroup->h());
+  o->window()->init_sizes();
+  
+  static char buf[1024];
+  if (Fl_Panel::numselected != 1)
+    sprintf(buf, "Workspace Properties (%d items)", Fl_Panel::numselected);
+  else
+    sprintf(buf, "%s Properties", Fl_Panel::current->name());
+  the_file_panel->label(buf);
+};
+}
+
+static void cb_1(fltk3::Group* o, void* v) {
+  if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && !t->is_file()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+};
+}
+
+static void cb_Name(fltk3::Input* o, void* v) {
+  if (v == Fl_Panel::LOAD) {
+    if (Fl_Panel::numselected != 1 || Fl_Panel::current==0) {
+      o->static_value("<Multiple Values>");
+      o->deactivate();
+    } else {
+      o->static_value(Fl_Panel::current->name());
+      o->activate();
+    }
   } else {
-    file_panel_set_cb(0, 0);
-    the_file_panel->hide();
+    if (Fl_Panel::numselected == 1) {
+      Fl_Panel::current->name(o->value());
+      if (o->changed()) set_modflag(1);
+    }
   };
 }
 
+static void cb_2(fltk3::Group* o, void* v) {
+  if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && t->is_file()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+};
+}
+
 static void cb_File(fltk3::Input* o, void* v) {
   if (v == Fl_Panel::LOAD) {
-    static char buf[1024];
-    if (Fl_Panel::numselected != 1) {
+    if (Fl_Panel::numselected != 1 || Fl_Panel::current_file()==0L) {
       o->static_value("<Multiple Values>");
       o->deactivate();
-      sprintf(buf, "File Properties (%d files)", Fl_Panel::numselected);
     } else {
       o->static_value(Fl_Panel::current_file()->filename());
       o->activate();
-      sprintf(buf, "%s Properties", Fl_Panel::current_file()->name());
     }
-    the_file_panel->label(buf);
   } else {
     if (Fl_Panel::numselected == 1) {
       Fl_Panel::current_file()->filename(o->value());
@@ -272,6 +271,19 @@
   };
 }
 
+static void cb_3(fltk3::Group* o, void* v) {
+  if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && t->is_file()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+};
+}
+
 static void cb_Unknown(fltk3::MenuButton* o, void* v) {
   if (v == Fl_Panel::LOAD) {
   } else {
@@ -328,6 +340,19 @@
  {0,0,0,0,0,0,0,0,0}
 };
 
+static void cb_4(fltk3::Group* o, void* v) {
+  if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && t->is_file()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+};
+}
+
 static void cb_Relative(fltk3::MenuButton* o, void* v) {
   if (v == Fl_Panel::LOAD) {
   /*...*/
@@ -345,7 +370,7 @@
     }
     if (mod) set_modflag(1);
   }
-      // FIXME: we should show <multiple values> is required
+      // FIXME: we should show <multiple values> if required
     unsigned int fl = Fl_Panel::current_file()->location();
     for (const fltk3::MenuItem *mi = o->menu(); ; mi++) {
       if (!mi->label()) break;
@@ -364,16 +389,29 @@
  {0,0,0,0,0,0,0,0,0}
 };
 
+static void cb_5(fltk3::Group* o, void* v) {
+  if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && t->is_tool() && !t->is_folder() && !t->is_category()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+};
+}
+
 static void cb_Build(Fl_Environment_Choice* o, void* v) {
   if (v == Fl_Panel::LOAD) {
-    o->value(Fl_Panel::current_file()->build_env());
+    o->value(Fl_Panel::current_tool()->build_env());
   } else {
     int mod = 0;
     unsigned int e = o->value();
     for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
-      if (t->selected && t->is_file()) {
-        if (((Fl_File_Type*)t)->build_env() != e) {
-          ((Fl_File_Type*)t)->build_env(e);
+      if (t->selected && t->is_tool()) {
+        if (((Fl_Tool_Type*)t)->build_env() != e) {
+          ((Fl_Tool_Type*)t)->build_env(e);
           mod = 1;
         }
       }
@@ -382,16 +420,29 @@
   };
 }
 
+static void cb_6(fltk3::Group* o, void* v) {
+  if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && (t->is_file() || t->is_folder() || t->is_category())) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+};
+}
+
 static void cb_List(Fl_Environment_Choice* o, void* v) {
   if (v == Fl_Panel::LOAD) {
-    o->value(Fl_Panel::current_file()->list_env());
+    o->value(Fl_Panel::current_tool()->list_env());
   } else {
     int mod = 0;
     unsigned int e = o->value();
     for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
-      if (t->selected && t->is_file()) {
-        if (((Fl_File_Type*)t)->list_env() != e) {
-          ((Fl_File_Type*)t)->list_env(e);
+      if (t->selected && t->is_tool()) {
+        if (((Fl_Tool_Type*)t)->list_env() != e) {
+          ((Fl_Tool_Type*)t)->list_env(e);
           mod = 1;
         }
       }
@@ -400,6 +451,16 @@
   };
 }
 
+fltk3::Group *pCloseGroup=(fltk3::Group *)0;
+
+static void cb_Close(fltk3::Button*, void* v) {
+  if (v == Fl_Panel::LOAD) {
+  } else {
+    file_panel_set_cb(0, 0);
+    the_file_panel->hide();
+  };
+}
+
 Fl_Panel* make_file_panel() {
   Fl_Panel* w;
   { Fl_Panel* o = new Fl_Panel(0, 0, 420, 454, "File Properties");
@@ -414,45 +475,47 @@
     o->align(fltk3::Align(fltk3::ALIGN_CLIP|fltk3::ALIGN_INSIDE));
     o->when(fltk3::WHEN_RELEASE);
     o->hotspot(o);
-    { fltk3::Group* o = new fltk3::Group(10, 420, 400, 25);
-      o->labelsize(11);
-      o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
-      { fltk3::Box* o = new fltk3::Box(10, 420, 290, 25);
-        o->labelsize(11);
-        fltk3::Group::current()->resizable(o);
-      } // fltk3::Box* o
-      { fltk3::Button* o = new fltk3::Button(300, 420, 110, 25, "Close");
-        o->callback((fltk3::Callback*)cb_Close);
-      } // fltk3::Button* o
-      o->end();
-    } // fltk3::Group* o
-    { fltk3::ScrollGroup* o = new fltk3::ScrollGroup(10, 10, 400, 400);
-      o->box(fltk3::FLAT_BOX);
-      o->color(fltk3::LIGHT1);
-      o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
+    { pScrollGroup = new fltk3::ScrollGroup(10, 10, 400, 400);
+      pScrollGroup->box(fltk3::FLAT_BOX);
+      pScrollGroup->color(fltk3::LIGHT1);
+      pScrollGroup->callback((fltk3::Callback*)Fl_Panel::propagate_load);
       { fltk3::PackedGroup* o = new fltk3::PackedGroup(10, 10, 400, 400);
-        o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
+        o->callback((fltk3::Callback*)cb_);
         { fltk3::Group* o = new fltk3::Group(10, 10, 400, 30);
           o->labelsize(12);
-          o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
+          o->callback((fltk3::Callback*)cb_1);
           o->align(fltk3::Align(fltk3::ALIGN_LEFT));
-          { fltk3::Input* o = new fltk3::Input(110, 15, 290, 20, "File Name ");
+          { fltk3::Input* o = new fltk3::Input(110, 15, 290, 20, "Name ");
             o->tooltip("name and path of the file");
             o->labelsize(12);
             o->textsize(12);
-            o->callback((fltk3::Callback*)cb_File);
+            o->callback((fltk3::Callback*)cb_Name);
             o->when(fltk3::WHEN_CHANGED);
             fltk3::Group::current()->resizable(o);
           } // fltk3::Input* o
           o->end();
         } // fltk3::Group* o
         { fltk3::Group* o = new fltk3::Group(10, 40, 400, 30);
-          o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
-          { fltk3::Group* o = new fltk3::Group(110, 45, 200, 20, "File Type ");
+          o->labelsize(12);
+          o->callback((fltk3::Callback*)cb_2);
+          o->align(fltk3::Align(fltk3::ALIGN_LEFT));
+          { fltk3::Input* o = new fltk3::Input(110, 45, 290, 20, "File Name ");
+            o->tooltip("name and path of the file");
             o->labelsize(12);
+            o->textsize(12);
+            o->callback((fltk3::Callback*)cb_File);
+            o->when(fltk3::WHEN_CHANGED);
+            fltk3::Group::current()->resizable(o);
+          } // fltk3::Input* o
+          o->end();
+        } // fltk3::Group* o
+        { fltk3::Group* o = new fltk3::Group(10, 70, 400, 30);
+          o->callback((fltk3::Callback*)cb_3);
+          { fltk3::Group* o = new fltk3::Group(110, 75, 200, 20, "File Type ");
+            o->labelsize(12);
             o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
             o->align(fltk3::Align(fltk3::ALIGN_LEFT));
-            { fltk3::MenuButton* o = new fltk3::MenuButton(110, 45, 200, 20, 
"Unknown");
+            { fltk3::MenuButton* o = new fltk3::MenuButton(110, 75, 200, 20, 
"Unknown");
               o->labelsize(12);
               o->callback((fltk3::Callback*)cb_Unknown);
               o->menu(menu_Unknown);
@@ -461,15 +524,15 @@
           } // fltk3::Group* o
           o->end();
         } // fltk3::Group* o
-        { fltk3::Group* o = new fltk3::Group(10, 70, 400, 30);
+        { fltk3::Group* o = new fltk3::Group(10, 100, 400, 30);
           o->labelsize(12);
-          o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
+          o->callback((fltk3::Callback*)cb_4);
           o->align(fltk3::Align(fltk3::ALIGN_LEFT));
-          { fltk3::Group* o = new fltk3::Group(110, 75, 200, 20, "Location ");
+          { fltk3::Group* o = new fltk3::Group(110, 105, 200, 20, "Location ");
             o->labelsize(12);
             o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
             o->align(fltk3::Align(fltk3::ALIGN_LEFT));
-            { fltk3::MenuButton* o = new fltk3::MenuButton(110, 75, 200, 20, 
"Relative to Workspace");
+            { fltk3::MenuButton* o = new fltk3::MenuButton(110, 105, 200, 20, 
"Relative to Workspace");
               o->labelsize(12);
               o->callback((fltk3::Callback*)cb_Relative);
               o->menu(menu_Relative);
@@ -478,9 +541,9 @@
           } // fltk3::Group* o
           o->end();
         } // fltk3::Group* o
-        { fltk3::Group* o = new fltk3::Group(10, 105, 400, 30);
-          o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
-          { Fl_Environment_Choice* o = new Fl_Environment_Choice(110, 107, 
200, 26, "Build in:");
+        { fltk3::Group* o = new fltk3::Group(10, 135, 400, 30);
+          o->callback((fltk3::Callback*)cb_5);
+          { Fl_Environment_Choice* o = new Fl_Environment_Choice(110, 137, 
200, 26, "Build in ");
             o->box(fltk3::FLAT_BOX);
             o->color(fltk3::BACKGROUND_COLOR);
             o->selection_color(fltk3::SELECTION_COLOR);
@@ -494,9 +557,9 @@
           } // Fl_Environment_Choice* o
           o->end();
         } // fltk3::Group* o
-        { fltk3::Group* o = new fltk3::Group(10, 140, 400, 30);
-          o->callback((fltk3::Callback*)Fl_Panel::propagate_load);
-          { Fl_Environment_Choice* o = new Fl_Environment_Choice(110, 142, 
200, 25, "List in:");
+        { fltk3::Group* o = new fltk3::Group(10, 170, 400, 30);
+          o->callback((fltk3::Callback*)cb_6);
+          { Fl_Environment_Choice* o = new Fl_Environment_Choice(110, 172, 
200, 25, "List in ");
             o->box(fltk3::FLAT_BOX);
             o->color(fltk3::BACKGROUND_COLOR);
             o->selection_color(fltk3::SELECTION_COLOR);
@@ -513,10 +576,21 @@
         o->end();
         fltk3::Group::current()->resizable(o);
       } // fltk3::PackedGroup* o
-      o->end();
-      fltk3::Group::current()->resizable(o);
-    } // fltk3::ScrollGroup* o
-    o->size_range(300, 200);
+      pScrollGroup->end();
+      fltk3::Group::current()->resizable(pScrollGroup);
+    } // fltk3::ScrollGroup* pScrollGroup
+    { pCloseGroup = new fltk3::Group(10, 420, 400, 25);
+      pCloseGroup->labelsize(11);
+      pCloseGroup->callback((fltk3::Callback*)Fl_Panel::propagate_load);
+      { fltk3::Box* o = new fltk3::Box(10, 420, 290, 25);
+        o->labelsize(11);
+        fltk3::Group::current()->resizable(o);
+      } // fltk3::Box* o
+      { fltk3::Button* o = new fltk3::Button(300, 420, 110, 25, "Close");
+        o->callback((fltk3::Callback*)cb_Close);
+      } // fltk3::Button* o
+      pCloseGroup->end();
+    } // fltk3::Group* pCloseGroup
     o->set_non_modal();
     o->end();
   } // Fl_Panel* o

Modified: branches/branch-3.0/fluid/workspace_panel.fl
===================================================================
--- branches/branch-3.0/fluid/workspace_panel.fl        2011-08-09 22:16:47 UTC 
(rev 8939)
+++ branches/branch-3.0/fluid/workspace_panel.fl        2011-08-10 16:45:13 UTC 
(rev 8940)
@@ -1,9 +1,7 @@
 # data file for the Fltk User Interface Designer (fluid)
 version 3.0000 
 header_name {.h} 
-code_name {.cxx} 
-wks_name FLTK 
-wks_env 1
+code_name {.cxx}
 comment {//
 // "$Id$"
 //
@@ -52,15 +50,15 @@
 decl {extern fltk3::Pixmap menu_all_pixmap;} {public global
 } 
 
-widget_class Fl_Environment_Choice {open
-  xywh {820 144 170 25} type Double
+widget_class Fl_Environment_Choice {
+  xywh {820 144 200 26} type Double
   class {fltk3::Group} visible position_relative
 } {
   decl {unsigned int pEnv;} {protected local
   }
   {fltk3::MenuButton} pEnvMenu {
     label {- unknown -} open
-    xywh {0 0 170 25} labelsize 9 align 192
+    xywh {0 0 200 26} labelsize 9 align 192
   } {
     MenuItem pMenuAll {
       label {All Environments}
@@ -178,7 +176,7 @@
     mi++;
   }
 }} {}
-  Function {update_all()} {open protected return_type void
+  Function {update_all()} {protected return_type void
   } {
     code {// now update all menus
 unsigned int e = pEnv;
@@ -224,7 +222,7 @@
 }} {}
   }
   Function {value(unsigned int v)} {
-    comment {Set the environment flags} open return_type void
+    comment {Set the environment flags} return_type void
   } {
     code {pEnv = v;
 update_all();} {}
@@ -236,47 +234,6 @@
   }
 } 
 
-Function {show_workspace_panel()} {open
-} {
-  codeblock {if (!workspace_panel)} {open
-  } {
-    {fltk3::Window} workspace_panel {
-      label {Workspace Properties} open
-      xywh {832 211 274 173} type Double modal visible
-    } {
-      {fltk3::Input} wName {
-        label {Name:}
-        tooltip {name of the target - this will be used in the IDEs and as a 
general reference.} xywh {85 15 170 25} labelsize 12 textsize 12
-      }
-      {fltk3::Box} {} {
-        label {Create Build Enviroments for:}
-        xywh {10 50 288 2} box THIN_DOWN_FRAME labelsize 12 align 6
-      }
-      {fltk3::MenuButton} pEnv {open
-        xywh {85 71 170 40} box FLAT_BOX
-        class Fl_Environment_Choice
-      } {}
-      {fltk3::Button} {} {
-        label OK
-        callback {if (wks_name) free(wks_name);
-wks_name = strdup(wName->value());
-wks_env = pEnv->value();
-workspace_panel->hide();}
-        xywh {160 130 95 25} labelsize 12
-      }
-    }
-  }
-  code {if (wks_name) 
-  wName->value(wks_name);
-else
-  wName->value("unnamed workspace");
-if (wks_env)  
-  pEnv->value(wks_env);  
-else
-  pEnv->value(FL_ENV_ALL);
-workspace_panel->show();} {}
-} 
-
 decl {extern Fl_Panel *the_file_panel;} {private global
 } 
 
@@ -299,71 +256,119 @@
 Function {make_file_panel()} {open
 } {
   {fltk3::Window} {} {
-    label {File Properties} open selected
-    xywh {858 255 420 454} type Double labelsize 11 align 80 resizable hotspot
-    code0 {o->size_range(300, 200);}
+    label {File Properties} open
+    xywh {618 264 420 454} type Double labelsize 11 align 80 resizable hotspot
     class Fl_Panel non_modal visible
   } {
-    {fltk3::Group} {} {
+    {fltk3::ScrollGroup} pScrollGroup {
       callback {Fl_Panel::propagate_load} open
-      xywh {10 420 400 25} labelsize 11
-    } {
-      {fltk3::Box} {} {
-        xywh {10 420 290 25} labelsize 11 resizable
-      }
-      {fltk3::Button} {} {
-        label Close
-        callback {if (v == Fl_Panel::LOAD) {
-  } else {
-    file_panel_set_cb(0, 0);
-    the_file_panel->hide();
-  }}
-        xywh {300 420 110 25}
-      }
-    }
-    {fltk3::ScrollGroup} {} {
-      callback {Fl_Panel::propagate_load} open
       xywh {10 10 400 400} box FLAT_BOX color 50 resizable
     } {
       {fltk3::PackedGroup} {} {
-        callback {Fl_Panel::propagate_load} open
+        callback {if (v == Fl_Panel::LOAD) {
+  int i, n = o->children();
+  for (i=0; i<n; i++) {
+    o->child(i)->hide();
+  }
+  Fl_Panel::propagate_load(o, v);
+  o->layout();
+  // TODO: if the window grows taller than the screen height,
+  // we can use the pScrollGroup to keep the entire panell accesible.
+  o->window()->size(o->window()->w(), o->y()+o->h()+15+25+10);
+  pScrollGroup->resize(o->x(), o->y(), o->w(), o->h());
+  pCloseGroup->resize(o->x(), o->y()+o->h()+15, o->w(), pCloseGroup->h());
+  o->window()->init_sizes();
+  
+  static char buf[1024];
+  if (Fl_Panel::numselected != 1)
+    sprintf(buf, "Workspace Properties (%d items)", Fl_Panel::numselected);
+  else
+    sprintf(buf, "%s Properties", Fl_Panel::current_file()->name());
+  the_file_panel->label(buf);
+}} open
         xywh {10 10 400 400} resizable
       } {
         {fltk3::Group} {} {
-          callback {Fl_Panel::propagate_load} open
+          callback {if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && !t->is_file()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+}} open
           xywh {10 10 400 30} labelsize 12 align 4
         } {
           {fltk3::Input} {} {
+            label {Name }
+            callback {if (v == Fl_Panel::LOAD) {
+    if (Fl_Panel::numselected != 1 || Fl_Panel::current==0) {
+      o->static_value("<Multiple Values>");
+      o->deactivate();
+    } else {
+      o->static_value(Fl_Panel::current->name());
+      o->activate();
+    }
+  } else {
+    if (Fl_Panel::numselected == 1) {
+      Fl_Panel::current->name(o->value());
+      if (o->changed()) set_modflag(1);
+    }
+  }} selected
+            tooltip {name and path of the file} xywh {110 15 290 20} labelsize 
12 when 1 textsize 12 resizable
+          }
+        }
+        {fltk3::Group} {} {
+          callback {if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && t->is_file()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+}} open
+          xywh {10 40 400 30} labelsize 12 align 4
+        } {
+          {fltk3::Input} {} {
             label {File Name }
             callback {if (v == Fl_Panel::LOAD) {
-    static char buf[1024];
-    if (Fl_Panel::numselected != 1) {
+    if (Fl_Panel::numselected != 1 || Fl_Panel::current_file()==0L) {
       o->static_value("<Multiple Values>");
       o->deactivate();
-      sprintf(buf, "File Properties (%d files)", Fl_Panel::numselected);
     } else {
       o->static_value(Fl_Panel::current_file()->filename());
       o->activate();
-      sprintf(buf, "%s Properties", Fl_Panel::current_file()->name());
     }
-    the_file_panel->label(buf);
   } else {
     if (Fl_Panel::numselected == 1) {
       Fl_Panel::current_file()->filename(o->value());
       if (o->changed()) set_modflag(1);
     }
   }}
-            tooltip {name and path of the file} xywh {110 15 290 20} labelsize 
12 when 1 textsize 12 resizable
+            tooltip {name and path of the file} xywh {110 45 290 20} labelsize 
12 when 1 textsize 12 resizable
           }
         }
         {fltk3::Group} {} {
-          callback {Fl_Panel::propagate_load} open
-          xywh {10 40 400 30}
+          callback {if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && t->is_file()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+}} open
+          xywh {10 70 400 30}
         } {
           {fltk3::Group} {} {
             label {File Type }
             callback {Fl_Panel::propagate_load} open
-            xywh {110 45 200 20} labelsize 12 align 4
+            xywh {110 75 200 20} labelsize 12 align 4
           } {
             {fltk3::MenuButton} {} {
               label Unknown
@@ -404,7 +409,7 @@
         }
       }
       o->copy_label(buf);} open
-              xywh {110 45 200 20} labelsize 12
+              xywh {110 75 200 20} labelsize 12
             } {
               MenuItem {} {
                 label Default
@@ -470,13 +475,22 @@
           }
         }
         {fltk3::Group} {} {
-          callback {Fl_Panel::propagate_load} open
-          xywh {10 70 400 30} labelsize 12 align 4
+          callback {if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && t->is_file()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+}} open
+          xywh {10 100 400 30} labelsize 12 align 4
         } {
           {fltk3::Group} {} {
             label {Location }
             callback {Fl_Panel::propagate_load} open
-            xywh {110 75 200 20} labelsize 12 align 4
+            xywh {110 105 200 20} labelsize 12 align 4
           } {
             {fltk3::MenuButton} {} {
               label {Relative to Workspace}
@@ -496,7 +510,7 @@
     }
     if (mod) set_modflag(1);
   }
-      // FIXME: we should show <multiple values> is required
+      // FIXME: we should show <multiple values> if required
     unsigned int fl = Fl_Panel::current_file()->location();
     for (const fltk3::MenuItem *mi = o->menu(); ; mi++) {
       if (!mi->label()) break;
@@ -505,7 +519,7 @@
         break;
       }
     }} open
-              xywh {110 75 200 20} labelsize 12
+              xywh {110 105 200 20} labelsize 12
             } {
               MenuItem {} {
                 label {Relative to Workspace}
@@ -531,57 +545,92 @@
           }
         }
         {fltk3::Group} {} {
-          callback {Fl_Panel::propagate_load} open
-          xywh {10 105 400 30}
+          callback {if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && t->is_tool() && !t->is_folder() && !t->is_category()) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+}} open
+          xywh {10 135 400 30}
         } {
           {fltk3::MenuButton} {} {
-            label {Build in:}
+            label {Build in }
             callback {if (v == Fl_Panel::LOAD) {
-    o->value(Fl_Panel::current_file()->build_env());
+    o->value(Fl_Panel::current_tool()->build_env());
   } else {
     int mod = 0;
     unsigned int e = o->value();
     for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
-      if (t->selected && t->is_file()) {
-        if (((Fl_File_Type*)t)->build_env() != e) {
-          ((Fl_File_Type*)t)->build_env(e);
+      if (t->selected && t->is_tool()) {
+        if (((Fl_Tool_Type*)t)->build_env() != e) {
+          ((Fl_Tool_Type*)t)->build_env(e);
           mod = 1;
         }
       }
     }
     if (mod) set_modflag(1);
   }} open
-            xywh {110 107 200 26} box FLAT_BOX labelsize 12 align 4
+            xywh {110 137 200 26} box FLAT_BOX labelsize 12 align 4
             class Fl_Environment_Choice
           } {}
         }
         {fltk3::Group} {} {
-          callback {Fl_Panel::propagate_load} open
-          xywh {10 140 400 30}
+          callback {if (v == Fl_Panel::LOAD) {
+  for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
+    if (t->selected && (t->is_file() || t->is_folder() || t->is_category())) {
+      o->show();
+      break;
+    }
+  }
+  if (o->visible())
+    Fl_Panel::propagate_load(o, v);
+}} open
+          xywh {10 170 400 30}
         } {
           {fltk3::MenuButton} {} {
-            label {List in:}
+            label {List in }
             callback {if (v == Fl_Panel::LOAD) {
-    o->value(Fl_Panel::current_file()->list_env());
+    o->value(Fl_Panel::current_tool()->list_env());
   } else {
     int mod = 0;
     unsigned int e = o->value();
     for (Fl_Type *t = Fl_Type::first; t; t = t->next) {
-      if (t->selected && t->is_file()) {
-        if (((Fl_File_Type*)t)->list_env() != e) {
-          ((Fl_File_Type*)t)->list_env(e);
+      if (t->selected && t->is_tool()) {
+        if (((Fl_Tool_Type*)t)->list_env() != e) {
+          ((Fl_Tool_Type*)t)->list_env(e);
           mod = 1;
         }
       }
     }
     if (mod) set_modflag(1);
   }} open
-            xywh {110 142 200 25} box FLAT_BOX labelsize 12 align 4
+            xywh {110 172 200 25} box FLAT_BOX labelsize 12 align 4
             class Fl_Environment_Choice
           } {}
         }
       }
     }
+    {fltk3::Group} pCloseGroup {
+      callback {Fl_Panel::propagate_load} open
+      xywh {10 420 400 25} labelsize 11
+    } {
+      {fltk3::Box} {} {
+        xywh {10 420 290 25} labelsize 11 resizable
+      }
+      {fltk3::Button} {} {
+        label Close
+        callback {if (v == Fl_Panel::LOAD) {
+  } else {
+    file_panel_set_cb(0, 0);
+    the_file_panel->hide();
+  }}
+        xywh {300 420 110 25}
+      }
+    }
   }
 } 
 

Modified: branches/branch-3.0/fluid/workspace_panel.h
===================================================================
--- branches/branch-3.0/fluid/workspace_panel.h 2011-08-09 22:16:47 UTC (rev 
8939)
+++ branches/branch-3.0/fluid/workspace_panel.h 2011-08-10 16:45:13 UTC (rev 
8940)
@@ -57,17 +57,14 @@
   void value(unsigned int v);
   unsigned int value();
 };
-#include <fltk3/DoubleWindow.h>
-extern fltk3::DoubleWindow *workspace_panel;
-#include <fltk3/Input.h>
-extern fltk3::Input *wName;
-#include <fltk3/Box.h>
-extern Fl_Environment_Choice *pEnv;
-#include <fltk3/Button.h>
-fltk3::DoubleWindow* show_workspace_panel();
 void file_panel_set_cb(fltk3::Widget*, void *v);
 #include <fltk3/ScrollGroup.h>
+extern fltk3::ScrollGroup *pScrollGroup;
 #include <fltk3/PackedGroup.h>
+#include <fltk3/Input.h>
+extern fltk3::Group *pCloseGroup;
+#include <fltk3/Box.h>
+#include <fltk3/Button.h>
 Fl_Panel* make_file_panel();
 extern fltk3::MenuItem menu_Unknown[];
 extern fltk3::MenuItem menu_Relative[];

Modified: branches/branch-3.0/src/Fl_Pack.cxx
===================================================================
--- branches/branch-3.0/src/Fl_Pack.cxx 2011-08-09 22:16:47 UTC (rev 8939)
+++ branches/branch-3.0/src/Fl_Pack.cxx 2011-08-10 16:45:13 UTC (rev 8940)
@@ -51,6 +51,34 @@
   // type(VERTICAL); // already set like this
 }
 
+// calculate the height and width of this widget.
+// FIXME: do not move any children. "draw()" does that for now.
+void fltk3::PackedGroup::layout() {
+  //int tx = x()+fltk3::box_dx(box());
+  //int ty = y()+fltk3::box_dy(box());
+  int tw = w()-fltk3::box_dw(box());
+  int th = h()-fltk3::box_dh(box());
+  int rw, rh;
+  if (horizontal()) {
+    rw = -spacing_;
+    rh = th;    
+    for (int i = children(); i--;)
+      if (child(i)->visible()) {
+        if (child(i) != this->resizable()) rw += child(i)->w();
+        rw += spacing_;
+      }
+  } else {
+    rw = tw;
+    rh = -spacing_;    
+    for (int i = children(); i--;)
+      if (child(i)->visible()) {
+        if (child(i) != this->resizable()) rh += child(i)->h();
+        rh += spacing_;
+      }
+  }
+  size(rw+fltk3::box_dw(box()), rh+fltk3::box_dh(box()));
+}
+
 void fltk3::PackedGroup::draw() {
   FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
   int tx = x()+fltk3::box_dx(box());

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to