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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cadre Technologies Inc.    1996
  4. #
  5. #      File:           @(#)propertydi.tcl    /main/3
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)propertydi.tcl    /main/3   26 Jun 1996 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.     set cnt [$this currentContainer]
  124.     if {$cnt != "" && [$this editable]} {
  125.         [$cnt propInterface] setProperties $cnt
  126.     }
  127.     set index [lindex [$this.r.list selectedIndexSet] 0]
  128.     set cnt [[$this containerSet] index $index]
  129.     $this currentContainer $cnt
  130.     $this.define sensitive \
  131.         [expr ![$cnt existPropertyHolder] && [$this editable]]
  132.     if [$this editable] {
  133.         set method editProperties
  134.     } else {
  135.         set method loadProperties
  136.     }
  137.     $this fillInterface $cnt $method
  138. }
  139.  
  140. method PropertyDialog::fillInterface {this cnt method} {
  141.     set status [$this getEditStatus $cnt]
  142.     if {$status == ""} {
  143.         if [catch {$cnt $method} msg] {
  144.             wmtkerror $msg
  145.             if {$method == "loadProperties"} {
  146.                 $this.r.oneOf currentOne 0
  147.                 return
  148.             }
  149.             # Edit failed, try load.
  150.             if [catch {$cnt loadProperties} msg] {
  151.                 wmtkerror $msg
  152.                 $this.r.oneOf currentOne 0
  153.                 return
  154.             }
  155.             wmtkmessage "Showing properties"
  156.             set method loadProperties
  157.             $cnt editable 0
  158.         }
  159.         $this setEditStatus $cnt $method
  160.         set status $method
  161.     }
  162.     if {$status == "editProperties"} {
  163.         $this title "Edit Properties"
  164.     } else {
  165.         $this title "Show Properties"
  166.     }
  167.     set if [$cnt propInterface]
  168.     $if getProperties $cnt
  169.     $this.r.oneOf currentOne [$if index]
  170. }
  171.  
  172. # Do not delete this line -- regeneration end marker
  173.  
  174. method PropertyDialog::addContainer {this newContainer} {
  175.     [$this containerSet] append $newContainer
  176.  
  177. }
  178.  
  179. method PropertyDialog::removeContainer {this oldContainer} {
  180.     [$this containerSet] removeValue $oldContainer
  181. }
  182.  
  183. method PropertyDialog::holderDialog {this args} {
  184.     if {$args == ""} {
  185.         return [$this _holderDialog]
  186.     }
  187.     set ref [$this _holderDialog]
  188.     if {$ref != ""} {
  189.         $ref _dialog ""
  190.     }
  191.     set obj [lindex $args 0]
  192.     if {$obj != ""} {
  193.         $obj _dialog $this
  194.     }
  195.     $this _holderDialog $obj
  196. }
  197.  
  198. method PropertyDialog::getEditStatus {this container} {
  199.     return [[$this editStatus] set $container]
  200. }
  201.  
  202. method PropertyDialog::setEditStatus {this container newEditStatus} {
  203.     [$this editStatus] set $container $newEditStatus
  204. }
  205.  
  206. method PropertyDialog::removeEditStatus {this container} {
  207.     [$this editStatus] unset $container
  208. }
  209.  
  210.