home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / propsecdlg.tcl < prev    next >
Text File  |  1996-06-12  |  8KB  |  308 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cadre Technologies Inc.    1996
  4. #
  5. #      File:           @(#)propsecdlg.tcl    /main/3
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)propsecdlg.tcl    /main/3   12 Jun 1996 Copyright 1996 Cadre Technologies Inc.
  10.  
  11. # Start user added include file section
  12. require "browsfile.tcl"
  13. require "browsitem.tcl"
  14. require "browspropd.tcl"
  15. require "docstructp.tcl"
  16. require "docgenerat.tcl"
  17. # End user added include file section
  18.  
  19.  
  20. Class PropSecDlg : {TemplateDialog} {
  21.     method destructor
  22.     constructor
  23.     method popUp
  24.     method handleOk
  25.     method handleCancel
  26.     method fileSelectionChanged
  27.     method itemSelectionChanged
  28.     method propSelectionChanged
  29.     method sectionNameChanged
  30.     method addPropDef
  31.     attribute dbObj
  32.     attribute sectionName
  33.     attribute propKnowledgeDB
  34. }
  35.  
  36. method PropSecDlg::destructor {this} {
  37.     # Start destructor user section
  38.     [$this propKnowledgeDB] delete
  39.     # End destructor user section
  40. }
  41.  
  42. constructor PropSecDlg {class this name dbObj sectionName} {
  43.     set this [TemplateDialog::constructor $class $this $name]
  44.     $this dbObj $dbObj
  45.     $this sectionName $sectionName
  46.     # Start constructor user section
  47.     interface DlgColumn $this.if {
  48.         DlgColumn name {
  49.             verStretchFactor 0
  50.         }
  51.         DlgRow row {
  52.             DlgColumn files {
  53.                 Label label {
  54.                     text Files
  55.                 }
  56.                 BrowsView bv {
  57.                     mode DETAIL
  58.                     rowCount 10
  59.                     columnCount 20
  60.                     selectionPolicy BROWSE
  61.                     BrowsHeader name {
  62.                         label Name
  63.                         width 25
  64.                     }
  65.                     BrowsHeader type {
  66.                         label Type
  67.                         width 4
  68.                     }
  69.                 }
  70.             }
  71.             DlgColumn items {
  72.                 Label label {
  73.                     text Items
  74.                 }
  75.                 BrowsView bv {
  76.                     mode DETAIL
  77.                     rowCount 10
  78.                     columnCount 30
  79.                     selectionPolicy BROWSE
  80.                     BrowsHeader name {
  81.                         label Name
  82.                         width 25
  83.                     }
  84.                     BrowsHeader type {
  85.                         label Type
  86.                         width 4
  87.                     }
  88.                 }
  89.             }
  90.             DlgColumn props {
  91.                 Label label {
  92.                     text Properties
  93.                 }
  94.                 BrowsView bv {
  95.                     mode DETAIL
  96.                     rowCount 10
  97.                     columnCount 20
  98.                     BrowsHeader name {
  99.                         label Name
  100.                         width 30
  101.                     }
  102.                 }
  103.             }
  104.         }
  105.     }
  106.     $this.if.row.files.bv selectionChanged "$this fileSelectionChanged"
  107.     $this.if.row.items.bv selectionChanged "$this itemSelectionChanged"
  108.     $this.if.row.props.bv selectionChanged "$this propSelectionChanged"
  109.     if {$sectionName == ""} {
  110.         Label new $this.if.name.label -text "Property Section Name:"
  111.         SingleLineText new $this.if.name.name \
  112.             -textModified "$this sectionNameChanged"
  113.     }
  114.     $this config \
  115.         -modal yes \
  116.         -title "Property Section" \
  117.         -okPressed "$this handleOk" \
  118.         -cancelPressed "$this handleCancel" \
  119.         -helpPressed {.main helpOnName propertySection} \
  120.         -propKnowledgeDB [PropKnowledgeDB new $this.propKnowledgeDB]
  121.  
  122.     set context "/[[$dbObj documentedSystem] identity]"
  123.     set obj [$dbObj getParent CustomLevelVersion]
  124.     set obj [$obj getParent CustomLevelVersion]
  125.     while {$obj != ""} {
  126.         set context "/[$obj identity]$context"
  127.         set obj [$obj getParent CustomLevelVersion]
  128.     }
  129.     if [catch {[$this propKnowledgeDB] context $context} msg] {
  130.         wmtkerror $msg
  131.     }
  132.     # End constructor user section
  133.     return $this
  134. }
  135.  
  136. method PropSecDlg::popUp {this} {
  137.     set nr 0
  138.     set dbObj [$this dbObj]
  139.     set objHdlr [$wmttoolObj objectHdlr]
  140.     set configV [$dbObj getParent ConfigVersion]
  141.     foreach file [[[$dbObj documentedSystem] system] files] {
  142.         set fileVersions [$file fileVersions]
  143.         if {[lempty $fileVersions] ||
  144.             [[$file selectedVersion $configV] isNil]} continue
  145.         set fileType [$file type]
  146.         set objSpec [getObjectSpec $objHdlr \
  147.             [[lindex $fileVersions 0] uiClass] $fileType \
  148.         ]
  149.         if {"$objSpec" == ""} continue
  150.         BrowsFile new $this.if.row.files.bv.$nr \
  151.             -fileVersion [$file selectedVersion $configV] \
  152.             -smallIcon [$objSpec smallIcon] \
  153.             -label [$file qualifiedName :] \
  154.             -details $fileType
  155.         lappend [$this.if.row.files.bv objectSet] \
  156.             $this.if.row.files.bv.$nr
  157.         incr nr
  158.     }
  159.     $this.if.row.files.bv sort -column "$this.if.row.files.bv.type" \
  160.                    -column "$this.if.row.files.bv.name"
  161.  
  162.     $this propSelectionChanged
  163.     $this TemplateDialog::popUp
  164. }
  165.  
  166. method PropSecDlg::handleOk {this} {
  167.     DocStructPart new .docStrucPart -documentVersion [$this dbObj] \
  168.                     -sectionName [$this sectionName]
  169.     if [lempty [$this.if.row.items.bv selectedSet]] {
  170.         set selObj [lindex [$this.if.row.files.bv selectedSet] 0]
  171.         .docStrucPart config \
  172.             -sectionType "Fileprop" \
  173.             -sectionClass "Fileprop" \
  174.             -fileVersion [$selObj fileVersion]
  175.     } else {
  176.         set selObj [lindex [$this.if.row.items.bv selectedSet] 0]
  177.         .docStrucPart config \
  178.             -sectionType "Itemprop" \
  179.             -sectionClass "Itemprop" \
  180.             -workItem [$selObj item]
  181.     }
  182.     set propertyNames ""
  183.     foreach propObj [$this.if.row.props.bv selectedSet] {
  184.         lappend propertyNames [[$propObj propDef] name]
  185.     }
  186.     .docStrucPart propertyNames $propertyNames
  187.     DocGenerator::createSection .docStrucPart
  188.     wmtkmessage ""
  189.     $wmttoolObj updateView
  190.     .docStrucPart delete
  191.     $this delete
  192. }
  193.  
  194. method PropSecDlg::handleCancel {this} {
  195.     $this delete
  196. }
  197.  
  198. method PropSecDlg::fileSelectionChanged {this} {
  199.     foreach prop [$this.if.row.props.bv objectSet] {
  200.         $prop delete
  201.     }
  202.     $this propSelectionChanged
  203.     foreach item [$this.if.row.items.bv objectSet] {
  204.         $item delete
  205.     }
  206.     if [lempty [$this.if.row.files.bv selectedSet]] {
  207.         return
  208.     }
  209.     set dbObj [$this dbObj]
  210.     set fileV [[lindex [$this.if.row.files.bv selectedSet] 0] fileVersion]
  211.     PropLocation new .propLocation \
  212.         -containerKind [$fileV ORB_class] \
  213.         -containerType [[$fileV file] type] \
  214.         -phaseType [[[$dbObj getParent PhaseVersion] phase] type]
  215.     set propDefs [[$this propKnowledgeDB] definitions .propLocation]
  216.     set nr 0
  217.     foreach propDef $propDefs {
  218.         $this addPropDef $propDef $nr
  219.         incr nr
  220.     }
  221.     $this.if.row.props.bv sort -column "$this.if.row.props.bv.name"
  222.     .propLocation delete
  223.     if [$fileV isA Diagram] {
  224.         set nr 0
  225.         set configV [$dbObj getParent ConfigVersion]
  226.         foreach item [$fileV definedItemRefs $configV] {
  227.             BrowsItem new $this.if.row.items.bv.$nr \
  228.                 -label [$item qualifiedName :] \
  229.                 -details [$item type] \
  230.                 -item $item
  231.             lappend [$this.if.row.items.bv objectSet] \
  232.                 $this.if.row.items.bv.$nr
  233.             incr nr
  234.         }
  235.     }
  236.     $this.if.row.items.bv sort -column "$this.if.row.items.bv.type" \
  237.                    -column "$this.if.row.items.bv.name"
  238. }
  239.  
  240. method PropSecDlg::itemSelectionChanged {this} {
  241.     if [lempty [$this.if.row.items.bv selectedSet]] {
  242.         $this fileSelectionChanged
  243.         return
  244.     }
  245.     foreach prop [$this.if.row.props.bv objectSet] {
  246.         $prop delete
  247.     }
  248.     set dbObj [$this dbObj]
  249.     set fileV [[lindex [$this.if.row.files.bv selectedSet] 0] fileVersion]
  250.     set item [[lindex [$this.if.row.items.bv selectedSet] 0] item]
  251.     PropLocation new .propLocation \
  252.         -containerKind Item \
  253.         -containerType [$item type] \
  254.         -phaseType [[[$dbObj getParent PhaseVersion] phase] type] \
  255.         -diagramType [[$fileV file] type]
  256.     if {[.propLocation diagramType] == "cdm"} {
  257.         .propLocation diagramType "cad"
  258.     }
  259.     set propDefs [[$this propKnowledgeDB] definitions .propLocation]
  260.     set nr 0
  261.     foreach propDef $propDefs {
  262.         $this addPropDef $propDef $nr
  263.         incr nr
  264.     }
  265.     $this.if.row.props.bv sort -column "$this.if.row.props.bv.name"
  266.     $this propSelectionChanged
  267.     .propLocation delete
  268. }
  269.  
  270. method PropSecDlg::propSelectionChanged {this} {
  271.     set selected 1
  272.     if {[rmWhiteSpace [$this sectionName]] == "" ||
  273.         [lempty [$this.if.row.props.bv selectedSet]]} {
  274.         set selected 0
  275.     }
  276.     $this okSensitive $selected
  277.     $this okDefault $selected
  278.     $this cancelDefault [expr 1 - $selected]
  279. }
  280.  
  281. method PropSecDlg::sectionNameChanged {this} {
  282.     set prevSectionName [$this sectionName]
  283.     set sectionName [$this.if.name.name text]
  284.     $this sectionName $sectionName
  285.     if {"[rmWhiteSpace $prevSectionName]" == "" ||
  286.         "[rmWhiteSpace $sectionName]" == ""} {
  287.         $this propSelectionChanged
  288.     }
  289. }
  290.  
  291. method PropSecDlg::addPropDef {this def id} {
  292.     set nr 0
  293.     foreach member [$def memberSet] {
  294.         $this addPropDef $member ${id}_$nr
  295.         incr nr
  296.     }
  297.     if {$nr == 0} {
  298.         BrowsPropDef new $this.if.row.props.bv.$id \
  299.             -label [$def longName] \
  300.             -propDef $def
  301.         lappend [$this.if.row.props.bv objectSet] \
  302.             $this.if.row.props.bv.$id
  303.     }
  304. }
  305.  
  306. # Do not delete this line -- regeneration end marker
  307.  
  308.