[Fresco-devel] 3 patches

Neil Pilgrim <[email protected]>
Newsgroups gmane.comp.video.fresco.devel
Message-ID <[email protected]>
Hmmm...long night of (not exactly amazing) hacking...Zzzz...

Big_tidy.diff: some (small) tidying, which looks bigger than it is, but
includes a change to ensure that the -R argument to the server accepts
only the valid options.

Big_demo.diff: polishing of the demo (application) appearance (IMHO;)
http://www.kepier.clara.net/fresco/Big_demo.png

Big_choice.diff: refactoring of the ToggleChoice and CheckboxChoice,
including a change to make the 'labels' for the checkboxes also respond
for the purposes of selecting elements.

Please let me know wrt opinions of the patches and application status ;)

-- 
Neil
Big_tidy.diff (text/plain, 22.7 KB)
Index: Berlin/modules/Desktop/DesktopKitImpl.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Berlin/modules/Desktop/DesktopKitImpl.cc,v
retrieving revision 1.46
diff -u -r1.46 DesktopKitImpl.cc
--- Berlin/modules/Desktop/DesktopKitImpl.cc	26 Aug 2002 22:12:01 -0000	1.46
+++ Berlin/modules/Desktop/DesktopKitImpl.cc	31 Aug 2002 07:44:40 -0000
@@ -83,7 +83,7 @@
 
   Graphic::Requisition req;
   // GraphicImpl::init_requisiton(req) not needed as we init
-  // everything manualy!
+  // everything manually!
   req.preserve_aspect = false;
 
   req.x.defined = true;
@@ -106,8 +106,8 @@
 
   raster = _image->create("shade.png");
   Image_var shadergraphic = _figure->pixmap(raster);
-  Command_var shade = shader(wptr, vbox, down);
-  Trigger_var shaderbutton = _widget->button(shadergraphic, shade);
+  Command_var shadecommand = shader(wptr, vbox, down);
+  Trigger_var shaderbutton = _widget->button(shadergraphic, shadecommand);
 
   RefCount_var<Graphic> tbbuttons = _layout->hbox();
   tbbuttons->append_graphic(shaderbutton);
Index: Berlin/modules/Widgets/Motif/WidgetKit.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Berlin/modules/Widgets/Motif/WidgetKit.cc,v
retrieving revision 1.28
diff -u -r1.28 WidgetKit.cc
--- Berlin/modules/Widgets/Motif/WidgetKit.cc	29 May 2002 06:49:40 -0000	1.28
+++ Berlin/modules/Widgets/Motif/WidgetKit.cc	31 Aug 2002 07:44:43 -0000
@@ -106,8 +106,8 @@
 {
   Controller_var toggle = _tools->toggle(Fresco::Graphic::_nil());
   Fresco::ToolKit::FrameSpec s1, s2;
-  s1.brightness(0.5); s1._d(ToolKit::inset);
-  s2.brightness(0.5); s2._d(ToolKit::outset);
+  s1.brightness(0.5); s1._d(Fresco::ToolKit::inset);
+  s2.brightness(0.5); s2._d(Fresco::ToolKit::outset);
   Graphic_var frame = _tools->dynamic(g, 20., Fresco::Controller::toggled, s1, s2, true, toggle);
   toggle->body(frame);
   return toggle._retn();
Index: Berlin/server/server.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Berlin/server/server.cc,v
retrieving revision 1.56
diff -u -r1.56 server.cc
--- Berlin/server/server.cc	6 Aug 2002 22:31:38 -0000	1.56
+++ Berlin/server/server.cc	31 Aug 2002 07:44:48 -0000
@@ -154,7 +154,6 @@
   // ---------------------------------------------------------------
   // Setup signalhandling
   // ---------------------------------------------------------------
-  
   Dump *dump = new Dump;
   Signal::set(Signal::usr2, dump);
   Signal::set(Signal::abort, dump);
@@ -164,12 +163,11 @@
   // ---------------------------------------------------------------
   // Parse commandline arguments
   // ---------------------------------------------------------------
-  
   GetOpt getopt(argv[0], "a fresco display server");
   getopt.add('h', "help", GetOpt::novalue, "help message");
   getopt.add('v', "version", GetOpt::novalue, "version number");
-  getopt.add('R', "export-ref",
-	     GetOpt::mandatory, "means of exporting server reference");
+  getopt.add('R', "export-ref", GetOpt::mandatory, 
+             "means of exporting server reference: ior|corbaloc|nameserver");
   getopt.add('l', "logger", GetOpt::optional, "switch logging on");
   getopt.add('t', "tracer", GetOpt::novalue, "switch tracing on");
   getopt.add('p', "profiler", GetOpt::novalue, "switch profiling on");
@@ -186,8 +184,32 @@
   if (getopt.is_set("version")) { std::cout << "version is " << version
 					    << std::endl; return 0;}
   if (getopt.is_set("help")) { getopt.usage(); return 0;}
-  
+
   std::string value;
+
+  // determine the method of exporting the server reference
+  enum { ior, corbaloc, nameserver } reference_export_method = nameserver;
+  if (getopt.get("export-ref", &value)) 
+  {
+    if("ior"==value)               reference_export_method = ior;
+    else if ("corbaloc"==value)    reference_export_method = corbaloc;
+    else if ("nameserver"==value)  reference_export_method = nameserver;
+    else
+    {
+      std::cout << "option --export-ref/-R requires one of the values: \n"
+                << "\tior        : <insert help here>" 
+                   << (reference_export_method==ior?"(default)":"") << "\n"
+                << "\tcorbaloc   : <insert help here>"
+                   << (reference_export_method==corbaloc?"(default)":"") << "\n"
+                << "\tnameserver : <insert help here>" 
+                   << (reference_export_method==nameserver?"(default)":"")
+                << endl;
+      return 0;
+    }
+  }
+  
+  // determine what should be logged
+  value="";
   if (getopt.get("logger", &value))
   {
       if (!value.empty())
@@ -226,12 +248,12 @@
 				      << std::endl;
       }
   }
