home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / selectmodu.tcl < prev    next >
Text File  |  1997-10-30  |  5KB  |  185 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)selectmodu.tcl    /main/titanic/7
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)selectmodu.tcl    /main/titanic/7   30 Oct 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require "dirselectd.tcl"
  13. require "selmodfilt.tcl"
  14. # End user added include file section
  15.  
  16.  
  17. Class SelectModuleDialog : {TemplateDialog} {
  18.     constructor
  19.     method destructor
  20.     method popUp
  21.     method handleBrowsePressed
  22.     method handleBrowseOkPressed
  23.     method updateView
  24.     method handleSelectionChanged
  25.     method getSelectedModules
  26.     attribute modulesSelDlg
  27.     attribute filter
  28. }
  29.  
  30. constructor SelectModuleDialog {class this name} {
  31.     set this [TemplateDialog::constructor $class $this $name]
  32.     # Start constructor user section
  33.     $this config \
  34.         -modal 1 \
  35.         -title "Select Module"
  36.  
  37.     set initialDir [path_name concat [m4_var get M4_home] modules]
  38.     $this modulesSelDlg [DirSelectDialog new ${this}modulesSelDlg \
  39.         -title "Select Modules Directory" \
  40.         -update 0 \
  41.         -directory $initialDir \
  42.         -okPressed "$this handleBrowseOkPressed" \
  43.         -cancelPressed "$this busy false"]
  44.  
  45.     $this filter [SelModFilter new]
  46.  
  47.     # Derived BrowsView and BrowsObject classes
  48.     ClassMaker::extend BrowsView SelModuleBrowsView \
  49.         "directory filter"
  50.     ClassMaker::extend BrowsObject SelModuleBrowsObject modulePath
  51.  
  52.     interface DlgColumn $this.c {
  53.         NamedGroup g {
  54.             label "Modules Directory"
  55.             verStretchFactor 0
  56.             verShrinkFactor 0
  57.             DlgRow r {
  58.                 Label moddirlab {
  59.                 }
  60.                 PushButton browse {
  61.                     label "Browse..."
  62.                 }
  63.             }
  64.         }
  65.         SelModuleBrowsView modules {
  66.             rowCount 10
  67.             columnCount 50
  68.             mode DETAIL
  69.             selectionPolicy BROWSE
  70.             BrowsHeader lname {
  71.                 label "Long Name"
  72.                 width 32
  73.             }
  74.             BrowsHeader type {
  75.                 label "Type"
  76.                 width 20
  77.             }
  78.         }
  79.     }
  80.     $this.c.g.r.browse activated "$this handleBrowsePressed"
  81.     $this.c.modules selectionChanged "$this handleSelectionChanged"
  82.  
  83.     # End constructor user section
  84.     return $this
  85. }
  86.  
  87. method SelectModuleDialog::destructor {this} {
  88.     # Start destructor user section
  89.     foreach obj [$this.c.modules objectSet] {
  90.         $obj delete
  91.     }
  92.     # End destructor user section
  93. }
  94.  
  95. method SelectModuleDialog::popUp {this {newDir ""}} {
  96.     busy {
  97.         # Initialize the contents of the dialog
  98.         if {$newDir == ""} {
  99.             set newDir [[$this modulesSelDlg] directory]
  100.         } else {
  101.             [$this modulesSelDlg] directory $newDir
  102.         }
  103.         $this updateView $newDir
  104.  
  105.         # Pop it up
  106.         $this TemplateDialog::popUp
  107.     }
  108. }
  109.  
  110. method SelectModuleDialog::handleBrowsePressed {this} {
  111.     $this busy true
  112.     [$this modulesSelDlg] popUp
  113. }
  114.  
  115. method SelectModuleDialog::handleBrowseOkPressed {this} {
  116.     [$this modulesSelDlg] handleOk
  117.     $this updateView [[$this modulesSelDlg] directory]
  118.     $this busy false
  119. }
  120.  
  121. method SelectModuleDialog::updateView {this newDir} {
  122.     set modView $this.c.modules
  123.     set newFilter [$this filter]
  124.     if {[$modView directory] == $newDir && [$modView filter] != "" &&
  125.             [[$modView filter] equals $newFilter]} {
  126.         # Nothing changed
  127.         return
  128.     }
  129.     $modView directory $newDir
  130.     $modView filter [$newFilter clone]
  131.     foreach obj [$modView objectSet] {
  132.         $obj delete
  133.     }
  134.  
  135.     $this.c.g.r.moddirlab text $newDir
  136.  
  137.     set moduleDB [ModuleDB::global]
  138.     set modulePathList [$moduleDB getFilteredModulePaths $newDir $newFilter]
  139.     $modulePathList foreach modulePath {
  140.         set activatedScript "eval \[$this okPressed\]"
  141.         if [$this autoPopDown] {
  142.             set activatedScript "$activatedScript; $this popDown"
  143.         }
  144.         set name [file tail $modulePath]
  145.         set obj [SelModuleBrowsObject new $modView.$name \
  146.             -modulePath $modulePath \
  147.             -activated $activatedScript]
  148.         set propDict [$moduleDB getModulePropDict $modulePath]
  149.         $obj label [$propDict set "longName"]
  150.         $obj details [$propDict set "type"]
  151.     }
  152.     $modView sort -command "SelectModuleDialog::compare"
  153.  
  154.     $this okSensitive no
  155. }
  156.  
  157. method SelectModuleDialog::handleSelectionChanged {this} {
  158.     if {[$this.c.modules selectedSet] == ""} {
  159.         $this okSensitive no
  160.     } else {
  161.         $this okSensitive yes
  162.     }
  163. }
  164.  
  165. method SelectModuleDialog::getSelectedModules {this} {
  166.     set moduleList ""
  167.     foreach obj [$this.c.modules selectedSet] {
  168.         lappend moduleList [$obj modulePath]
  169.     }
  170.     return $moduleList
  171. }
  172.  
  173. proc SelectModuleDialog::compare {objA objB} {
  174.     set objAType [lindex [$objA details] 0]
  175.     set objBType [lindex [$objB details] 0]
  176.     set result [string compare $objAType $objBType]
  177.     if {$result != 0} {
  178.         return $result
  179.     }
  180.     return [string compare [$objA label] [$objB label]]
  181. }
  182.  
  183. # Do not delete this line -- regeneration end marker
  184.  
  185.