[fusion-trac] #117: Widget Architecture change

Fusion trac_fusion at osgeo.org
Thu Sep 4 10:42:29 EDT 2008


#117: Widget Architecture change
------------------------+---------------------------------------------------
   Reporter:  pagameba  |       Owner:  madair
       Type:  task      |      Status:  new   
   Priority:  P1        |   Milestone:  1.2   
  Component:  Widgets   |     Version:  1.0.6 
   Severity:  Blocker   |    Keywords:        
External_id:            |       State:  New   
    Browser:  All       |          Os:  All   
------------------------+---------------------------------------------------
 The current architecture of how widgets are represented, activated and
 deactivated is convoluted, difficult to work with, and inefficient in some
 cases.

 In the current code, widgets can be either exclusive on the map (put the
 map into some *mode*) or not.  Widgets that are exclusive are registered
 as such with the map object and the map handles deactivating the current
 widget when a new widget is activated (that is exclusive).

 The Zoom widget is a sub-class of Fusion.Tool.ButtonBase which allows the
 widget to represent itself as a button.  This is fine for the normal case
 of putting the widget in a toolbar.  However, the widget can also appear
 in a menu (think context menu on the map).  In the menu case, we end up
 creating a Zoom widget that has a button object that is never used and
 manually create a MenuItem for the widget that bypasses the button.  The
 coding for this is tricky and we end up with a lot of unnecessary object
 creation.

 I am going to modify the internal architecture of existing widgets and the
 base classes to create a cleaner interface for this.  At the core of the
 change will be the addition of some new members to the Widget class:

  * uiClass - this is expected to be either null (the default for widgets
 that aren't represented by a button or menu) or a Jx class (either
 Jx.Button or Jx.Menu).  This will replace both Fusion.Tool.ButtonBase and
 Fusion.Tool.MenuBase classes and the inheritance/initialization in the
 actual widgets.

  * activate - an empty function to be overridden by subclasses that is
 called by the uiClass object in the case of a widget being a button or
 menu item.  This combines what would have previously been the activate and
 execute methods in some Widget sub-classes into a single method.  Widgets
 that were not mutually exclusive had an execute method that is now renamed
 to activate.

  * deactivate - an empty function to be overridden by subclasses that is
 triggered on a mutually exclusive button when another mutually exclusive
 widget is activated.  This is then used by widgets that establish some set
 of event handlers to do clean up when deactivated.

  * uiObj - the user interface object that represents this object

  * setUiObject - a method that assigns a user interface object (button,
 menu item or DOM element) to a the widget.  This should be overridden by
 subclasses that want to do something to the ui object (such as place menu
 items in the menu that was created for them).  Previously this would have
 happened in the widget's initialize method but the ui object is now not
 available until *after* the widget has been created.

 This will require changes to all existing widgets that inherit from
 ButtonBase or MenuBase and some other widgets.  In addition, the
 responsibility for creating a user interface object for a widget is now
 moved from the widgets to the ApplicationDefinition.js code where the
 widgets are initially created.

-- 
Ticket URL: <http://trac.osgeo.org/fusion/ticket/117>
Fusion <http://trac.osgeo.org/fusion>
Fusion is a web-mapping application development framework for MapServer and MapGuide OS.


More information about the fusion-trac mailing list