-  value = "";
   
-  // Find our resorce file:
+  // Find our resource file:
+  value = "";
   if (getopt.get("resource", &value))
   {
-      // Load resorcefile given on the commandline:
+      // Load resourcefile given on the commandline:
       try
       {
 	  value = Prague::Path::expand_user(value);
@@ -316,13 +338,12 @@
   Logger::log(Logger::loader) << "Commandline arguments are parsed,"
 			      << " configuration is read in." << std::endl;
   
-  // ---------------------------------------------------------------
-  // Setup CORBA
-  // ---------------------------------------------------------------
-
   CORBA::ORB_var orb;
   try
   {
+      // ---------------------------------------------------------------
+      // Setup CORBA
+      // ---------------------------------------------------------------
       orb = CORBA::ORB_init(argc, argv);
       PortableServer::POA_var poa = resolve_init<PortableServer::POA>(orb, "RootPOA");
       PortableServer::POAManager_var pman = poa->the_POAManager();
@@ -338,12 +359,16 @@
 	  policies[0] = poa->create_implicit_activation_policy(PortableServer::IMPLICIT_ACTIVATION);
 	  CORBA::Any value;
 	  value <<= omniPolicy::LOCAL_CALLS_SHORTCUT; 
-	  policies[1] = orb->create_policy(omniPolicy::LOCAL_SHORTCUT_POLICY_TYPE, value);
+	  policies[1] = 
+                  orb->create_policy(omniPolicy::LOCAL_SHORTCUT_POLICY_TYPE, 
+                                     value);
 	  poa = poa->create_POA("shortcut", pman, policies);
 	 
 	  // create a policy list to be used by kit specific POAs
 	  policies.length(1);
-	  policies[0] = orb->create_policy(omniPolicy::LOCAL_SHORTCUT_POLICY_TYPE, value);
+	  policies[0] = 
+                  orb->create_policy(omniPolicy::LOCAL_SHORTCUT_POLICY_TYPE, 
+                                     value);
        }
 #  elif defined(ORB_TAO)
        // fillin TAO-specific initialisation here...
@@ -352,120 +377,122 @@
 	                         << std::endl;
 #endif
       
-       DefaultPOA::default_POA(poa);
-       Logger::log(Logger::corba) << "Default POA set up." << std::endl;
+      DefaultPOA::default_POA(poa);
+      Logger::log(Logger::corba) << "Default POA set up." << std::endl;
        
-       // ---------------------------------------------------------------
-       // Open the Console
-       // ---------------------------------------------------------------
-      
-       value = "";
-       getopt.get("console", &value);
-       try { Console::open(value, argc, argv, poa); }
-       catch (const std::runtime_error &e)
-       {
+      // ---------------------------------------------------------------
+      // Open the Console
+      // ---------------------------------------------------------------
+      value = "";
+      getopt.get("console", &value);
+      try { Console::open(value, argc, argv, poa); }
+      catch (const std::runtime_error &e)
+      {
            std::cerr << "ERROR: Failed to open the Console \"" << value
 		     << "\": " << e.what() << std::endl;
 	   exit(2);
-       }
-       
-       Logger::log(Logger::console) << "Console is initialized." << std::endl;
+      }
        
-       // ---------------------------------------------------------------
-       // Construct Server
-       // ---------------------------------------------------------------
+      Logger::log(Logger::console) << "Console is initialized." << std::endl;
        
-       PortableServer::POA_var insPOA;
-       ServerImpl *server;
-       value = "";
-       getopt.get("export-ref",&value);
-       if (value == "corbaloc")
-       {
-	 insPOA = resolve_init<PortableServer::POA>(orb,"omniINSPOA");
-	 PortableServer::POAManager_var poam = insPOA->the_POAManager();
-	 poam->activate();
+      // ---------------------------------------------------------------
+      // Construct Server
+      // ---------------------------------------------------------------
+      PortableServer::POA_var insPOA;
+      ServerImpl *server;
+      switch(reference_export_method)
+      {
+         case corbaloc:
+           {
+	   insPOA = resolve_init<PortableServer::POA>(orb,"omniINSPOA");
+	   PortableServer::POAManager_var poam = insPOA->the_POAManager();
+	   poam->activate();
 	 
-	 server = ServerImpl::create(insPOA, policies);
-	 Logger::log(Logger::loader) << "corbaloc setup." << std::endl;
-       }
-       else
-       {
-	 server = ServerImpl::create(poa, policies);      
-	 Logger::log(Logger::loader) << "no corbaloc. Setup skipped."
-				     << std::endl;
-       }
+	   server = ServerImpl::create(insPOA, policies);
+	   Logger::log(Logger::loader) << "corbaloc setup." << std::endl;
+           }
+           break;
+         case ior:
+         case nameserver:
+           {
+           server = ServerImpl::create(poa, policies);      
+	   Logger::log(Logger::loader) << "no corbaloc. Setup skipped."
+				       << std::endl;
+           }
+           break;
+      }
 
-       Prague::Path path = RCManager::get_path("modulepath");
-       for (Prague::Path::iterator i = path.begin(); i != path.end(); ++i)
+      Prague::Path path = RCManager::get_path("modulepath");
+      for (Prague::Path::iterator i = path.begin(); i != path.end(); ++i)
 	   server->scan(*i);
-       Logger::log(Logger::loader) << "Kits are loaded." << std::endl;
+      Logger::log(Logger::loader) << "Kits are loaded." << std::endl;
        
-       // ---------------------------------------------------------------
-       // Setup default DrawingKit
-       // ---------------------------------------------------------------
-       
-       Kit::PropertySeq props;
-       props.length(1);
-       props[0].name = CORBA::string_dup("implementation");
-       value = "";
-       getopt.get("drawing", &value);
-       if (!value.empty()) props[0].value = CORBA::string_dup(value.c_str());
-       else props[0].value = CORBA::string_dup("LibArtDrawingKit");
-       DrawingKit_var drawing =
+      // ---------------------------------------------------------------
+      // Setup default DrawingKit
+      // ---------------------------------------------------------------
+      Kit::PropertySeq props;
+      props.length(1);
+      props[0].name = CORBA::string_dup("implementation");
+      value = "";
+      getopt.get("drawing", &value);
+      if (!value.empty()) props[0].value = CORBA::string_dup(value.c_str());
+      else props[0].value = CORBA::string_dup("LibArtDrawingKit");
+      DrawingKit_var drawing =
 	   server->resolve<DrawingKit>("IDL:fresco.org/Fresco/DrawingKit:1.0",
 			               props,
 				       poa);
 
-       if (CORBA::is_nil(drawing))
-       {
+      if (CORBA::is_nil(drawing))
+      {
 	   std::cerr << "ERROR: Unable to open "
 		     << "IDL:fresco.org/Fresco/DrawingKit:1.0"
 		     << " with attribute "
 		     << props[0].name << '=' << props[0].value << std::endl;
 	   exit(3);
-       }
+      }
        
-       Logger::log(Logger::drawing) << "Drawing system is set up." << std::endl;
+      Logger::log(Logger::drawing) << "Drawing system is set up." << std::endl;
       
-       // ---------------------------------------------------------------
-       // make a Screen graphic to hold this server's scene graph
-       // ---------------------------------------------------------------
-       
-       ScreenImpl *screen = new ScreenImpl();
-       EventManager *emanager = new EventManager(Controller_var(screen->_this()), screen->allocation());
-       ScreenManager *smanager = new ScreenManager(Graphic_var(screen->_this()), emanager, drawing);
-       screen->bind_managers(emanager, smanager);
+      // ---------------------------------------------------------------
+      // make a Screen graphic to hold this server's scene graph
+      // and set up associated event- and screen-managers
+      // ---------------------------------------------------------------
+      ScreenImpl *screen = new ScreenImpl();
+      EventManager *emanager = 
+             new EventManager(Controller_var(screen->_this()), 
+                              screen->allocation());
+      ScreenManager *smanager = 
+             new ScreenManager(Graphic_var(screen->_this()), emanager, drawing);
+      screen->bind_managers(emanager, smanager);
 
-       Logger::log(Logger::loader) << "Screen is set up and managers are "
+      Logger::log(Logger::loader) << "Screen is set up and managers are "
 	                           << "bound to it." << std::endl;
 
-       props.length(0);
-       LayoutKit_var layout = server->resolve<LayoutKit>("IDL:fresco.org/Fresco/LayoutKit:1.0", props, poa);
-       Layout::Stage_var stage = layout->create_stage();
-       DesktopImpl *desktop = new DesktopImpl(orb, stage);
-       screen->body(Desktop_var(desktop->_this()));
-       screen->append_controller(Desktop_var(desktop->_this()));
-       
-       Logger::log(Logger::layout) << "Desktop is created." << std::endl;
-       
-       // initialize the client listener
-       server->set_singleton("IDL:fresco.org/Fresco/Desktop:1.0", Desktop_var(desktop->_this()));
-       server->set_singleton("IDL:fresco.org/Fresco/DrawingKit:1.0", drawing);
-       server->start();
-      
-       Logger::log(Logger::loader) << "Server started, registering with "
+      props.length(0);
+      LayoutKit_var layout = 
+              server->resolve<LayoutKit>("IDL:fresco.org/Fresco/LayoutKit:1.0", 
+                                         props, poa);
+      Layout::Stage_var stage = layout->create_stage();
+      DesktopImpl *desktop = new DesktopImpl(orb, stage);
+      screen->body(Desktop_var(desktop->_this()));
+      screen->append_controller(Desktop_var(desktop->_this()));
+       
+      Logger::log(Logger::layout) << "Desktop is created." << std::endl;
+       
+      server->set_singleton("IDL:fresco.org/Fresco/Desktop:1.0", 
+                            Desktop_var(desktop->_this()));
+      server->set_singleton("IDL:fresco.org/Fresco/DrawingKit:1.0", drawing);
+
+      // ---------------------------------------------------------------
+      // initialize the client listener and register server with CORBA
+      // ---------------------------------------------------------------
+      server->start();
+      Logger::log(Logger::loader) << "Server started, registering with "
 				   << "CORBA now." << std::endl;
-       value = "";
-       getopt.get("export-ref",&value);
-       if (value == "ior")
-       {
-	   Server_var serverRef = server->_this();
-	   std::cout << "Export Reference: FrescoServer=" 
-		     << orb->object_to_string(serverRef) << std::endl;
-	   Logger::log(Logger::corba) << "IOR exported." << std::endl;
-       }
-       else if (value == "corbaloc")
-       {
+      switch(reference_export_method)
+      {
+         case corbaloc:
+           {
 	   PortableServer::ObjectId_var oid =
 	       PortableServer::string_to_ObjectId("FrescoServer");
 	   insPOA->activate_object_with_id(oid,server);
@@ -474,9 +501,16 @@
 	   std::cout << "Export Reference: FrescoServer="
 		     << "corbaloc::localhost/FrescoServer" << std::endl;
 	   Logger::log(Logger::corba) << "Corbaloc exported." << std::endl;
-       }
-       else if (value == "nameserver" || value.empty())
-       {
+           } break;
+         case ior:
+           {
+	   Server_var serverRef = server->_this();
+	   std::cout << "Export Reference: FrescoServer=" 
+		     << orb->object_to_string(serverRef) << std::endl;
+	   Logger::log(Logger::corba) << "IOR exported." << std::endl;
+           } break;
+         case nameserver:
+           {
 	   try
 	   {
 	       bind_name(orb,
@@ -498,22 +532,28 @@
 	       std::cerr << "Unknown exception finding Fresco" << std::endl;
 	       exit(5);
 	   }
-       }
-       
-       Logger::log(Logger::corba) << "Server is registered with CORBA." << std::endl;
+           } break;
+      }
+      Logger::log(Logger::corba) << "Server is registered with CORBA." 
+                                  << std::endl;
        
-       // Start client via --execute argument 
-       value = "";
-       getopt.get("execute", &value);
-       if (!value.empty())
-       {
+      // ---------------------------------------------------------------
+      // Start client via --execute argument 
+      // ---------------------------------------------------------------
+      value = "";
+      getopt.get("execute", &value);
+      if (!value.empty())
+      {
 	   exec_child(child, value);
-       }
+      }
 
-       Logger::log(Logger::loader) << "Running the ScreenManager now."
+      // ---------------------------------------------------------------
+      // Run screen manager
+      // ---------------------------------------------------------------
+      Logger::log(Logger::loader) << "Running the ScreenManager now."
 	                           << std::endl;
-       smanager->run();
-    }
+      smanager->run();
+  }
   catch (const CORBA::SystemException &e)
   {
       std::cerr << "ERROR: Unexpected CORBA::System exception caught: "
@@ -546,4 +586,3 @@
   if (!CORBA::is_nil(orb)) orb->destroy();
   return 0;
 }
-
Index: Fresco/idl/Fresco/ToolKit.idl
===================================================================
RCS file: /cvs/fresco/Fresco/Fresco/idl/Fresco/ToolKit.idl,v
retrieving revision 1.16
diff -u -r1.16 ToolKit.idl
--- Fresco/idl/Fresco/ToolKit.idl	29 May 2002 06:57:01 -0000	1.16
+++ Fresco/idl/Fresco/ToolKit.idl	31 Aug 2002 07:44:57 -0000
@@ -92,7 +92,7 @@
       //. The frame will have the given thickness and FrameSpec and will be
       //. filled with the current default color if 'filled' is set to true.
       Graphic      frame(in Graphic g, in Coord thickness, in FrameSpec spec, in boolean fill);
-      //. Same as frame(), but switches between drawinf one of the two
+      //. Same as frame(), but switches between drawing one of the two
       //. given FrameSpecs according to the value of the flag
       //. given by mask and Telltale.
       //. s1 will be drawn whenever the examined flag is set, s2 will be
Index: Prague/include/Prague/Sys/GetOpt.hh
===================================================================
RCS file: /cvs/fresco/Fresco/Prague/include/Prague/Sys/GetOpt.hh,v
retrieving revision 1.9
diff -u -r1.9 GetOpt.hh
--- Prague/include/Prague/Sys/GetOpt.hh	18 Jul 2001 04:27:32 -0000	1.9
+++ Prague/include/Prague/Sys/GetOpt.hh	31 Aug 2002 07:45:06 -0000
@@ -31,15 +31,19 @@
 namespace Prague
 {
 
-//. GetOpt manages a command line option data base. It deals with short and long options,
-//. and reorders the given option vector such that you can run different GetOpt instances over
-//. the argv vector one after another.
+//. GetOpt manages a command line option data base. It deals with short and
+//. long options, and reorders the given option vector such that you can run
+//. different GetOpt instances over the argv vector one after another.
 class GetOpt
 {
-public:
+  public:
   //. the option type, i.e. whether an argument is required or not.
-  enum type { novalue, optional, mandatory};
-  enum order { inorder, require, permute};
+  enum type
+  { 
+    novalue,  // option has no value
+    optional, // option may take a value
+    mandatory // option must take a value
+  };
 
   class NoSuchOption : std::exception
   {
@@ -48,44 +52,47 @@
     virtual ~NoSuchOption() throw() {}
     virtual const char* what() const throw() { return "no such option";}
   };
-private:
-  struct cell
-  {
-    cell(char oo, const std::string &opt, type tt, const std::string &des)
-      : set(false), o(oo), option(opt), t(tt), description(des) {}
-    bool        set;
-    char        o;            // option char
-    std::string option;       // option name
-    type        t;	      // option type
-    std::string description;  // a description of option
-    std::string value;	      // value of option (string)    
-  };
-  typedef std::vector<cell> table_t;	      // option table
-public:
+
   GetOpt(const char *, const char * = 0);
   ~GetOpt();
-  //. print out usage information. This function uses help data provided with each
-  //. registered option, i.e. it is suitable to be used as a help message.
+  //. print out usage information. This function uses help data provided with
+  //. each registered option, i.e. it is suitable to be used as a help message.
   void usage() const;
   //. parse the given argv
   int parse(int argc, char **argv);
   //. parse the given args
   int parse(char *args);
   //. register an option
-  void add(char o, const std::string &option, type, const std::string & = "no description available");
+  void add(char o, const std::string &option, type, 
+           const std::string & = "no description available");
   //. return whether the option was issued
   bool is_set(char o) const throw (NoSuchOption);
   //. return whether the option was issued
   bool is_set(const std::string &option) const throw (NoSuchOption);
-  //. return whether the option was issued and return a value (if any) in out parameter
+  //. return whether the option was issued and return a value (if any) in out
+  //. parameter
   bool get(char o, std::string *) const throw (NoSuchOption);
-  //. return whether the option was issued and return a value (if any) in out parameter
+  //. return whether the option was issued and return a value (if any) in out
+  //. parameter
   bool get(const std::string &option, std::string *) const throw (NoSuchOption);
-private:
+
+  private:
+  struct cell
+  {
+    cell(char oo, const std::string &opt, type tt, const std::string &des)
+      : set(false), o(oo), option(opt), t(tt), description(des) {}
+    bool        set;
+    char        o;            // option char
+    std::string option;       // option name
+    type        t;	      // option type
+    std::string description;  // a description of option
+    std::string value;	      // value of option (string)    
+  };
+  typedef std::vector<cell> table_t;	      // option table
+
   table_t table;
   const char *p;	      // program basename
   const char *u;	      // usage message
-  order ordering;
   //. try to extract a long option, return number of tokens consumed
   size_t getlongopt(int argc, char **argv);
   //. try to extract a short option, return number of tokens consumed
@@ -116,6 +123,9 @@
     bool operator () (const cell &c) { return name == c.o;}
     char name;
   };
+
+//  enum order { inorder, require, permute}; XXX Not referenced
+//  order ordering; XXX Not referenced
 };
 
 };
