home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / cbpropview.tcl < prev    next >
Text File  |  1997-08-29  |  6KB  |  188 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cadre Technologies Inc.    1996
  4. #
  5. #      File:           @(#)cbpropview.tcl    /main/titanic/2
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)cbpropview.tcl    /main/titanic/2   29 Aug 1997 Copyright 1996 Cadre Technologies Inc.
  10.  
  11. # Start user added include file section
  12. require "cbpropcmpl.tcl"
  13. require "cbpropcomp.tcl"
  14. require "cbproplabe.tcl"
  15. require "cbpropitem.tcl"
  16. require "cbpropcont.tcl"
  17.  
  18. require "propstruct.tcl"
  19. require "propertydi.tcl"
  20. require "labelpartn.tcl"
  21. require "cblongname.tcl"
  22. # End user added include file section
  23.  
  24.  
  25. Class CBPropViewer : {Object} {
  26.     constructor
  27.     method destructor
  28.     method showProperties
  29.     method createPropContainers
  30.     method indent
  31.     method releasePropContainers
  32.     method addPropContainer
  33.     method removePropContainer
  34.     attribute propContainerSet
  35.     attribute propKnowledgeDB
  36. }
  37.  
  38. constructor CBPropViewer {class this name propKnowledgeDB} {
  39.     set this [Object::constructor $class $this $name]
  40.     $this propKnowledgeDB $propKnowledgeDB
  41.     $this propContainerSet [List new]
  42.     # Start constructor user section
  43.     # End constructor user section
  44.     return $this
  45. }
  46.  
  47. method CBPropViewer::destructor {this} {
  48.     # Start destructor user section
  49.     # End destructor user section
  50. }
  51.  
  52. method CBPropViewer::showProperties {this entry} {
  53.     $classBrowser updateClientContext [$entry getCBClass]
  54.     $this createPropContainers $entry
  55.     # Don't reuse a PropertyDialog:
  56.     # the initial size does not change to fit new contents.
  57.     PropertyDialog new $classBrowser.showProperties $this \
  58.         -editable 0 \
  59.         -helpPressed "$classBrowser helpOnName showProperties"
  60.     $classBrowser.showProperties popUp
  61. }
  62.  
  63. method CBPropViewer::createPropContainers {this entry} {
  64.     set cbPropCompList [CBPropCmpList new]
  65.     $entry collectPropComps $cbPropCompList
  66.     set propStructList [List new]
  67.     set phaseV [[ClientContext::global] currentPhase]
  68.     PropLocation new .propLocation \
  69.         -phaseType [[$phaseV phase] type] \
  70.         -diagramType $CAD_TYPE
  71.     set maxNameLength 0
  72.     [$cbPropCompList propComponentSet] foreach propComp {
  73.         set count 0
  74.         set compType [[$propComp component] type]
  75.         .propLocation componentType $compType
  76.         set indent [$this indent $compType]
  77.         [$propComp propLabelSet] foreach propLabel {
  78.             set labType [[$propLabel label] type]
  79.             .propLocation labelType $labType
  80.             [$propLabel propItemSet] foreach propItem {
  81.             set itemType [[$propItem item] type]
  82.             .propLocation containerKind Component
  83.             .propLocation containerType $compType
  84.             set compPropDefs [[$this propKnowledgeDB] \
  85.                 definitions .propLocation]
  86.             .propLocation containerKind Item
  87.             .propLocation containerType $itemType
  88.             set itemPropDefs [[$this propKnowledgeDB] \
  89.                 definitions .propLocation]
  90.             if {"$compPropDefs$itemPropDefs" == ""} {
  91.                 continue
  92.             }
  93.             set objName $indent[[$propItem item] name]
  94.             set objNameLength [string length $objName]
  95.             if {$objNameLength > $maxNameLength} {
  96.                 set maxNameLength $objNameLength
  97.             }
  98.             set labIdx ${compType},${labType},${itemType}
  99.             if [info exists labelPartName($labIdx)] {
  100.                 set objType $labelPartName($labIdx)
  101.             } else {
  102.                 if {[info exists multiLabelComp($compType)]} {
  103.                 set objType \
  104.                     "[ShortLongName::longName $compType]\
  105.                     [ShortLongName::longName $labType]"
  106.                 } else {
  107.                 set objType [ShortLongName::longName $compType]
  108.                 }
  109.             }
  110.             # Note: attribute itemRef is used to store the workItem!
  111.             $propStructList append [PropStruct new \
  112.                 -name $objName \
  113.                 -type $objType \
  114.                 -compPropDefs $compPropDefs \
  115.                 -containerKey [.propLocation asString] \
  116.                 -component [$propComp component] \
  117.                 -itemRef [$propItem workItem] \
  118.                 -itemPropDefs $itemPropDefs]
  119.             incr count
  120.             }
  121.         }
  122.         if {$count == 0} {
  123.             .propLocation containerKind Component
  124.             .propLocation containerType $compType
  125.             .propLocation labelType ""
  126.             set compPropDefs [[$this propKnowledgeDB] \
  127.                 definitions .propLocation]
  128.             if {[llength $compPropDefs] > 0} {
  129.                 $propStructList append [PropStruct new \
  130.                     -type [ShortLongName::longName $compType] \
  131.                     -compPropDefs $compPropDefs \
  132.                     -containerKey [.propLocation asString] \
  133.                     -component [$propComp component]]
  134.             }
  135.         }
  136.     }
  137.     .propLocation delete
  138.     set formatString "%-*.*s  %s"
  139.     set cntList [List new]
  140.     $propStructList foreach propStruct {
  141.         set pres [format $formatString $maxNameLength $maxNameLength \
  142.             [$propStruct name] [$propStruct type]]
  143.         # Note: attribute itemRef was used to store the workItem!
  144.         set wrkItem [$propStruct itemRef]
  145.         if {$wrkItem == "" || [$wrkItem isNil]} {
  146.             set itemProperties [ORB::nil]
  147.         } else {
  148.             set itemProperties [$wrkItem properties]
  149.         }
  150.         set cnt [CBPropContainer new -editable 0 \
  151.             -propertyKey [$propStruct containerKey] \
  152.             -propertyPresentation $pres \
  153.             -holderComp [$propStruct component] \
  154.             -holderItemProperties $itemProperties]
  155.         foreach propDef [$propStruct compPropDefs] {
  156.             $cnt addSpecificPropDef $propDef holderComp
  157.         }
  158.         foreach propDef [$propStruct itemPropDefs] {
  159.             $cnt addSpecificPropDef $propDef holderItemProperties
  160.         }
  161.         $cntList append $cnt
  162.     }
  163.     $this propContainerSet $cntList
  164. }
  165.  
  166. method CBPropViewer::indent {this compType} {
  167.     if {$compType == $CDM_PARAM} {
  168.         return "    "
  169.     }
  170.     return ""
  171. }
  172.  
  173. method CBPropViewer::releasePropContainers {this} {
  174.     # Not applicable !!
  175. }
  176.  
  177. # Do not delete this line -- regeneration end marker
  178.  
  179. method CBPropViewer::addPropContainer {this newPropContainer} {
  180.     [$this propContainerSet] append $newPropContainer
  181.  
  182. }
  183.  
  184. method CBPropViewer::removePropContainer {this oldPropContainer} {
  185.     [$this propContainerSet] removeValue $oldPropContainer
  186. }
  187.  
  188.