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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)ctrlpnldia.tcl    /main/titanic/8
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)ctrlpnldia.tcl    /main/titanic/8   23 Oct 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require "ctrlpnlvie.tcl"
  13. require "custfileut.tcl"
  14. # End user added include file section
  15.  
  16. require "duallook.tcl"
  17.  
  18. Class CtrlPnlDialog : {DualLook TemplateDialog} {
  19.     method destructor
  20.     constructor
  21.     method newableObjectList
  22.     method newObjects
  23.     method addObjects
  24.     method removeObjects
  25.     method removeEntry
  26.     method insertEntryAfter
  27.     method showResult
  28.     method popUp
  29.     method quit
  30.     method save
  31.     method registerObject
  32.     method getSpec
  33.     method checkButtons
  34.     method view
  35.     attribute cadEntries
  36.     attribute codEntries
  37.     attribute stdEntries
  38.     attribute dfdEntries
  39.     attribute etdEntries
  40.     attribute mgdEntries
  41.     attribute ccdEntries
  42.     attribute ucdEntries
  43.     attribute entrySet
  44.     attribute lvlObj
  45.     attribute fileName
  46.     attribute fileType
  47.     attribute editable
  48.     attribute number
  49.     attribute _view
  50. }
  51.  
  52. method CtrlPnlDialog::destructor {this} {
  53.     set ref [$this _view]
  54.     if {$ref != ""} {
  55.         $ref _dialog ""
  56.     }
  57.     # Start destructor user section
  58.     # End destructor user section
  59.     $this DualLook::destructor
  60. }
  61.  
  62. constructor CtrlPnlDialog {class this name} {
  63.     set this [TemplateDialog::constructor $class $this $name]
  64.         $this DualLook::initialize
  65.  
  66.     $this cadEntries {cad_class link_attr_box cad_container nary_assoc
  67.                           note Vertex more_classes association aggregation 
  68.               qualif_assoc qualif_aggr nary_assoc_conn constraint
  69.                       generalization_conn overlap_gen_conn loop 
  70.               note_conn propagation
  71.                       Select}
  72.  
  73.     $this codEntries {
  74.         cod_actor instance nary_link note Vertex note_conn link
  75.         aggr_link qualif_link qualif_aggr_link bfsldmsg ffsldmsg
  76.         bfstkmsg ffstkmsg bhstkmsg fhstkmsg nary_link_conn Select
  77.     }
  78.  
  79.     $this stdEntries {name_state state super_state 
  80.               start_state final_state 
  81.               history_state ver_state_sep hor_state_sep
  82.               ver_compl_trans hor_compl_trans std_class 
  83.               note Vertex transition
  84.               event_msg note_conn Select}
  85.  
  86.     $this dfdEntries {data_proc data_store dfd_actor dfd_anchor note Vertex
  87.               data_flow result_flow ctrl_flow update_flow 
  88.               note_conn Select}
  89.  
  90.     $this etdEntries {
  91.                 etd_initiator etd_object etd_timing_constr note Vertex
  92.                 etd_event etd_flat etd_async etd_return note_conn 
  93.                 in_scope_region object_termination Select
  94.     }
  95.  
  96.  
  97.     $this mgdEntries {message_def note Vertex message_gen_conn note_conn Select}
  98.  
  99.     $this ccdEntries {ccd_class ccd_class_ref ccd_container ccd_actor
  100.                       subject note Vertex com_message note_conn Select}
  101.  
  102.     $this ucdEntries {use_case ucd_actor note Vertex
  103.               und_com_assoc dir_com_assoc use_case_gen note_conn Select}
  104.  
  105.     ClassMaker::extend BrowsObject CtrlPnlObj {index id}
  106.  
  107.     global classCount
  108.     incr classCount
  109.     $this number $classCount
  110.  
  111.     $this config \
  112.         -cancelPressed { %this quit } \
  113.         -okPressed { %this save } \
  114.         -helpPressed {.main helpOnName ctrlPnlDialog}
  115.  
  116.     interface DlgColumn $this.top {
  117.         DlgRow menu {
  118.                 verStretchFactor 0
  119.                 verShrinkFactor 0
  120.         horStretchFactor 0
  121.         verStretchFactor 0
  122.         PushButton new {
  123.             label New...
  124.         }
  125.         PushButton test {
  126.             label Test...
  127.         }
  128.         PushButton delete {
  129.             label Delete
  130.         }
  131.         }
  132.         Label contentsLab {
  133.         text "Contents:"
  134.         alignment CENTER
  135.         }
  136.         CtrlPnlView view {
  137.         rowCount 10
  138.         mode DETAIL
  139.         BrowsHeader header0 {
  140.             label Name
  141.             width 30
  142.         }
  143.         }
  144.         HorRadioGroup colCountHRG {
  145.             entrySet {"one column" "two columns" "three columns"}
  146.                     justification CENTER
  147.         }
  148.     }
  149.  
  150.     $this.top.menu.new activated [list $this newObjects]
  151.     $this.top.menu.test activated [list $this showResult]
  152.     $this.top.menu.delete activated [list $this removeObjects]
  153.  
  154.     $this view $this.top.view
  155.     $this modal Yes
  156.  
  157.     $this.top.view selectionChanged "$this checkButtons"
  158.  
  159.     return $this
  160. }
  161.  
  162. method CtrlPnlDialog::newableObjectList {this} {
  163.  
  164.     set allEntries [$this [$this fileName]Entries]
  165.         set newEntries [$this supportedSymbolSet [$this fileName] $allEntries]
  166.  
  167.     foreach obj [[$this view] objectSet] {
  168.         set name [$obj label]
  169.         set idx [lsearch -exact $newEntries $name]
  170.         if {$idx != -1} {
  171.             # does already exist so it can not be newed
  172.             set newEntries [lreplace $newEntries $idx $idx]
  173.         }
  174.     }
  175.     return $newEntries
  176. }
  177.  
  178. method CtrlPnlDialog::newObjects {this} {
  179.  
  180.     set newEntries [$this newableObjectList]
  181.  
  182.     set box .main.panelListDialog[$this number]
  183.     if {! [isCommand $box]} {
  184.         ListDialog new $box \
  185.             -modal Yes \
  186.             -title "New Panel Entry" \
  187.             -selectionPolicy EXTENDED \
  188.             -rowCount 12 \
  189.             -okPressed "$this addObjects \[%this selectedSet\]" \
  190.             -helpPressed {.main helpOnName ctrlPnlNew}
  191.     }
  192.     $box entrySet $newEntries
  193.     $box popUp
  194. }
  195.  
  196. method CtrlPnlDialog::addObjects {this names} {
  197.     set entrySet [$this entrySet]
  198.     foreach name $names {
  199.     if { [lsearch -exact $entrySet $name] == -1 } {
  200.         lappend entrySet $name
  201.     }
  202.     }
  203.     $this entrySet $entrySet
  204.  
  205.     foreach name [$this supportedSymbolSet [$this fileName] $names] {
  206.     set object [$this view].object$name
  207.     set interfaceName [$this convertSymbolSet [$this fileName] $name]
  208.     CtrlPnlObj new $object \
  209.         -smallIcon $interfaceName \
  210.         -largeIcon $interfaceName \
  211.         -label $name \
  212.         -selectState 0 \
  213.         -id $object
  214.     if [$this editable] {
  215.         $object conversionSet "CONTROLPANELENTRY id"
  216.     }
  217.     }    
  218.     [$this view] reIndex
  219.     $this checkButtons
  220. }
  221.  
  222. method CtrlPnlDialog::removeObjects {this} {
  223.     foreach obj [[$this view] selectedSet] {
  224.     $this removeEntry [$obj label]
  225.     $obj delete
  226.     }
  227.     [$this view] reIndex
  228.     $this checkButtons
  229. }
  230.  
  231. method CtrlPnlDialog::removeEntry {this name} {
  232.     set entrySet [$this entrySet]
  233.     set index [lsearch -exact $entrySet $name]
  234.     set entrySet [lreplace $entrySet $index $index]
  235.     $this entrySet $entrySet
  236. }
  237.  
  238. method CtrlPnlDialog::insertEntryAfter {this after name} {
  239.     set entrySet [$this entrySet]
  240.     if { $after == "" } {
  241.     lappend entrySet $name
  242.     } else {
  243.     set index [expr [lsearch -exact $entrySet $after] + 1]
  244.     set entrySet [linsert $entrySet $index $name]
  245.     }
  246.  
  247.     $this entrySet $entrySet
  248. }
  249.  
  250. method CtrlPnlDialog::showResult {this} {
  251.  
  252.     if [isCommand .main.showPanel[$this number]] {
  253.         .main.showPanel[$this number] popDown
  254.         .main.showPanel[$this number] delete 
  255.     }
  256.  
  257.     interface TemplateDialog .main.showPanel[$this number] {
  258.         modal Yes
  259.         DlgColumn DC {
  260.             VerControlPanel VCP {
  261.             }
  262.         }
  263.     }
  264.     .main.showPanel[$this number] delCancelButton
  265.  
  266.     set spec [$this getSpec]
  267.     set entrySet [$this supportedSymbolSet [$this fileName] [lindex $spec 0]]
  268.     .main.showPanel[$this number].DC.VCP config \
  269.         -entrySet $entrySet \
  270.         -columnCount [lindex $spec 1]
  271.     .main.showPanel[$this number] config \
  272.         -title [$this title] \
  273.         -okPressed {%this delete} \
  274.         -helpPressed {.main helpOnName ctrlPnlTest}
  275.     .main.showPanel[$this number] popUp
  276. }
  277.  
  278. method CtrlPnlDialog::popUp {this} {
  279.  
  280.     eval "proc registerObject {spec} {$this registerObject \$spec}"
  281.     CustFileUtilities::read [$this lvlObj] [$this fileName] [$this fileType]
  282.  
  283.     $this title "'[string toupper [$this fileName]]' Control Panel"
  284.     $this TemplateDialog::popUp
  285.  
  286.     $this.top.menu.new sensitive [$this editable]
  287.     $this.top.menu.delete sensitive [$this editable]
  288.     $this.top.colCountHRG sensitive [$this editable]
  289.  
  290.     if {"[$this lvlObj]" == ""} return
  291.     if [[$this lvlObj] isA Corporate] return
  292.  
  293.     set custFV [[$this lvlObj] findCustomFileVersion \
  294.         [$this fileName] [$this fileType]]
  295.     if [$custFV isNil] return
  296.  
  297.     if [$this editable] {
  298.         if [catch {$custFV edit} msg] {
  299.             wmtkerror $msg
  300.             $this.top.menu.new sensitive 0
  301.             $this.top.menu.delete sensitive 0
  302.             $this.top.colCountHRG sensitive 0
  303.         }
  304.     }
  305.  
  306.     $this checkButtons
  307. }
  308.  
  309. method CtrlPnlDialog::quit {this} {
  310.  
  311.     if {"[$this lvlObj]" == ""} return
  312.     if [[$this lvlObj] isA Corporate] return
  313.  
  314.     set custFV [[$this lvlObj] findCustomFileVersion \
  315.         [$this fileName] [$this fileType]]
  316.     if [$custFV isNil] return
  317.  
  318.     if [$this editable] {
  319.         $custFV quit
  320.     }
  321. }
  322.  
  323. method CtrlPnlDialog::save {this} {
  324.  
  325.     if {![$this editable]} {
  326.         return
  327.     }
  328.  
  329.     set tmpFile [args_file {}]
  330.     set fid [open $tmpFile w]
  331.  
  332.     set spec [$this getSpec]
  333.     set objSpec "entrySet \"[lindex $spec 0]\""
  334.     set objSpec "$objSpec columnCount \"[lindex $spec 1]\""
  335.     puts $fid "registerObject \{$objSpec\}"
  336.     close $fid
  337.     CustFileUtilities::save $tmpFile \
  338.         [$this lvlObj] [$this fileName] [$this fileType]
  339.     unlink $tmpFile
  340.  
  341.     $this quit
  342. }
  343.  
  344. method CtrlPnlDialog::registerObject {this objSpec} {
  345.  
  346.     while {![lempty $objSpec]} {
  347.         set key [lvarpop objSpec]
  348.         set value [lvarpop objSpec]
  349.  
  350.         if {$key == "entrySet"} {
  351.                 $this entrySet $value
  352.             $this addObjects $value
  353.         }
  354.  
  355.         if {$key == "columnCount"} {
  356.             if {$value == 1} {
  357.                 $this.top.colCountHRG selected "one column"
  358.             } elseif {$value == 2} {
  359.                 $this.top.colCountHRG selected "two columns"
  360.             } elseif {$value == 3} {
  361.                 $this.top.colCountHRG selected "three columns"
  362.             }
  363.         }
  364.     }
  365. }
  366.  
  367. method CtrlPnlDialog::getSpec {this} {
  368.     
  369.     set columnCount 1
  370.  
  371.     set selected [$this.top.colCountHRG selected]
  372.     if {$selected == "two columns"} {
  373.         set columnCount 2 
  374.     } elseif {$selected == "three columns"} {
  375.         set columnCount 3 
  376.     }
  377.  
  378.     return [list [$this entrySet] $columnCount]
  379. }
  380.  
  381. method CtrlPnlDialog::checkButtons {this} {
  382.  
  383.     if ![$this editable] {
  384.         # disabled stays disabled
  385.         return
  386.     }
  387.  
  388.     if [lempty [[$this view] selectedSet]] {
  389.         $this.top.menu.delete sensitive 0
  390.     } else {
  391.         $this.top.menu.delete sensitive 1
  392.     }
  393.  
  394.     
  395.     if [lempty [$this newableObjectList]] {
  396.         $this.top.menu.new sensitive 0
  397.     } else {
  398.         $this.top.menu.new sensitive 1
  399.     }
  400. }
  401.  
  402. # Do not delete this line -- regeneration end marker
  403.  
  404. method CtrlPnlDialog::view {this args} {
  405.     if {$args == ""} {
  406.         return [$this _view]
  407.     }
  408.     set ref [$this _view]
  409.     if {$ref != ""} {
  410.         $ref _dialog ""
  411.     }
  412.     set obj [lindex $args 0]
  413.     if {$obj != ""} {
  414.         $obj _dialog $this
  415.     }
  416.     $this _view $obj
  417. }
  418.  
  419.