Big_demo.diff (text/plain, 10.2 KB)
Index: Clients-C++/src/Application.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/Application.cc,v
retrieving revision 1.29
diff -u -r1.29 Application.cc
--- Clients-C++/src/Application.cc	7 Aug 2002 15:52:29 -0000	1.29
+++ Clients-C++/src/Application.cc	31 Aug 2002 07:44:49 -0000
@@ -85,8 +85,18 @@
   Raster_var raster = _ik->create("fresco.png");
   Image_var  image = _fk->pixmap(raster);
   Graphic_var hbox = _lk->hbox();
-  hbox->append_graphic(image);
+  Graphic_var vbox = _lk->vbox();
+  Graphic_var use1 = _tk->chunk(Unicode::to_CORBA(Babylon::String("Select a")));
+  Graphic_var use2 = _tk->chunk(Unicode::to_CORBA(Babylon::String("demo:")));
+  vbox->append_graphic(Graphic_var(_lk->vfill()));
+  vbox->append_graphic(use1);
+  vbox->append_graphic(use2);
+  vbox->append_graphic(Graphic_var(_lk->vfill()));
+  Graphic_var black_usage = _ttk->rgb(vbox, 0., 0., 0.);
+  hbox->append_graphic(Graphic_var(_lk->hfill()));
+  hbox->append_graphic(black_usage);
   hbox->append_graphic(Graphic_var(_lk->hfill()));
