home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / plugins / manager / manager.tcl < prev   
Text File  |  2000-11-02  |  5KB  |  153 lines

  1. # manager.tcl --
  2.  
  3. # managerPlugIn --
  4. #   Collects and displays information about installed plugins such as name,
  5. # version, description. 
  6. #
  7. # It is also responsoble for creating the big categories
  8. #
  9. # TO-DO: When the plugin API is more advanced, provide functionality to 
  10. # load/unload plugins on demand.
  11.  
  12. class managerPlugIn {
  13.     inherit basePlugIn
  14.     variable managerXuiPP
  15.     variable managerEntry    
  16.     variable managerNodeId
  17.     variable networkServicesNodeId
  18.     variable systemNodeId
  19.     variable modulesInfo
  20.     constructor {} {
  21.       array set modulesInfo {}
  22.       set managerXuiPP [xuiPropertyPage ::#auto]
  23.       $managerXuiPP configure -icon moduleManager
  24.       $managerXuiPP setLabel [mesg::get plugin_manager]
  25.       $managerXuiPP setName managerPP
  26.       set managerEntry [xuiString ::#auto]
  27.       $managerEntry setLabel "manager"      
  28.       $managerEntry setName manager
  29.       $managerXuiPP addComponent $managerEntry 
  30.     }
  31.     method init { args }
  32.     method _inquiryForRightPaneContent { node }
  33.     method _inquiryForPropertyPages { node }
  34.     method _receivedPropertyPages { node xuiPropertyPages}
  35. }
  36.  
  37.  
  38.  
  39. # args contains the options that are passed to the plugIn at initialization
  40. # time.
  41. #
  42. #  -namespace    contains the name of the name space server
  43.     
  44.  
  45. body managerPlugIn::init {args} {
  46.  
  47.     # We are hooking to the root node
  48.     # The ::plugInUtils::addNode syntaxis is the following
  49.     # ::plugInUtils::addNode caller namespace parentNode
  50.     # where
  51.     # caller: Name of the object that is adding the node (the plugIn object)
  52.     # namespace: Namespace where we are adding the node
  53.     # parentNode: Parent node
  54.     #
  55.     # The list of available icons is in view/images.tcl    
  56.  
  57.     array set options $args
  58.     set namespace $options(-namespace)
  59.     set parentNode [[ $namespace getRootNode] getId]
  60.     set managerNode [::plugInUtils::addNode $this $namespace $parentNode \
  61.         -classes {manager leaf} \
  62.     -openIcon moduleManager \
  63.     -closedIcon moduleManager \
  64.     -label [mesg::get plugin_management] ]
  65.     set networkServices [::plugInUtils::addNode $this $namespace $parentNode \
  66.         -classes {networkServices container} \
  67.     -openIcon network \
  68.     -closedIcon network \
  69.     -label [mesg::get network_services] ]
  70.     set networkServicesNodeId [$networkServices getId]
  71.     set system [::plugInUtils::addNode $this $namespace $parentNode \
  72.         -classes {system container} \
  73.     -openIcon smallWheel \
  74.     -closedIcon smallWheel \
  75.     -label [mesg::get System]]
  76.     set systemNodeId [$system getId]
  77.     set managerNodeId [$managerNode getId]
  78.     
  79.     # Now we iterate over all modules, keeping track of the options, for 
  80.     # further display.
  81.     # Get all module directories.
  82.  
  83.     set moduleDir $options(-moduledirectory)
  84.     set directoryList [glob [file join $moduleDir .. *]]
  85.     
  86.     # Somebody with a Mac can tell me if the above works?
  87.     
  88.     # Load all modules.
  89.  
  90.     foreach  directory $directoryList {
  91.         set rootname [file tail [file rootname $directory ]]
  92.         switch $rootname {
  93.         manager - CVS - test {
  94.             # Do nothing, it is us! :)
  95.         # also in development, we do not want CVS
  96.         } default {
  97.  
  98.             source [file join $directory init.tcl]
  99.         splash::add "Loading [file tail $directory]"
  100.         ${rootname}_init -namespace $namespace \
  101.             -moduledirectory $directory
  102.             
  103.          # (TO-DO) Move this into registerPlugInProperties
  104.         # (for plugIns written in other languages)
  105.             
  106.         set modulesInfo($rootname) [${rootname}_info]
  107.  
  108.  
  109.         }
  110.     }
  111.     }
  112. }
  113.  
  114. body managerPlugIn::_inquiryForRightPaneContent { node } {
  115.     switch $node [ list $managerNodeId {
  116.     set result [mesg::get manager_right_pane]
  117.     foreach {module info} [array get modulesInfo] {
  118.        catch {unset infoArray}
  119.        array set infoArray $info
  120.        append result "<br><img src=\"$infoArray(icon)\">"
  121.        append result "<b>$infoArray(name) - $infoArray(version)</b>"
  122.        append result "<hr>"
  123.        append result $infoArray(description)
  124.        append result "<br>"
  125.     }
  126.     } $systemNodeId {
  127.          set result [mesg::get system_right_pane]
  128.     } $networkServicesNodeId   {
  129.     set result [mesg::get network_services__right_pane]
  130.     } default {
  131.        set result {}
  132.     }    ]
  133.     return $result
  134. }  
  135.  
  136.  
  137.  
  138. body managerPlugIn::_inquiryForPropertyPages  { node } {
  139.     return
  140.     if ![string compare $node $managerNodeId ] {
  141.         return $managerXuiPP
  142.     } else {
  143.         return
  144.     }
  145. }      
  146.  
  147.  
  148. body managerPlugIn::_receivedPropertyPages { node xuiPropertyPages } {
  149. #  set pp [$xuiPropertyPages getComponentByName managerPP]
  150. #  set newmanager [[$pp getComponentByName manager] getValue]
  151. #  catch {exec manager $newmanager}
  152. }
  153.