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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)propifclas.tcl    /main/titanic/7
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)propifclas.tcl    /main/titanic/7   23 Sep 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require "propifgrou.tcl"
  15.  
  16. Class PropIfClassLib : {PropIfGroup} {
  17.     method destructor
  18.     constructor
  19.     method getProperties
  20.     method setProperties
  21.     method updateOptionMenus
  22.     attribute assocKind
  23.     attribute operation
  24. }
  25.  
  26. method PropIfClassLib::destructor {this} {
  27.     # Start destructor user section
  28.     # End destructor user section
  29.     $this PropIfParent::destructor
  30. }
  31.  
  32. constructor PropIfClassLib {class this guiParent propDef} {
  33.     set guiPage [NoteBkPage new $guiParent.[$propDef name]Page \
  34.             -label [$propDef longName]]
  35.  
  36.     set this [PropIfGroup::constructor $class $this $guiPage $propDef]
  37.     $this ifElement $guiPage
  38.  
  39.     foreach {attrName value} [$propDef ifOptions] {
  40.         if {$attrName == "-assocKind"} {
  41.             $this assocKind $value
  42.         }
  43.     }
  44.     [[[$this childSet] index 0] ifElement] config \
  45.         -entrySet default \
  46.         -selected default \
  47.         -allowResize 1 \
  48.         -selectionChanged "$this updateOptionMenus"
  49.  
  50.     [[[$this childSet] index 1] ifElement] config \
  51.         -entrySet default \
  52.         -selected default \
  53.         -allowResize 1
  54.  
  55.     return $this
  56. }
  57.  
  58. method PropIfClassLib::getProperties {this propContainer} {
  59.     $this operation ""
  60.  
  61.     if {[$this assocKind] == "normalStart"} {
  62.         set mult_kind [[$propContainer holderComp] getProperty "mult_kind_start"]
  63.         set constraint [[$propContainer holderComp] getProperty "constraint_start"]
  64.     } else {
  65.         set mult_kind [[$propContainer holderComp] getProperty "mult_kind_end"]
  66.         set constraint [[$propContainer holderComp] getProperty "constraint_end"]
  67.     }
  68.  
  69.     if {[$this assocKind] == "qualified"} {
  70.         if {$mult_kind == "many"} {
  71.             if {$constraint == "\{ordered\}"} {
  72.                 $this operation "OSetDict"
  73.             } else {
  74.                 $this operation "SetDict"
  75.             }
  76.         } else {
  77.             $this operation "Dict"
  78.         }
  79.     } else {
  80.         if {$mult_kind == "many"} {
  81.             if {$constraint == "\{ordered\}"} {
  82.                 $this operation "OSet"
  83.             } else {
  84.                 $this operation "Set"
  85.             }
  86.         } else {
  87.             $this operation "Ptr"
  88.         }
  89.     }
  90.  
  91.     set libNameSelected [$propContainer getPropertyValue "assoc_impl"]
  92.     if {$libNameSelected == ""} {
  93.         set libNameSelected "default"
  94.     }
  95.     set strategySelected [$propContainer getPropertyValue "assoc_strategy"]
  96.     if {$strategySelected == ""} {
  97.         set strategySelected "default"
  98.     }
  99.  
  100.     set libNameMenu [[[$this childSet] index 0] ifElement] 
  101.     set strategyMenu [[[$this childSet] index 1] ifElement]
  102.  
  103.     $libNameMenu entrySet $libNameSelected
  104.     $libNameMenu selected $libNameSelected
  105.     $strategyMenu entrySet $strategySelected
  106.     $strategyMenu selected $strategySelected
  107.     $this updateOptionMenus
  108.  
  109.     [$this childSet] foreach child {
  110.         set elem [$child ifElement]
  111.         $elem sensitive [expr [$propContainer isPropertyEditable "assoc_impl"] && \
  112.                   [$propContainer isPropertyEditable "assoc_strategy"]]
  113.     }
  114. }
  115.  
  116. method PropIfClassLib::setProperties {this propContainer} {
  117.     set libNameMenu [[[$this childSet] index 0] ifElement] 
  118.     set strategyMenu [[[$this childSet] index 1] ifElement]
  119.     set libNameSelect [$libNameMenu selected]
  120.     set strategySelect [$strategyMenu selected]
  121.  
  122.     $propContainer changeProperty "assoc_impl" $libNameSelect "default"
  123.     $propContainer changeProperty "assoc_strategy" $strategySelect "default"
  124. }
  125.  
  126. method PropIfClassLib::updateOptionMenus {this} {
  127.     global cplusplusClassLib
  128.     set cplusplusClassLib(default) {
  129.         Ptr default None
  130.         Set default None
  131.         OSet default None
  132.         Dict default None
  133.         SetDict default None
  134.         OSetDict default None
  135.     }
  136.  
  137.     set libNameMenu [[[$this childSet] index 0] ifElement] 
  138.     set strategyMenu [[[$this childSet] index 1] ifElement]
  139.  
  140.     set libNameSelected [$libNameMenu selected]
  141.     set strategySelected [$strategyMenu selected]
  142.  
  143.     set libNameList [array names cplusplusClassLib]
  144.     if {[lsearch -exact $libNameList "default"] == -1} {
  145.         lappend libNameList "default"
  146.     }
  147.     if {[lsearch -exact $libNameList $libNameSelected] == -1} {
  148.         lappend libNameList $libNameSelected
  149.     }
  150.  
  151.     set strategyList {}
  152.     if {[$this operation] == "" ||
  153.         ![info exists cplusplusClassLib($libNameSelected)]} {
  154.         lappend strategyList $strategySelected
  155.     } else {
  156.         foreach {operation strategy action} \
  157.             $cplusplusClassLib($libNameSelected) {
  158.             if {$operation == [$this operation]} {
  159.                 lappend strategyList $strategy
  160.             }
  161.         }
  162.     }
  163.     if {[lsearch -exact $strategyList "default"] == -1} {
  164.         lappend strategyList "default"
  165.     }
  166.     if {[lsearch -exact $strategyList $strategySelected] == -1} {
  167.         set strategySelected "default"
  168.     }
  169.  
  170.     $libNameMenu entrySet [lsort $libNameList]
  171.     $libNameMenu selected $libNameSelected
  172.     $strategyMenu entrySet [lsort $strategyList]
  173.     $strategyMenu selected $strategySelected
  174. }
  175.  
  176. # Do not delete this line -- regeneration end marker
  177.  
  178.