+  hbox->append_graphic(image);
   _vbox->append_graphic(hbox);
 
   Graphic_var glyph = _tk->chunk(Unicode::to_CORBA(Babylon::String("close")));
@@ -140,28 +150,35 @@
 
 void Application::run()
 {
-
   _vbox->append_graphic(Graphic_var(_lk->vspace(200.)));
   ToolKit::FrameSpec spec;
   spec.brightness(0.5); spec._d(ToolKit::concav);
   _vbox->append_graphic(Graphic_var(_ttk->frame(_choice, 20., spec, false)));
   _vbox->append_graphic(Graphic_var(_lk->vspace(200.)));
+
+  // run button
   Graphic_var glyph1 = _tk->chunk(Unicode::to_CORBA(Babylon::String("run")));
   Graphic_var label1 = _lk->margin(glyph1, 20.);
-  Trigger_var run = _wk->button(Graphic_var(_ttk->rgb(label1, 0., 0., 0.)), Command_var(_mapper->_this()));
+  Graphic_var label1f = _lk->hmargin_lr_flexible(label1,
+                                                0,100000,0,
+                                                0,100000,0);
+  Trigger_var run = _wk->button(Graphic_var(_ttk->rgb(label1f, 0., 0., 0.)), 
+                                Command_var(_mapper->_this()));
+
+  // quit button
   Graphic_var glyph2 = _tk->chunk(Unicode::to_CORBA(Babylon::String("quit")));
   Graphic_var label2 = _lk->margin(glyph2, 20.);
   ExitCommand *cmd = new ExitCommand();
-  Trigger_var quit = _wk->button(Graphic_var(_ttk->rgb(label2, 0., 0., 0.)), Command_var(cmd->_this()));
-
-  _vbox->append_graphic(Graphic_var(_lk->vspace(200.)));
+  Graphic_var label2f = _lk->hmargin_lr_flexible(label2,
+                                                0,100000,0,
+                                                0,100000,0);
+  Trigger_var quit = _wk->button(Graphic_var(_ttk->rgb(label2f, 0., 0., 0.)), 
+                                 Command_var(cmd->_this()));
 
   Graphic_var hbox = _lk->hbox();
-  hbox->append_graphic(Graphic_var(_lk->hglue(200., 0., 10000.)));
   hbox->append_graphic(run);
   hbox->append_graphic(Graphic_var(_lk->hspace(200.)));
   hbox->append_graphic(quit);
-  hbox->append_graphic(Graphic_var(_lk->hglue(200., 0., 10000.)));
   _vbox->append_graphic(hbox);
   Graphic_var margin = _lk->margin(_vbox, 200.);
   
Index: Clients-C++/src/ColorDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/ColorDemo.cc,v
retrieving revision 1.9
diff -u -r1.9 ColorDemo.cc
--- Clients-C++/src/ColorDemo.cc	7 Aug 2002 15:52:29 -0000	1.9
+++ Clients-C++/src/ColorDemo.cc	31 Aug 2002 07:44:50 -0000
@@ -107,7 +107,7 @@
   vbox->append_graphic(hbox28);
   hbox->append_graphic(vbox);
   Controller_var root = tools->group(Graphic_var(layout->margin(hbox, 100.)));
-  application->append(root, Babylon::String("Color demo"));
+  application->append(root, Babylon::String("Color"));
 }
 
 void ColorDemo::adjust(Tag tag)
