home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / groupdialo.tcl < prev    next >
Text File  |  1997-11-19  |  16KB  |  613 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)groupdialo.tcl    /main/titanic/4
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)groupdialo.tcl    /main/titanic/4   19 Nov 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. # Common functionality for group editor and
  16. # gdr customization editor.
  17.  
  18. Class GroupDialog : {TemplateDialog} {
  19.     constructor
  20.     method destructor
  21.     method fileSelectorDialog
  22.     method filterDialog
  23.     method groupV
  24.     method itemSelectorDialog
  25.     method listDialog
  26.     method newObject
  27.     method removeObjects
  28.     method showObjects
  29.     method showObjectsOk
  30.     attribute editable
  31.     attribute currentMode
  32.     attribute currentRepObjList
  33.     attribute _groupV
  34.     attribute sysV
  35.     attribute phaseV
  36.     attribute confV
  37. }
  38.  
  39. constructor GroupDialog {class this name} {
  40.     set this [TemplateDialog::constructor $class $this $name]
  41.     # Start constructor user section
  42.  
  43.     $this delCancelButton
  44.     $this okPressed {%this delete}
  45.  
  46.     interface DlgColumn $this.top {
  47.         NamedGroup mode {
  48.         label mode
  49.         mnemonic m
  50.         horStretchFactor 0
  51.         verStretchFactor 0
  52.         horShrinkFactor 0
  53.         verShrinkFactor 0
  54.         OptionMenu optmenu {}
  55.         }
  56.         DlgRow menu {
  57.         horStretchFactor 0
  58.         verStretchFactor 0
  59.         horShrinkFactor 0
  60.         verShrinkFactor 0
  61.         PushButton new {
  62.             label New...
  63.         }
  64.         PushButton show {
  65.             label Show...
  66.         }
  67.         PushButton delete {
  68.             label Delete...
  69.         }
  70.         }
  71.         Label contentsLab {
  72.         text "Contents:"
  73.         alignment CENTER
  74.         }
  75.         BrowsView view {
  76.         horStretchFactor 10
  77.         verStretchFactor 10
  78.         horShrinkFactor 10
  79.         verShrinkFactor 10
  80.         rowCount 10
  81.         mode DETAIL
  82.         }
  83.     }
  84.  
  85.     $this.top.view font "[m4_var get M4_font -context desk]"
  86.     $this.top.mode.optmenu selectionChanged [list $this modeChanged 0]
  87.     $this.top.menu.new activated [list $this newObject]
  88.     $this.top.menu.show activated [list $this showObjects]
  89.     $this.top.menu.delete activated [list $this removeObjects]
  90.  
  91.     # End constructor user section
  92.     return $this
  93. }
  94.  
  95. method GroupDialog::destructor {this} {
  96.     # Start destructor user section
  97.     if [$this editable] {
  98.         [$this groupV] quit
  99.     }
  100.     # End destructor user section
  101. }
  102.  
  103. method GroupDialog::fileSelectorDialog {this msg} {
  104.     set fileTypes \
  105.         [lsort [concat [BrowserProcs::graphTypes] [BrowserProcs::matrixTypes]]]
  106.     set itemTypes {cl de et pe st}
  107.     foreach fileSelector [[$this groupV] fileSelectors] {
  108.     set id [lsearch -exact $itemTypes [$fileSelector itemType]]
  109.     if {$id == -1} continue
  110.     set itemTypes [lreplace $itemTypes $id $id]
  111.     }
  112.     if [lempty $itemTypes] {
  113.     wmtkinfo $msg
  114.     return
  115.     }
  116.  
  117.     global classCount
  118.     set box [getParent $this].groupVStrFileSelectorDialog$classCount
  119.     incr classCount
  120.     ClassMaker::extend TemplateDialog GroupVStrFileSelectorDlg \
  121.     {groupV dialog}
  122.     GroupVStrFileSelectorDlg new $box \
  123.     -modal [$this editable] \
  124.     -title "New File Selector" \
  125.     -groupV [$this groupV] \
  126.     -dialog $this \
  127.     -helpPressed {.main helpOnName groupVStrFileSelectorDialog} \
  128.     -cancelPressed {
  129.         %this delete
  130.     } \
  131.     -okPressed {
  132.         set itemType [lindex [%this.top.itemTypes.list selectedSet] 0]
  133.         set decompFlags ""
  134.         foreach decompFlag [%this.top.decompFlags.list selectedSet] {
  135.         lappend decompFlags "decomp$decompFlag"
  136.         }
  137.         set fileTypes [%this.top.fileTypes.list selectedSet]
  138.         if {"$itemType" != "" &&
  139.         (! [lempty $decompFlags]) && (! [lempty $fileTypes])} {
  140.  
  141.         [%this groupV] addFileSelector \
  142.             $itemType $decompFlags $fileTypes
  143.         [%this dialog] modeChanged
  144.         }
  145.         %this delete
  146.     }
  147.     interface DlgRow $box.top {
  148.     NamedGroup itemTypes {
  149.         label "item type"
  150.         mnemonic i
  151.         TextList list {
  152.         rowCount 8
  153.         selectionPolicy BROWSE
  154.         }
  155.     }
  156.     NamedGroup decompFlags {
  157.         label "decomp flags"
  158.         mnemonic d
  159.         TextList list {
  160.         selectionPolicy EXTENDED
  161.         entrySet {Files Components Parents Leafs}
  162.         }
  163.     }
  164.     NamedGroup fileTypes {
  165.         label "file types"
  166.         mnemonic f
  167.         TextList list {
  168.         selectionPolicy EXTENDED
  169.         }
  170.     }
  171.     }
  172.     $box.top.itemTypes.list entrySet $itemTypes
  173.     $box.top.fileTypes.list entrySet $fileTypes
  174.     $box popUp
  175. }
  176.  
  177. method GroupDialog::filterDialog {this otype ftypeList} {
  178.     global classCount
  179.     set box [getParent $this].groupVStrFilterDialog$classCount
  180.     incr classCount
  181.     ClassMaker::extend TemplateDialog GroupVStrFilterDlg \
  182.     {groupV otype ftypeList dialog}
  183.     set firstChar [string toupper [string range $otype 0 0]]
  184.     set title "New $firstChar[string range $otype 1 end] Filter"
  185.     GroupVStrFilterDlg new $box \
  186.     -modal [$this editable] \
  187.     -title "$title" \
  188.     -groupV [$this groupV] \
  189.     -otype $otype \
  190.     -ftypeList $ftypeList \
  191.     -dialog $this \
  192.     -helpPressed {.main helpOnName groupVStrFilterDialog} \
  193.     -cancelPressed {
  194.         %this delete
  195.     } \
  196.     -okPressed {
  197.         set groupV [%this groupV]
  198.         set otype [%this otype]
  199.  
  200.         set name ""
  201.         set type ""
  202.         set property ""
  203.         set pattern ""
  204.  
  205.         set id 0
  206.         set count 0
  207.         foreach ftype [%this ftypeList] {
  208.         set row %this.top.row$id
  209.         incr id 1
  210.         if {! [$row.labCol.name state]} continue
  211.         incr count 1
  212.  
  213.         set valCol $row.valCol
  214.         case "$ftype" in {
  215.             {name} {
  216.             regsub -all ":" "[$valCol.pattern text]" "\[:|/\]" name
  217.             }
  218.             {type} {
  219.             set type "[$valCol.pattern text]"
  220.             }
  221.             {property} {
  222.             set property "[$valCol.property text]"
  223.             set pattern "[$valCol.pattern text]"
  224.             }
  225.         }
  226.         }
  227.         if $count {
  228.         $groupV addFilter $otype "$name" "$type" "$property" "$pattern"
  229.         }
  230.         [%this dialog] modeChanged
  231.         %this delete
  232.     }
  233.  
  234.     set top [DlgColumn new $box.top]
  235.     set id 0
  236.     foreach ftype $ftypeList {
  237.     set row [DlgRow new $top.row$id]
  238.     incr id 1
  239.     set labCol [DlgColumn new $row.labCol]
  240.     ClassMaker::extend CheckButton FtypeCheckButton {box ftypeList}
  241.     FtypeCheckButton new $labCol.name \
  242.         -state 0 \
  243.         -box $box \
  244.         -ftypeList $ftypeList
  245.     set valCol [DlgColumn new $row.valCol]
  246.     case "$ftype" in {
  247.         {property} {
  248.         $labCol.name label "${ftype}"
  249.         Label new $valCol.propertyLab -text "name:"
  250.         set entry [SingleLineText new $valCol.property \
  251.             -editable yes \
  252.             -text "" \
  253.         ]
  254.         Label new $valCol.patternLab -text "value:"
  255.         set value "*"
  256.         set entry [SingleLineText new $valCol.pattern \
  257.             -editable yes \
  258.             -text "$value" \
  259.         ]
  260.         }
  261.         {default} {
  262.         $labCol.name label "${ftype}:"
  263.         set value "*"
  264.         set entry [SingleLineText new $valCol.pattern \
  265.             -editable yes \
  266.             -text "$value" \
  267.         ]
  268.         }
  269.     }
  270.     }
  271.     $box popUp
  272. }
  273.  
  274. method GroupDialog::groupV {this {groupV ""}} {
  275.     if {"$groupV" == ""} {
  276.     return [$this _groupV]
  277.     }
  278.     $this _groupV $groupV
  279.  
  280.     set cc [ClientContext::global]
  281.     set sysV [$cc currentSystem]
  282.     $this sysV $sysV
  283.     set phaseV [$cc currentPhase]
  284.     $this phaseV $phaseV
  285.     set confV [$cc currentConfig]
  286.     $this confV $confV
  287. }
  288.  
  289. method GroupDialog::itemSelectorDialog {this msg} {
  290.     set itemTypes {cl de et pe st}
  291.     set len [llength $itemTypes]
  292.     set fileTypes ""
  293.     set fTypes \
  294.         [lsort [concat [BrowserProcs::graphTypes] [BrowserProcs::matrixTypes]]]
  295.     foreach fileType $fTypes {
  296.     if {[llength [[$this groupV] findItemSelectors $fileType]] != $len} {
  297.         lappend fileTypes $fileType
  298.     }
  299.     }
  300.     if [lempty $fileTypes] {
  301.     wmtkinfo $msg
  302.     return
  303.     }
  304.  
  305.     global classCount
  306.     set box [getParent $this].groupVStrItemSelectorDialog$classCount
  307.     incr classCount
  308.     ClassMaker::extend TemplateDialog GroupVStrItemSelectorDlg \
  309.     {groupV dialog itemTypes}
  310.     GroupVStrItemSelectorDlg new $box \
  311.     -modal [$this editable] \
  312.     -title "New Item Selector" \
  313.     -groupV [$this groupV] \
  314.     -dialog $this \
  315.     -itemTypes $itemTypes \
  316.     -helpPressed {.main helpOnName groupVStrItemSelectorDialog} \
  317.     -cancelPressed {
  318.         %this delete
  319.     } \
  320.     -okPressed {
  321.         set fileType [lindex [%this.top.fileTypes.list selectedSet] 0]
  322.         set itemTypes ""
  323.         foreach itemType [%this itemTypes] {
  324.         set row %this.top.itemTypes.row
  325.         if {! [$row.type.$itemType state]} continue
  326.         set qualified [$row.qualified.$itemType selected]
  327.         if {"$qualified" != "yes"} {
  328.             set qualified "dontCare"
  329.         }
  330.         lappend itemTypes [list $itemType $qualified]
  331.         }
  332.         if {"$fileType" != "" && (! [lempty $itemTypes])} {
  333.         foreach itemType $itemTypes {
  334.             [%this groupV] addItemSelector \
  335.             $fileType [lindex $itemType 0] [lindex $itemType 1]
  336.         }
  337.         [%this dialog] modeChanged
  338.         }
  339.         %this delete
  340.     }
  341.     interface DlgRow $box.top {
  342.     NamedGroup fileTypes {
  343.         label "file type"
  344.         mnemonic f
  345.         TextList list {
  346.         selectionPolicy BROWSE
  347.         }
  348.     }
  349.     NamedGroup itemTypes {
  350.         label "item types"
  351.         mnemonic i
  352.         DlgRow row {
  353.         DlgColumn type {
  354.             spaceType LREVEN
  355.             Label label {
  356.             text "type:"
  357.             }
  358.         }
  359.         DlgColumn qualified {
  360.             spaceType LREVEN
  361.             Label label {
  362.             text "qualified:"
  363.             }
  364.         }
  365.         }
  366.     }
  367.     }
  368.     foreach itemType [$box itemTypes] {
  369.     set row $box.top.itemTypes.row
  370.     CheckButton new $row.type.$itemType \
  371.         -sensitive 0 \
  372.         -state 0 \
  373.         -label $itemType
  374.     OptionMenu new $row.qualified.$itemType \
  375.         -sensitive 0 \
  376.         -entrySet {"don't care" yes}
  377.     }
  378.     $box.top.fileTypes.list config \
  379.     -entrySet $fileTypes \
  380.     -selectionChanged {
  381.         set fileType [lindex [%this selectedSet] 0]
  382.         set box [getParent [getParent [getParent %this]]]
  383.         set groupV [$box groupV]
  384.         foreach itemType [$box itemTypes] {
  385.         set row $box.top.itemTypes.row
  386.         if [[$groupV findItemSelector $fileType $itemType] isNil] {
  387.             set sensitive 1
  388.         } else {
  389.             set sensitive 0
  390.             $row.type.$itemType state 0
  391.             $row.qualified.$itemType selected "don't care"
  392.         }
  393.         $row.type.$itemType sensitive $sensitive
  394.         $row.qualified.$itemType sensitive $sensitive
  395.         }
  396.     }
  397.     $box popUp
  398. }
  399.  
  400. method GroupDialog::listDialog {this objList title msg okCmd scCmd} {
  401.     if [lempty $objList] {
  402.     wmtkinfo $msg
  403.     return
  404.     }
  405.  
  406.     global classCount
  407.     set box [getParent $this].groupVStrSubDialog$classCount
  408.     incr classCount
  409.     GroupVStrSubDlg new $box $this \
  410.     -modal [$this editable] \
  411.     -objectList $objList \
  412.     -title $title \
  413.     -okCmd $okCmd \
  414.     -scCmd $scCmd
  415.     $box popUp
  416. }
  417.  
  418. method GroupDialog::newObject {this} {
  419.     case "[$this currentMode]" in {
  420.     {"explicit group version"} {
  421.         set groupV [$this groupV]
  422.         set sysV [$this sysV]
  423.         set subgroupVList [$sysV groupVersions]
  424.         set id [lsearch -exact $subgroupVList "$groupV"]
  425.         set subgroupVList [lreplace "$subgroupVList" $id $id]
  426.         foreach subgroupV [$groupV explicitSubgroupVersions $sysV] {
  427.         set id [lsearch -exact $subgroupVList "$subgroupV"]
  428.         if {$id == -1} continue
  429.         set subgroupVList [lreplace "$subgroupVList" $id $id]
  430.         }
  431.         $this listDialog \
  432.         "$subgroupVList" \
  433.         "New Explicit Subgroup" \
  434.         "All subgroup versions within the current system have already \
  435.          been added as explicit subgroup version" \
  436.         addExplicitSubgroup \
  437.         ""
  438.     }
  439.     {"group version filter"} {
  440.         $this filterDialog subgroup {name property}
  441.     }
  442.     {"explicit file"} {
  443.         set groupV [$this groupV]
  444.         set sysV [$this sysV]
  445.         set fileList ""
  446.         foreach fileV [$sysV localFileVersions] {
  447.         lappend fileList [$fileV file]
  448.         }
  449.         foreach file [$groupV explicitFiles] {
  450.         set id [lsearch -exact $fileList "$file"]
  451.         if {$id == -1} continue
  452.         set fileList [lreplace "$fileList" $id $id]
  453.         }
  454.         $this listDialog \
  455.         "$fileList" \
  456.         "New Explicit File" \
  457.         "All files within the current system have already \
  458.          been added as explicit file" \
  459.         addExplicitFile \
  460.         ""
  461.     }
  462.     {"file filter"} {
  463.         $this filterDialog file {name type property}
  464.     }
  465.     {"file selector"} {
  466.         $this fileSelectorDialog \
  467.         "A FileSelector already exists for each item-type"
  468.     }
  469.     {"item filter"} {
  470.         $this filterDialog item {name type property}
  471.     }
  472.     {"item selector"} {
  473.         $this itemSelectorDialog \
  474.         "An ItemSelector already exists for each \
  475.          file- and item-type combination"
  476.     }
  477.     }
  478. }
  479.  
  480. method GroupDialog::removeObjects {this} {
  481.     set groupV [$this groupV]
  482.     case "[$this currentMode]" in {
  483.     {"explicit group version"} {
  484.         set sysV [$this sysV]
  485.         $this listDialog \
  486.         "[$groupV explicitSubgroupVersions $sysV]" \
  487.         "Delete Explicit Subgroup" \
  488.         "There are no explicit subgroup versions \
  489.          within this group version" \
  490.         removeExplicitSubgroup \
  491.         ""
  492.     }
  493.     {"group version filter"} {
  494.         $this listDialog \
  495.         "[$groupV subgroupFilters]" \
  496.         "Delete Subgroup Filter" \
  497.         "There are no subgroup filters within this group version" \
  498.         "removeFilter" \
  499.         ""
  500.     }
  501.     {"explicit file"} {
  502.         $this listDialog \
  503.         "[$groupV explicitFiles]" \
  504.         "Delete Explicit File" \
  505.         "There are no explicit files within this group version" \
  506.         removeExplicitFile \
  507.         ""
  508.     }
  509.     {"file filter"} {
  510.         $this listDialog \
  511.         "[$groupV fileFilters]" \
  512.         "Delete File Filter" \
  513.         "There are no file filters within this group version" \
  514.         "removeFilter" \
  515.         ""
  516.     }
  517.     {"file selector"} {
  518.         $this listDialog \
  519.         "[$groupV fileSelectors]" \
  520.         "Delete File Selector" \
  521.         "There are no file selectors within this group version" \
  522.         "removeFileSelector" \
  523.         ""
  524.     }
  525.     {"item filter"} {
  526.         $this listDialog \
  527.         "[$groupV itemFilters]" \
  528.         "Delete Item Filter" \
  529.         "There are no item filters within this group version" \
  530.         "removeFilter" \
  531.         ""
  532.     }
  533.     {"item selector"} {
  534.         $this listDialog \
  535.         "[$groupV itemSelectors]" \
  536.         "Delete Item Selector" \
  537.         "There are no item selectors within this group version" \
  538.         "removeItemSelector" \
  539.         ""
  540.     }
  541.     }
  542. }
  543.  
  544. method GroupDialog::showObjects {this} {
  545.     set groupV [$this groupV]
  546.     case "[$this currentMode]" in {
  547.     {"group version filter"} {
  548.         $this listDialog \
  549.         "[$groupV subgroupFilters]" \
  550.         "Show Subgroup Filter" \
  551.         "There are no subgroup filters within this group version" \
  552.         "" \
  553.         "filterSubgroupVersions"
  554.     }
  555.     {"file filter"} {
  556.         $this listDialog \
  557.         "[$groupV fileFilters]" \
  558.         "Show File Filter" \
  559.         "There are no file filters within this group version" \
  560.         "" \
  561.         "filterFileVersions"
  562.     }
  563.     {"item filter"} {
  564.         $this listDialog \
  565.         "[$groupV itemFilters]" \
  566.         "Show Item Filter" \
  567.         "There are no item filters within this group version" \
  568.         "" \
  569.         "filterItems"
  570.     }
  571.     }
  572. }
  573.  
  574. method GroupDialog::showObjectsOk {this repObjList save} {
  575.     if $save {
  576.     $this currentRepObjList $repObjList
  577.     }
  578.  
  579.     # Remove rows
  580.     foreach object [$this.top.view objectSet] {
  581.     $object delete
  582.     }
  583.  
  584.     # Create new rows
  585.     set count 0
  586.     foreach repObj $repObjList {
  587.     $repObj initializeInfo ""
  588.     set browserType [$repObj browserType]
  589.     set repType [$repObj uiClass]
  590.     set typeSpec [getObjectSpec [.main objectHdlr] $repType $browserType]
  591.     if {"$typeSpec" == ""} continue
  592.     set details [list "[$repObj getInfo Type]"]
  593.     lappend details "[$repObj getInfo Status]"
  594.     BrowsObject new $this.top.view.object$count \
  595.         -smallIcon [$typeSpec smallIcon] \
  596.         -label "[$repObj getInfo Name]" \
  597.         -selectState 0 \
  598.         -details "$details"
  599.  
  600.     incr count 1
  601.     }
  602.  
  603.     # Sort the view
  604.     set sortSpec "\
  605.     -column {$this.top.view.header1 ascii increasing} \
  606.     -column {$this.top.view.header0 ascii increasing} \
  607.     -column {$this.top.view.header2 ascii increasing}"
  608.     eval $this.top.view sort $sortSpec
  609. }
  610.  
  611. # Do not delete this line -- regeneration end marker
  612.  
  613.