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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cadre Technologies Inc.    1996
  4. #
  5. #      File:           @(#)docstructd.tcl    /main/titanic/4
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)docstructd.tcl    /main/titanic/4   18 Nov 1997 Copyright 1996 Cadre Technologies Inc.
  10.  
  11. # Start user added include file section
  12. require "docstructn.tcl"
  13. require "docstructt.tcl"
  14. require "wmt_util.tcl"
  15. # End user added include file section
  16.  
  17.  
  18. Class DocStructDlg : {TemplateDialog} {
  19.     method destructor
  20.     constructor
  21.     method newSection
  22.     method editSection
  23.     method load
  24.     method popUp
  25.     method removeSection
  26.     method save
  27.     method selectionChanged
  28.     method structure
  29.     attribute document
  30.     attribute editable
  31.     attribute saved
  32.     attribute _removedSectionList
  33.     attribute dsm
  34.     attribute fileInfo
  35.     attribute _structure
  36. }
  37.  
  38. method DocStructDlg::destructor {this} {
  39.     set ref [$this _structure]
  40.     if {$ref != ""} {
  41.         $ref _dialog ""
  42.     }
  43.     # Start destructor user section
  44.  
  45.     # Remove dialog box
  46.     set box [getParent $this].[nt_get_type $this]newSection
  47.     if [isCommand $box] {
  48.         $box delete
  49.     }
  50.  
  51.     [$this fileInfo] quit
  52.     if [$this saved] {
  53.         $wmttoolObj updateView
  54.     }
  55.  
  56.     # End destructor user section
  57. }
  58.  
  59. constructor DocStructDlg {class this name dsm} {
  60.     set this [TemplateDialog::constructor $class $this $name]
  61.     $this dsm $dsm
  62.     $this document [[ClientContext::global] currentSystem]
  63.  
  64.     $this config \
  65.     -cancelPressed {
  66.         %this delete
  67.     } \
  68.     -okPressed {
  69.         if [%this editable] {
  70.         %this save
  71.         }
  72.         if [%this autoPopDown] {
  73.         %this delete
  74.         }
  75.     }
  76.  
  77.     interface DlgColumn $this.top {
  78.     NamedGroup actions {
  79.         verStretchFactor 0
  80.         label section
  81.         mnemonic s
  82.         DlgRow menu {
  83.         PushButton new {
  84.             label New...
  85.             default yes
  86.         }
  87.         PushButton edit {
  88.             label Edit...
  89.         }
  90.         PushButton delete {
  91.             label Delete
  92.         }
  93.         }
  94.     }
  95.     DocStructTree tree {
  96.         rowCount 15
  97.         columnCount 60
  98.     }
  99.     }
  100.     $this.top.actions.menu.new activated [list $this newSection]
  101.     $this.top.actions.menu.edit activated [list $this editSection]
  102.     $this.top.actions.menu.delete activated [list $this removeSection]
  103.     DocStructNode new $this.top.tree.root "[[$this document] getInfo Name]"
  104.     $this structure $this.top.tree
  105.  
  106.     return $this
  107. }
  108.  
  109. method DocStructDlg::newSection {this} {
  110.     set box [getParent $this].[nt_get_type $this]newSection
  111.     ClassMaker::extend TemplateDialog NewSectionTemplateDialog {dialog tree}
  112.     if {! [isCommand $box]} {
  113.     NewSectionTemplateDialog new $box \
  114.         -modal yes \
  115.         -title "New Section" \
  116.         -autoPopDown 0 \
  117.         -dialog $this \
  118.         -tree [$this structure] \
  119.         -helpPressed {.main helpOnName newSection} \
  120.         -okPressed {
  121.         set name [%this.top.nameList text]
  122.         set names [%this.top.nameList entrySet]
  123.         set id [lsearch -exact "$names" "$name"]
  124.         if {$id != -1} {
  125.             %this.top.nameList entrySet [lreplace $names $id $id]
  126.         }
  127.         set id [lsearch -exact \
  128.             "[%this.top.parent entrySet]" "[%this.top.parent selected]"]
  129.         set nodes [concat [%this tree].root [[%this tree].root nodes]]
  130.         set parent [lindex $nodes $id]
  131.         if {! [$parent hasChildren]} {
  132.             $parent hasChildren 1
  133.             $parent foldState 0
  134.         }
  135.         set node [$parent count]
  136.         DocStructNode new $parent.$node "$name"
  137.         $parent count [expr $node + 1]
  138.         %this popDown
  139.         }
  140.     interface DlgColumn $box.top {
  141.         Label nameLab {
  142.         text "Name:"
  143.         }
  144.         ComboBox nameList {
  145.         rowCount 5
  146.         verStretchFactor 20
  147.         }
  148.         Label parentLab {
  149.         text "Parent:"
  150.         }
  151.         DropDwnList parent {
  152.         rowCount 5
  153.         }
  154.     }
  155.  
  156.     # Fill nameList with unstructured sections names
  157.     set entrySet ""
  158.     foreach section [[$this document] getChildSet sections] {
  159.         if {"[$section uiPrefix]" != "-"} continue
  160.         if [$section isA ExternalFileVersion] {
  161.         lappend entrySet "[[$section file] qualifiedName :]"
  162.         } else {
  163.         lappend entrySet "[$section name]"
  164.         }
  165.     }
  166.     $box.top.nameList config \
  167.         -entrySet $entrySet \
  168.         -textModified {
  169.         set box [getParent [getParent %this]]
  170.         set label [%this text]
  171.         if {"[rmWhiteSpace $label]" == "" ||
  172.             "[[[$box dialog] fileInfo] findComponent $label]" != ""} {
  173.             set selected 0
  174.         } else {
  175.             set selected 1
  176.         }
  177.         $box okSensitive $selected
  178.         $box okDefault $selected
  179.         $box cancelDefault [expr 1 - $selected]
  180.         }
  181.     }
  182.  
  183.     # Append removed sections to nameList
  184.     $box.top.nameList entrySet \
  185.     [concat [$box.top.nameList entrySet] [$this _removedSectionList]]
  186.     $this _removedSectionList ""
  187.  
  188.     # Fill parent option-menu
  189.     set entrySet \"[[$this structure].root label]\"
  190.     foreach node [[$this structure].root nodes] {
  191.     lappend entrySet [$node label]
  192.     }
  193.     set selected [$box.top.parent selected]
  194.     if {"$selected" == "" || [lsearch -exact $entrySet "$selected"] == -1} {
  195.     set selected [lindex $entrySet 0]
  196.     }
  197.     $box.top.parent config \
  198.     -entrySet $entrySet \
  199.     -selected $selected
  200.  
  201.     eval [$box.top.nameList textModified]
  202.     $box popUp
  203. }
  204.  
  205. method DocStructDlg::editSection {this} {
  206.     set section [[$this structure] selected]
  207.     if {! [isCommand [$section parent]]} return
  208.  
  209.     global classCount
  210.     set box [getParent $this].[nt_get_type $this]editSection$classCount
  211.     incr classCount
  212.     ClassMaker::extend TemplateDialog EditSectionTemplateDialog \
  213.     {dialog tree section}
  214.     EditSectionTemplateDialog new $box \
  215.     -modal yes \
  216.     -title "Edit Section" \
  217.     -autoPopDown 0 \
  218.     -dialog $this \
  219.     -tree [$this structure] \
  220.     -section $section \
  221.     -helpPressed {.main helpOnName editSection} \
  222.     -okPressed {
  223.         set name [%this.top.name text]
  224.         set id [lsearch -exact \
  225.         "[%this.top.parent entrySet]" "[%this.top.parent selected]"]
  226.         set sectionNodes [concat [%this section] [[%this section] nodes]]
  227.         set nodes [%this tree].root
  228.         foreach node [[%this tree].root nodes] {
  229.         if {[lsearch -exact $sectionNodes $node] != -1} continue
  230.         lappend nodes $node
  231.         }
  232.         [%this section] setParent [lindex $nodes $id]
  233.         if {"$name" != "[[%this section] label]"} {
  234.         [%this section] label "$name"
  235.         }
  236.         %this popDown
  237.         %this delete
  238.     } \
  239.     -cancelPressed {
  240.         %this delete
  241.     }
  242.     interface DlgColumn $box.top {
  243.     Label nameLab {
  244.         text "Name:"
  245.     }
  246.     SingleLineText name {}
  247.     Label parentLab {
  248.         text "Parent:"
  249.     }
  250.     DropDwnList parent {
  251.         rowCount 5
  252.     }
  253.     }
  254.     $box.top.name config \
  255.     -text "[$section label]" \
  256.     -textModified {
  257.         set box [getParent [getParent %this]]
  258.         set label [%this text]
  259.         set origLabel [[$box section] label]
  260.         if {"[rmWhiteSpace $label]" == "" ||
  261.         ("$label" != "$origLabel" &&
  262.          "[[[$box dialog] fileInfo] findComponent $label]" != "")} {
  263.         set selected 0
  264.         } else {
  265.         set selected 1
  266.         }
  267.         $box okSensitive $selected
  268.         $box okDefault $selected
  269.         $box cancelDefault [expr 1 - $selected]
  270.     }
  271.  
  272.     set entrySet \"[[$this structure].root label]\"
  273.     set sectionNodes [concat $section [$section nodes]]
  274.     foreach node [[$this structure].root nodes] {
  275.     if {[lsearch -exact $sectionNodes "$node"] != -1} continue
  276.     lappend entrySet [$node label]
  277.     }
  278.     $box.top.parent config \
  279.     -entrySet $entrySet \
  280.     -selected [[$section parent] label]
  281.  
  282.     eval [$box.top.name textModified]
  283.     $box popUp
  284. }
  285.  
  286. method DocStructDlg::load {this} {
  287.     $this saved 0
  288.     set parent $this.top.tree.root
  289.     set indentation -1
  290.     set parentArray($indentation) $parent
  291.     for {set fiComponent [[$this fileInfo] firstComponent]} \
  292.     {"$fiComponent" != ""} \
  293.     {set fiComponent [$fiComponent next]} {
  294.  
  295.     if {[$fiComponent indentation] != $indentation} {
  296.         set prevIndentation $indentation
  297.         set indentation [$fiComponent indentation]
  298.         if {$prevIndentation == -1} {
  299.         set parentArray($indentation) $parentArray(-1)
  300.         } elseif {($indentation > $prevIndentation) ||
  301.               (! [info exists parentArray($indentation)])} {
  302.         set parentArray($indentation) $parent.$node
  303.         }
  304.         set parent $parentArray($indentation)
  305.     }
  306.  
  307.     if {! [$parent hasChildren]} {
  308.         $parent hasChildren 1
  309.         $parent foldState 0
  310.     }
  311.     set node [$parent count]
  312.     DocStructNode new $parent.$node "[$fiComponent uiName]" \
  313.         -fiComponent $fiComponent
  314.     $parent count [expr $node + 1]
  315.     }
  316. }
  317.  
  318. method DocStructDlg::popUp {this} {
  319.     if [$this editable] {
  320.     PushButton new $this.save \
  321.         -label Save \
  322.         -activated {
  323.         set dialog [getParent %this]
  324.         $dialog autoPopDown 0
  325.         eval [$dialog okPressed]
  326.         $dialog autoPopDown 1
  327.         }
  328.     }
  329.  
  330.     $this fileInfo [DocStructure new $this.fileInfo]
  331.     if [$this editable] {
  332.     [$this fileInfo] edit [$this dsm]
  333.     } else {
  334.     [$this fileInfo] load [$this dsm]
  335.     }
  336.     $this load
  337.     $this selectionChanged
  338.     $this title "[$this title] - [[$this document] getInfo Name]"
  339.     $this TemplateDialog::popUp
  340. }
  341.  
  342. method DocStructDlg::removeSection {this} {
  343.     [[$this structure] selected] delete
  344.     $this selectionChanged
  345. }
  346.  
  347. method DocStructDlg::save {this} {
  348.     [$this structure].root save
  349.     [$this fileInfo] save
  350.     $this saved 1
  351. }
  352.  
  353. method DocStructDlg::selectionChanged {this} {
  354.     if [$this editable] {
  355.     $this.top.actions.menu.new sensitive 1
  356.     set section [[$this structure] selected]
  357.     if {"$section" == "" || "[$section parent]" == ""} {
  358.         $this.top.actions.menu.edit sensitive 0
  359.         $this.top.actions.menu.delete sensitive 0
  360.     } else {
  361.         $this.top.actions.menu.edit sensitive 1
  362.         $this.top.actions.menu.delete sensitive 1
  363.     }
  364.     } else {
  365.     $this.top.actions.menu.new sensitive 0
  366.     $this.top.actions.menu.edit sensitive 0
  367.     $this.top.actions.menu.delete sensitive 0
  368.     }
  369. }
  370.  
  371. # Do not delete this line -- regeneration end marker
  372.  
  373. method DocStructDlg::structure {this args} {
  374.     if {$args == ""} {
  375.         return [$this _structure]
  376.     }
  377.     set ref [$this _structure]
  378.     if {$ref != ""} {
  379.         $ref _dialog ""
  380.     }
  381.     set obj [lindex $args 0]
  382.     if {$obj != ""} {
  383.         $obj _dialog $this
  384.     }
  385.     $this _structure $obj
  386. }
  387.  
  388.