Index: Clients-C++/src/DocDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/DocDemo.cc,v
retrieving revision 1.7
diff -u -r1.7 DocDemo.cc
--- Clients-C++/src/DocDemo.cc	7 Aug 2002 15:52:29 -0000	1.7
+++ Clients-C++/src/DocDemo.cc	31 Aug 2002 07:44:51 -0000
@@ -49,5 +49,5 @@
   Controller_var page = widgets->scrollable(Graphic_var(tools->rgb(column, 0., 0., .0)));
   Controller_var root = tools->group(Graphic_var(layout->fixed_size(page, 3000., 2000.)));
   root->append_controller(page);
-  application->append(root, Babylon::String("multiline text demo"));
+  application->append(root, Babylon::String("multiline text"));
 };
Index: Clients-C++/src/EditTextDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/EditTextDemo.cc,v
retrieving revision 1.12
diff -u -r1.12 EditTextDemo.cc
--- Clients-C++/src/EditTextDemo.cc	7 Aug 2002 15:52:29 -0000	1.12
+++ Clients-C++/src/EditTextDemo.cc	31 Aug 2002 07:44:51 -0000
@@ -53,5 +53,5 @@
   spec.brightness(0.5); spec._d(ToolKit::inset);
   Graphic_var frame = tools->frame(Graphic_var(layout->margin(Graphic_var(layout->hfixed(Graphic_var(tools->rgb(txt, 0., 0., 0.)), 4000)), 50.)), 20., spec, true);
   buf->insert_string(Unicode::to_CORBA(str));
