home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / propertydi.tcl < prev    next >
Text File  |  1997-01-07  |  5KB  |  213 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cadre Technologies Inc.    1996
  4. #
  5. #      File:           @(#)propertydi.tcl    /main/titanic/1
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)propertydi.tcl    /main/titanic/1   7 Jan 1997 Copyright 1996 Cadre Technologies Inc.
  10.  
  11. # Start user added include file section
  12.  
  13. require propcontif.tcl
  14.  
  15. # End user added include file section
  16.  
  17.  
  18. Class PropertyDialog : {TemplateDialog} {
  19.     constructor
  20.     method destructor
  21.     method popUp
  22.     method handleOk
  23.     method handleDefine
  24.     method handleCancel
  25.     method selectionChanged
  26.     method fillInterface
  27.     method addContainer
  28.     method removeContainer
  29.     method holderDialog
  30.     method getEditStatus
  31.     method setEditStatus
  32.     method removeEditStatus
  33.     attribute editable
  34.     attribute tool
  35.     attribute currentContainer
  36.     attribute containerSet
  37.     attribute _holderDialog
  38.     attribute editStatus
  39. }
  40.  
  41. constructor PropertyDialog {class this name tool} {
  42.     set this [TemplateDialog::constructor $class $this $name]
  43.     $this editable 1
  44.     $this tool $tool
  45.     $this containerSet [List new]
  46.     $this editStatus [Dictionary new]
  47.     # Start constructor user section
  48.  
  49.     $this config \
  50.         -modal yes \
  51.         -title Properties \
  52.         -okPressed {%this handleOk} \
  53.         -cancelPressed {%this handleCancel}
  54.     DlgRow new $this.r
  55.     TextList new $this.r.list \
  56.         -selectionChanged "$this selectionChanged" \
  57.         -selectionPolicy BROWSE \
  58.         -font "courier-normal-12" \
  59.         -rowCount 10
  60.     OneOf new $this.r.oneOf -horShrinkFactor 10 -horStretchFactor 10
  61.     Label new $this.r.oneOf.startPage -text Properties
  62.     PushButton new $this.define -label "Define Item" \
  63.         -activated "$this handleDefine" -sensitive 0
  64.  
  65.     # End constructor user section
  66.     return $this
  67. }
  68.  
  69. method PropertyDialog::destructor {this} {
  70.     set ref [$this _holderDialog]
  71.     if {$ref != ""} {
  72.         $ref _dialog ""
  73.     }
  74.     # Start destructor user section
  75.     [$this tool] releasePropContainers
  76.     PropContIf::clearInterfaces
  77.     # End destructor user section
  78. }
  79.  
  80. method PropertyDialog::popUp {this} {
  81.     set contents ""
  82.     set cntSet [[$this tool] propContainerSet]
  83.     [$this containerSet] contents [$cntSet contents]
  84.     $cntSet foreach cnt {
  85.         PropContIf::createInterface $this.r.oneOf $cnt
  86.         lappend contents [$cnt propertyPresentation]
  87.     }
  88.     $this.r.list entrySet $contents
  89.     $this.r.oneOf currentOne 0
  90.     $this config -currentContainer "" -editStatus [Dictionary new]
  91.     $this TemplateDialog::popUp
  92. }
  93.  
  94. method PropertyDialog::handleOk {this} {
  95.     set cnt [$this currentContainer]
  96.     if {$cnt != "" && [$this editable]} {
  97.         [$cnt propInterface] setProperties $cnt
  98.     }
  99.     [$this containerSet] foreach cnt {
  100.         if {[$this getEditStatus $cnt] == "editProperties"} {
  101.             $cnt saveProperties
  102.         }
  103.         $cnt quitProperties
  104.     }
  105.     $this delete
  106. }
  107.  
  108. method PropertyDialog::handleDefine {this} {
  109.     set cnt [$this currentContainer]
  110.     $this setEditStatus $cnt ""
  111.     $cnt createPropertyHolder
  112.     $this selectionChanged
  113. }
  114.  
  115. method PropertyDialog::handleCancel {this} {
  116.     [$this containerSet] foreach cnt {
  117.         $cnt quitProperties
  118.     }
  119.     $this delete
  120. }
  121.  
  122. method PropertyDialog::selectionChanged {this} {
  123.  
  124.     $this busy 1
  125.     set cnt [$this currentContainer]
  126.     if {$cnt != "" && [$this editable]} {
  127.         [$cnt propInterface] setProperties $cnt
  128.     }
  129.     set index [lindex [$this.r.list selectedIndexSet] 0]
  130.     set cnt [[$this containerSet] index $index]
  131.     $this currentContainer $cnt
  132.     $this.define sensitive \
  133.         [expr ![$cnt existPropertyHolder] && [$this editable]]
  134.     if [$this editable] {
  135.         set method editProperties
  136.     } else {
  137.         set method loadProperties
  138.     }
  139.     $this fillInterface $cnt $method
  140.     $this busy 0
  141. }
  142.  
  143. method PropertyDialog::fillInterface {this cnt method} {
  144.     set status [$this getEditStatus $cnt]
  145.     if {$status == ""} {
  146.         if [catch {$cnt $method} msg] {
  147.             wmtkerror $msg
  148.             if {$method == "loadProperties"} {
  149.                 $this.r.oneOf currentOne 0
  150.                 return
  151.             }
  152.             # Edit failed, try load.
  153.             if [catch {$cnt loadProperties} msg] {
  154.                 wmtkerror $msg
  155.                 $this.r.oneOf currentOne 0
  156.                 return
  157.             }
  158.             wmtkmessage "Showing properties"
  159.             set method loadProperties
  160.             $cnt editable 0
  161.         }
  162.         $this setEditStatus $cnt $method
  163.         set status $method
  164.     }
  165.     if {$status == "editProperties"} {
  166.         $this title "Edit Properties"
  167.     } else {
  168.         $this title "Show Properties"
  169.     }
  170.     set if [$cnt propInterface]
  171.     $if getProperties $cnt
  172.     $this.r.oneOf currentOne [$if index]
  173. }
  174.  
  175. # Do not delete this line -- regeneration end marker
  176.  
  177. method PropertyDialog::addContainer {this newContainer} {
  178.     [$this containerSet] append $newContainer
  179.  
  180. }
  181.  
  182. method PropertyDialog::removeContainer {this oldContainer} {
  183.     [$this containerSet] removeValue $oldContainer
  184. }
  185.  
  186. method PropertyDialog::holderDialog {this args} {
  187.     if {$args == ""} {
  188.         return [$this _holderDialog]
  189.     }
  190.     set ref [$this _holderDialog]
  191.     if {$ref != ""} {
  192.         $ref _dialog ""
  193.     }
  194.     set obj [lindex $args 0]
  195.     if {$obj != ""} {
  196.         $obj _dialog $this
  197.     }
  198.     $this _holderDialog $obj
  199. }
  200.  
  201. method PropertyDialog::getEditStatus {this container} {
  202.     return [[$this editStatus] set $container]
  203. }
  204.  
  205. method PropertyDialog::setEditStatus {this container newEditStatus} {
  206.     [$this editStatus] set $container $newEditStatus
  207. }
  208.  
  209. method PropertyDialog::removeEditStatus {this container} {
  210.     [$this editStatus] unset $container
  211. }
  212.  
  213.