home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / pboopl.tcl < prev    next >
Text File  |  1997-11-07  |  112KB  |  4,095 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. # Copyright (c) 1997 by Cayenne Software, Inc.
  4. #
  5. # This software is furnished under a license and may be used only in
  6. # accordance with the terms of such license and with the inclusion of
  7. # the above copyright notice. This software or any other copies thereof
  8. # may not be provided or otherwise made available to any other person.
  9. # No title to and ownership of the software is hereby transferred.
  10. #
  11. # The information in this software is subject to change without notice
  12. # and should not be construed as a commitment by Cayenne Software, Inc.
  13. #
  14. #---------------------------------------------------------------------------
  15. #
  16. #       File            : pboopl.tcl
  17. #       Author          : 
  18. #       Original date   : November 1997
  19. #       Description     : Classes for code generation
  20. #
  21. #---------------------------------------------------------------------------
  22.  
  23.  
  24. #      File:           @(#)pbgassocin.tcl    /main/titanic/3
  25.  
  26.  
  27. Class PBGAssocInitializer : {Object} {
  28.     constructor
  29.     method destructor
  30. }
  31.  
  32. constructor PBGAssocInitializer {class this name} {
  33.     set this [Object::constructor $class $this $name]
  34.     # Start constructor user section
  35.     # End constructor user section
  36.     return $this
  37. }
  38.  
  39. method PBGAssocInitializer::destructor {this} {
  40.     # Start destructor user section
  41.     # End destructor user section
  42. }
  43.  
  44. # Do not delete this line -- regeneration end marker
  45.  
  46. if [isCommand CMAssocInitializer] {
  47.     Class  PBGAssocInitializerD : {PBGAssocInitializer CMAssocInitializer} {
  48.     }
  49. } else {
  50.     Class PBGAssocInitializerD : {PBGAssocInitializer OPAssocInitializer} {    
  51.     }
  52. }
  53.  
  54. global mostDerivedOOPL ; set mostDerivedOOPL(OPAssocInitializer) PBGAssocInitializerD
  55.  
  56. selfPromoter OPAssocInitializer {this} {
  57.     PBGAssocInitializerD promote $this
  58. }
  59.  
  60.  
  61. #---------------------------------------------------------------------------
  62. #      File:           @(#)pbgattribi.tcl    /main/titanic/3
  63.  
  64.  
  65. Class PBGAttribInitializer : {Object} {
  66.     constructor
  67.     method destructor
  68. }
  69.  
  70. constructor PBGAttribInitializer {class this name} {
  71.     set this [Object::constructor $class $this $name]
  72.     # Start constructor user section
  73.     # End constructor user section
  74.     return $this
  75. }
  76.  
  77. method PBGAttribInitializer::destructor {this} {
  78.     # Start destructor user section
  79.     # End destructor user section
  80. }
  81.  
  82. # Do not delete this line -- regeneration end marker
  83.  
  84. if [isCommand CMAttribInitializer] {
  85.     Class  PBGAttribInitializerD : {PBGAttribInitializer CMAttribInitializer} {
  86.     }
  87. } else {
  88.     Class PBGAttribInitializerD : {PBGAttribInitializer OPAttribInitializer} {    
  89.     }
  90. }
  91.  
  92. global mostDerivedOOPL ; set mostDerivedOOPL(OPAttribInitializer) PBGAttribInitializerD
  93.  
  94. selfPromoter OPAttribInitializer {this} {
  95.     PBGAttribInitializerD promote $this
  96. }
  97.  
  98.  
  99. #---------------------------------------------------------------------------
  100. #      File:           @(#)pbgclass.tcl    /main/titanic/10
  101.  
  102.  
  103. Class PBGClass : {Object} {
  104.     constructor
  105.     method destructor
  106.     method promoter
  107.     method generate
  108.     method generateAsContainedClass
  109.     method getPBClassKind
  110.     method getSuperClass
  111.     method getBuiltinSuperClass
  112.     method getBuiltinSuperClassName
  113.     method hasEvent
  114.     method isGlobalType
  115.     method isAutoInstantiate
  116.     method getWindowType
  117.     method isBuiltin
  118.     method check
  119.     method checkLocal
  120.     method checkContLoop
  121.     method checkPBClassKind
  122.     method checkBuiltinSuperClass
  123.     method checkInheritanceLoop
  124.     method checkClassKind
  125.     method checkSuperClass
  126.     method checkSuperGlobal
  127.     method checkSuperPresence
  128.     method checkMultipleInheritance
  129.     method checkAsContainedClass
  130.     method addContainedTypeName
  131.     method removeContainedTypeName
  132.     attribute pbClassKind
  133.     attribute superClass
  134.     attribute builtinSuperClass
  135.     attribute inhLoopDetect
  136.     attribute containLoopDetect
  137.     attribute containedTypeNameSet
  138. }
  139.  
  140. constructor PBGClass {class this name} {
  141.     set this [Object::constructor $class $this $name]
  142.     $this pbClassKind ""
  143.     $this superClass "_uninitialized_"
  144.     $this builtinSuperClass "_uninitialized_"
  145.     $this inhLoopDetect 0
  146.     $this containLoopDetect 0
  147.     $this containedTypeNameSet [List new]
  148.     # Start constructor user section
  149.     # End constructor user section
  150.     return $this
  151. }
  152.  
  153. method PBGClass::destructor {this} {
  154.     # Start destructor user section
  155.     # End destructor user section
  156. }
  157.  
  158. method PBGClass::promoter {this} {
  159.     $this pbClassKind ""
  160.     $this superClass "_uninitialized_"
  161.     $this builtinSuperClass "_uninitialized_"
  162.     $this inhLoopDetect 0
  163.     $this containLoopDetect 0
  164.     $this containedTypeNameSet [List new]
  165. }
  166.  
  167. method PBGClass::generate {this model} {
  168.     # first determine the kind of entry class,
  169.     # and then call the appropiate generation.
  170.  
  171.  
  172.  
  173.     if {[$this checkLocal] != 0 } {
  174.         # could not generate
  175.         return ""
  176.     } else {    
  177.         set kind [$this getPBClassKind]
  178.  
  179.         if {$kind == ${PBClassKind::NotSupported}} {
  180.             return ""
  181.         }
  182.  
  183.         set name [$this getName]
  184.         $this superClass [$this getSuperClass]
  185.         set superNm [[$this superClass] getName]
  186.         
  187.         # appropiate generation:
  188.         set pbDefGen [PB${kind}Gen new $name $this \
  189.                           -superNm $superNm \
  190.                           -isGlobalType 1 \
  191.                           -globalOoplClass $this \
  192.                           -container "" \
  193.                           -model $model]
  194.         
  195.         return [$pbDefGen generate]
  196.     }
  197.     return ""
  198. }
  199.  
  200. method PBGClass::generateAsContainedClass {this name globalOoplClass fromOoplClass container} {
  201.     set kind [$this getPBClassKind]
  202.     if {$kind == ${PBClassKind::NotSupported}} {
  203.         return ""
  204.     }
  205.     if [$this containLoopDetect] {
  206.         # error already given: E_GRCONTLOOP
  207.         return ""
  208.     }
  209.  
  210.     if {[$this isBuiltin] || [$this isGlobalType]} {
  211.         # pb internal lower cases class names
  212.         set superNm [string tolower [$this getName]]
  213.     } else {
  214.         # pb internal lower cases class names
  215.         set superNm [string tolower [[$this getSuperClass] getName]]
  216.     }
  217.  
  218.     if {$name == $superNm} {
  219.         # error already given: E_INVALIDLOCTYPE
  220.         return ""
  221.     }
  222.     set typeNames [$globalOoplClass containedTypeNameSet]
  223.     # current $name already in contained set because it is already
  224.     #  added in checkAsContainedClass
  225.     #  so error was :already given: $E_MULTDEFLOCTYPES
  226.     
  227.     set pbDefGen [PB${kind}Gen new $name $this \
  228.         -superNm $superNm \
  229.         -isGlobalType 0 \
  230.         -globalOoplClass $globalOoplClass \
  231.         -container $container \
  232.         -model ""]
  233.  
  234.     $this containLoopDetect 1
  235.     set def [$pbDefGen generate]
  236.     $this containLoopDetect 0
  237.  
  238.     return $def
  239. }
  240.  
  241. method PBGClass::getPBClassKind {this} {
  242.     if {[$this pbClassKind] != ""} {
  243.         return [$this pbClassKind]
  244.     }
  245.  
  246.     if {[$this getBuiltinSuperClass] == ""} {
  247.         $this pbClassKind ${PBClassKind::NotSupported}
  248.         return [$this pbClassKind]
  249.     }
  250.  
  251.     if {[$this checkSuperGlobal] != 0} {
  252.         $this pbClassKind ${PBClassKind::NotSupported}
  253.         return [$this pbClassKind]
  254.     }
  255.  
  256.     set builtinSuperNm [$this getBuiltinSuperClassName]
  257.     set classInfo [[PBBuiltinInfo::global] getBuiltinClass $builtinSuperNm]
  258.     if {$classInfo == ""} {
  259.         m4_error $E_INVALBUILTINSUPER [$this getName] $builtinSuperNm
  260.         $this pbClassKind ${PBClassKind::NotSupported}
  261.     } else {
  262.         $this pbClassKind [$classInfo kind]
  263.     }
  264.     return [$this pbClassKind]
  265. }
  266.  
  267. method PBGClass::getSuperClass {this} {
  268.     if {[$this superClass] != "_uninitialized_"} {
  269.         return [$this superClass]
  270.     }
  271.  
  272.     if {[string tolower [$this getName]] == "powerobject"} {
  273.         # this is THE root class
  274.         $this superClass ""
  275.         return ""
  276.     }
  277.     set genNodeSet [$this genNodeSet]
  278.     if {[llength $genNodeSet] == 0} {
  279.         set superClass [[$this ooplModel] classByName "nonvisualobject"]
  280.         $this superClass $superClass
  281.         return $superClass
  282.     }
  283.     # just calling check:
  284.     # set errornr [$this checkMultipleInheritance]
  285.     # there are (multiple) superclas(ses) so take first:
  286.     $this superClass [[lindex $genNodeSet 0] superClass]
  287.     return [[lindex $genNodeSet 0] superClass]
  288. }
  289.  
  290. method PBGClass::getBuiltinSuperClass {this} {
  291.     if {[$this builtinSuperClass] != "_uninitialized_"} {
  292.         return [$this builtinSuperClass]
  293.     }
  294.     if [$this isBuiltin] {
  295.         $this builtinSuperClass $this
  296.         return $this
  297.     }
  298.     set superClass [$this getSuperClass]
  299.     if {$superClass != ""} {
  300.         # now recursive call method:
  301.         set builtinSuperClass [$superClass getBuiltinSuperClass]
  302.         $this builtinSuperClass $builtinSuperClass
  303.         $this inhLoopDetect 0
  304.         return $builtinSuperClass
  305.     }
  306.     # if reaching this point then serious error....
  307.     $this builtinSuperClass ""
  308.     $this inhLoopDetect 0
  309.     return ""
  310. }
  311.  
  312. method PBGClass::getBuiltinSuperClassName {this} {
  313.     set class [$this getBuiltinSuperClass]
  314.     if {$class == ""} {
  315.         return ""
  316.     }
  317.     return [$class getName]
  318. }
  319.  
  320. method PBGClass::hasEvent {this name} {
  321.     set name [string tolower $name]
  322.  
  323.     foreach oper [$this operationSet] {
  324.         if {[$oper isEvent] && 
  325.                 [string tolower [$oper getName]] == $name} {
  326.             return 1
  327.         }
  328.     }
  329.     return 0
  330. }
  331.  
  332. method PBGClass::isGlobalType {this} {
  333.     if {[$this getPropertyValue is_global_type] == "No"} {
  334.         return 0
  335.     }
  336.     if [$this isBuiltin] {
  337.         # The 'is_global_type' property does not apply to builtin
  338.         # classes, so they do not have the property set to 'No'.
  339.         # They must not be interpreted as global types however.
  340.         return 0
  341.     }
  342.     return 1
  343. }
  344.  
  345. method PBGClass::isAutoInstantiate {this} {
  346.     if {[$this getPropertyValue is_autoinstantiate] == "1"} {
  347.         return 1
  348.     }
  349.     return 0
  350. }
  351.  
  352. method PBGClass::getWindowType {this} {
  353.     set windowType [$this getPropertyValue window_type]
  354.     if {$windowType == ""} {
  355.         set windowType "Main"
  356.     }
  357.     return $windowType
  358. }
  359.  
  360. method PBGClass::isBuiltin {this} {
  361.     if {[$this getPropertyValue is_builtin] == "1"} {
  362.         return 1
  363.     }
  364.     return 0
  365. }
  366.  
  367. method PBGClass::check {this} {
  368.     set errornr 0
  369.     if ![$this isGlobalType] {
  370.         # puts "skipping langdep-check for non-global class [$this getName]"
  371.     } elseif [$this isExternal] {
  372.         # puts "warning: external class [$this getName] will not be checked"
  373.     } elseif {[$this getName] == ""} {
  374.         m4_warning $W_CLASS_WITHOUT_NAME
  375.         incr errornr 1
  376.     } else {
  377.         # now the real checking:
  378.         incr errornr [$this checkLocal]
  379.     }
  380.     # puts "Class: [$this getName]    Errors: $errornr"
  381.     return $errornr
  382. }
  383.  
  384. method PBGClass::checkLocal {this} {
  385.     set errornr 0
  386.     set warningnr 0
  387.     # first check the class kind and inheritance
  388.  
  389.     set tmpError [$this checkSuperClass]
  390.     incr errornr $tmpError
  391.     if {$tmpError == 0} {
  392.         incr errornr [$this checkPBClassKind]
  393.     }
  394.     # secondly after the first checks went ok
  395.     #  then do the PBDefinitionGen checks.
  396.     if {$errornr == 0} {
  397.  
  398.         # all already valid, because already tested:
  399.         set kind [$this getPBClassKind]
  400.         set name [$this getName]
  401.         $this superClass [$this getSuperClass]
  402.         set superNm [[$this superClass] getName]
  403.         # appropiate generation:
  404.         set pbDefGen [PB${kind}Gen new $name $this \
  405.                           -superNm $superNm \
  406.                           -isGlobalType 1 \
  407.                           -globalOoplClass $this \
  408.                           -container "" \
  409.                           -model ""]
  410.  
  411.         $this containLoopDetect 1
  412.         incr errornr [$pbDefGen check]
  413.         $this containLoopDetect 0
  414.     }
  415.     return $errornr
  416. }
  417.  
  418. method PBGClass::checkContLoop {this} {
  419.     
  420. }
  421.  
  422. method PBGClass::checkPBClassKind {this} {
  423.     set errornr 0
  424.  
  425.     # if no builtin root then error:
  426.     if {[$this checkBuiltinSuperClass] != 0} {
  427.         incr errornr 1
  428.         return $errornr
  429.     }
  430.         
  431.     set superClass [$this getSuperClass]
  432.     if {$superClass == ""} {
  433.         incr errornr 1
  434.     } else {
  435.         if {![$superClass isBuiltin] && ![$superClass isGlobalType]} {
  436.             # puts "no builtin or global"
  437.             incr errornr 1
  438.             return $errornr
  439.         }
  440.         set builtinSuperNm [$this getBuiltinSuperClassName]
  441.         set classInfo [[PBBuiltinInfo::global] getBuiltinClass $builtinSuperNm]
  442.         if {$classInfo == ""} {
  443.             m4_error $E_INVALBUILTINSUPER [$this getName] $builtinSuperNm
  444.             incr errornr 1
  445.         }
  446.     }
  447.     return $errornr
  448. }
  449.  
  450. method PBGClass::checkBuiltinSuperClass {this {recursive 0}} {
  451.     set errornr 0
  452.     set chkBuiltinSuperClass 0
  453.     if {[$this inhLoopDetect] == 1} {
  454.         incr errornr 1
  455.     } elseif {[$this isBuiltin] && !$recursive } {
  456.         # when checking non-superclass these may not be builtins.
  457.         $this builtinSuperClass ""
  458.         incr errornr 1
  459.        } elseif {[$this isBuiltin] && $recursive } {
  460.         # superclass of builtin class is empty for generator
  461.         $this builtinSuperClass $this
  462.         incr errornr 0
  463.     } elseif {[$this getSuperClass] != ""} {
  464.         $this inhLoopDetect 1
  465.         # now recursive call method:
  466.         set chkBuiltinSuperClass [[$this getSuperClass] checkBuiltinSuperClass 1]
  467.         incr errornr $chkBuiltinSuperClass
  468.         $this inhLoopDetect 0
  469.     }
  470.     return $errornr
  471. }
  472.  
  473. method PBGClass::checkInheritanceLoop {this} {
  474.     set errornr 0
  475.     if {[$this inhLoopDetect] == 1} {
  476.         # error is already given by ooplModel ...
  477.         #  m4_error $E_INHLOOP [$this getName]
  478.         incr errornr 1
  479.     } elseif [$this isBuiltin] {
  480.         # builtin class so this one cannot have supers.
  481.         #  if nevertherless drawed...............
  482.         # incr errornr 0
  483.     } elseif {[string tolower [$this getName]] == "powerobject"} {
  484.         # this is THE root class
  485.         # incr errornr 0
  486.     } else {
  487.         # and now the real checking:
  488.         $this inhLoopDetect 1
  489.         set superClass [$this getSuperClass]
  490.         if {$superClass != ""} {
  491.             incr errornr [$superClass checkInheritanceLoop]
  492.         }
  493.         # else top of tree
  494.         $this inhLoopDetect 0
  495.     }
  496.     return $errornr
  497. }
  498.  
  499. method PBGClass::checkClassKind {this} {
  500.     set errornr 0
  501.     
  502.     set tmpError [$this checkBuiltinSuperClass]
  503.     if { $tmpError != 0} {
  504.         # puts "not supported"
  505.         incr errornr $tmpError
  506.     }
  507.     return $errornr
  508. }
  509.  
  510. method PBGClass::checkSuperClass {this} {
  511.     set warningnr 0
  512.     set errornr 0
  513.     
  514.     incr warningnr [$this checkSuperPresence]
  515.     incr errornr [$this checkSuperGlobal]
  516.     incr errornr [$this checkMultipleInheritance]
  517.     
  518.     return $errornr
  519. }
  520.  
  521. method PBGClass::checkSuperGlobal {this} {
  522.     set errornr 0
  523.  
  524.     if {[string tolower [$this getName]] != "powerobject"} {
  525.         set superClass [$this getSuperClass]
  526.  
  527.         if {![$superClass isBuiltin] && ![$superClass isGlobalType]} {
  528.             m4_error $E_NONGLOBALSUPER [$this getName] [$superClass getName]
  529.             incr errornr 1
  530.         }
  531.     }
  532.     return $errornr
  533. }
  534.  
  535. method PBGClass::checkSuperPresence {this} {
  536.     set warningnr 0
  537.     if {[string tolower [$this getName]] != "powerobject"} {
  538.         set genNodeSet [$this genNodeSet]
  539.         if {[llength $genNodeSet] == 0} {
  540.             m4_warning $W_NOSUPERCLASS [$this getName]
  541.             incr warningnr 1
  542.         }
  543.     }
  544.     return $warningnr
  545. }
  546.  
  547. method PBGClass::checkMultipleInheritance {this} {
  548.     set errornr 0
  549.     set genNodeSet [$this genNodeSet]
  550.     if {[llength $genNodeSet] > 1} {
  551.         m4_error $E_NOMULTINH [$this getName]
  552.         incr errornr 1
  553.     }
  554.     return $errornr
  555. }
  556.  
  557. method PBGClass::checkAsContainedClass {this name globalOoplClass fromOoplClass container} {
  558.     set errornr 0
  559.     set kind [$this getPBClassKind]
  560.     if {$kind == ${PBClassKind::NotSupported}} {
  561.         # warning/error already given
  562.         incr errornr 0
  563.         return $errornr
  564.     }
  565.     if [$this containLoopDetect] {
  566.         m4_error $E_GRCONTLOOP [$this getName]
  567.         incr errornr 1
  568.         return $errornr
  569.     }
  570.  
  571.     if {[$this isBuiltin] || [$this isGlobalType]} {
  572.         set superNm [$this getName]
  573.     } else {
  574.         set superNm [[$this getSuperClass] getName]
  575.     }
  576.  
  577.     if {$name == $superNm} {
  578.         m4_error $E_INVALIDLOCTYPE $name [$fromOoplClass getName] \
  579.             [$this getName] [$globalOoplClass getName]
  580.         incr errornr 1
  581.         return $errornr
  582.     }
  583.     set typeNames [$globalOoplClass containedTypeNameSet]
  584.     if {[$typeNames search $name] != -1 ||
  585.             $name == [$globalOoplClass getName]} {
  586.         m4_error $E_MULTDEFLOCTYPES $name [$fromOoplClass getName] \
  587.             [$this getName] [$globalOoplClass getName]
  588.         incr errornr 1
  589.         return $errornr
  590.     } else {
  591.         $typeNames append $name
  592.     }
  593.     
  594.     set pbDefGen [PB${kind}Gen new $name $this \
  595.         -superNm $superNm \
  596.         -isGlobalType 0 \
  597.         -globalOoplClass $globalOoplClass \
  598.         -container $container \
  599.         -model ""]
  600.  
  601.     $this containLoopDetect 1
  602.     incr errornr [$pbDefGen check]
  603.     $this containLoopDetect 0
  604.  
  605.     return $errornr
  606. }
  607.  
  608. # Do not delete this line -- regeneration end marker
  609.  
  610. if [isCommand CMClass] {
  611.     Class  PBGClassD : {PBGClass CMClass} {
  612.     }
  613. } else {
  614.     Class PBGClassD : {PBGClass OPClass} {    
  615.     }
  616. }
  617.  
  618. global mostDerivedOOPL ; set mostDerivedOOPL(OPClass) PBGClassD
  619.  
  620. selfPromoter OPClass {this} {
  621.     PBGClassD promote $this
  622. }
  623. method PBGClass::addContainedTypeName {this newContainedTypeName} {
  624.     [$this containedTypeNameSet] append $newContainedTypeName
  625.  
  626. }
  627.  
  628. method PBGClass::removeContainedTypeName {this oldContainedTypeName} {
  629.     [$this containedTypeNameSet] removeValue $oldContainedTypeName
  630. }
  631.  
  632.  
  633.  
  634. #---------------------------------------------------------------------------
  635. #      File:           @(#)pbgfeature.tcl    /main/titanic/3
  636.  
  637.  
  638. Class PBGFeature : {Object} {
  639.     constructor
  640.     method destructor
  641.     method check
  642.     method checkLocal
  643. }
  644.  
  645. constructor PBGFeature {class this name} {
  646.     set this [Object::constructor $class $this $name]
  647.     # Start constructor user section
  648.     # End constructor user section
  649.     return $this
  650. }
  651.  
  652. method PBGFeature::destructor {this} {
  653.     # Start destructor user section
  654.     # End destructor user section
  655. }
  656.  
  657. method PBGFeature::check {this class} {
  658.     set errornr 0
  659.     incr errornr [$this checkLocal $class]
  660.     return $errornr
  661. }
  662.  
  663. method PBGFeature::checkLocal {this class} {
  664.     set errornr 0
  665.     return $errornr
  666. }
  667.  
  668. # Do not delete this line -- regeneration end marker
  669.  
  670. if [isCommand CMFeature] {
  671.     Class  PBGFeatureD : {PBGFeature CMFeature} {
  672.     }
  673. } else {
  674.     Class PBGFeatureD : {PBGFeature OPFeature} {    
  675.     }
  676. }
  677.  
  678. global mostDerivedOOPL ; set mostDerivedOOPL(OPFeature) PBGFeatureD
  679.  
  680. selfPromoter OPFeature {this} {
  681.     PBGFeatureD promote $this
  682. }
  683.  
  684.  
  685. #---------------------------------------------------------------------------
  686. #      File:           @(#)pbgparamet.tcl    /main/titanic/3
  687.  
  688.  
  689. Class PBGParameter : {Object} {
  690.     constructor
  691.     method destructor
  692.     method check
  693.     method checkLocal
  694. }
  695.  
  696. constructor PBGParameter {class this name} {
  697.     set this [Object::constructor $class $this $name]
  698.     # Start constructor user section
  699.     # End constructor user section
  700.     return $this
  701. }
  702.  
  703. method PBGParameter::destructor {this} {
  704.     # Start destructor user section
  705.     # End destructor user section
  706. }
  707.  
  708. method PBGParameter::check {this} {
  709.     # !! Implement this function !!
  710. }
  711.  
  712. method PBGParameter::checkLocal {this} {
  713.     # !! Implement this function !!
  714. }
  715.  
  716. # Do not delete this line -- regeneration end marker
  717.  
  718. if [isCommand CMParameter] {
  719.     Class  PBGParameterD : {PBGParameter CMParameter} {
  720.     }
  721. } else {
  722.     Class PBGParameterD : {PBGParameter OPParameter} {    
  723.     }
  724. }
  725.  
  726. global mostDerivedOOPL ; set mostDerivedOOPL(OPParameter) PBGParameterD
  727.  
  728. selfPromoter OPParameter {this} {
  729.     PBGParameterD promote $this
  730. }
  731.  
  732.  
  733. #---------------------------------------------------------------------------
  734. #      File:           @(#)pbgqualini.tcl    /main/titanic/3
  735.  
  736.  
  737. Class PBGQualInitializer : {Object} {
  738.     constructor
  739.     method destructor
  740. }
  741.  
  742. constructor PBGQualInitializer {class this name} {
  743.     set this [Object::constructor $class $this $name]
  744.     # Start constructor user section
  745.     # End constructor user section
  746.     return $this
  747. }
  748.  
  749. method PBGQualInitializer::destructor {this} {
  750.     # Start destructor user section
  751.     # End destructor user section
  752. }
  753.  
  754. # Do not delete this line -- regeneration end marker
  755.  
  756. if [isCommand CMQualInitializer] {
  757.     Class  PBGQualInitializerD : {PBGQualInitializer CMQualInitializer} {
  758.     }
  759. } else {
  760.     Class PBGQualInitializerD : {PBGQualInitializer OPQualInitializer} {    
  761.     }
  762. }
  763.  
  764. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualInitializer) PBGQualInitializerD
  765.  
  766. selfPromoter OPQualInitializer {this} {
  767.     PBGQualInitializerD promote $this
  768. }
  769.  
  770.  
  771. #---------------------------------------------------------------------------
  772. #      File:           @(#)pbgsupercl.tcl    /main/titanic/3
  773.  
  774.  
  775. Class PBGSuperClassInitializer : {Object} {
  776.     constructor
  777.     method destructor
  778. }
  779.  
  780. constructor PBGSuperClassInitializer {class this name} {
  781.     set this [Object::constructor $class $this $name]
  782.     # Start constructor user section
  783.     # End constructor user section
  784.     return $this
  785. }
  786.  
  787. method PBGSuperClassInitializer::destructor {this} {
  788.     # Start destructor user section
  789.     # End destructor user section
  790. }
  791.  
  792. # Do not delete this line -- regeneration end marker
  793.  
  794. if [isCommand CMSuperClassInitializer] {
  795.     Class  PBGSuperClassInitializerD : {PBGSuperClassInitializer CMSuperClassInitializer} {
  796.     }
  797. } else {
  798.     Class PBGSuperClassInitializerD : {PBGSuperClassInitializer OPSuperClassInitializer} {    
  799.     }
  800. }
  801.  
  802. global mostDerivedOOPL ; set mostDerivedOOPL(OPSuperClassInitializer) PBGSuperClassInitializerD
  803.  
  804. selfPromoter OPSuperClassInitializer {this} {
  805.     PBGSuperClassInitializerD promote $this
  806. }
  807.  
  808.  
  809. #---------------------------------------------------------------------------
  810. #      File:           @(#)pbgtype.tcl    /main/titanic/4
  811.  
  812.  
  813. Class PBGType : {Object} {
  814.     constructor
  815.     method destructor
  816.     method check
  817.     method checkLocal
  818.     attribute arrayDesc
  819. }
  820.  
  821. constructor PBGType {class this name} {
  822.     set this [Object::constructor $class $this $name]
  823.     $this arrayDesc ""
  824.     # Start constructor user section
  825.     # End constructor user section
  826.     return $this
  827. }
  828.  
  829. method PBGType::destructor {this} {
  830.     # Start destructor user section
  831.     # End destructor user section
  832. }
  833.  
  834. method PBGType::check {this} {
  835.     # !! Implement this function !!
  836. }
  837.  
  838. method PBGType::checkLocal {this} {
  839.     # !! Implement this function !!
  840. }
  841.  
  842. # Do not delete this line -- regeneration end marker
  843.  
  844. if [isCommand CMType] {
  845.     Class  PBGTypeD : {PBGType CMType} {
  846.     }
  847. } else {
  848.     Class PBGTypeD : {PBGType OPType} {    
  849.     }
  850. }
  851.  
  852. global mostDerivedOOPL ; set mostDerivedOOPL(OPType) PBGTypeD
  853.  
  854. selfPromoter OPType {this} {
  855.     PBGTypeD promote $this
  856. }
  857.  
  858.  
  859. #---------------------------------------------------------------------------
  860. #      File:           @(#)pbbuiltinc.tcl    /main/titanic/5
  861.  
  862.  
  863. Class PBBuiltinClass : {GCObject} {
  864.     constructor
  865.     method destructor
  866.     method getMandatoryProp
  867.     method setMandatoryProp
  868.     method removeMandatoryProp
  869.     attribute name
  870.     attribute kind
  871.     attribute isControl
  872.     attribute isGrContainer
  873.     attribute hasCtorDtor
  874.     attribute initialOnCreateResidue
  875.     attribute initialOnDestroyResidue
  876.     attribute mandatoryProp
  877. }
  878.  
  879. constructor PBBuiltinClass {class this i_name} {
  880.     set this [GCObject::constructor $class $this]
  881.     $this isControl 0
  882.     $this isGrContainer 0
  883.     $this hasCtorDtor 0
  884.     $this name $i_name
  885.     $this mandatoryProp [Dictionary new]
  886.     # Start constructor user section
  887.     # End constructor user section
  888.     return $this
  889. }
  890.  
  891. method PBBuiltinClass::destructor {this} {
  892.     # Start destructor user section
  893.     # End destructor user section
  894. }
  895.  
  896. # Do not delete this line -- regeneration end marker
  897.  
  898. method PBBuiltinClass::getMandatoryProp {this name} {
  899.     return [[$this mandatoryProp] set $name]
  900. }
  901.  
  902. method PBBuiltinClass::setMandatoryProp {this name newMandatoryProp} {
  903.     [$this mandatoryProp] set $name $newMandatoryProp
  904. }
  905.  
  906. method PBBuiltinClass::removeMandatoryProp {this name} {
  907.     [$this mandatoryProp] unset $name
  908. }
  909.  
  910.  
  911.  
  912. #---------------------------------------------------------------------------
  913. #      File:           @(#)pbbuiltini.tcl    /main/titanic/6
  914. # End user added include file section
  915.  
  916.  
  917. Class PBBuiltinInfo : {GCObject} {
  918.     constructor
  919.     method destructor
  920.     method getBuiltinClass
  921.     method setBuiltinClass
  922.     method removeBuiltinClass
  923.     attribute builtinClass
  924. }
  925.  
  926. global PBBuiltinInfo::instance
  927. set PBBuiltinInfo::instance ""
  928.  
  929.  
  930. constructor PBBuiltinInfo {class this} {
  931.     set this [GCObject::constructor $class $this]
  932.     $this builtinClass [Dictionary new]
  933.     # Start constructor user section
  934.     # End constructor user section
  935.     return $this
  936. }
  937.  
  938. method PBBuiltinInfo::destructor {this} {
  939.     # Start destructor user section
  940.     # End destructor user section
  941. }
  942.  
  943. proc PBBuiltinInfo::global {} {
  944.     if {${PBBuiltinInfo::instance} != ""} {
  945.         return ${PBBuiltinInfo::instance}
  946.     }
  947.  
  948.     set instance [PBBuiltinInfo new]
  949.     set PBBuiltinInfo::instance $instance
  950.  
  951.     # Fill it ...
  952.     #
  953.     set class [PBBuiltinClass new checkbox \
  954.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  955.     $instance setBuiltinClass checkbox $class
  956.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 247]
  957.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 77]
  958.     $class setMandatoryProp Text [ \
  959.         PBBuiltinProperty new Text string \"none\"]
  960.  
  961.     set class [PBBuiltinClass new commandbutton \
  962.         -kind ${PBClassKind::VSUserObject}  -isControl 1 -hasCtorDtor 1]
  963.     $instance setBuiltinClass commandbutton $class
  964.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 247]
  965.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 109]
  966.     $class setMandatoryProp Text [ \
  967.         PBBuiltinProperty new Text string \"none\"]
  968.  
  969.     set class [PBBuiltinClass new connection \
  970.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  971.     $instance setBuiltinClass connection $class
  972.  
  973.     set class [PBBuiltinClass new datastore \
  974.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  975.     $instance setBuiltinClass datastore $class
  976.  
  977.         set class [PBBuiltinClass new datawindow \
  978.                 -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  979.         $instance setBuiltinClass datawindow $class
  980.         $class setMandatoryProp Width [PBBuiltinProperty new Width int 494]
  981.         $class setMandatoryProp Height [PBBuiltinProperty new Height int 361]
  982.  
  983.     set class [PBBuiltinClass new dropdownlistbox \
  984.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  985.     $instance setBuiltinClass dropdownlistbox $class
  986.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 247]
  987.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 229]
  988.  
  989.     set class [PBBuiltinClass new dropdownpicturelistbox \
  990.         -kind ${PBClassKind::VSUserObject} -isControl 1  -hasCtorDtor 1]
  991.     $instance setBuiltinClass dropdownpicturelistbox $class
  992.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 247]
  993.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 229]
  994.  
  995.     set class [PBBuiltinClass new dynamicdescriptionarea \
  996.         -kind ${PBClassKind::VSUserObject}  -hasCtorDtor 1]
  997.     $instance setBuiltinClass dynamicdescriptionarea $class
  998.  
  999.     set class [PBBuiltinClass new dynamicstagingarea \
  1000.         -kind ${PBClassKind::VSUserObject}  -hasCtorDtor 1]
  1001.     $instance setBuiltinClass dynamicstagingarea $class
  1002.  
  1003.     set class [PBBuiltinClass new editmask \
  1004.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1005.     $instance setBuiltinClass editmask $class
  1006.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 247]
  1007.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 101]
  1008.  
  1009.     set class [PBBuiltinClass new error \
  1010.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  1011.     $instance setBuiltinClass error $class
  1012.  
  1013.     set class [PBBuiltinClass new graph \
  1014.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1015.     $instance setBuiltinClass graph $class
  1016.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 988]
  1017.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 721]
  1018.     $class setMandatoryProp Title [ \
  1019.         PBBuiltinProperty new Title string \"(None)\"]
  1020.     $class setMandatoryProp GraphType [ \
  1021.         PBBuiltinProperty new GraphType grGraphType ColGraph!]
  1022.     set sect [TextSection new]
  1023.     $class initialOnCreateResidue $sect
  1024.     expand_text $sect {
  1025.         TitleDispAttr = create grDispAttr
  1026.         LegendDispAttr = create grDispAttr
  1027.         PieDispAttr = create grDispAttr
  1028.         Series = create grAxis
  1029.         Series.DispAttr = create grDispAttr
  1030.         Series.LabelDispAttr = create grDispAttr
  1031.         Category = create grAxis
  1032.         Category.DispAttr = create grDispAttr
  1033.         Category.LabelDispAttr = create grDispAttr
  1034.         Values = create grAxis
  1035.         Values.DispAttr = create grDispAttr
  1036.         Values.LabelDispAttr = create grDispAttr
  1037.         TitleDispAttr.Weight=700
  1038.         TitleDispAttr.FaceName="Arial"
  1039.         TitleDispAttr.FontFamily=Swiss!
  1040.         TitleDispAttr.FontPitch=Variable!
  1041.         TitleDispAttr.Alignment=Center!
  1042.         TitleDispAttr.BackColor=536870912
  1043.         TitleDispAttr.Format="[General]"
  1044.         TitleDispAttr.DisplayExpression="title"
  1045.         TitleDispAttr.AutoSize=true
  1046.         Category.Label="(None)"
  1047.         Category.AutoScale=true
  1048.         Category.ShadeBackEdge=true
  1049.         Category.SecondaryLine=transparent!
  1050.         Category.MajorGridLine=transparent!
  1051.         Category.MinorGridLine=transparent!
  1052.         Category.DropLines=transparent!
  1053.         Category.OriginLine=transparent!
  1054.         Category.MajorTic=Outside!
  1055.         Category.DataType=adtText!
  1056.         Category.DispAttr.Weight=400
  1057.         Category.DispAttr.FaceName="Arial"
  1058.         Category.DispAttr.FontFamily=Swiss!
  1059.         Category.DispAttr.FontPitch=Variable!
  1060.         Category.DispAttr.Alignment=Center!
  1061.         Category.DispAttr.BackColor=536870912
  1062.         Category.DispAttr.Format="[General]"
  1063.         Category.DispAttr.DisplayExpression="category"
  1064.         Category.DispAttr.AutoSize=true
  1065.         Category.LabelDispAttr.Weight=400
  1066.         Category.LabelDispAttr.FaceName="Arial"
  1067.         Category.LabelDispAttr.FontFamily=Swiss!
  1068.         Category.LabelDispAttr.FontPitch=Variable!
  1069.         Category.LabelDispAttr.Alignment=Center!
  1070.         Category.LabelDispAttr.BackColor=536870912
  1071.         Category.LabelDispAttr.Format="[General]"
  1072.         Category.LabelDispAttr.DisplayExpression="categoryaxislabel"
  1073.         Category.LabelDispAttr.AutoSize=true
  1074.         Values.Label="(None)"
  1075.         Values.AutoScale=true
  1076.         Values.SecondaryLine=transparent!
  1077.         Values.MajorGridLine=transparent!
  1078.         Values.MinorGridLine=transparent!
  1079.         Values.DropLines=transparent!
  1080.         Values.MajorTic=Outside!
  1081.         Values.DataType=adtDouble!
  1082.         Values.DispAttr.Weight=400
  1083.         Values.DispAttr.FaceName="Arial"
  1084.         Values.DispAttr.FontFamily=Swiss!
  1085.         Values.DispAttr.FontPitch=Variable!
  1086.         Values.DispAttr.Alignment=Right!
  1087.         Values.DispAttr.BackColor=536870912
  1088.         Values.DispAttr.Format="[General]"
  1089.         Values.DispAttr.DisplayExpression="value"
  1090.         Values.DispAttr.AutoSize=true
  1091.         Values.LabelDispAttr.Weight=400
  1092.         Values.LabelDispAttr.FaceName="Arial"
  1093.         Values.LabelDispAttr.FontFamily=Swiss!
  1094.         Values.LabelDispAttr.FontPitch=Variable!
  1095.         Values.LabelDispAttr.Alignment=Center!
  1096.         Values.LabelDispAttr.BackColor=536870912
  1097.         Values.LabelDispAttr.Format="[General]"
  1098.         Values.LabelDispAttr.DisplayExpression="valuesaxislabel"
  1099.         Values.LabelDispAttr.AutoSize=true
  1100.         Values.LabelDispAttr.Escapement=900
  1101.         Series.Label="(None)"
  1102.         Series.AutoScale=true
  1103.         Series.SecondaryLine=transparent!
  1104.         Series.MajorGridLine=transparent!
  1105.         Series.MinorGridLine=transparent!
  1106.         Series.DropLines=transparent!
  1107.         Series.OriginLine=transparent!
  1108.         Series.MajorTic=Outside!
  1109.         Series.DataType=adtText!
  1110.         Series.DispAttr.Weight=400
  1111.         Series.DispAttr.FaceName="Arial"
  1112.         Series.DispAttr.FontFamily=Swiss!
  1113.         Series.DispAttr.FontPitch=Variable!
  1114.         Series.DispAttr.BackColor=536870912
  1115.         Series.DispAttr.Format="[General]"
  1116.         Series.DispAttr.DisplayExpression="series"
  1117.         Series.DispAttr.AutoSize=true
  1118.         Series.LabelDispAttr.Weight=400
  1119.         Series.LabelDispAttr.FaceName="Arial"
  1120.         Series.LabelDispAttr.FontFamily=Swiss!
  1121.         Series.LabelDispAttr.FontPitch=Variable!
  1122.         Series.LabelDispAttr.Alignment=Center!
  1123.         Series.LabelDispAttr.BackColor=536870912
  1124.         Series.LabelDispAttr.Format="[General]"
  1125.         Series.LabelDispAttr.DisplayExpression="seriesaxislabel"
  1126.         Series.LabelDispAttr.AutoSize=true
  1127.         LegendDispAttr.Weight=400
  1128.         LegendDispAttr.FaceName="Arial"
  1129.         LegendDispAttr.FontFamily=Swiss!
  1130.         LegendDispAttr.FontPitch=Variable!
  1131.         LegendDispAttr.BackColor=536870912
  1132.         LegendDispAttr.Format="[General]"
  1133.         LegendDispAttr.DisplayExpression="series"
  1134.         LegendDispAttr.AutoSize=true
  1135.         PieDispAttr.Weight=400
  1136.         PieDispAttr.FaceName="Arial"
  1137.         PieDispAttr.FontFamily=Swiss!
  1138.         PieDispAttr.FontPitch=Variable!
  1139.         PieDispAttr.BackColor=536870912
  1140.         PieDispAttr.Format="[General]"
  1141.         PieDispAttr.DisplayExpression="if(seriescount > 1,\
  1142.             series,string(percentofseries,\~"0.00%\~"))"
  1143.         PieDispAttr.AutoSize=true
  1144.     }
  1145.     set sect [TextSection new]
  1146.     $class initialOnDestroyResidue $sect
  1147.     expand_text $sect {
  1148.         destroy TitleDispAttr
  1149.         destroy LegendDispAttr
  1150.         destroy PieDispAttr
  1151.         destroy Series.DispAttr
  1152.         destroy Series.LabelDispAttr
  1153.         destroy Series
  1154.         destroy Category.DispAttr
  1155.         destroy Category.LabelDispAttr
  1156.         destroy Category
  1157.         destroy Values.DispAttr
  1158.         destroy Values.LabelDispAttr
  1159.         destroy Values
  1160.     }
  1161.  
  1162.     set class [PBBuiltinClass new groupbox \
  1163.         -kind ${PBClassKind::VSUserObject} -isControl 1]
  1164.     $instance setBuiltinClass groupbox $class
  1165.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 494]
  1166.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 361]
  1167.     $class setMandatoryProp Text [ \
  1168.         PBBuiltinProperty new Text string \"none\"]
  1169.  
  1170.     set class [PBBuiltinClass new hscrollbar \
  1171.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1172.     $instance setBuiltinClass hscrollbar $class
  1173.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 293]
  1174.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 65]
  1175.  
  1176.         set class [PBBuiltinClass new line \
  1177.             -kind ${PBClassKind::VSUserObject} -isControl 1]
  1178.         $instance setBuiltinClass line $class
  1179.         $class setMandatoryProp Width [\
  1180.             PBBuiltinProperty new Width int 494]
  1181.         $class setMandatoryProp Height [\
  1182.             PBBuiltinProperty new Height int 361]
  1183.  
  1184.     set class [PBBuiltinClass new listbox \
  1185.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1186.     $instance setBuiltinClass listbox $class
  1187.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 494]
  1188.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 361]
  1189.  
  1190.     set class [PBBuiltinClass new listview \
  1191.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1192.     $instance setBuiltinClass listview $class
  1193.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 494]
  1194.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 361]
  1195.  
  1196.     set class [PBBuiltinClass new mailsession \
  1197.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  1198.     $instance setBuiltinClass mailsession $class
  1199.  
  1200.     set class [PBBuiltinClass new menu \
  1201.         -kind ${PBClassKind::Menu} -isGrContainer 1]
  1202.     $instance setBuiltinClass menu $class
  1203.     # mandatory prop 'Text' is set in class PBMenuGen
  1204.  
  1205.     set class [PBBuiltinClass new menucascade \
  1206.         -kind ${PBClassKind::Menu} -isGrContainer 1]
  1207.     $instance setBuiltinClass menucascade $class
  1208.     # mandatory prop 'Text' is set in class PBMenuGen
  1209.  
  1210.     set class [PBBuiltinClass new message \
  1211.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  1212.     $instance setBuiltinClass message $class
  1213.  
  1214.     set class [PBBuiltinClass new multilineedit \
  1215.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1216.     $instance setBuiltinClass multilineedit $class
  1217.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 494]
  1218.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 361]
  1219.  
  1220.         set class [PBBuiltinClass new nonvisualobject \
  1221.             -kind ${PBClassKind::CCUserObject} -hasCtorDtor 1]
  1222.         $instance setBuiltinClass nonvisualobject $class
  1223.  
  1224.     set class [PBBuiltinClass new olecontrol \
  1225.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1226.     $instance setBuiltinClass olecontrol $class
  1227.     # mandatory props 'Width' & 'Height' set to 'a' default value
  1228.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 494]
  1229.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 361]
  1230.  
  1231.     set class [PBBuiltinClass new oleobject \
  1232.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  1233.     $instance setBuiltinClass oleobject $class
  1234.  
  1235.     set class [PBBuiltinClass new olestorage \
  1236.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  1237.     $instance setBuiltinClass olestorage $class
  1238.  
  1239.     set class [PBBuiltinClass new olestream \
  1240.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  1241.     $instance setBuiltinClass olestream $class
  1242.  
  1243.         set class [PBBuiltinClass new oval \
  1244.             -kind ${PBClassKind::VSUserObject} -isControl 1]
  1245.         $instance setBuiltinClass oval $class
  1246.         $class setMandatoryProp Width [\
  1247.             PBBuiltinProperty new Width int 165]
  1248.         $class setMandatoryProp Height [\
  1249.             PBBuiltinProperty new Height int 145]
  1250.  
  1251.     set class [PBBuiltinClass new picture \
  1252.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1253.     $instance setBuiltinClass picture $class
  1254.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 165]
  1255.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 145]
  1256.  
  1257.     set class [PBBuiltinClass new picturebutton \
  1258.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1259.     $instance setBuiltinClass picturebutton $class
  1260.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 247]
  1261.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 145]
  1262.     $class setMandatoryProp Text [ \
  1263.         PBBuiltinProperty new Text string \"none\"] 
  1264.  
  1265.     set class [PBBuiltinClass new picturelistbox \
  1266.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1267.     $instance setBuiltinClass picturelistbox $class
  1268.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 494]
  1269.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 361]
  1270.  
  1271.     set class [PBBuiltinClass new pipeline \
  1272.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  1273.     $instance setBuiltinClass pipeline $class
  1274.  
  1275.     set class [PBBuiltinClass new radiobutton \
  1276.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1277.     $instance setBuiltinClass radiobutton $class
  1278.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 247]
  1279.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 77]
  1280.     $class setMandatoryProp Text [ \
  1281.         PBBuiltinProperty new Text string \"none\"] 
  1282.  
  1283.         set class [PBBuiltinClass new rectangle \
  1284.             -kind ${PBClassKind::VSUserObject} -isControl 1]
  1285.         $instance setBuiltinClass rectangle $class
  1286.         $class setMandatoryProp Width [\
  1287.             PBBuiltinProperty new Width int 165]
  1288.         $class setMandatoryProp Height [\
  1289.             PBBuiltinProperty new Height int 145]
  1290.  
  1291.     set class [PBBuiltinClass new richtextedit \
  1292.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1293.     $instance setBuiltinClass richtextedit $class
  1294.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 494]
  1295.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 361]
  1296.  
  1297.         set class [PBBuiltinClass new roundrectangle \
  1298.             -kind ${PBClassKind::VSUserObject} -isControl 1]
  1299.         $instance setBuiltinClass roundrectangle $class
  1300.         $class setMandatoryProp Width [\
  1301.             PBBuiltinProperty new Width int 165]
  1302.         $class setMandatoryProp Height [\
  1303.             PBBuiltinProperty new Height int 145]
  1304.  
  1305.     set class [PBBuiltinClass new singlelineedit \
  1306.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1307.     $instance setBuiltinClass singlelineedit $class
  1308.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 247]
  1309.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 93]
  1310.  
  1311.     set class [PBBuiltinClass new statictext \
  1312.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1313.     $instance setBuiltinClass statictext $class
  1314.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 247]
  1315.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 77]
  1316.     $class setMandatoryProp Text [ \
  1317.         PBBuiltinProperty new Text string \"none\"] 
  1318.  
  1319.     set class [PBBuiltinClass new structure \
  1320.         -kind ${PBClassKind::Structure}]
  1321.     $instance setBuiltinClass structure $class
  1322.  
  1323.     set class [PBBuiltinClass new tab \
  1324.         -kind ${PBClassKind::VSUserObject} -isControl 1 \
  1325.         -isGrContainer 1 -hasCtorDtor 1]
  1326.     $instance setBuiltinClass tab $class
  1327.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 1153]
  1328.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 865]
  1329.  
  1330.     set class [PBBuiltinClass new transaction \
  1331.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  1332.     $instance setBuiltinClass transaction $class
  1333.  
  1334.     set class [PBBuiltinClass new transport \
  1335.         -kind ${PBClassKind::CSUserObject} -hasCtorDtor 1]
  1336.     $instance setBuiltinClass transport $class
  1337.  
  1338.     set class [PBBuiltinClass new treeview \
  1339.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1340.     $instance setBuiltinClass treeview $class
  1341.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 494]
  1342.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 361]
  1343.  
  1344.         set class [PBBuiltinClass new userobject \
  1345.             -kind ${PBClassKind::VCUserObject} -isControl 1 \
  1346.             -isGrContainer 1 -hasCtorDtor 1]
  1347.         $instance setBuiltinClass userobject $class
  1348.         $class setMandatoryProp Width [\
  1349.             PBBuiltinProperty new Width int 2533]
  1350.         $class setMandatoryProp Height [\
  1351.             PBBuiltinProperty new Height int 1517]
  1352.  
  1353.     set class [PBBuiltinClass new vscrollbar \
  1354.         -kind ${PBClassKind::VSUserObject} -isControl 1 -hasCtorDtor 1]
  1355.     $instance setBuiltinClass vscrollbar $class
  1356.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 74]
  1357.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 257]
  1358.  
  1359.     set class [PBBuiltinClass new window \
  1360.         -kind ${PBClassKind::Window} -isGrContainer 1 -hasCtorDtor 1]
  1361.     $instance setBuiltinClass window $class
  1362.     $class setMandatoryProp Width [PBBuiltinProperty new Width int 2533]
  1363.     $class setMandatoryProp Height [PBBuiltinProperty new Height int 1517]
  1364.  
  1365.     return ${PBBuiltinInfo::instance}
  1366. }
  1367.  
  1368. # Do not delete this line -- regeneration end marker
  1369.  
  1370. method PBBuiltinInfo::getBuiltinClass {this name} {
  1371.     return [[$this builtinClass] set $name]
  1372. }
  1373.  
  1374. method PBBuiltinInfo::setBuiltinClass {this name newBuiltinClass} {
  1375.     [$this builtinClass] set $name $newBuiltinClass
  1376. }
  1377.  
  1378. method PBBuiltinInfo::removeBuiltinClass {this name} {
  1379.     [$this builtinClass] unset $name
  1380. }
  1381.  
  1382.  
  1383.  
  1384. #---------------------------------------------------------------------------
  1385. #      File:           @(#)pbdefiniti.tcl    /main/titanic/5
  1386.  
  1387.  
  1388. Class PBDefinitionGen : {GCObject} {
  1389.     constructor
  1390.     method destructor
  1391.     method generate
  1392.     method createPBDefinition
  1393.     method genFeatures
  1394.     method genDataAttrs
  1395.     method genOperations
  1396.     method genAssocAttrs
  1397.     method check
  1398.     method checkFeatures
  1399.     method checkLocal
  1400.     method checkDataAttrs
  1401.     method checkOperations
  1402.     method checkAssocAttrs
  1403.     attribute name
  1404.     attribute superNm
  1405.     attribute builtinSuperNm
  1406.     attribute isGlobalType
  1407.     attribute container
  1408.     attribute model
  1409.     attribute ooplClass
  1410.     attribute globalOoplClass
  1411. }
  1412.  
  1413. constructor PBDefinitionGen {class this i_name ooplClass} {
  1414.     set this [GCObject::constructor $class $this]
  1415.     $this name $i_name
  1416.     $this ooplClass $ooplClass
  1417.     # Start constructor user section
  1418.  
  1419.     $this builtinSuperNm [[$this ooplClass] getBuiltinSuperClassName]
  1420.  
  1421.     # End constructor user section
  1422.     return $this
  1423. }
  1424.  
  1425. method PBDefinitionGen::destructor {this} {
  1426.     # Start destructor user section
  1427.     # End destructor user section
  1428. }
  1429.  
  1430. method PBDefinitionGen::generate {this} {
  1431.     set def [$this createPBDefinition]
  1432.     $this genFeatures $def
  1433.     return $def
  1434. }
  1435.  
  1436. method PBDefinitionGen::createPBDefinition {this} {
  1437.     set type [$this objType]
  1438.     set kind [string range $type 0 [expr {[string length $type] - 4}]]
  1439.  
  1440.     # pb internal lower cases class names
  1441.     set def [$kind new [string tolower [$this name]] [$this ooplClass] \
  1442.                  [string tolower [$this superNm]] \
  1443.                  [string tolower [$this builtinSuperNm]] \
  1444.         -isGlobalType [$this isGlobalType]]
  1445.  
  1446.     if [$this isGlobalType] {
  1447.         PBLibraryEntry new [$this model] $def
  1448.     } else {
  1449.         [$this container] addContainedClass $def
  1450.     }
  1451.  
  1452.     return $def
  1453. }
  1454.  
  1455. method PBDefinitionGen::genFeatures {this def} {
  1456.     if {[[$this ooplClass] isBuiltin] ||
  1457.         (![$this isGlobalType] && [[$this ooplClass] isGlobalType])} {
  1458.         # Only a type definition (a local one) is generated, without
  1459.         # variables, functions, user events and even scripts!
  1460.         return
  1461.     }
  1462.     $this genDataAttrs $def
  1463.     $this genOperations $def
  1464.     $this genAssocAttrs $def
  1465. }
  1466.  
  1467. method PBDefinitionGen::genDataAttrs {this def} {
  1468.     foreach attr [[$this ooplClass] dataAttrSet] {
  1469.         $attr generate $def
  1470.     } 
  1471. }
  1472.  
  1473. method PBDefinitionGen::genOperations {this def} {
  1474.     foreach oper [[$this ooplClass] operationSet] {
  1475.         $oper generate $def
  1476.     }
  1477.     if {[[$this ooplClass] constructor] != ""} {
  1478.         [[$this ooplClass] constructor] generate $def
  1479.     }
  1480. }
  1481.  
  1482. method PBDefinitionGen::genAssocAttrs {this def} {
  1483.     foreach assoc [[$this ooplClass] genAssocAttrSet] {
  1484.         $assoc generate [$this globalOoplClass] $def
  1485.     }
  1486. }
  1487.  
  1488. method PBDefinitionGen::check {this} {
  1489.     set errornr 0
  1490.     incr errornr [$this checkLocal]
  1491.     return $errornr
  1492. }
  1493.  
  1494. method PBDefinitionGen::checkFeatures {this} {
  1495.     set errornr 0
  1496.     incr errornr [$this checkDataAttrs]
  1497.     incr errornr [$this checkOperations]
  1498.     incr errornr [$this checkAssocAttrs]
  1499.     return $errornr
  1500. }
  1501.  
  1502. method PBDefinitionGen::checkLocal {this} {
  1503.     set errornr 0
  1504.     # pb internal lower cases class names
  1505.     if { [$this name] != [string tolower [$this name]]} {
  1506.         m4_warning $W_DOWNCASECLASS [$this name]
  1507.     }
  1508.     incr errornr [$this checkFeatures]
  1509.     return $errornr
  1510. }
  1511.  
  1512. method PBDefinitionGen::checkDataAttrs {this} {
  1513.     set errornr 0
  1514.     foreach attr [[$this ooplClass] dataAttrSet] {
  1515.         incr errornr [$attr check $this]
  1516.     }
  1517.     return $errornr
  1518. }
  1519.  
  1520. method PBDefinitionGen::checkOperations {this} {
  1521.     set errornr 0
  1522.     foreach oper [[$this ooplClass] operationSet] {
  1523.         incr errornr [$oper check $this]
  1524.     }
  1525.     if {[[$this ooplClass] constructor] != ""} {
  1526.         incr errornr [[[$this ooplClass] constructor] check $this]
  1527.     }
  1528.     return $errornr
  1529. }
  1530.  
  1531. method PBDefinitionGen::checkAssocAttrs {this} {
  1532.     set errornr 0
  1533.     foreach assoc [[$this ooplClass] genAssocAttrSet] {
  1534.         incr errornr [$assoc check [$this globalOoplClass] $this]
  1535.     }
  1536.     return $errornr
  1537. }
  1538.  
  1539. # Do not delete this line -- regeneration end marker
  1540.  
  1541.  
  1542.  
  1543. #---------------------------------------------------------------------------
  1544. #      File:           @(#)pbgclassen.tcl    /main/titanic/3
  1545.  
  1546.  
  1547. Class PBGClassEnum : {PBGClass} {
  1548.     constructor
  1549.     method destructor
  1550.     method generate
  1551.     method checkLocal
  1552.     method checkEnum
  1553. }
  1554.  
  1555. constructor PBGClassEnum {class this name} {
  1556.     set this [PBGClass::constructor $class $this $name]
  1557.     # Start constructor user section
  1558.     # End constructor user section
  1559.     return $this
  1560. }
  1561.  
  1562. method PBGClassEnum::destructor {this} {
  1563.     # Start destructor user section
  1564.     # End destructor user section
  1565. }
  1566.  
  1567. method PBGClassEnum::generate {this model} {
  1568.     m4_error $E_NOENUMS
  1569. }
  1570.  
  1571. method PBGClassEnum::checkLocal {this} {
  1572.     set errornr 0
  1573.     incr errornr [$this checkEnum]
  1574.     return $errornr
  1575. }
  1576.  
  1577. method PBGClassEnum::checkEnum {this} {
  1578.     set errornr 0
  1579.     m4_error $E_NOENUMS
  1580.     incr errornr 1
  1581.     return $errornr
  1582. }
  1583.  
  1584. # Do not delete this line -- regeneration end marker
  1585.  
  1586. if [isCommand CMClassEnum] {
  1587.     Class  PBGClassEnumD : {PBGClassEnum CMClassEnum} {
  1588.     }
  1589. } else {
  1590.     Class PBGClassEnumD : {PBGClassEnum OPClassEnum} {    
  1591.     }
  1592. }
  1593.  
  1594. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassEnum) PBGClassEnumD
  1595.  
  1596. selfPromoter OPClassEnum {this} {
  1597.     PBGClassEnumD promote $this
  1598. }
  1599.  
  1600.  
  1601. #---------------------------------------------------------------------------
  1602. #      File:           @(#)pbgclassge.tcl    /main/titanic/3
  1603.  
  1604.  
  1605. Class PBGClassGenericTypeDef : {PBGClass} {
  1606.     constructor
  1607.     method destructor
  1608.     method generate
  1609. }
  1610.  
  1611. constructor PBGClassGenericTypeDef {class this name} {
  1612.     set this [PBGClass::constructor $class $this $name]
  1613.     # Start constructor user section
  1614.     # End constructor user section
  1615.     return $this
  1616. }
  1617.  
  1618. method PBGClassGenericTypeDef::destructor {this} {
  1619.     # Start destructor user section
  1620.     # End destructor user section
  1621. }
  1622.  
  1623. method PBGClassGenericTypeDef::generate {this model} {
  1624.     $this PBGClass::generate $model
  1625. }
  1626.  
  1627. # Do not delete this line -- regeneration end marker
  1628.  
  1629. if [isCommand CMClassGenericTypeDef] {
  1630.     Class  PBGClassGenericTypeDefD : {PBGClassGenericTypeDef CMClassGenericTypeDef} {
  1631.     }
  1632. } else {
  1633.     Class PBGClassGenericTypeDefD : {PBGClassGenericTypeDef OPClassGenericTypeDef} {    
  1634.     }
  1635. }
  1636.  
  1637. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassGenericTypeDef) PBGClassGenericTypeDefD
  1638.  
  1639. selfPromoter OPClassGenericTypeDef {this} {
  1640.     PBGClassGenericTypeDefD promote $this
  1641. }
  1642.  
  1643.  
  1644. #---------------------------------------------------------------------------
  1645. #      File:           @(#)pbgclasstd.tcl    /main/titanic/3
  1646.  
  1647.  
  1648. Class PBGClassTDef : {PBGClass} {
  1649.     constructor
  1650.     method destructor
  1651.     method generate
  1652. }
  1653.  
  1654. constructor PBGClassTDef {class this name} {
  1655.     set this [PBGClass::constructor $class $this $name]
  1656.     # Start constructor user section
  1657.     # End constructor user section
  1658.     return $this
  1659. }
  1660.  
  1661. method PBGClassTDef::destructor {this} {
  1662.     # Start destructor user section
  1663.     # End destructor user section
  1664. }
  1665.  
  1666. method PBGClassTDef::generate {this model} {
  1667.     $this PBGClass::generate $model
  1668. }
  1669.  
  1670. # Do not delete this line -- regeneration end marker
  1671.  
  1672. if [isCommand CMClassTDef] {
  1673.     Class  PBGClassTDefD : {PBGClassTDef CMClassTDef} {
  1674.     }
  1675. } else {
  1676.     Class PBGClassTDefD : {PBGClassTDef OPClassTDef} {    
  1677.     }
  1678. }
  1679.  
  1680. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassTDef) PBGClassTDefD
  1681.  
  1682. selfPromoter OPClassTDef {this} {
  1683.     PBGClassTDefD promote $this
  1684. }
  1685.  
  1686.  
  1687. #---------------------------------------------------------------------------
  1688. #      File:           @(#)pbglinkcla.tcl    /main/titanic/3
  1689.  
  1690.  
  1691. Class PBGLinkClass : {PBGClass} {
  1692.     constructor
  1693.     method destructor
  1694.     method generate
  1695. }
  1696.  
  1697. constructor PBGLinkClass {class this name} {
  1698.     set this [PBGClass::constructor $class $this $name]
  1699.     # Start constructor user section
  1700.     # End constructor user section
  1701.     return $this
  1702. }
  1703.  
  1704. method PBGLinkClass::destructor {this} {
  1705.     # Start destructor user section
  1706.     # End destructor user section
  1707. }
  1708.  
  1709. method PBGLinkClass::generate {this model} {
  1710.     $this PBGClass::generate $model
  1711. }
  1712.  
  1713. # Do not delete this line -- regeneration end marker
  1714.  
  1715. if [isCommand CMLinkClass] {
  1716.     Class  PBGLinkClassD : {PBGLinkClass CMLinkClass} {
  1717.     }
  1718. } else {
  1719.     Class PBGLinkClassD : {PBGLinkClass OPLinkClass} {    
  1720.     }
  1721. }
  1722.  
  1723. global mostDerivedOOPL ; set mostDerivedOOPL(OPLinkClass) PBGLinkClassD
  1724.  
  1725. selfPromoter OPLinkClass {this} {
  1726.     PBGLinkClassD promote $this
  1727. }
  1728.  
  1729.  
  1730. #---------------------------------------------------------------------------
  1731. #      File:           @(#)pbgattribu.tcl    /main/titanic/3
  1732.  
  1733.  
  1734. Class PBGAttribute : {PBGFeature} {
  1735.     constructor
  1736.     method destructor
  1737. }
  1738.  
  1739. constructor PBGAttribute {class this name} {
  1740.     set this [PBGFeature::constructor $class $this $name]
  1741.     # Start constructor user section
  1742.     # End constructor user section
  1743.     return $this
  1744. }
  1745.  
  1746. method PBGAttribute::destructor {this} {
  1747.     # Start destructor user section
  1748.     # End destructor user section
  1749. }
  1750.  
  1751. # Do not delete this line -- regeneration end marker
  1752.  
  1753. if [isCommand CMAttribute] {
  1754.     Class  PBGAttributeD : {PBGAttribute CMAttribute} {
  1755.     }
  1756. } else {
  1757.     Class PBGAttributeD : {PBGAttribute OPAttribute} {    
  1758.     }
  1759. }
  1760.  
  1761. global mostDerivedOOPL ; set mostDerivedOOPL(OPAttribute) PBGAttributeD
  1762.  
  1763. selfPromoter OPAttribute {this} {
  1764.     PBGAttributeD promote $this
  1765. }
  1766.  
  1767.  
  1768. #---------------------------------------------------------------------------
  1769. #      File:           @(#)pbgconstru.tcl    /main/titanic/3
  1770.  
  1771.  
  1772. Class PBGConstructor : {PBGFeature} {
  1773.     constructor
  1774.     method destructor
  1775.     method generate
  1776. }
  1777.  
  1778. constructor PBGConstructor {class this name} {
  1779.     set this [PBGFeature::constructor $class $this $name]
  1780.     # Start constructor user section
  1781.     # End constructor user section
  1782.     return $this
  1783. }
  1784.  
  1785. method PBGConstructor::destructor {this} {
  1786.     # Start destructor user section
  1787.     # End destructor user section
  1788. }
  1789.  
  1790. method PBGConstructor::generate {this class} {
  1791.     return ""
  1792. }
  1793.  
  1794. # Do not delete this line -- regeneration end marker
  1795.  
  1796. if [isCommand CMConstructor] {
  1797.     Class  PBGConstructorD : {PBGConstructor CMConstructor} {
  1798.     }
  1799. } else {
  1800.     Class PBGConstructorD : {PBGConstructor OPConstructor} {    
  1801.     }
  1802. }
  1803.  
  1804. global mostDerivedOOPL ; set mostDerivedOOPL(OPConstructor) PBGConstructorD
  1805.  
  1806. selfPromoter OPConstructor {this} {
  1807.     PBGConstructorD promote $this
  1808. }
  1809.  
  1810.  
  1811. #---------------------------------------------------------------------------
  1812. #      File:           @(#)pbgoperati.tcl    /main/titanic/6
  1813.  
  1814.  
  1815. Class PBGOperation : {PBGFeature} {
  1816.     constructor
  1817.     method destructor
  1818.     method generate
  1819.     method generateFunction
  1820.     method generateAccess
  1821.     method generateEvent
  1822.     method isEvent
  1823.     method isUserEvent
  1824. }
  1825.  
  1826. constructor PBGOperation {class this name} {
  1827.     set this [PBGFeature::constructor $class $this $name]
  1828.     # Start constructor user section
  1829.     # End constructor user section
  1830.     return $this
  1831. }
  1832.  
  1833. method PBGOperation::destructor {this} {
  1834.     # Start destructor user section
  1835.     # End destructor user section
  1836. }
  1837.  
  1838. method PBGOperation::generate {this class} {
  1839.     if [$this isEvent] {
  1840.         set oper [$this generateEvent $class]
  1841.     } else {
  1842.         set oper [$this generateFunction $class]
  1843.     }
  1844.  
  1845.     return $oper
  1846. }
  1847.  
  1848. method PBGOperation::generateFunction {this class} {
  1849.     set type [[$this ooplType] generate]
  1850.     set access [$this generateAccess]
  1851.     set func [PBFunction new [$this getName] $type $access]
  1852.  
  1853.     foreach param [$this parameterSet] {
  1854.         $param generate $func
  1855.     }
  1856.  
  1857.     $class addObjectFunction $func
  1858.  
  1859.     return $func
  1860. }
  1861.  
  1862. method PBGOperation::generateAccess {this} {
  1863.     set access [string tolower [$this getPropertyValue "method_access"]]
  1864.     if {$access == "" } {
  1865.         set access "public"
  1866.     }
  1867.     return [PBAccess new $access]
  1868. }
  1869.  
  1870. method PBGOperation::generateEvent {this class} {
  1871.     set type [[$this ooplType] generate]
  1872.     set name [$this getName]
  1873.     if {$name == "constructor"} {
  1874.         set event [PBConstructor new $name $type]
  1875.     } elseif {$name == "destructor"} {
  1876.         set event [PBDestructor new $name $type]
  1877.     } else {
  1878.         set event [PBEvent new $name $type]
  1879.     }
  1880.  
  1881.     set firstParam 1
  1882.     foreach param [$this parameterSet] {
  1883.         # special case when type of first parameter is "eventid";
  1884.         # in this case, prevent mapping of standard type "eventid" 
  1885.         # onto language type "string"
  1886.         if $firstParam {
  1887.             set firstParam 0
  1888.             set pbParam [$param generate $event]
  1889.             if {[[$param ooplType] getName] == "eventid"} {
  1890.                 [$pbParam type] name "eventid"
  1891.                 break
  1892.             }
  1893.         } else {
  1894.             $param generate $event
  1895.         }
  1896.     }
  1897.  
  1898.     if {[$this isUserEvent]} {
  1899.         $class addUserEvent $event
  1900.     } else {
  1901.         $class addScript $event
  1902.     }
  1903.  
  1904.     return $event
  1905. }
  1906.  
  1907. method PBGOperation::isEvent {this} {
  1908.     if {[$this getPropertyValue is_event] == "1"} {
  1909.         return 1
  1910.     }
  1911.     return 0
  1912. }
  1913.  
  1914. method PBGOperation::isUserEvent {this} {
  1915.     set superClass [[$this ooplClass] getSuperClass]
  1916.     while {$superClass != ""} {
  1917.         if [$superClass hasEvent [$this getName]] {
  1918.             return 0
  1919.         }
  1920.         set superClass [$superClass getSuperClass]
  1921.     }
  1922.     return 1
  1923. }
  1924.  
  1925. # Do not delete this line -- regeneration end marker
  1926.  
  1927. if [isCommand CMOperation] {
  1928.     Class  PBGOperationD : {PBGOperation CMOperation} {
  1929.     }
  1930. } else {
  1931.     Class PBGOperationD : {PBGOperation OPOperation} {    
  1932.     }
  1933. }
  1934.  
  1935. global mostDerivedOOPL ; set mostDerivedOOPL(OPOperation) PBGOperationD
  1936.  
  1937. selfPromoter OPOperation {this} {
  1938.     PBGOperationD promote $this
  1939. }
  1940.  
  1941.  
  1942. #---------------------------------------------------------------------------
  1943. #      File:           @(#)pbgctorpar.tcl    /main/titanic/3
  1944.  
  1945.  
  1946. Class PBGCtorParameter : {PBGParameter} {
  1947.     constructor
  1948.     method destructor
  1949.     method generate
  1950. }
  1951.  
  1952. constructor PBGCtorParameter {class this name} {
  1953.     set this [PBGParameter::constructor $class $this $name]
  1954.     # Start constructor user section
  1955.     # End constructor user section
  1956.     return $this
  1957. }
  1958.  
  1959. method PBGCtorParameter::destructor {this} {
  1960.     # Start destructor user section
  1961.     # End destructor user section
  1962. }
  1963.  
  1964. method PBGCtorParameter::generate {this oper} {
  1965.     # !! Implement this function !!
  1966. }
  1967.  
  1968. # Do not delete this line -- regeneration end marker
  1969.  
  1970. if [isCommand CMCtorParameter] {
  1971.     Class  PBGCtorParameterD : {PBGCtorParameter CMCtorParameter} {
  1972.     }
  1973. } else {
  1974.     Class PBGCtorParameterD : {PBGCtorParameter OPCtorParameter} {    
  1975.     }
  1976. }
  1977.  
  1978. global mostDerivedOOPL ; set mostDerivedOOPL(OPCtorParameter) PBGCtorParameterD
  1979.  
  1980. selfPromoter OPCtorParameter {this} {
  1981.     PBGCtorParameterD promote $this
  1982. }
  1983.  
  1984.  
  1985. #---------------------------------------------------------------------------
  1986. #      File:           @(#)pbgoperpar.tcl    /main/titanic/4
  1987.  
  1988.  
  1989. Class PBGOperParameter : {PBGParameter} {
  1990.     constructor
  1991.     method destructor
  1992.     method generate
  1993.     method generateModifier
  1994. }
  1995.  
  1996. constructor PBGOperParameter {class this name} {
  1997.     set this [PBGParameter::constructor $class $this $name]
  1998.     # Start constructor user section
  1999.     # End constructor user section
  2000.     return $this
  2001. }
  2002.  
  2003. method PBGOperParameter::destructor {this} {
  2004.     # Start destructor user section
  2005.     # End destructor user section
  2006. }
  2007.  
  2008. method PBGOperParameter::generate {this oper} {
  2009.     set type [[$this ooplType] generate]
  2010.     set modifier [$this generateModifier]
  2011.     set param [PBParameter new [$this getName] $type $modifier \
  2012.         -arrayDesc [[$this ooplType] arrayDesc]]
  2013.     $oper addParameter $param
  2014.     return $param
  2015. }
  2016.  
  2017. method PBGOperParameter::generateModifier {this} {
  2018.     set modifier [$this getPropertyValue "pass_by"]
  2019.     if {$modifier == "Reference"} {
  2020.         set modifier "ref"
  2021.     } elseif {$modifier == "ReadOnly"} {
  2022.         set modifier "readonly"
  2023.     } else {
  2024.         set modifier ""
  2025.     }
  2026.     return [PBModifier new $modifier]
  2027. }
  2028.  
  2029. # Do not delete this line -- regeneration end marker
  2030.  
  2031. if [isCommand CMOperParameter] {
  2032.     Class  PBGOperParameterD : {PBGOperParameter CMOperParameter} {
  2033.     }
  2034. } else {
  2035.     Class PBGOperParameterD : {PBGOperParameter OPOperParameter} {    
  2036.     }
  2037. }
  2038.  
  2039. global mostDerivedOOPL ; set mostDerivedOOPL(OPOperParameter) PBGOperParameterD
  2040.  
  2041. selfPromoter OPOperParameter {this} {
  2042.     PBGOperParameterD promote $this
  2043. }
  2044.  
  2045.  
  2046. #---------------------------------------------------------------------------
  2047. #      File:           @(#)pbgbasetyp.tcl    /main/titanic/4
  2048.  
  2049.  
  2050. Class PBGBaseType : {PBGType} {
  2051.     constructor
  2052.     method destructor
  2053.     method generate
  2054. }
  2055.  
  2056. constructor PBGBaseType {class this name} {
  2057.     set this [PBGType::constructor $class $this $name]
  2058.     # Start constructor user section
  2059.     # End constructor user section
  2060.     return $this
  2061. }
  2062.  
  2063. method PBGBaseType::destructor {this} {
  2064.     # Start destructor user section
  2065.     # End destructor user section
  2066. }
  2067.  
  2068. method PBGBaseType::generate {this} {
  2069.     set type [$this getType3GL]
  2070.  
  2071.     set arrayDesc ""
  2072.     regexp {\[.*\]$} $type arrayDesc
  2073.     $this arrayDesc $arrayDesc
  2074.  
  2075.     regsub {\[.*\]$} $type "" type    
  2076.     return [PBType new $type]
  2077. }
  2078.  
  2079. # Do not delete this line -- regeneration end marker
  2080.  
  2081. if [isCommand CMBaseType] {
  2082.     Class  PBGBaseTypeD : {PBGBaseType CMBaseType} {
  2083.     }
  2084. } else {
  2085.     Class PBGBaseTypeD : {PBGBaseType OPBaseType} {    
  2086.     }
  2087. }
  2088.  
  2089. global mostDerivedOOPL ; set mostDerivedOOPL(OPBaseType) PBGBaseTypeD
  2090.  
  2091. selfPromoter OPBaseType {this} {
  2092.     PBGBaseTypeD promote $this
  2093. }
  2094.  
  2095.  
  2096. #---------------------------------------------------------------------------
  2097. #      File:           @(#)pbgclassty.tcl    /main/titanic/4
  2098.  
  2099.  
  2100. Class PBGClassType : {PBGType} {
  2101.     constructor
  2102.     method destructor
  2103.     method generate
  2104. }
  2105.  
  2106. constructor PBGClassType {class this name} {
  2107.     set this [PBGType::constructor $class $this $name]
  2108.     # Start constructor user section
  2109.     # End constructor user section
  2110.     return $this
  2111. }
  2112.  
  2113. method PBGClassType::destructor {this} {
  2114.     # Start destructor user section
  2115.     # End destructor user section
  2116. }
  2117.  
  2118. method PBGClassType::generate {this} {
  2119.     # pb internal lower cases class names
  2120.     return [PBType new [string tolower [$this getName]]]
  2121. }
  2122.  
  2123. # Do not delete this line -- regeneration end marker
  2124.  
  2125. if [isCommand CMClassType] {
  2126.     Class  PBGClassTypeD : {PBGClassType CMClassType} {
  2127.     }
  2128. } else {
  2129.     Class PBGClassTypeD : {PBGClassType OPClassType} {    
  2130.     }
  2131. }
  2132.  
  2133. global mostDerivedOOPL ; set mostDerivedOOPL(OPClassType) PBGClassTypeD
  2134.  
  2135. selfPromoter OPClassType {this} {
  2136.     PBGClassTypeD promote $this
  2137. }
  2138.  
  2139.  
  2140. #---------------------------------------------------------------------------
  2141. #      File:           @(#)pbgenumtyp.tcl    /main/titanic/3
  2142.  
  2143.  
  2144. Class PBGEnumType : {PBGType} {
  2145.     constructor
  2146.     method destructor
  2147.     method generate
  2148. }
  2149.  
  2150. constructor PBGEnumType {class this name} {
  2151.     set this [PBGType::constructor $class $this $name]
  2152.     # Start constructor user section
  2153.     # End constructor user section
  2154.     return $this
  2155. }
  2156.  
  2157. method PBGEnumType::destructor {this} {
  2158.     # Start destructor user section
  2159.     # End destructor user section
  2160. }
  2161.  
  2162. method PBGEnumType::generate {this} {
  2163.     return [PBType new [$this getName]]
  2164. }
  2165.  
  2166. # Do not delete this line -- regeneration end marker
  2167.  
  2168. if [isCommand CMEnumType] {
  2169.     Class  PBGEnumTypeD : {PBGEnumType CMEnumType} {
  2170.     }
  2171. } else {
  2172.     Class PBGEnumTypeD : {PBGEnumType OPEnumType} {    
  2173.     }
  2174. }
  2175.  
  2176. global mostDerivedOOPL ; set mostDerivedOOPL(OPEnumType) PBGEnumTypeD
  2177.  
  2178. selfPromoter OPEnumType {this} {
  2179.     PBGEnumTypeD promote $this
  2180. }
  2181.  
  2182.  
  2183. #---------------------------------------------------------------------------
  2184. #      File:           @(#)pbgtypedef.tcl    /main/titanic/3
  2185.  
  2186.  
  2187. Class PBGTypeDefType : {PBGType} {
  2188.     constructor
  2189.     method destructor
  2190.     method generate
  2191. }
  2192.  
  2193. constructor PBGTypeDefType {class this name} {
  2194.     set this [PBGType::constructor $class $this $name]
  2195.     # Start constructor user section
  2196.     # End constructor user section
  2197.     return $this
  2198. }
  2199.  
  2200. method PBGTypeDefType::destructor {this} {
  2201.     # Start destructor user section
  2202.     # End destructor user section
  2203. }
  2204.  
  2205. method PBGTypeDefType::generate {this} {
  2206.     return [PBType new [$this getName]]
  2207. }
  2208.  
  2209. # Do not delete this line -- regeneration end marker
  2210.  
  2211. if [isCommand CMTypeDefType] {
  2212.     Class  PBGTypeDefTypeD : {PBGTypeDefType CMTypeDefType} {
  2213.     }
  2214. } else {
  2215.     Class PBGTypeDefTypeD : {PBGTypeDefType OPTypeDefType} {    
  2216.     }
  2217. }
  2218.  
  2219. global mostDerivedOOPL ; set mostDerivedOOPL(OPTypeDefType) PBGTypeDefTypeD
  2220.  
  2221. selfPromoter OPTypeDefType {this} {
  2222.     PBGTypeDefTypeD promote $this
  2223. }
  2224.  
  2225.  
  2226. #---------------------------------------------------------------------------
  2227. #      File:           @(#)pbclasscus.tcl    /main/titanic/1
  2228.  
  2229.  
  2230. Class PBClassCustomUserObjectGen : {PBDefinitionGen} {
  2231.     constructor
  2232.     method destructor
  2233.     method createPBDefinition
  2234. }
  2235.  
  2236. constructor PBClassCustomUserObjectGen {class this i_name ooplClass} {
  2237.     set this [PBDefinitionGen::constructor $class $this $i_name $ooplClass]
  2238.     # Start constructor user section
  2239.     # End constructor user section
  2240.     return $this
  2241. }
  2242.  
  2243. method PBClassCustomUserObjectGen::destructor {this} {
  2244.     # Start destructor user section
  2245.     # End destructor user section
  2246.     $this PBDefinitionGen::destructor
  2247. }
  2248.  
  2249. method PBClassCustomUserObjectGen::createPBDefinition {this} {
  2250.     set def [$this PBDefinitionGen::createPBDefinition]
  2251.     $def isAutoInstantiate [[$this ooplClass] isAutoInstantiate]
  2252.     return $def
  2253. }
  2254.  
  2255. # Do not delete this line -- regeneration end marker
  2256.  
  2257.  
  2258.  
  2259. #---------------------------------------------------------------------------
  2260. #      File:           @(#)pbclasssta.tcl    /main/titanic/1
  2261.  
  2262.  
  2263. Class PBClassStandardUserObjectGen : {PBDefinitionGen} {
  2264.     constructor
  2265.     method destructor
  2266. }
  2267.  
  2268. constructor PBClassStandardUserObjectGen {class this i_name ooplClass} {
  2269.     set this [PBDefinitionGen::constructor $class $this $i_name $ooplClass]
  2270.     # Start constructor user section
  2271.     # End constructor user section
  2272.     return $this
  2273. }
  2274.  
  2275. method PBClassStandardUserObjectGen::destructor {this} {
  2276.     # Start destructor user section
  2277.     # End destructor user section
  2278.     $this PBDefinitionGen::destructor
  2279. }
  2280.  
  2281. # Do not delete this line -- regeneration end marker
  2282.  
  2283.  
  2284.  
  2285. #---------------------------------------------------------------------------
  2286. #      File:           @(#)pbmenugen.tcl    /main/titanic/5
  2287.  
  2288.  
  2289. Class PBMenuGen : {PBDefinitionGen} {
  2290.     constructor
  2291.     method destructor
  2292.     method createPBDefinition
  2293.     method genAssocAttrs
  2294.     method checkAssocAttrs
  2295. }
  2296.  
  2297. constructor PBMenuGen {class this i_name ooplClass} {
  2298.     set this [PBDefinitionGen::constructor $class $this $i_name $ooplClass]
  2299.     # Start constructor user section
  2300.     # End constructor user section
  2301.     return $this
  2302. }
  2303.  
  2304. method PBMenuGen::destructor {this} {
  2305.     # Start destructor user section
  2306.     # End destructor user section
  2307.     $this PBDefinitionGen::destructor
  2308. }
  2309.  
  2310. method PBMenuGen::createPBDefinition {this} {
  2311.     set def [$this PBDefinitionGen::createPBDefinition]
  2312.  
  2313.     # set default for (mandatory) builtin property 'Text'
  2314.     $def setBuiltinProperty Text [PBBuiltinProperty new Text string \
  2315.         \"[$this name]\" -where ${PBBuiltinProperty::InOnCreate}]
  2316.  
  2317.     return $def
  2318. }
  2319.  
  2320. method PBMenuGen::genAssocAttrs {this def} {
  2321.     foreach assoc [[$this ooplClass] genAssocAttrSet] {
  2322.         set oppClass [$assoc getOppositeClass]
  2323.         if {$oppClass == ""} {
  2324.             # error is already given
  2325.             continue
  2326.         }
  2327.         if {[$oppClass getPBClassKind] == ${PBClassKind::Window}} {
  2328.             # waraning is already given: $W_IGNMENUWINAGGR
  2329.             continue
  2330.         } 
  2331.         $assoc generate [$this globalOoplClass] $def
  2332.     }
  2333. }
  2334.  
  2335. method PBMenuGen::checkAssocAttrs {this} {
  2336.     set warningnr 0
  2337.     set errornr 0
  2338.     foreach assoc [[$this ooplClass] genAssocAttrSet] {
  2339.         set tmpError [$assoc checkOppositeClass $this]
  2340.         incr errornr $tmpError
  2341.         if {$tmpError == 0 } {
  2342.             set oppClass [$assoc getOppositeClass]
  2343.             if {$oppClass == ""} {
  2344.                 # error is already given
  2345.                 continue
  2346.             }
  2347.             if {[$oppClass getPBClassKind] == ${PBClassKind::Window}} {
  2348.                 m4_warning $W_IGNMENUWINAGGR [$assoc getName] \
  2349.                     [$this name] [$oppClass getName]
  2350.                 incr warningnr 1
  2351.                 continue
  2352.             }
  2353.         incr errornr [$assoc check [$this globalOoplClass] $this]
  2354.         }
  2355.     }
  2356.     return $errornr
  2357. }
  2358.  
  2359. # Do not delete this line -- regeneration end marker
  2360.  
  2361.  
  2362.  
  2363. #---------------------------------------------------------------------------
  2364. #      File:           @(#)pbstructur.tcl    /main/titanic/4
  2365.  
  2366.  
  2367. Class PBStructureGen : {PBDefinitionGen} {
  2368.     constructor
  2369.     method destructor
  2370.     method createPBDefinition
  2371.     method genFeatures
  2372.     method checkFeatures
  2373. }
  2374.  
  2375. constructor PBStructureGen {class this i_name ooplClass} {
  2376.     set this [PBDefinitionGen::constructor $class $this $i_name $ooplClass]
  2377.     # Start constructor user section
  2378.     # End constructor user section
  2379.     return $this
  2380. }
  2381.  
  2382. method PBStructureGen::destructor {this} {
  2383.     # Start destructor user section
  2384.     # End destructor user section
  2385.     $this PBDefinitionGen::destructor
  2386. }
  2387.  
  2388. method PBStructureGen::createPBDefinition {this} {
  2389.     set def [PBStructure new [$this name] [$this ooplClass] \
  2390.         -isGlobalType [$this isGlobalType]]
  2391.  
  2392.     if [$this isGlobalType] {
  2393.         PBLibraryEntry new [$this model] $def
  2394.     } else {
  2395.         [$this container] addObjectStructure $def
  2396.     }
  2397.  
  2398.     return $def
  2399. }
  2400.  
  2401. method PBStructureGen::genFeatures {this def} {
  2402.     foreach attr [[$this ooplClass] dataAttrSet] {
  2403.         set type [[$attr ooplType] generate]
  2404.         set field [PBNameType new [$attr getName] $type \
  2405.                        -arrayDesc [[$attr ooplType] arrayDesc]]
  2406.         $def addField $field
  2407.     }
  2408. }
  2409.  
  2410. method PBStructureGen::checkFeatures {this} {
  2411.     set errornr 0
  2412.     foreach attr [[$this ooplClass] dataAttrSet] {
  2413.         incr errornr 0
  2414.     }
  2415.     return $errornr
  2416. }
  2417.  
  2418. # Do not delete this line -- regeneration end marker
  2419.  
  2420.  
  2421.  
  2422. #---------------------------------------------------------------------------
  2423. #      File:           @(#)pbvisualcu.tcl    /main/titanic/1
  2424.  
  2425.  
  2426. Class PBVisualCustomUserObjectGen : {PBDefinitionGen} {
  2427.     constructor
  2428.     method destructor
  2429.     method createPBDefinition
  2430. }
  2431.  
  2432. constructor PBVisualCustomUserObjectGen {class this i_name ooplClass} {
  2433.     set this [PBDefinitionGen::constructor $class $this $i_name $ooplClass]
  2434.     # Start constructor user section
  2435.     # End constructor user section
  2436.     return $this
  2437. }
  2438.  
  2439. method PBVisualCustomUserObjectGen::destructor {this} {
  2440.     # Start destructor user section
  2441.     # End destructor user section
  2442.     $this PBDefinitionGen::destructor
  2443. }
  2444.  
  2445. method PBVisualCustomUserObjectGen::createPBDefinition {this} {
  2446.     set def [$this PBDefinitionGen::createPBDefinition]
  2447.     $def isAutoInstantiate [[$this ooplClass] isAutoInstantiate]
  2448.     return $def
  2449. }
  2450.  
  2451. # Do not delete this line -- regeneration end marker
  2452.  
  2453.  
  2454.  
  2455. #---------------------------------------------------------------------------
  2456. #      File:           @(#)pbvisualst.tcl    /main/titanic/1
  2457.  
  2458.  
  2459. Class PBVisualStandardUserObjectGen : {PBDefinitionGen} {
  2460.     constructor
  2461.     method destructor
  2462. }
  2463.  
  2464. constructor PBVisualStandardUserObjectGen {class this i_name ooplClass} {
  2465.     set this [PBDefinitionGen::constructor $class $this $i_name $ooplClass]
  2466.     # Start constructor user section
  2467.     # End constructor user section
  2468.     return $this
  2469. }
  2470.  
  2471. method PBVisualStandardUserObjectGen::destructor {this} {
  2472.     # Start destructor user section
  2473.     # End destructor user section
  2474.     $this PBDefinitionGen::destructor
  2475. }
  2476.  
  2477. # Do not delete this line -- regeneration end marker
  2478.  
  2479.  
  2480.  
  2481. #---------------------------------------------------------------------------
  2482. #      File:           @(#)pbwindowge.tcl    /main/titanic/6
  2483.  
  2484.  
  2485. Class PBWindowGen : {PBDefinitionGen} {
  2486.     constructor
  2487.     method destructor
  2488.     method createPBDefinition
  2489.     method genAssocAttrs
  2490.     method checkAssocAttrs
  2491. }
  2492.  
  2493. constructor PBWindowGen {class this i_name ooplClass} {
  2494.     set this [PBDefinitionGen::constructor $class $this $i_name $ooplClass]
  2495.     # Start constructor user section
  2496.     # End constructor user section
  2497.     return $this
  2498. }
  2499.  
  2500. method PBWindowGen::destructor {this} {
  2501.     # Start destructor user section
  2502.     # End destructor user section
  2503.     $this PBDefinitionGen::destructor
  2504. }
  2505.  
  2506. method PBWindowGen::createPBDefinition {this} {
  2507.     set def [$this PBDefinitionGen::createPBDefinition]
  2508.  
  2509.     set windowType [[$this ooplClass] getWindowType]
  2510.     if {$windowType == "MDI" || $windowType == "MDIHelp"} {
  2511.         set mdiclient [PBVisual new "mdi_1" "" "mdiclient" "mdiclient" \
  2512.             -isGlobalType 0]
  2513.         $def addContainedClass $mdiclient
  2514.     }
  2515.     set windowType "[string tolower $windowType]!"
  2516.     $def setBuiltinProperty WindowType [PBBuiltinProperty \
  2517.         new WindowType WindowType $windowType \
  2518.         -where ${PBBuiltinProperty::InTypeDef}]
  2519.  
  2520.     return $def
  2521. }
  2522.  
  2523. method PBWindowGen::genAssocAttrs {this def} {
  2524.     foreach assoc [[$this ooplClass] genAssocAttrSet] {
  2525.         set oppClass [$assoc getOppositeClass]
  2526.         if {$oppClass == ""} {
  2527.             # error is already given
  2528.             continue
  2529.         }
  2530.         if {[$oppClass getPBClassKind] == ${PBClassKind::Menu}} {
  2531.             set menuName [$oppClass getName]
  2532.             $def setBuiltinProperty MenuName [PBBuiltinProperty \
  2533.                 new MenuName string \"${menuName}\" \
  2534.                 -where ${PBBuiltinProperty::InTypeDef}]
  2535.             $def menuName $menuName
  2536.             continue
  2537.         }
  2538.         $assoc generate [$this globalOoplClass] $def
  2539.     }
  2540. }
  2541.  
  2542. method PBWindowGen::checkAssocAttrs {this} {
  2543.     set errornr 0
  2544.     foreach assoc [[$this ooplClass] genAssocAttrSet] {
  2545.         set oppClass [$assoc getOppositeClass]
  2546.         if {$oppClass == ""} {
  2547.             # error is already given
  2548.             continue
  2549.         }
  2550.         if {[$oppClass getPBClassKind] == ${PBClassKind::Menu}} {
  2551.             continue
  2552.         }
  2553.         incr errornr [$assoc check [$this globalOoplClass] $this]
  2554.     }
  2555.     return $errornr
  2556.  
  2557. }
  2558.  
  2559. # Do not delete this line -- regeneration end marker
  2560.  
  2561.  
  2562.  
  2563. #---------------------------------------------------------------------------
  2564. #      File:           @(#)pbgdataatt.tcl    /main/titanic/6
  2565.  
  2566.  
  2567. Class PBGDataAttr : {PBGAttribute} {
  2568.     constructor
  2569.     method destructor
  2570.     method generate
  2571.     method generateAccess
  2572.     method isConstant
  2573.     method isShared
  2574.     method checkLocal
  2575.     method checkConst
  2576. }
  2577.  
  2578. constructor PBGDataAttr {class this name} {
  2579.     set this [PBGAttribute::constructor $class $this $name]
  2580.     # Start constructor user section
  2581.     # End constructor user section
  2582.     return $this
  2583. }
  2584.  
  2585. method PBGDataAttr::destructor {this} {
  2586.     # Start destructor user section
  2587.     # End destructor user section
  2588. }
  2589.  
  2590. method PBGDataAttr::generate {this class} {
  2591.     set type [[$this ooplType] generate]
  2592.     set access [$this generateAccess]
  2593.     set attr [PBVariable new [$this getName] $type $access \
  2594.         -arrayDesc [[$this ooplType] arrayDesc]]
  2595.     set defVal [$this getInitialValue]
  2596.     if {$defVal != ""} {
  2597.         $attr defaultValue $defVal
  2598.     }
  2599.     if {[$this isConstant]} {
  2600.         if {$defVal != ""} {
  2601.             $attr isConstant 1
  2602.         } else {
  2603.             # warning W_CONST_IGNORED already given
  2604.         }
  2605.     }
  2606.     $attr isShared [$this isShared]
  2607.     if {[$this isShared]} {
  2608.         $class addSharedVar $attr
  2609.     } else {
  2610.         $class addInstanceVar $attr
  2611.     }
  2612.     return $attr
  2613. }
  2614.  
  2615. method PBGDataAttr::generateAccess {this} {
  2616.     set accessList [$this getPropertyValue "attrib_access"]
  2617.     switch -exact -- $accessList {
  2618.         Public-Public 
  2619.             {return [PBVarAccess new "" "" ""]}
  2620.         Public-Protected
  2621.             {return [PBVarAccess new "" "" "protectedwrite"]}
  2622.         Public-Private
  2623.             {return [PBVarAccess new "" "" "privatewrite"]}
  2624.         Protected-Public -
  2625.         Protected-Protected
  2626.             {return [PBVarAccess new "protected" "" ""]}
  2627.         Protected-Private
  2628.             {return [PBVarAccess new "protected" "" "privatewrite"]}
  2629.         Private-Public -
  2630.         Private-Protected -
  2631.         Private-Private
  2632.             {return [PBVarAccess new "private" "" ""]}
  2633.         default
  2634.             {return [PBVarAccess new "" "" ""]}
  2635.     }
  2636. }
  2637.  
  2638. method PBGDataAttr::isConstant {this} {
  2639.     if {[$this getPropertyValue is_const_attrib] == "1"} {
  2640.         return 1
  2641.     }
  2642.     return 0
  2643. }
  2644.  
  2645. method PBGDataAttr::isShared {this} {
  2646.     return [$this isClassFeature]
  2647. }
  2648.  
  2649. method PBGDataAttr::checkLocal {this class} {
  2650.     set errornr 0
  2651.     set warningnr 0
  2652.     incr errornr [$this PBGAttribute::checkLocal $class]
  2653.     incr warningnr [$this checkConst $class]
  2654.     return $errornr
  2655. }
  2656.  
  2657. method PBGDataAttr::checkConst {this class} {
  2658.     set warningnr 0
  2659.     set defVal [$this getInitialValue]
  2660.     if {[$this isConstant]} {
  2661.         if {$defVal != ""} {
  2662.         } else {
  2663.             m4_warning $W_CONST_IGNORED [$this getName] \
  2664.                 [$class name]
  2665.             incr warningnr 1
  2666.         }
  2667.     }
  2668.     return $warningnr
  2669. }
  2670.  
  2671. # Do not delete this line -- regeneration end marker
  2672.  
  2673. if [isCommand CMDataAttr] {
  2674.     Class  PBGDataAttrD : {PBGDataAttr CMDataAttr} {
  2675.     }
  2676. } else {
  2677.     Class PBGDataAttrD : {PBGDataAttr OPDataAttr} {    
  2678.     }
  2679. }
  2680.  
  2681. global mostDerivedOOPL ; set mostDerivedOOPL(OPDataAttr) PBGDataAttrD
  2682.  
  2683. selfPromoter OPDataAttr {this} {
  2684.     PBGDataAttrD promote $this
  2685. }
  2686.  
  2687.  
  2688. #---------------------------------------------------------------------------
  2689. #      File:           @(#)pbggenasso.tcl    /main/titanic/17
  2690.  
  2691.  
  2692. Class PBGGenAssocAttr : {PBGAttribute} {
  2693.     constructor
  2694.     method destructor
  2695.     method promoter
  2696.     method getThisClass
  2697.     method getOppositeClass
  2698.     method isValidAssociation
  2699.     method genAddAccessor
  2700.     method genGetAccessor
  2701.     method genGetManyAccessor
  2702.     method genRemoveOneAccessor
  2703.     method genRemoveAccessor
  2704.     method genSetAccessor
  2705.     method genAssocVariable
  2706.     method getAssocIdentifier
  2707.     method getAssocVariable
  2708.     method getAccessorAccess
  2709.     method genCtor
  2710.     method genDtor
  2711.     method extendAssoc
  2712.     method reduceAssoc
  2713.     method setAssoc
  2714.     method check
  2715.     method checkLocal
  2716.     method checkOppositeClass
  2717.     method checkValidAssociation
  2718.     method checkAssoc
  2719.     method checkAssocClass
  2720.     attribute oppClass
  2721. }
  2722.  
  2723. constructor PBGGenAssocAttr {class this name} {
  2724.     set this [PBGAttribute::constructor $class $this $name]
  2725.     $this oppClass "_uninitialized_"
  2726.     # Start constructor user section
  2727.     # End constructor user section
  2728.     return $this
  2729. }
  2730.  
  2731. method PBGGenAssocAttr::destructor {this} {
  2732.     # Start destructor user section
  2733.     # End destructor user section
  2734. }
  2735.  
  2736. method PBGGenAssocAttr::promoter {this} {
  2737.     $this oppClass "_uninitialized_"
  2738. }
  2739.  
  2740. method PBGGenAssocAttr::getThisClass {this} {
  2741.     return [$this ooplClass]
  2742. }
  2743.  
  2744. method PBGGenAssocAttr::getOppositeClass {this} {
  2745.     if {[$this oppClass] != "_uninitialized_"} {
  2746.         return [$this oppClass]
  2747.     }
  2748.  
  2749.     set type [$this ooplType]
  2750.     set ooplClass ""
  2751.     if [$type isA OPBaseType] {
  2752. #        m4_error $E_ASSWITHBASETYPE [$this getName] \
  2753. #            [[$this getThisClass] getName] [$type getName]
  2754.     } elseif [$type isA OPEnumType] {
  2755. #        m4_error $E_ASSWITHENUMTYPE [$this getName] \
  2756. #            [[$this getThisClass] getName] [$type getName]
  2757.     } else {
  2758.         set ooplClass [$type ooplClass]
  2759.         if {$ooplClass == ""} {
  2760. #            m4_error $E_ASSCLASSNONAME [$this getName] \
  2761. #                [[$this getThisClass] getName]
  2762.         }
  2763.     }
  2764.     $this oppClass $ooplClass
  2765.     return $ooplClass
  2766. }
  2767.  
  2768. method PBGGenAssocAttr::isValidAssociation {this} {
  2769.     set errornr 0
  2770.     set thisClass [$this getThisClass]
  2771.     set oppClass [$this getOppositeClass]
  2772.     if {$oppClass == ""} {
  2773.         incr errornr 1
  2774.     } elseif {![$thisClass isGlobalType] || ![$oppClass isGlobalType]} {
  2775.         set opposite [$this opposite]
  2776.         if {[$thisClass isGlobalType] && \
  2777.             ($opposite == "") && \
  2778.             [$thisClass getPBClassKind] == ${PBClassKind::Window}} {
  2779.             #assoc with window
  2780.         } else {
  2781.             incr errornr 1
  2782.         }
  2783.     } elseif {[$oppClass getPBClassKind] == ${PBClassKind::Structure}} {
  2784.         incr errornr 1
  2785.     } elseif {[$thisClass getBuiltinSuperClass] == ""} {
  2786.         incr errornr 1
  2787.     } else {
  2788.         set classInfo [[PBBuiltinInfo::global] getBuiltinClass \
  2789.                            [$thisClass getBuiltinSuperClassName]]
  2790.         if ![$classInfo hasCtorDtor] {
  2791.             incr errornr 1
  2792.         } elseif {[$oppClass getBuiltinSuperClass] == ""} {
  2793.         # error is already given
  2794.             incr errornr 1
  2795.         } else {
  2796.             set oppClassInfo [[PBBuiltinInfo::global] getBuiltinClass \
  2797.                                   [$oppClass getBuiltinSuperClassName]]
  2798.             if {[$this opposite] != "" && ![$oppClassInfo hasCtorDtor]} {
  2799.                 incr errornr 1
  2800.             }
  2801.         }
  2802.     }
  2803.     if {$errornr == 0} {
  2804.         return 1
  2805.     } else {
  2806.         return 0
  2807.     }
  2808. }
  2809.  
  2810. method PBGGenAssocAttr::genAddAccessor {this class} {
  2811.     set opposite [$this opposite]
  2812.     if {$opposite == ""} {
  2813.         set accessStr [$this getAccessorAccess w]
  2814.     } else {
  2815.         set accessStr "public"
  2816.     }
  2817.     if {$accessStr == "none"} {
  2818.         return
  2819.     }
  2820.  
  2821.     set ident [$this getAssocIdentifier]
  2822.  
  2823.     set name "add[cap $ident]"
  2824.     set type [PBType new ""]
  2825.     set access [PBAccess new $accessStr]
  2826.  
  2827.     set accessor [PBFunction new $name $type $access]
  2828.     $class addObjectFunction $accessor
  2829.  
  2830.     if [$this isQualified] {
  2831.         set qualifier [$this qualifier]
  2832.     } elseif {$opposite != "" && [$opposite isQualified]} {
  2833.         set qualifier [$opposite qualifier]
  2834.     } else {
  2835.         set qualifier ""
  2836.     }
  2837.     if {$qualifier != ""} {
  2838.         set qualId [$qualifier getName]
  2839.         set qualTypeName [[$qualifier ooplType] getName]
  2840.         set type [PBType new $qualTypeName]
  2841.         set modifier [PBModifier new ""]
  2842.         set param [PBParameter new $qualId $type $modifier]
  2843.         $accessor addParameter $param
  2844.     }
  2845.  
  2846.     set paramId "new[cap $ident]"
  2847.     set paramType [[$this ooplType] generate]
  2848.     set modifier [PBModifier new ""]
  2849.     set param [PBParameter new $paramId $paramType $modifier]
  2850.     $accessor addParameter $param
  2851.  
  2852.     # Generate body
  2853.     #
  2854.     set sect [TextSection new]
  2855.     $accessor body $sect
  2856.     $sect append "${PBCookie::associationAccessorMethod}\n"
  2857.     $sect append "if isNull($paramId) then\n"
  2858.     $sect indent +
  2859.     $sect append "return\n"
  2860.     $sect indent -
  2861.     $sect append "end if\n"
  2862.  
  2863.     if {$opposite != ""} {
  2864.         if {[$opposite getMultiplicity] == "one" &&
  2865.                 ![$opposite isQualified] && ![$this isQualified]} {
  2866.             $sect append [$opposite setAssoc $paramId]
  2867.         }
  2868.         $sect append [$opposite extendAssoc $paramId]
  2869.     }
  2870.  
  2871.     if {[$this isQualified]} {
  2872.         set varName [$this getAssocVariable]
  2873.         $sect append "classset theSet\n"
  2874.         $sect append "theSet = $varName.get($qualId)\n"
  2875.         $sect append "if isNull(theSet) then\n"
  2876.         $sect indent +
  2877.         $sect append "theSet = create classset\n"
  2878.         $sect append "$varName.set($qualId, theSet)\n"
  2879.         $sect indent -
  2880.         $sect append "end if\n"
  2881.         $sect append "theSet.add($paramId)\n"
  2882.     } else {
  2883.         $sect append [$this extendAssoc "" $paramId]
  2884.     }
  2885. }
  2886.  
  2887. method PBGGenAssocAttr::genGetAccessor {this class} {
  2888.     set opposite [$this opposite]
  2889.     if {$opposite == ""} {
  2890.         set accessStr [$this getAccessorAccess r]
  2891.     } else {
  2892.         set accessStr "public"
  2893.     }
  2894.     if {$accessStr == "none"} {
  2895.                 return
  2896.         }
  2897.  
  2898.     set varName [$this getAssocVariable]
  2899.     set name "get[cap $varName]"
  2900.     set type [[$this ooplType] generate]
  2901.         set access [PBAccess new $accessStr]
  2902.  
  2903.     set accessor [PBFunction new $name $type $access]
  2904.     $class addObjectFunction $accessor
  2905.  
  2906.     # Generate body
  2907.     #
  2908.     set sect [TextSection new]
  2909.     $accessor body $sect
  2910.     $sect append "${PBCookie::associationAccessorMethod}\n"
  2911.     $sect append "return $varName\n"
  2912. }
  2913.  
  2914. method PBGGenAssocAttr::genGetManyAccessor {this class} {
  2915.     set opposite [$this opposite]
  2916.     if {$opposite == ""} {
  2917.         set accessStr [$this getAccessorAccess r]
  2918.     } else {
  2919.         set accessStr "public"
  2920.     }
  2921.     if {$accessStr == "none"} {
  2922.         return
  2923.     }
  2924.  
  2925.     set varName [$this getAssocVariable]
  2926.     set name "get[cap $varName]"
  2927.     set type [PBType new "classset"]
  2928.     set access [PBAccess new $accessStr]
  2929.  
  2930.     set accessor [PBFunction new $name $type $access]
  2931.     $class addObjectFunction $accessor
  2932.  
  2933.     # Generate body
  2934.     #
  2935.     set sect [TextSection new]
  2936.     $accessor body $sect
  2937.     $sect append "${PBCookie::associationAccessorMethod}\n"
  2938.     $sect append "return $varName\n"
  2939. }
  2940.  
  2941. method PBGGenAssocAttr::genRemoveOneAccessor {this class} {
  2942.     ## when mandatory not generate method.
  2943.     if {[$this isMandatory]} {
  2944.         return
  2945.     }
  2946.  
  2947.     set opposite [$this opposite]
  2948.     if {$opposite == ""} {
  2949.         set accessStr [$this getAccessorAccess w]
  2950.     } else {
  2951.         set accessStr "public"
  2952.     }
  2953.     if {$accessStr == "none"} {
  2954.         return
  2955.     }
  2956.  
  2957.     set ident [$this getAssocIdentifier]
  2958.  
  2959.     set name "remove[cap $ident]"
  2960.     set type [PBType new ""]
  2961.     set access [PBAccess new $accessStr]
  2962.  
  2963.     set accessor [PBFunction new $name $type $access]
  2964.     $class addObjectFunction $accessor
  2965.  
  2966.     if {$opposite != "" && [$opposite isQualified]} {
  2967.         set qualifier [$opposite qualifier]
  2968.         set qualId [$qualifier getName]
  2969.         set qualTypeName [[$qualifier ooplType] getName]
  2970.         set type [PBType new $qualTypeName]
  2971.         set modifier [PBModifier new ""]
  2972.         set param [PBParameter new $qualId $type $modifier]
  2973.         $accessor addParameter $param
  2974.     }
  2975.  
  2976.     # Generate body
  2977.     #
  2978.     set sect [TextSection new]
  2979.     $accessor body $sect
  2980.     $sect append "${PBCookie::associationAccessorMethod}\n"
  2981.     if {$opposite != ""} {
  2982.         $sect append "if not isNull($ident) then\n"
  2983.         $sect indent +
  2984.         $sect append [$opposite reduceAssoc $ident]
  2985.         $sect indent -
  2986.         $sect append "end if\n"
  2987.     }
  2988.     $sect append "setNull($ident)\n"
  2989. }
  2990.  
  2991. method PBGGenAssocAttr::genRemoveAccessor {this class} {
  2992.     set opposite [$this opposite]
  2993.     if {$opposite == ""} {
  2994.         set accessStr [$this getAccessorAccess w]
  2995.     } else {
  2996.         set accessStr "public"
  2997.     }
  2998.     if {$accessStr == "none"} {
  2999.         return
  3000.     }
  3001.  
  3002.     set ident [$this getAssocIdentifier]
  3003.  
  3004.     set name "remove[cap $ident]"
  3005.     set type [PBType new ""]
  3006.     set access [PBAccess new $accessStr]
  3007.  
  3008.     set accessor [PBFunction new $name $type $access]
  3009.     $class addObjectFunction $accessor
  3010.  
  3011.     if {$opposite != "" && [$opposite isQualified]} {
  3012.         set qualifier [$opposite qualifier]
  3013.         set qualId [$qualifier getName]
  3014.         set qualTypeName [[$qualifier ooplType] getName]
  3015.         set type [PBType new $qualTypeName]
  3016.         set modifier [PBModifier new ""]
  3017.         set param [PBParameter new $qualId $type $modifier]
  3018.         $accessor addParameter $param
  3019.     }
  3020.  
  3021.     set paramId "old[cap $ident]"
  3022.     set paramType [[$this ooplType] generate]
  3023.     set modifier [PBModifier new ""]
  3024.     set param [PBParameter new $paramId $paramType $modifier]
  3025.     $accessor addParameter $param
  3026.  
  3027.     # Generate body
  3028.     #
  3029.     set sect [TextSection new]
  3030.     $accessor body $sect
  3031.     $sect append "${PBCookie::associationAccessorMethod}\n"
  3032.     $sect append "if isNull($paramId) then\n"
  3033.     $sect indent +
  3034.     $sect append "return\n"
  3035.     $sect indent -
  3036.     $sect append "end if\n"
  3037.  
  3038.     if {$opposite != ""} {
  3039.         $sect append [$opposite reduceAssoc $paramId]
  3040.     }
  3041.     $sect append [$this reduceAssoc "" $paramId]
  3042. }
  3043.  
  3044. method PBGGenAssocAttr::genSetAccessor {this class} {
  3045.     set opposite [$this opposite]
  3046.     if {$opposite == ""} {
  3047.         set accessStr [$this getAccessorAccess w]
  3048.     } else {
  3049.         set accessStr "public"
  3050.     }
  3051.     if {$accessStr == "none"} {
  3052.         return
  3053.     }
  3054.  
  3055.     set ident [$this getAssocIdentifier]
  3056.  
  3057.     set name "set[cap $ident]"
  3058.     set type [PBType new ""]
  3059.     set access [PBAccess new $accessStr]
  3060.  
  3061.     set accessor [PBFunction new $name $type $access]
  3062.     $class addObjectFunction $accessor
  3063.  
  3064.     if {$opposite != "" && [$opposite isQualified]} {
  3065.         set qualifier [$opposite qualifier]
  3066.         set qualId [$qualifier getName]
  3067.         set qualTypeName [[$qualifier ooplType] getName]
  3068.         set type [PBType new $qualTypeName]
  3069.         set modifier [PBModifier new ""]
  3070.         set param [PBParameter new $qualId $type $modifier]
  3071.         $accessor addParameter $param
  3072.     }
  3073.  
  3074.     set paramId "new[cap $ident]"
  3075.     set paramType [[$this ooplType] generate]
  3076.     set modifier [PBModifier new ""]
  3077.     set param [PBParameter new $paramId $paramType $modifier]
  3078.     $accessor addParameter $param
  3079.  
  3080.     # Generate body
  3081.     #
  3082.     set sect [TextSection new]
  3083.     $accessor body $sect
  3084.     $sect append "${PBCookie::associationAccessorMethod}\n"
  3085.     ## when mandatory no empty values allowed.
  3086.     if {[$this isMandatory]} {
  3087.         $sect append "if isNull($paramId) then\n"
  3088.         $sect indent +
  3089.         $sect append "return\n"
  3090.         $sect indent -
  3091.         $sect append "end if\n"
  3092.     }
  3093.     if {$opposite != ""} {
  3094.         if {[$opposite isQualified]} {
  3095.             $sect append "if not isNull($paramId) then\n"
  3096.             $sect indent +
  3097.             $sect append [$opposite extendAssoc $paramId]
  3098.             $sect indent -
  3099.             $sect append "end if\n"
  3100.         } else {
  3101.             $sect append "if not isNull($ident) then\n"
  3102.             $sect indent +
  3103.             $sect append [$opposite reduceAssoc $ident]
  3104.             $sect indent -
  3105.             $sect append "end if\n"
  3106.  
  3107.             if {[$opposite getMultiplicity] == "one"} {
  3108.                 $sect append "if not isNull($paramId) then\n"
  3109.                 $sect indent +
  3110.                 $sect append [$opposite setAssoc $paramId]
  3111.                 $sect append [$opposite extendAssoc $paramId]
  3112.                 $sect indent -
  3113.                 $sect append "end if\n"
  3114.             } else {
  3115.                 $sect append "if not isNull($paramId) then\n"
  3116.                 $sect indent +
  3117.                 $sect append [$opposite extendAssoc $paramId]
  3118.                 $sect indent -
  3119.                 $sect append "end if\n"
  3120.             }
  3121.         }
  3122.     }
  3123.     $sect append "$ident = $paramId\n"
  3124. }
  3125.  
  3126. method PBGGenAssocAttr::genAssocVariable {this class} {
  3127.     if [$this isQualified] {
  3128.         set type [PBType new "classdict"]
  3129.     } elseif {[$this getMultiplicity] == "many"} {
  3130.         set type [PBType new "classset"]
  3131.     } else {
  3132.         set type [[$this ooplType] generate]
  3133.     }
  3134.  
  3135.     if {[$this opposite] != ""} {
  3136.         set access [PBVarAccess new "public" "" ""]
  3137.     } else {
  3138.         set access [PBVarAccess new "private" "" ""]
  3139.     }
  3140.  
  3141.         set name [$this getAssocVariable]
  3142.         set var [PBVariable new $name $type $access]
  3143.         $class addAssocInstanceVar $var
  3144. }
  3145.  
  3146. method PBGGenAssocAttr::getAssocIdentifier {this} {
  3147.     if {[$this isLinkAttr]} {
  3148.         return [uncap [[$this ooplType] getName]Of[cap [$this getName]]]
  3149.     }
  3150.     return [$this getName]
  3151. }
  3152.  
  3153. method PBGGenAssocAttr::getAssocVariable {this} {
  3154.     set name [$this getAssocIdentifier]
  3155.     if {[$this isQualified]} {
  3156.         set name "${name}Dict"
  3157.     } elseif {[$this getMultiplicity] == "many"} {
  3158.         set name "${name}Set"
  3159.     }
  3160.     return [uncap $name]
  3161. }
  3162.  
  3163. method PBGGenAssocAttr::getAccessorAccess {this mode} {
  3164.     set accessList [split [$this getPropertyValue assoc_access] -]
  3165.     if {$mode == "r"} {
  3166.         set accessStr [lindex $accessList 0]
  3167.     } else {
  3168.         set accessStr [lindex $accessList 1]
  3169.     }
  3170.     if {$accessStr == ""} {
  3171.         set accessStr "public"
  3172.     }
  3173.     return [string tolower $accessStr]
  3174. }
  3175.  
  3176. method PBGGenAssocAttr::genCtor {this class} {
  3177.     # for assoc with windows
  3178.     set thisClass [$this getThisClass]
  3179.     if {[$thisClass getPBClassKind] == ${PBClassKind::Window}} {
  3180.         set closeEvent [$class findEvent "open"]
  3181.         if {$closeEvent == ""} {
  3182.             set type [PBType new "long"]
  3183.             set closeEvent [PBEvent new "open" $type]
  3184.             $class addScript $closeEvent
  3185.         }
  3186.     }
  3187.  
  3188.     set ctor [$class findEvent "constructor"]
  3189.     if {$ctor == ""} {
  3190.         set ctor [PBConstructor new "constructor" [PBType new ""]]
  3191.         $class addScript $ctor
  3192.     }
  3193.     if {[$ctor preBody] == ""} {
  3194.         $ctor preBody [TextSection new]
  3195.     }
  3196.     set varName [$this getAssocVariable]
  3197.     if {[$this isQualified]} {
  3198.         set initStr "$varName = create classdict"
  3199.     } elseif {[$this getMultiplicity] == "many"} {
  3200.         set initStr "$varName = create classset"
  3201.     } else {
  3202.         set initStr "setNull($varName)"
  3203.     }
  3204.     [$ctor preBody] append "${initStr}\n"
  3205. }
  3206.  
  3207. method PBGGenAssocAttr::genDtor {this class} {
  3208.     # for assoc with windows
  3209.     set thisClass [$this getThisClass]
  3210.     if {[$thisClass getPBClassKind] == ${PBClassKind::Window}} {
  3211.         set closeEvent [$class findEvent "close"]
  3212.         if {$closeEvent == ""} {
  3213.             set type [PBType new "long"]
  3214.             set closeEvent [PBEvent new "close" $type]
  3215.             $class addScript $closeEvent
  3216.         } 
  3217.     }
  3218.  
  3219.     set dtor [$class findEvent "destructor"]
  3220.     if {$dtor == ""} {
  3221.         set dtor [PBDestructor new "destructor" [PBType new ""]]
  3222.         $class addScript $dtor
  3223.     }
  3224.     if {[$dtor postBody] == ""} {
  3225.         $dtor postBody [TextSection new]
  3226.     }
  3227.     set varName [$this getAssocVariable]
  3228.     ## set opposites to Null (if applicable)
  3229.     set opposite [$this opposite]
  3230.     if {$opposite != ""} {
  3231.         set accessStr [$this getAccessorAccess w]
  3232.     } else {
  3233.         set accessStr "public"
  3234.     }
  3235.     if {$accessStr != "none"} {
  3236.         # there's a remove
  3237.     }
  3238.     ##  cleanup opposites:
  3239.     if {$opposite != ""} {
  3240.         if {[$this isQualified] || \
  3241.                 [$this getMultiplicity] == "many"} {
  3242.             # cleanup opposites from classes stored in dictionary
  3243.             [$dtor postBody] append \
  3244.                     "integer tmp_int_[$this getAssocVariable]\n"
  3245.             [$dtor postBody] append \
  3246.                     "[[$this ooplType] getName] tmp_cnt_[$this getAssocVariable]\n"
  3247.             [$dtor postBody] append \
  3248.                     "tmp_cnt_[$this getAssocVariable] = [$this getAssocVariable].firstobject()\n"
  3249.             [$dtor postBody] append \
  3250.                     "FOR tmp_int_[$this getAssocVariable] = 1 to [$this getAssocVariable].size()\n"
  3251.             [$dtor postBody] indent +
  3252.             if {[$opposite isQualified] || \
  3253.                         [$opposite getMultiplicity] == "many"} {
  3254.                 [$dtor postBody] append \
  3255.                         "if not isNull(tmp_cnt_[$this getAssocVariable].[$opposite getAssocVariable]) then\n"
  3256.                 [$dtor postBody] indent +
  3257.                 [$dtor postBody] append \
  3258.                         "tmp_cnt_[$this getAssocVariable].[$opposite getAssocVariable].remove(this)\n"
  3259.                 [$dtor postBody] indent -
  3260.                 [$dtor postBody] append \
  3261.                         "end if\n"
  3262.             } else {
  3263.                 [$dtor postBody] append \
  3264.                         "if not isNull(tmp_cnt_[$this getAssocVariable]) then\n"
  3265.                 [$dtor postBody] indent +
  3266.                 [$dtor postBody] append \
  3267.                         "setNull(tmp_cnt_[$this getAssocVariable].[$opposite getAssocIdentifier])\n"
  3268.                 [$dtor postBody] indent -
  3269.                 [$dtor postBody] append \
  3270.                         "end if\n"
  3271.             }
  3272.             [$dtor postBody] append \
  3273.                     "tmp_cnt_[$this getAssocVariable] = [$this getAssocVariable].nextobject()\n"
  3274.             [$dtor postBody] indent -
  3275.             [$dtor postBody] append \
  3276.                     "NEXT\n"
  3277.         } else {
  3278.             if {[$opposite isQualified] || \
  3279.                     [$opposite getMultiplicity] == "many"} {
  3280.                 # clean up opposite which are somewhere present 
  3281.                 # in dictionary or set
  3282.                 [$dtor postBody] append \
  3283.                         "powerobject tmp_[$opposite getAssocIdentifier]\n"
  3284.                 [$dtor postBody] append \
  3285.                         "tmp_[$opposite getAssocIdentifier] = this\n"
  3286.                 [$dtor postBody] append \
  3287.                         "if not isNull([$this getAssocVariable]) then\n"
  3288.                 [$dtor postBody] indent +
  3289.                 [$dtor postBody] append \
  3290.                         "[$this getAssocVariable].[$opposite getAssocVariable].remove(tmp_[$opposite getAssocIdentifier])\n"
  3291.                 [$dtor postBody] indent -
  3292.                 [$dtor postBody] append \
  3293.                         "end if\n"            
  3294.             } else {
  3295.                 # clean up opposite
  3296.                 [$dtor postBody] append \
  3297.                         "if not isNull([$this getAssocVariable]) then\n"
  3298.                 [$dtor postBody] indent +
  3299.                 [$dtor postBody] append \
  3300.                         "setNull([$this getAssocVariable].[$opposite getAssocVariable])\n"
  3301.                 [$dtor postBody] indent -
  3302.                 [$dtor postBody] append \
  3303.                         "end if\n"
  3304.             }
  3305.         }
  3306.     }
  3307.     if {[$this isQualified] || [$this getMultiplicity] == "many"} {
  3308.         [$dtor postBody] append "destroy($varName)\n"
  3309.     }
  3310.     [$dtor postBody] append "setNull($varName)\n"
  3311. }
  3312.  
  3313. method PBGGenAssocAttr::extendAssoc {this {prefix ""} {element this}} {
  3314.     if {$prefix != ""} {
  3315.         set prefix "${prefix}."
  3316.     }
  3317.  
  3318.     set varName [$this getAssocVariable]
  3319.  
  3320.     if {[$this isQualified]} {
  3321.         set qualId [[$this qualifier] getName]
  3322.         if {[$this getMultiplicity] == "one"} {
  3323.             return "$prefix$varName.set($qualId, $element)\n"
  3324.         }
  3325.         set ident [$this getAssocIdentifier]
  3326.         return "${prefix}add[cap $ident]($qualId, $element)\n"
  3327.     }
  3328.  
  3329.     if {[$this getMultiplicity] == "one"} {
  3330.         # don't use set method because this will also
  3331.         # set its opposite and so will result in loop
  3332.         return "$prefix$varName = $element\n"
  3333.     }
  3334.     # don't use add method because this will also
  3335.     # set its opposite and so will result in loop
  3336.     return "$prefix$varName.add($element)\n"
  3337. }
  3338.  
  3339. method PBGGenAssocAttr::reduceAssoc {this {prefix ""} {element this}} {
  3340.     if {$prefix != ""} {
  3341.         set prefix "${prefix}."
  3342.     }
  3343.  
  3344.     set varName [$this getAssocVariable]
  3345.  
  3346.     if {[$this isQualified]} {
  3347.         set qualId [[$this qualifier] getName]
  3348.         if {[$this getMultiplicity] == "one"} {
  3349.             return "$prefix$varName.remove($qualId)\n"
  3350.         }
  3351.         set ident [$this getAssocIdentifier]
  3352.         return "${prefix}remove[cap $ident]($qualId, $element)\n"
  3353.     }
  3354.  
  3355.     if {[$this getMultiplicity] == "one"} {
  3356.         return "setNull($prefix$varName)\n"
  3357.     }
  3358.  
  3359.     return "$prefix$varName.remove($element)\n"
  3360. }
  3361.  
  3362. method PBGGenAssocAttr::setAssoc {this {prefix ""} {element ""}} {
  3363.     if {$prefix != ""} {
  3364.         set prefix "${prefix}."
  3365.     }
  3366.  
  3367.     set retStr ""
  3368.     if {$element == ""} {
  3369.         set retStr "[[$this ooplType] getName] nullRef\n"
  3370.         set retStr "${retStr}setNull(nullRef)\n"
  3371.         set element "nullRef"
  3372.     }
  3373.     set retStr "${retStr}${prefix}set[\
  3374.         cap [$this getAssocIdentifier]]($element)\n"
  3375.     return $retStr
  3376. }
  3377.  
  3378. method PBGGenAssocAttr::check {this globalOoplClass class} {
  3379.     set errornr 0
  3380.     incr errornr [$this checkLocal $globalOoplClass $class]
  3381.     return $errornr
  3382. }
  3383.  
  3384. method PBGGenAssocAttr::checkLocal {this globalOoplClass class} {
  3385.     set errornr 0
  3386.     incr errornr [$this checkOppositeClass $class]
  3387.     incr errornr [$this checkValidAssociation $class]
  3388.     return $errornr
  3389. }
  3390.  
  3391. method PBGGenAssocAttr::checkOppositeClass {this class} {
  3392.     set errornr 0
  3393.     set type [$this ooplType]
  3394.     set ooplClass ""
  3395.     # if correct assumption: [$this getThisClass] equals $class.
  3396.     if [$type isA OPBaseType] {
  3397.         m4_error $E_ASSWITHBASETYPE [$this getName] \
  3398.             [[$this getThisClass] getName] [$type getName]
  3399.         incr errornr 1
  3400.     } elseif [$type isA OPEnumType] {
  3401.         m4_error $E_ASSWITHENUMTYPE [$this getName] \
  3402.             [[$this getThisClass] getName] [$type getName]
  3403.         incr errornr 1
  3404.     } else {
  3405.         set ooplClass [$type ooplClass]
  3406.         if {$ooplClass == ""} {
  3407.             m4_error $E_ASSCLASSNONAME [$this getName] \
  3408.                 [[$this getThisClass] getName]
  3409.             incr errornr 1
  3410.         }
  3411.     }
  3412.     return $errornr
  3413. }
  3414.  
  3415. method PBGGenAssocAttr::checkValidAssociation {this class} {
  3416.     set errornr 0
  3417.     set thisClass [$this getThisClass]
  3418.     set oppClass [$this getOppositeClass]
  3419.     if {$oppClass == ""} {
  3420.         # error is already given
  3421.         incr errornr 1
  3422.     } elseif {![$thisClass isGlobalType] || ![$oppClass isGlobalType]} {
  3423.         set opposite [$this opposite]
  3424.         if {[$thisClass isGlobalType] && \
  3425.                 ($opposite == "") && \
  3426.                 [$thisClass getPBClassKind] == ${PBClassKind::Window}} {
  3427.             #assoc with window
  3428.         } else {
  3429.             m4_error $E_ASSGLOBTYPES [$this getName] \
  3430.                     [$thisClass getName] [$oppClass getName]
  3431.             incr errornr 1
  3432.         }
  3433.     } elseif {[$oppClass getPBClassKind] == ${PBClassKind::Structure}} {
  3434.         m4_error $E_ASSWITHSTRUCT [$this getName] \
  3435.             [$thisClass getName] [$oppClass getName]
  3436.         incr errornr 1
  3437.     } elseif {[$thisClass getBuiltinSuperClass] == ""} {
  3438.         # error is already given
  3439.         incr errornr 1
  3440.     } else {
  3441.         set classInfo [[PBBuiltinInfo::global] getBuiltinClass \
  3442.                            [$thisClass getBuiltinSuperClassName]]
  3443.         if ![$classInfo hasCtorDtor] {
  3444.             m4_error $E_ASSCTORDTOR [$this getName] [$thisClass getName] \
  3445.                 [$oppClass getName] [$thisClass getName]
  3446.             incr errornr 1
  3447.         } elseif {[$oppClass getBuiltinSuperClass] == ""} {
  3448.         # error is already given
  3449.             incr errornr 1
  3450.         } else {
  3451.             set oppClassInfo [[PBBuiltinInfo::global] getBuiltinClass \
  3452.                                   [$oppClass getBuiltinSuperClassName]]
  3453.             if {[$this opposite] != "" && ![$oppClassInfo hasCtorDtor]} {
  3454.                 m4_error $E_ASSCTORDTOR [$this getName] [$thisClass getName] \
  3455.                     [$oppClass getName] [$oppClass getName]
  3456.                 incr errornr 1
  3457.             }
  3458.         }
  3459.     }
  3460.     return $errornr
  3461. }
  3462.  
  3463. method PBGGenAssocAttr::checkAssoc {this class} {
  3464.     set errornr 0
  3465.     return $errornr
  3466. }
  3467.  
  3468. method PBGGenAssocAttr::checkAssocClass {this class} {
  3469.     set errornr 0
  3470.     return $errornr
  3471. }
  3472.  
  3473. # Do not delete this line -- regeneration end marker
  3474.  
  3475. if [isCommand CMGenAssocAttr] {
  3476.     Class  PBGGenAssocAttrD : {PBGGenAssocAttr CMGenAssocAttr} {
  3477.     }
  3478. } else {
  3479.     Class PBGGenAssocAttrD : {PBGGenAssocAttr OPGenAssocAttr} {    
  3480.     }
  3481. }
  3482.  
  3483. global mostDerivedOOPL ; set mostDerivedOOPL(OPGenAssocAttr) PBGGenAssocAttrD
  3484.  
  3485. selfPromoter OPGenAssocAttr {this} {
  3486.     PBGGenAssocAttrD promote $this
  3487. }
  3488.  
  3489.  
  3490. #---------------------------------------------------------------------------
  3491. #      File:           @(#)pbgassocat.tcl    /main/titanic/12
  3492.  
  3493.  
  3494. Class PBGAssocAttr : {PBGGenAssocAttr} {
  3495.     constructor
  3496.     method destructor
  3497.     method isAggregation
  3498.     method isContainmentAggregation
  3499.     method generate
  3500.     method checkLocal
  3501.     method checkAggregation
  3502. }
  3503.  
  3504. constructor PBGAssocAttr {class this name} {
  3505.     set this [PBGGenAssocAttr::constructor $class $this $name]
  3506.     # Start constructor user section
  3507.     # End constructor user section
  3508.     return $this
  3509. }
  3510.  
  3511. method PBGAssocAttr::destructor {this} {
  3512.     # Start destructor user section
  3513.     # End destructor user section
  3514. }
  3515.  
  3516. method PBGAssocAttr::isAggregation {this} {
  3517.     set compType [[[$this smConnector] getConnector] type]
  3518.     if {$compType == "aggregation"} {
  3519.         return 1
  3520.     }
  3521.     return 0
  3522. }
  3523.  
  3524. method PBGAssocAttr::isContainmentAggregation {this class} {
  3525.     if ![$this isAggregation] {
  3526.         return 0
  3527.     }
  3528.  
  3529.     if [$this isAggregate] {
  3530.         set fromClass [$this getThisClass]
  3531.         set toClass [$this getOppositeClass]
  3532.     } elseif {[$this opposite] != ""} {
  3533.         set fromClass [$this getOppositeClass]
  3534.         set toClass [$this getThisClass]
  3535.     } else {
  3536.         return 0
  3537.     }
  3538.  
  3539.     set containerType [$fromClass getBuiltinSuperClassName]
  3540.     set containeeType [$toClass getBuiltinSuperClassName]
  3541.  
  3542.     # Is it graphical containment, i.e. is it:
  3543.     # - a userobject or window containing a control, or
  3544.     # - a tab containing a userobject?
  3545.     if {$containerType == "userobject" || $containerType == "window"} {
  3546.         set classInfo [[PBBuiltinInfo::global] \
  3547.             getBuiltinClass $containeeType]
  3548.         if {$classInfo != "" && [$classInfo isControl]} {
  3549.             return 1
  3550.         }
  3551.     }
  3552.     if {$containerType == "tab" && $containeeType == "userobject"} {
  3553.         return 1
  3554.     }
  3555.  
  3556.     # Is it a menu containing other menus ?
  3557.     if {($containerType == "menu" || $containerType == "menucascade") &&
  3558.         ($containeeType == "menu" || $containeeType == "menucascade")} {
  3559.         return 1
  3560.     }
  3561.  
  3562.     # Is it a (global) class having an 'object structure' ?
  3563.     if {[$class isGlobalType] && $containeeType == "structure"} {
  3564.         return 1
  3565.     }
  3566.  
  3567.     return 0
  3568. }
  3569.  
  3570. method PBGAssocAttr::generate {this globalOoplClass class} {
  3571.     set oppClass [$this getOppositeClass]
  3572.     if {$oppClass == ""} {
  3573.         # error is already given
  3574.         return
  3575.     }
  3576.  
  3577.     if [$this isContainmentAggregation $class] {
  3578.         if [$this isAggregate] {
  3579.             # pb internal lower cases class names
  3580.             [$this getOppositeClass] generateAsContainedClass \
  3581.                 [string tolower [$this getName]] $globalOoplClass \
  3582.                 [$this getThisClass] $class
  3583.         } else {
  3584.             # error is already given E_NOREVAGGR
  3585.          }
  3586.         return
  3587.     }
  3588.  
  3589.     if [$this isAggregate] {
  3590.         # This is an aggregate, but it does not represent a valid
  3591.         # containment aggregation
  3592.         # warning is already given $W_AGGRASASSOC
  3593.     }
  3594.  
  3595.     # 'normal' association generation ...
  3596.     #
  3597.     if ![$this isValidAssociation] {
  3598.         # error is already given
  3599.         return
  3600.     }
  3601.     $this genAssocVariable $class
  3602.     if {[$this getMultiplicity] == "one"} {
  3603.         $this genRemoveOneAccessor $class
  3604.         $this genSetAccessor $class
  3605.         $this genGetAccessor $class
  3606.     } else {
  3607.         $this genAddAccessor $class
  3608.         $this genRemoveAccessor $class
  3609.         $this genGetManyAccessor $class
  3610.     }
  3611.     $this genCtor $class
  3612.     $this genDtor $class
  3613. }
  3614.  
  3615. method PBGAssocAttr::checkLocal {this globalOoplClass class} {
  3616.     set errornr 0
  3617.     incr errornr [$this checkOppositeClass $class]
  3618.     if { $errornr == 0 } {
  3619.         incr errornr [$this checkAggregation $globalOoplClass $class]
  3620.     }
  3621.     return $errornr
  3622. }
  3623.  
  3624. method PBGAssocAttr::checkAggregation {this globalOoplClass class} {
  3625.     set errornr 0
  3626.     set warningnr 0
  3627.     if [$this isContainmentAggregation $class] {
  3628.         if [$this isAggregate] {
  3629.             # ok, after containment loop detection
  3630.             incr errornr [[$this getOppositeClass] checkAsContainedClass \
  3631.                               [$this getName] $globalOoplClass \
  3632.                               [$this getThisClass] $class]
  3633.         } else {
  3634.             m4_error $E_NOREVAGGR [$this getName] \
  3635.                 [[$this getThisClass] getName] \
  3636.                 [[$this getOppositeClass] getName] 
  3637.             incr errornr 1
  3638.         }
  3639.         return $errornr
  3640.     }
  3641.     if [$this isAggregate] {
  3642.         # This is an aggregate, but it does not represent a valid
  3643.         # containment aggregation
  3644.         m4_warning $W_AGGRASASSOC [$this getName] \
  3645.             [[$this getThisClass] getName] \
  3646.             [[$this getOppositeClass] getName]
  3647.         incr warningnr 1
  3648.     }
  3649.     incr errornr [$this checkValidAssociation $class]
  3650.  
  3651.     return $errornr
  3652. }
  3653.  
  3654. # Do not delete this line -- regeneration end marker
  3655.  
  3656. if [isCommand CMAssocAttr] {
  3657.     Class  PBGAssocAttrD : {PBGAssocAttr CMAssocAttr} {
  3658.     }
  3659. } else {
  3660.     Class PBGAssocAttrD : {PBGAssocAttr OPAssocAttr} {    
  3661.     }
  3662. }
  3663.  
  3664. global mostDerivedOOPL ; set mostDerivedOOPL(OPAssocAttr) PBGAssocAttrD
  3665.  
  3666. selfPromoter OPAssocAttr {this} {
  3667.     PBGAssocAttrD promote $this
  3668. }
  3669.  
  3670.  
  3671.  
  3672. #---------------------------------------------------------------------------
  3673. #      File:           @(#)pbglinkatt.tcl    /main/titanic/6
  3674.  
  3675.  
  3676. Class PBGLinkAttr : {PBGGenAssocAttr} {
  3677.     constructor
  3678.     method destructor
  3679.     method generate
  3680. }
  3681.  
  3682. constructor PBGLinkAttr {class this name} {
  3683.     set this [PBGGenAssocAttr::constructor $class $this $name]
  3684.     # Start constructor user section
  3685.     # End constructor user section
  3686.     return $this
  3687. }
  3688.  
  3689. method PBGLinkAttr::destructor {this} {
  3690.     # Start destructor user section
  3691.     # End destructor user section
  3692. }
  3693.  
  3694. method PBGLinkAttr::generate {this globalOoplClass class} {
  3695.     if ![$this isValidAssociation] {
  3696.         return
  3697.     }
  3698.     $this genAssocVariable $class
  3699.     if {[$this getMultiplicity] == "one"} {
  3700.         $this genGetAccessor $class
  3701.     } else {
  3702.         $this genGetManyAccessor $class
  3703.     }
  3704.     $this genCtor $class
  3705.     $this genDtor $class
  3706. }
  3707.  
  3708. # Do not delete this line -- regeneration end marker
  3709.  
  3710. if [isCommand CMLinkAttr] {
  3711.     Class  PBGLinkAttrD : {PBGLinkAttr CMLinkAttr} {
  3712.     }
  3713. } else {
  3714.     Class PBGLinkAttrD : {PBGLinkAttr OPLinkAttr} {    
  3715.     }
  3716. }
  3717.  
  3718. global mostDerivedOOPL ; set mostDerivedOOPL(OPLinkAttr) PBGLinkAttrD
  3719.  
  3720. selfPromoter OPLinkAttr {this} {
  3721.     PBGLinkAttrD promote $this
  3722. }
  3723.  
  3724.  
  3725.  
  3726. #---------------------------------------------------------------------------
  3727. #      File:           @(#)pbgqualatt.tcl    /main/titanic/10
  3728.  
  3729.  
  3730. Class PBGQualAttr : {PBGGenAssocAttr} {
  3731.     constructor
  3732.     method destructor
  3733.     method generate
  3734.     method genGetQualifiedAccessor
  3735.     method genRemoveQualifiedAccessor
  3736.     method genSetQualifiedAccessor
  3737. }
  3738.  
  3739. constructor PBGQualAttr {class this name} {
  3740.     set this [PBGGenAssocAttr::constructor $class $this $name]
  3741.     # Start constructor user section
  3742.     # End constructor user section
  3743.     return $this
  3744. }
  3745.  
  3746. method PBGQualAttr::destructor {this} {
  3747.     # Start destructor user section
  3748.     # End destructor user section
  3749. }
  3750.  
  3751. method PBGQualAttr::generate {this globalOoplClass class} {
  3752.     if ![$this isValidAssociation] {
  3753.         return
  3754.     }
  3755.     $this genAssocVariable $class
  3756.     $this genGetQualifiedAccessor $class
  3757.  
  3758.     if {[$this getMultiplicity] == "one"} {
  3759.         $this genSetQualifiedAccessor $class
  3760.     } else {
  3761.         $this genAddAccessor $class
  3762.     }
  3763.  
  3764.     $this genRemoveQualifiedAccessor $class
  3765.     $this genCtor $class
  3766.     $this genDtor $class
  3767. }
  3768.  
  3769. method PBGQualAttr::genGetQualifiedAccessor {this class} {
  3770.     set opposite [$this opposite]
  3771.     if {$opposite == ""} {
  3772.         set accessStr [$this getAccessorAccess r]
  3773.     } else {
  3774.         set accessStr "public"
  3775.     }
  3776.     if {$accessStr == "none"} {
  3777.         return
  3778.     }
  3779.  
  3780.     set varName [$this getAssocVariable]
  3781.     set varId [$this getAssocIdentifier]
  3782.     set name "get[cap $varId]"
  3783.     if {[$this getMultiplicity] == "many"} {
  3784.         set type [PBType new "classset"]
  3785.     } else {
  3786.         set type [[$this ooplType] generate]
  3787.     }
  3788.     set access [PBAccess new $accessStr]
  3789.  
  3790.     set accessor [PBFunction new $name $type $access]
  3791.     $class addObjectFunction $accessor
  3792.  
  3793.     set qualifier [$this qualifier]
  3794.     set qualId [$qualifier getName]
  3795.         set type [[$qualifier ooplType] generate]
  3796.     set modifier [PBModifier new ""]
  3797.     set param [PBParameter new $qualId $type $modifier]
  3798.     $accessor addParameter $param
  3799.  
  3800.     # The type of a qualifier must be derived from powerobject ...
  3801.  
  3802.     # Generate body
  3803.     #
  3804.     set sect [TextSection new]
  3805.     $accessor body $sect
  3806.     $sect append "${PBCookie::associationAccessorMethod}\n"
  3807.     # note: no cast in powerbuilder
  3808.     $sect append "return $varName.get($qualId)\n"
  3809. }
  3810.  
  3811. method PBGQualAttr::genRemoveQualifiedAccessor {this class} {
  3812.     set opposite [$this opposite]
  3813.     if {$opposite == ""} {
  3814.         set accessStr [$this getAccessorAccess r]
  3815.     } else {
  3816.         set accessStr "public"
  3817.     }
  3818.     if {$accessStr == "none"} {
  3819.         return
  3820.     }
  3821.  
  3822.     set ident [$this getAssocIdentifier]
  3823.  
  3824.     set name "remove[cap $ident]"
  3825.     set type [PBType new ""]
  3826.     set access [PBAccess new $accessStr]
  3827.  
  3828.     set accessor [PBFunction new $name $type $access]
  3829.     $class addObjectFunction $accessor
  3830.  
  3831.     set qualifier [$this qualifier]
  3832.     set qualId [$qualifier getName]
  3833.     set type [[$qualifier ooplType] generate]
  3834.     set modifier [PBModifier new ""]
  3835.     set param [PBParameter new $qualId $type $modifier]
  3836.     $accessor addParameter $param
  3837.  
  3838.     # Generate body
  3839.     #
  3840.     set sect [TextSection new]
  3841.     $accessor body $sect
  3842.     $sect append "${PBCookie::associationAccessorMethod}\n"
  3843.  
  3844.     set paramId "old[cap $ident]"
  3845.     set varName [$this getAssocVariable]
  3846.     if {[$this getMultiplicity] == "one"} {
  3847.         $sect append "powerobject object\n"
  3848.         $sect append "object = $varName.get($qualId)\n"
  3849.         $sect append "if isNull(object) then\n"
  3850.         $sect indent +
  3851.         $sect append "return\n"
  3852.         $sect indent -
  3853.         $sect append "end if\n"
  3854.         $sect append [$this reduceAssoc]
  3855.  
  3856.         if {$opposite != ""} {
  3857.             set typeName [[$this ooplType] getName]
  3858.             $sect append "$typeName $paramId\n"
  3859.             # note: no cast in powerbuilder
  3860.             $sect append "$paramId = object\n"
  3861.         }
  3862.     } else {
  3863.         set type [[$this ooplType] generate]
  3864.         set modifier [PBModifier new ""]
  3865.         set param [PBParameter new $paramId $type $modifier]
  3866.         $accessor addParameter $param
  3867.  
  3868.         $sect append "if isNull($paramId) then\n"
  3869.         $sect indent +
  3870.         $sect append "return\n"
  3871.         $sect indent -
  3872.         $sect append "end if\n"
  3873.         $sect append "classset theSet\n"
  3874.         # note: no cast in powerbuilder
  3875.         $sect append "theSet = $varName.get($qualId)\n"
  3876.         $sect append "if not isNull(theSet) then\n"
  3877.         $sect indent +
  3878.         $sect append "theSet.remove($paramId)\n"
  3879.         $sect indent -
  3880.         $sect append "end if\n"
  3881.     }
  3882.     if {$opposite != ""} {
  3883.         $sect append [$opposite reduceAssoc $paramId]
  3884.     }
  3885. }
  3886.  
  3887. method PBGQualAttr::genSetQualifiedAccessor {this class} {
  3888.     set opposite [$this opposite]
  3889.     if {$opposite == ""} {
  3890.         set accessStr [$this getAccessorAccess w]
  3891.     } else {
  3892.         set accessStr "public"
  3893.     }
  3894.     if {$accessStr == "none"} {
  3895.         return
  3896.     }
  3897.  
  3898.     set ident [$this getAssocIdentifier]
  3899.  
  3900.     set name "set[cap $ident]"
  3901.     set type [PBType new ""]
  3902.     set access [PBAccess new $accessStr]
  3903.  
  3904.     set accessor [PBFunction new $name $type $access]
  3905.     $class addObjectFunction $accessor
  3906.  
  3907.     set qualifier [$this qualifier]
  3908.     set qualId [$qualifier getName]
  3909.     set type [[$qualifier ooplType] generate]
  3910.     set modifier [PBModifier new ""]
  3911.     set param [PBParameter new $qualId $type $modifier]
  3912.     $accessor addParameter $param
  3913.  
  3914.     set paramId "new[cap $ident]"
  3915.     set paramType [[$this ooplType] generate]
  3916.     set modifier [PBModifier new ""]
  3917.     set param [PBParameter new $paramId $paramType $modifier]
  3918.     $accessor addParameter $param
  3919.  
  3920.     # Generate body
  3921.     #
  3922.     set sect [TextSection new]
  3923.     $accessor body $sect
  3924.     $sect append "${PBCookie::associationAccessorMethod}\n"
  3925.     ## when not mandatory empty values allowed.
  3926.     if {[$this isMandatory]} {
  3927.         $sect append "if isNull($paramId) then\n"
  3928.         $sect indent +
  3929.         $sect append "return\n"
  3930.         $sect indent -
  3931.         $sect append "end if\n"
  3932.     }
  3933.     $sect append "[$this getAssocVariable].set($qualId, $paramId)\n"
  3934.  
  3935.     if {$opposite != ""} {
  3936.         if {![$this isMandatory]} {
  3937.             $sect append "if not isNULL($paramId) then\n"
  3938.             $sect indent +
  3939.         }
  3940.         $sect append [$opposite extendAssoc $paramId]
  3941.         if {![$this isMandatory]} {
  3942.             $sect indent -
  3943.             $sect append "end if\n"
  3944.         }
  3945.     }
  3946. }
  3947.  
  3948. # Do not delete this line -- regeneration end marker
  3949.  
  3950. if [isCommand CMQualAttr] {
  3951.     Class  PBGQualAttrD : {PBGQualAttr CMQualAttr} {
  3952.     }
  3953. } else {
  3954.     Class PBGQualAttrD : {PBGQualAttr OPQualAttr} {    
  3955.     }
  3956. }
  3957.  
  3958. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualAttr) PBGQualAttrD
  3959.  
  3960. selfPromoter OPQualAttr {this} {
  3961.     PBGQualAttrD promote $this
  3962. }
  3963.  
  3964.  
  3965. #---------------------------------------------------------------------------
  3966. #      File:           @(#)pbgreverse.tcl    /main/titanic/6
  3967.  
  3968.  
  3969. Class PBGReverseLinkAttr : {PBGGenAssocAttr} {
  3970.     constructor
  3971.     method destructor
  3972.     method generate
  3973. }
  3974.  
  3975. constructor PBGReverseLinkAttr {class this name} {
  3976.     set this [PBGGenAssocAttr::constructor $class $this $name]
  3977.     # Start constructor user section
  3978.     # End constructor user section
  3979.     return $this
  3980. }
  3981.  
  3982. method PBGReverseLinkAttr::destructor {this} {
  3983.     # Start destructor user section
  3984.     # End destructor user section
  3985. }
  3986.  
  3987. method PBGReverseLinkAttr::generate {this globalOoplClass class} {
  3988.     if ![$this isValidAssociation] {
  3989.         return
  3990.     }
  3991.     $this genAssocVariable $class
  3992.     if {[$this getMultiplicity] == "one"} {
  3993.         $this genGetAccessor $class
  3994.     } else {
  3995.         $this genGetManyAccessor $class
  3996.     }
  3997.     $this genCtor $class
  3998.     $this genDtor $class
  3999. }
  4000.  
  4001. # Do not delete this line -- regeneration end marker
  4002.  
  4003. if [isCommand CMReverseLinkAttr] {
  4004.     Class  PBGReverseLinkAttrD : {PBGReverseLinkAttr CMReverseLinkAttr} {
  4005.     }
  4006. } else {
  4007.     Class PBGReverseLinkAttrD : {PBGReverseLinkAttr OPReverseLinkAttr} {    
  4008.     }
  4009. }
  4010.  
  4011. global mostDerivedOOPL ; set mostDerivedOOPL(OPReverseLinkAttr) PBGReverseLinkAttrD
  4012.  
  4013. selfPromoter OPReverseLinkAttr {this} {
  4014.     PBGReverseLinkAttrD promote $this
  4015. }
  4016.  
  4017.  
  4018.  
  4019. #---------------------------------------------------------------------------
  4020. #      File:           @(#)pbgqualass.tcl    /main/titanic/4
  4021.  
  4022.  
  4023. Class PBGQualAssocAttr : {PBGQualAttr} {
  4024.     constructor
  4025.     method destructor
  4026. }
  4027.  
  4028. constructor PBGQualAssocAttr {class this name} {
  4029.     set this [PBGQualAttr::constructor $class $this $name]
  4030.     # Start constructor user section
  4031.     # End constructor user section
  4032.     return $this
  4033. }
  4034.  
  4035. method PBGQualAssocAttr::destructor {this} {
  4036.     # Start destructor user section
  4037.     # End destructor user section
  4038. }
  4039.  
  4040. # Do not delete this line -- regeneration end marker
  4041.  
  4042. if [isCommand CMQualAssocAttr] {
  4043.     Class  PBGQualAssocAttrD : {PBGQualAssocAttr CMQualAssocAttr} {
  4044.     }
  4045. } else {
  4046.     Class PBGQualAssocAttrD : {PBGQualAssocAttr OPQualAssocAttr} {    
  4047.     }
  4048. }
  4049.  
  4050. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualAssocAttr) PBGQualAssocAttrD
  4051.  
  4052. selfPromoter OPQualAssocAttr {this} {
  4053.     PBGQualAssocAttrD promote $this
  4054. }
  4055.  
  4056.  
  4057.  
  4058. #---------------------------------------------------------------------------
  4059. #      File:           @(#)pbgquallin.tcl    /main/titanic/5
  4060.  
  4061.  
  4062. Class PBGQualLinkAttr : {PBGQualAttr} {
  4063.     constructor
  4064.     method destructor
  4065. }
  4066.  
  4067. constructor PBGQualLinkAttr {class this name} {
  4068.     set this [PBGQualAttr::constructor $class $this $name]
  4069.     # Start constructor user section
  4070.     # End constructor user section
  4071.     return $this
  4072. }
  4073.  
  4074. method PBGQualLinkAttr::destructor {this} {
  4075.     # Start destructor user section
  4076.     # End destructor user section
  4077. }
  4078.  
  4079. # Do not delete this line -- regeneration end marker
  4080.  
  4081. if [isCommand CMQualLinkAttr] {
  4082.     Class  PBGQualLinkAttrD : {PBGQualLinkAttr CMQualLinkAttr} {
  4083.     }
  4084. } else {
  4085.     Class PBGQualLinkAttrD : {PBGQualLinkAttr OPQualLinkAttr} {    
  4086.     }
  4087. }
  4088.  
  4089. global mostDerivedOOPL ; set mostDerivedOOPL(OPQualLinkAttr) PBGQualLinkAttrD
  4090.  
  4091. selfPromoter OPQualLinkAttr {this} {
  4092.     PBGQualLinkAttrD promote $this
  4093. }
  4094.  
  4095.