-  application->append(Controller_var(tools->text_input(frame, vis_buf)), Babylon::String("editable text demo"));
+  application->append(Controller_var(tools->text_input(frame, vis_buf)), Babylon::String("editable text"));
 };
Index: Clients-C++/src/FocusDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/FocusDemo.cc,v
retrieving revision 1.17
diff -u -r1.17 FocusDemo.cc
--- Clients-C++/src/FocusDemo.cc	7 Aug 2002 15:52:29 -0000	1.17
+++ Clients-C++/src/FocusDemo.cc	31 Aug 2002 07:44:52 -0000
@@ -104,5 +104,5 @@
   gr->append_controller(c2);
   gr->append_controller(c3);
   gr->append_controller(c4);
-  application->append(gr, Babylon::String("focus demo"));
+  application->append(gr, Babylon::String("focus"));
 };
Index: Clients-C++/src/LayoutDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/LayoutDemo.cc,v
retrieving revision 1.11
diff -u -r1.11 LayoutDemo.cc
--- Clients-C++/src/LayoutDemo.cc	7 Aug 2002 15:52:29 -0000	1.11
+++ Clients-C++/src/LayoutDemo.cc	31 Aug 2002 07:44:52 -0000
@@ -56,5 +56,5 @@
   group->append_controller(button1);
   group->append_controller(button2);
   group->append_controller(button3);
-  application->append(group, Babylon::String("layout demo"));
+  application->append(group, Babylon::String("layout"));
 };
Index: Clients-C++/src/LogoDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/LogoDemo.cc,v
retrieving revision 1.20
diff -u -r1.20 LogoDemo.cc
--- Clients-C++/src/LogoDemo.cc	7 Aug 2002 15:52:29 -0000	1.20
+++ Clients-C++/src/LogoDemo.cc	31 Aug 2002 07:44:53 -0000
@@ -131,7 +131,7 @@
   spec.brightness(0.5); spec._d(ToolKit::inset);
   Graphic_var foo = tools->frame(box, 10., spec, true);
   Controller_var bar = tools->group(foo);
-  application->append(bar, Babylon::String("MVC demo"));
+  application->append(bar, Babylon::String("MVC"));
 }
 
 Graphic_ptr LogoDemo::make_controller(BoundedValue_ptr value, const Color &color)
Index: Clients-C++/src/RasterDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/RasterDemo.cc,v
retrieving revision 1.8
diff -u -r1.8 RasterDemo.cc
--- Clients-C++/src/RasterDemo.cc	7 Aug 2002 15:52:30 -0000	1.8
+++ Clients-C++/src/RasterDemo.cc	31 Aug 2002 07:44:53 -0000
@@ -48,5 +48,5 @@
   hbox->append_graphic(Graphic_var(widgets->button(im, command3)));
   Controller_var group = tools->group(hbox);
 
-  application->append(group, Babylon::String("raster demo"));
+  application->append(group, Babylon::String("raster"));
 };
Index: Clients-C++/src/TermDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/TermDemo.cc,v
retrieving revision 1.6
diff -u -r1.6 TermDemo.cc
--- Clients-C++/src/TermDemo.cc	7 Aug 2002 15:52:30 -0000	1.6
+++ Clients-C++/src/TermDemo.cc	31 Aug 2002 07:44:54 -0000
@@ -40,5 +40,5 @@
   scrollable->append_controller(terminal);
   Controller_var group = tools->group(Graphic_var(layout->fixed_size(scrollable, 4000., 3000.)));
   group->append_controller(scrollable);
-  application->append(group, Babylon::String("terminal demo"));
+  application->append(group, Babylon::String("terminal"));
 };
Index: Clients-C++/src/TextDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/TextDemo.cc,v
retrieving revision 1.7
diff -u -r1.7 TextDemo.cc
--- Clients-C++/src/TextDemo.cc	7 Aug 2002 15:52:30 -0000	1.7
+++ Clients-C++/src/TextDemo.cc	31 Aug 2002 07:44:54 -0000
@@ -42,5 +42,5 @@
   Babylon::String str(34, chars);
   Graphic_var txt = text->chunk(Unicode::to_CORBA(str));
   Controller_var group = tools->group(Graphic_var(tools->rgb(txt, 0.7, 0.8, 1.0)));
-  application->append(group, Babylon::String("text demo"));
+  application->append(group, Babylon::String("text"));
 };
Index: Clients-C++/src/TransformDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/TransformDemo.cc,v
retrieving revision 1.9
diff -u -r1.9 TransformDemo.cc
--- Clients-C++/src/TransformDemo.cc	7 Aug 2002 15:52:30 -0000	1.9
+++ Clients-C++/src/TransformDemo.cc	31 Aug 2002 07:44:54 -0000
@@ -51,5 +51,5 @@
   Transform_var(transformer->transformation())->rotate(45., zaxis);
   Graphic_var root = layout->halign(transformer, 0.);
   Controller_var group = tools->group(root);
-  application->append(group, Babylon::String("transformation demo"));
+  application->append(group, Babylon::String("transformation"));
 };
Index: Clients-C++/src/ViewportDemo.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Clients-C++/src/ViewportDemo.cc,v
retrieving revision 1.10
diff -u -r1.10 ViewportDemo.cc
--- Clients-C++/src/ViewportDemo.cc	7 Aug 2002 15:52:30 -0000	1.10
+++ Clients-C++/src/ViewportDemo.cc	31 Aug 2002 07:44:55 -0000
@@ -63,5 +63,5 @@
   group->append_controller(xscroller);
   group->append_controller(yscroller);
 
-  application->append(group, Babylon::String("viewport demo"));
+  application->append(group, Babylon::String("viewport"));
 }
Big_choice.diff (text/plain, 9.2 KB)
Index: Berlin/modules/Widgets/Motif/Choice.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Berlin/modules/Widgets/Motif/Choice.cc,v
retrieving revision 1.17
diff -u -r1.17 Choice.cc
--- Berlin/modules/Widgets/Motif/Choice.cc	29 May 2002 06:49:40 -0000	1.17
+++ Berlin/modules/Widgets/Motif/Choice.cc	31 Aug 2002 07:44:41 -0000
@@ -56,41 +56,53 @@
   : ::Motif::Choice(s, l, t, w)
 {}
 
-Tag ToggleChoice::append_item(Graphic_ptr g)
+RefCount_var<Fresco::Graphic> ToggleChoice::create_item(Graphic_ptr g, Tag& t)
 {
-  Trace trace("ToggleChoice::append_item");
-  RefCount_var<Fresco::Controller> toggle =
-    widgets->toggle(RefCount_var<Fresco::Graphic>(layout->fixed_size(Fresco::Graphic::_nil(), 60., 60.)));
-  Tag tag = selection->add(toggle);
-  append_controller(toggle);
-  RefCount_var<Fresco::Graphic> item = layout->hbox();
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(RefCount_var<Fresco::Graphic>(layout->margin(toggle, 50.)), 0.5)));
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->hspace(200.)));
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(g, 0.5)));
-  Graphic_var box = body();
+  Trace trace("ToggleChoice::create_item");
+
+  // Define initial hbox, which is nested inside a toggle-box (no bevel!)
+  RefCount_var<Fresco::Graphic> box = layout->hbox();
+  RefCount_var<Fresco::Controller> toggle_box = tools->toggle(box);
+  t = selection->add(toggle_box);
+  append_controller(toggle_box);
+
+  // 'toggle': simply a graphic with bevel dependent upon toggle_box
+  RefCount_var<Fresco::Graphic> toggle =
+          layout->fixed_size(Fresco::Graphic::_nil(), 60., 60.);
+  Fresco::ToolKit::FrameSpec s1, s2;
+  s1.brightness(0.5); s1._d(Fresco::ToolKit::inset);
+  s2.brightness(0.5); s2._d(Fresco::ToolKit::outset);
+  Graphic_var frame = tools->dynamic(toggle, 20., Fresco::Controller::toggled, 
+                                     s1, s2, true, toggle_box);
+
+  // now add the toggle button into the button box, along with g
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(RefCount_var<Fresco::Graphic>(layout->margin(frame, 50.)), 0.5)));
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->hspace(100.)));
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(g, 0.5)));
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->hspace(50.)));
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->hfill()));
+
+  // Add the 'active item' border
   Fresco::ToolKit::FrameSpec none, colored;
   Color black = {0., 0., 0., 1.};
   colored.foreground(black);
-  box->append_graphic(RefCount_var<Fresco::Graphic>(tools->dynamic(item, 20., Fresco::Controller::active, colored, none, false, toggle)));
+  return RefCount_var<Fresco::Graphic>(tools->dynamic(toggle_box, 20., 
+                 Fresco::Controller::active, colored, none, false, toggle_box));
+}
+
+Tag ToggleChoice::append_item(Graphic_ptr g)
+{
+  Trace trace("ToggleChoice::append_item");
+  Tag tag;
+  body()->append_graphic(create_item(g,tag));
   return tag;
 }
 
 Tag ToggleChoice::prepend_item(Graphic_ptr g)
 {
   Trace trace("ToggleChoice::prepend_item");
-  RefCount_var<Fresco::Controller> toggle =
-    widgets->toggle(RefCount_var<Fresco::Graphic>(layout->fixed_size(Fresco::Graphic::_nil(), 60., 60.)));
-  Tag tag = selection->add(toggle);
-  append_controller(toggle);
-  RefCount_var<Fresco::Graphic> item = layout->hbox();
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(RefCount_var<Fresco::Graphic>(layout->margin(toggle, 50.)), 0.5)));
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->hspace(200.)));
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(g, 0.5)));
-  Graphic_var box = body();
-  Fresco::ToolKit::FrameSpec none, colored;
-  Color black = {0., 0., 0., 1.};
-  colored.foreground(black);
-  box->prepend_graphic(RefCount_var<Fresco::Graphic>(tools->dynamic(item, 20., Fresco::Controller::active, colored, none, false, toggle)));
+  Tag tag;
+  body()->prepend_graphic(create_item(g,tag));
   return tag;
 }
 
@@ -106,57 +118,53 @@
   : ::Motif::Choice(s, l, t, w)
 {}
 
-Tag CheckboxChoice::append_item(Graphic_ptr g)
+RefCount_var<Fresco::Graphic> CheckboxChoice::create_item(Graphic_ptr g, Tag& t)
 {
-  Trace trace("CheckboxChoice::append_item");
-  RefCount_var<Fresco::Controller> toggle = tools->toggle(Fresco::Graphic::_nil());
-  Tag tag = selection->add(toggle);
-  append_controller(toggle);
+  Trace trace("CheckboxChoice::create_item");
 
+  // Define initial hbox, which is nested inside a toggle-box (no bevel!)
+  RefCount_var<Fresco::Graphic> box = layout->hbox();
+  RefCount_var<Fresco::Controller> toggle_box = tools->toggle(box);
+  t = selection->add(toggle_box);
+  append_controller(toggle_box);
+
+  // 'toggle': simply a graphic with bevel dependent upon toggle_box state
+  RefCount_var<Fresco::Graphic> toggle =
+          layout->fixed_size(Fresco::Graphic::_nil(), 60., 60.);
   Fresco::ToolKit::FrameSpec s1, s2;
-  s1.brightness(0.5); s1._d(ToolKit::outset);
-  s2.brightness(0.5); s2._d(ToolKit::inset);
+  s1.brightness(0.5); s1._d(Fresco::ToolKit::outset);
+  s2.brightness(0.5); s2._d(Fresco::ToolKit::inset);
   RefCount_var<Fresco::Graphic> frame =
-    tools->dynamic_diamond(RefCount_var<Fresco::Graphic>(layout->fixed_size(Fresco::Graphic::_nil(), 60., 60.)),
-			   20., Fresco::Controller::toggled, s1, s2, true, toggle);
-  toggle->body(frame);
-
-  RefCount_var<Fresco::Graphic> item = layout->hbox();
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(RefCount_var<Fresco::Graphic>(layout->margin(toggle, 50.)), 0.5)));
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->hspace(200.)));
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(g, 0.5)));
-  Graphic_var box = body();
+    tools->dynamic_diamond(toggle, 20., Fresco::Controller::toggled, 
+                           s1, s2, true, toggle_box);
+  
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(RefCount_var<Fresco::Graphic>(layout->margin(frame, 50.)), 0.5)));
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->hspace(100.)));
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(g, 0.5)));
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->hspace(50.)));
+  box->append_graphic(RefCount_var<Fresco::Graphic>(layout->hfill()));
+
+  // Add the 'active item' border
   Fresco::ToolKit::FrameSpec none, colored;
   Color black = {0., 0., 0., 1.};
   colored.foreground(black);
-  box->append_graphic(RefCount_var<Fresco::Graphic>(tools->dynamic(item, 20., Fresco::Controller::active, colored, none, false, toggle)));
+  return RefCount_var<Fresco::Graphic>(tools->dynamic(toggle_box, 20., 
+                Fresco::Controller::active, colored, none, false, toggle_box));
+}
+
+Tag CheckboxChoice::append_item(Graphic_ptr g)
+{
+  Trace trace("CheckboxChoice::append_item");
+  Tag tag;
+  body()->append_graphic(create_item(g,tag));
   return tag;
 }
 
 Tag CheckboxChoice::prepend_item(Graphic_ptr g)
 {
   Trace trace("CheckboxChoice::prepend_item");
-  RefCount_var<Fresco::Controller> toggle = tools->toggle(Fresco::Graphic::_nil());
-  Tag tag = selection->add(toggle);
-  append_controller(toggle);
-
-  ToolKit::FrameSpec s1, s2;
-  s1.brightness(0.5); s1._d(ToolKit::outset);
-  s2.brightness(0.5); s2._d(ToolKit::inset);
-  RefCount_var<Fresco::Graphic> frame =
-    tools->dynamic_diamond(RefCount_var<Fresco::Graphic>(layout->fixed_size(Fresco::Graphic::_nil(), 60., 60.)),
-			   20., Fresco::Controller::toggled, s1, s2, true, toggle);
-  toggle->body(frame);
-  
-  RefCount_var<Fresco::Graphic> item = layout->hbox();
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(RefCount_var<Fresco::Graphic>(layout->margin(toggle, 50.)), 0.5)));
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->hspace(200.)));
-  item->append_graphic(RefCount_var<Fresco::Graphic>(layout->valign(g, 0.5)));
-  Graphic_var box = body();
-  Fresco::ToolKit::FrameSpec none, colored;
-  Color black = {0., 0., 0., 1.};
-  colored.foreground(black);
-  box->prepend_graphic(RefCount_var<Fresco::Graphic>(tools->dynamic(item, 20., Fresco::Controller::active, colored, none, false, toggle)));
+  Tag tag;
+  body()->prepend_graphic(create_item(g,tag));
   return tag;
 }
 
Index: Berlin/modules/Widgets/Motif/Choice.hh
===================================================================
RCS file: /cvs/fresco/Fresco/Berlin/modules/Widgets/Motif/Choice.hh,v
retrieving revision 1.9
diff -u -r1.9 Choice.hh
--- Berlin/modules/Widgets/Motif/Choice.hh	29 May 2002 06:49:40 -0000	1.9
+++ Berlin/modules/Widgets/Motif/Choice.hh	31 Aug 2002 07:44:42 -0000
@@ -60,6 +60,8 @@
   virtual Fresco::Tag append_item(Fresco::Graphic_ptr);
   virtual Fresco::Tag prepend_item(Fresco::Graphic_ptr);
   void remove_item(Fresco::Tag);
+ private:
+  RefCount_var<Fresco::Graphic> create_item(Fresco::Graphic_ptr, Fresco::Tag &);
 };
 
 class CheckboxChoice : public Choice
@@ -69,6 +71,8 @@
   virtual Fresco::Tag append_item(Fresco::Graphic_ptr);
   virtual Fresco::Tag prepend_item(Fresco::Graphic_ptr);
   void remove_item(Fresco::Tag);
+ private:
+  RefCount_var<Fresco::Graphic> create_item(Fresco::Graphic_ptr, Fresco::Tag &);
 };
 
 class ToolChoice : public Choice
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.