home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / vbgclasses.tcl < prev    next >
Text File  |  1997-05-02  |  95KB  |  2,953 lines

  1. #--------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           %W%
  6. #      Author:         <generated>
  7. #
  8. #--------------------------------------------------------------------------
  9.  
  10. #      File:           @(#)vbgassocin.tcl    /main/hindenburg/8
  11.  
  12.  
  13. Class VBGAssocInitializer : {Object OPAssocInitializer} {
  14.     constructor
  15.     method destructor
  16.     method generate
  17. }
  18.  
  19. constructor VBGAssocInitializer {class this name} {
  20.     set this [Object::constructor $class $this $name]
  21.     # Start constructor user section
  22.     # End constructor user section
  23.     return $this
  24. }
  25.  
  26. method VBGAssocInitializer::destructor {this} {
  27.     # Start destructor user section
  28.     # End destructor user section
  29. }
  30.  
  31. method VBGAssocInitializer::generate {this ctor} {
  32.         if {[[[$this assoc] ooplType] ooplClass] != ""} {
  33.            if {[[[[$this assoc] ooplType] ooplClass] baseType] == "NodeControl" ||
  34.                [[[[$this assoc] ooplType] ooplClass] baseType] == "LeafControl"} {
  35.                return
  36.            }
  37.         }
  38.         if {[[$this assoc] getMultiplicity] == "one"} { 
  39.             if {[[$this assoc] isMandatory] &&
  40.                 [[$this assoc] opposite] != ""} { 
  41.                if {[[[$this assoc] opposite] isQualified]} {
  42.                   [$ctor gencode] append "a_[$this getName].Add[cap [[[$this assoc] opposite] getName]] Me, CStr(a_[$this getName]_[[[[$this assoc] opposite] qualifier] getName])\n"
  43.                } else {
  44.                   [$ctor gencode] append "Set [[$this assoc] getName] = a_[$this getName]\n"
  45.                }
  46.             } else {
  47.                [$ctor gencode] append "Set [[$this assoc] getName] = a_[$this getName]\n"
  48.             }
  49.         } else {
  50.            [$ctor gencode] append "Add[cap [[$this assoc] getName]] a_[$this getName]\n"
  51.         }
  52. }
  53.  
  54. # Do not delete this line -- regeneration end marker
  55.  
  56. selfPromoter OPAssocInitializer {this} {
  57.     VBGAssocInitializer promote $this
  58. }
  59.  
  60. #      File:           @(#)vbgattribi.tcl    /main/hindenburg/4
  61.  
  62.  
  63. Class VBGAttribInitializer : {Object OPAttribInitializer} {
  64.     constructor
  65.     method destructor
  66.     method generate
  67. }
  68.  
  69. constructor VBGAttribInitializer {class this name} {
  70.     set this [Object::constructor $class $this $name]
  71.     # Start constructor user section
  72.     # End constructor user section
  73.     return $this
  74. }
  75.  
  76. method VBGAttribInitializer::destructor {this} {
  77.     # Start destructor user section
  78.     # End destructor user section
  79. }
  80.  
  81. method VBGAttribInitializer::generate {this ctor} {
  82.         if {[[$this attrib] isClassFeature]} {
  83.            m4_warning $W_NOKEYFEAT [[$this attrib] getName] [[[$this attrib] ooplClass] getName]
  84.         } else {
  85.             if {[[[$this attrib] ooplType] get_obj_type] == "class_type" ||
  86.                 [[[$this attrib] ooplType] getType3GL] == "Object"} {
  87.                 [$ctor gencode] append "Set "
  88.             }
  89.  
  90.             [$ctor gencode] append [[$this attrib] getName]
  91.             [$ctor gencode] append " = "
  92.             [$ctor gencode] append [$this getName]
  93.             [$ctor gencode] append "\n"
  94.         }
  95. }
  96.  
  97. # Do not delete this line -- regeneration end marker
  98.  
  99. selfPromoter OPAttribInitializer {this} {
  100.     VBGAttribInitializer promote $this
  101. }
  102.  
  103. #      File:           @(#)vbgclass.tcl    /main/hindenburg/20
  104.  
  105.  
  106. Class VBGClass : {Object} {
  107.     constructor
  108.     method destructor
  109.     method guiLib
  110.     method hasMain
  111.     method hasExtras
  112.     method baseClass
  113.     method baseType
  114.     method generate
  115.     method generateContainer
  116.     attribute bseClass
  117.     attribute bseType
  118.     attribute guiLb
  119.     attribute done
  120.     attribute loop
  121.     attribute hsExtras
  122. }
  123.  
  124. constructor VBGClass {class this name} {
  125.     set this [Object::constructor $class $this $name]
  126.     # Start constructor user section
  127.     # End constructor user section
  128.     return $this
  129. }
  130.  
  131. method VBGClass::destructor {this} {
  132.     # Start destructor user section
  133.     # End destructor user section
  134. }
  135.  
  136. method VBGClass::guiLib {this} {
  137.         if {[$this guiLb] == ""} {
  138.             if {[$this baseType] != "Class"} {
  139.                  $this guiLb [[[lindex [$this genNodeSet] 0] superClass] getPropertyValue "gui_lib"]        
  140.             }
  141.         } 
  142.         return [$this guiLb] 
  143. }
  144.  
  145. method VBGClass::hasMain {this} {
  146.           switch [$this baseType] {
  147.                  "NodeControl" {
  148.                         return 0
  149.                  }
  150.                  "LeafControl" {
  151.                         return 0
  152.                  }
  153.                  default       {
  154.                         return 1
  155.                  }
  156.             }
  157. }
  158.  
  159. method VBGClass::hasExtras {this} {
  160.       if {[$this hsExtras] == ""} {
  161.             switch [$this baseType] {
  162.                    "NodeControl" {
  163.                           $this hsExtras 0
  164.                    }
  165.                    "LeafControl" {
  166.                           $this hsExtras 0
  167.                    }
  168.                    default       {
  169.                           $this hsExtras 0
  170.         
  171.                           foreach feature [$this dataAttrSet] {
  172.                                if {[$feature isClassFeature]} {
  173.                                     $this hsExtras 1
  174.                                     break
  175.                                }
  176.                           }
  177.  
  178.                           foreach feature [$this operationSet] {
  179.                                if {[$feature isClassFeature] && [$feature getName] != "create"} {
  180.                                     $this hsExtras 1
  181.                                     break
  182.                                }
  183.                           }
  184.                    }
  185.            }
  186.      }
  187.      return [$this hsExtras]
  188. }
  189.  
  190. method VBGClass::baseClass {this} {
  191.         if {[$this bseClass] == ""} {
  192.             if {[$this baseType] == "Class"} {
  193.                  $this bseClass "Class"
  194.             } else {
  195.                  $this bseClass [[lindex [$this genNodeSet] 0] getSuperClassName]
  196.             }
  197.         } 
  198.         return [$this bseClass] 
  199. }
  200.  
  201. method VBGClass::baseType {this} {
  202.         if {[$this bseType] == ""} {
  203.         if {[$this loop] != 1} {
  204.         $this loop 1
  205.                 if {[llength [$this genNodeSet]] > 0} {
  206.                          set name [[[lindex [$this genNodeSet] 0] superClass] baseType]
  207.                 } else {
  208.                      set name [$this getName]
  209.                 }
  210.  
  211.                 switch $name {
  212.                         "Window"    {
  213.                                         $this bseType $name
  214.                         }
  215.                         "NodeControl"   {
  216.                                         $this bseType $name
  217.                         }
  218.                         "LeafControl" {
  219.                                         $this bseType $name
  220.                         }
  221.                         default       {
  222.                                         $this bseType "Class"          
  223.                         }
  224.                 }
  225.         } else {
  226.                 m4_fatal $F_LOOP [$this getName]
  227.                 $this bseType "Class"          
  228.         }
  229.         } 
  230.         return [$this bseType] 
  231. }
  232.  
  233. method VBGClass::generate {this tgt} {
  234.         switch [$this baseClass] {
  235.               "Form"    {
  236.                    set unit [VBForm new]
  237.                    $tgt setForm [$this getName] $unit
  238.               }
  239.               "Class"   {
  240.                    set unit [VBClassModule new]
  241.                    $tgt setClassmodule [$this getName] $unit
  242.                    foreach genNode [$this genNodeSet] {
  243.                        $genNode generate $unit
  244.                    }
  245.               }
  246.               "MDIForm" {
  247.                    set unit [VBForm new]
  248.                    $tgt mdiform $unit
  249.               }
  250.               default   {
  251.                    return       
  252.               }
  253.         }
  254.  
  255.         set terminate [VBSub new]
  256.         $terminate name "Terminate"
  257.         $terminate access "Private"
  258.         $terminate userCodeFirst 1
  259.         set gcode [TextSection new]
  260.         $terminate gencode $gcode
  261.  
  262.         $unit terminate $terminate
  263.         $unit name [$this getName]
  264.  
  265.         foreach feature [$this dataAttrSet] {
  266.                 $feature generate $unit
  267.         }
  268.         foreach feature [$this operationSet] {
  269.                 $feature generate $unit
  270.         }
  271.         if {[$this constructor] != ""} {
  272.             [$this constructor] generate $unit
  273.         } 
  274.         foreach feature [$this genAssocAttrSet] {
  275.                 $feature generate $unit
  276.         }
  277. }
  278.  
  279. method VBGClass::generateContainer {this roleName number tgt} {
  280.         if {[$this done] == 1} {
  281.              m4_fatal $F_CONTLOOP [$this getName]
  282.              return                        
  283.         }
  284.         if {$number != ""} {
  285.             set temp $number
  286.         } else {
  287.             set temp 1       
  288.         }
  289.         for {set i $temp} {$i > 0} {incr i -1} {
  290.             switch [$this baseType] {
  291.                  "NodeControl" {
  292.                         if {[$this baseClass] == "Menu"} {
  293.                              set control [VBMenu new]
  294.                         } else {
  295.                              set control [VBControl new]
  296.                         }
  297.                         $this done 1
  298.                         foreach assoc [$this genAssocAttrSet] {
  299.                                    $assoc generate $control
  300.                         }
  301.                         $this done 0 
  302.                  } 
  303.                  "LeafControl" {
  304.                              set control [VBControl new]
  305.                  } 
  306.                  default       {
  307.                              m4_error $E_NOTACONT [$this getName]
  308.                              return                        
  309.                  } 
  310.             }
  311.             $control name     $roleName
  312.             $control ofClass  [$this getName]
  313.             $control guiType  [$this baseClass]
  314.             if {[$this guiLib] != ""} {
  315.                $control guiLib   [$this guiLib]
  316.             }
  317.             if {$number != ""} {
  318.                 $control hasIndex 1      
  319.             }
  320.             $tgt addContain $control
  321.         }
  322.  
  323.         foreach event [$this operationSet] {
  324.                 $event generate $control
  325.         }
  326.         
  327. }
  328.  
  329. # Do not delete this line -- regeneration end marker
  330.  
  331. Class VBGClassD : {VBGClass OPClass} {
  332. }
  333.  
  334. selfPromoter OPClass {this} {
  335.     VBGClassD promote $this
  336. }
  337.  
  338. #      File:           @(#)vbgfeature.tcl    /main/hindenburg/5
  339.  
  340.  
  341. Class VBGFeature : {Object} {
  342.     constructor
  343.     method destructor
  344. }
  345.  
  346. constructor VBGFeature {class this name} {
  347.     set this [Object::constructor $class $this $name]
  348.     # Start constructor user section
  349.     # End constructor user section
  350.     return $this
  351. }
  352.  
  353. method VBGFeature::destructor {this} {
  354.     # Start destructor user section
  355.     # End destructor user section
  356. }
  357.  
  358. # Do not delete this line -- regeneration end marker
  359.  
  360. Class VBGFeatureD : {VBGFeature OPFeature} {
  361. }
  362.  
  363. selfPromoter OPFeature {this} {
  364.     VBGFeatureD promote $this
  365. }
  366.  
  367. #      File:           @(#)vbginhgrou.tcl    /main/hindenburg/5
  368.  
  369.  
  370. Class VBGInhGroup : {Object OPInhGroup} {
  371.     constructor
  372.     method destructor
  373.     method generate
  374. }
  375.  
  376. constructor VBGInhGroup {class this name} {
  377.     set this [Object::constructor $class $this $name]
  378.     # Start constructor user section
  379.     # End constructor user section
  380.     return $this
  381. }
  382.  
  383. method VBGInhGroup::destructor {this} {
  384.     # Start destructor user section
  385.     # End destructor user section
  386. }
  387.  
  388. method VBGInhGroup::generate {this cl} {
  389.         set type     [VBType new]
  390.         $type name "New [[$this superClass] getName]"
  391.  
  392.         set variable [VBVariable new $type]
  393.         $variable name "[[$this superClass] getName]"
  394.  
  395.         set access [$this inherAccess]
  396.  
  397.         if {$access == ""} {
  398.                 set access "Public"
  399.         }
  400.  
  401.         $variable access $access
  402.  
  403.         $cl addInhervar $variable
  404. }
  405.  
  406. # Do not delete this line -- regeneration end marker
  407.  
  408. selfPromoter OPInhGroup {this} {
  409.     VBGInhGroup promote $this
  410. }
  411.  
  412.  
  413. #      File:           @(#)vbgparamet.tcl    /main/hindenburg/4
  414.  
  415.  
  416. Class VBGParameter : {Object} {
  417.     constructor
  418.     method destructor
  419. }
  420.  
  421. constructor VBGParameter {class this name} {
  422.     set this [Object::constructor $class $this $name]
  423.     # Start constructor user section
  424.     # End constructor user section
  425.     return $this
  426. }
  427.  
  428. method VBGParameter::destructor {this} {
  429.     # Start destructor user section
  430.     # End destructor user section
  431. }
  432.  
  433. # Do not delete this line -- regeneration end marker
  434.  
  435. Class VBGParameterD : {VBGParameter OPParameter} {
  436. }
  437.  
  438. selfPromoter OPParameter {this} {
  439.     VBGParameterD promote $this
  440. }
  441.  
  442. #      File:           @(#)vbgqualini.tcl    /main/hindenburg/6
  443.  
  444.  
  445. Class VBGQualInitializer : {Object OPQualInitializer} {
  446.     constructor
  447.     method destructor
  448.     method generate
  449. }
  450.  
  451. constructor VBGQualInitializer {class this name} {
  452.     set this [Object::constructor $class $this $name]
  453.     # Start constructor user section
  454.     # End constructor user section
  455.     return $this
  456. }
  457.  
  458. method VBGQualInitializer::destructor {this} {
  459.     # Start destructor user section
  460.     # End destructor user section
  461. }
  462.  
  463. method VBGQualInitializer::generate {this ctor} {
  464. }
  465.  
  466. # Do not delete this line -- regeneration end marker
  467.  
  468. selfPromoter OPQualInitializer {this} {
  469.     VBGQualInitializer promote $this
  470. }
  471.  
  472. #      File:           @(#)vbgsupercl.tcl    /main/hindenburg/7
  473.  
  474.  
  475. Class VBGSuperClassInitializer : {Object OPSuperClassInitializer} {
  476.     constructor
  477.     method destructor
  478.     method generate
  479. }
  480.  
  481. constructor VBGSuperClassInitializer {class this name} {
  482.     set this [Object::constructor $class $this $name]
  483.     # Start constructor user section
  484.     # End constructor user section
  485.     return $this
  486. }
  487.  
  488. method VBGSuperClassInitializer::destructor {this} {
  489.     # Start destructor user section
  490.     # End destructor user section
  491. }
  492.  
  493. method VBGSuperClassInitializer::generate {this ctor} {
  494.         if {[[[$this constructor] ooplClass] baseClass] == "Class"} {
  495.                [$ctor gencode] append "[[$this ooplClass] getName].[[$this ooplClass] getName]_Constructor"
  496.            set first 1
  497.                foreach param [$this parameterSet] {
  498.               if {!$first} {
  499.                               [$ctor gencode] append ", "
  500.               } else {
  501.                               [$ctor gencode] append " "
  502.                        set first 0
  503.               }
  504.                       [$ctor gencode] append "[$param getName]"
  505.                }
  506.                [$ctor gencode] append "\n"                
  507.         }
  508. }
  509.  
  510. # Do not delete this line -- regeneration end marker
  511.  
  512. selfPromoter OPSuperClassInitializer {this} {
  513.     VBGSuperClassInitializer promote $this
  514. }
  515.  
  516. #      File:           @(#)vbgtype.tcl    /main/hindenburg/6
  517.  
  518.  
  519. Class VBGType : {Object} {
  520.     constructor
  521.     method destructor
  522. }
  523.  
  524. constructor VBGType {class this name} {
  525.     set this [Object::constructor $class $this $name]
  526.     # Start constructor user section
  527.     # End constructor user section
  528.     return $this
  529. }
  530.  
  531. method VBGType::destructor {this} {
  532.     # Start destructor user section
  533.     # End destructor user section
  534. }
  535.  
  536. # Do not delete this line -- regeneration end marker
  537.  
  538. Class VBGTypeD : {VBGType OPType} {
  539. }
  540.  
  541. selfPromoter OPType {this} {
  542.     VBGTypeD promote $this
  543. }
  544.  
  545.  
  546. #      File:           @(#)vbgassocge.tcl    /main/hindenburg/8
  547.  
  548.  
  549. Class VBGAssocGen : {GCObject} {
  550.     constructor
  551.     method destructor
  552.     method hasRead
  553.     method hasWrite
  554.     method hasGet
  555.     method assocattr
  556.     attribute _assocattr
  557. }
  558.  
  559. constructor VBGAssocGen {class this assocattr} {
  560.     set this [GCObject::constructor $class $this]
  561.     $this _assocattr $assocattr
  562.     $assocattr _generator $this
  563.     # Start constructor user section
  564.     # End constructor user section
  565.     return $this
  566. }
  567.  
  568. method VBGAssocGen::destructor {this} {
  569.     # Start destructor user section
  570.     # End destructor user section
  571. }
  572.  
  573. method VBGAssocGen::hasRead {this} {
  574.         set accessList [split [[$this assocattr] getPropertyValue assoc_access] -]
  575.         set accessStr [lindex $accessList 0]
  576.         if {$accessStr == ""} {
  577.                 set accessStr "Public"
  578.         }
  579.         return $accessStr
  580. }
  581.  
  582. method VBGAssocGen::hasWrite {this} {
  583.         set accessList [split [[$this assocattr] getPropertyValue assoc_access] -]
  584.         set accessStr [lindex $accessList 1]
  585.         if {$accessStr == ""} {
  586.                 set accessStr "Public"
  587.         }
  588.         return $accessStr
  589. }
  590.  
  591. method VBGAssocGen::hasGet {this self} {
  592.     set rd [$this hasRead]
  593.     if {$self} {
  594.         if {$rd == "None"} {
  595.             return 0
  596.         } 
  597.     } else {
  598.         if {$rd == "None" || $rd == "Private"} {
  599.             return 0
  600.         } 
  601.     }
  602.     return 1
  603. }
  604.  
  605. # Do not delete this line -- regeneration end marker
  606.  
  607. method VBGAssocGen::assocattr {this args} {
  608.     if {$args == ""} {
  609.         return [$this _assocattr]
  610.     }
  611.     set ref [$this _assocattr]
  612.     if {$ref != ""} {
  613.         $ref _generator ""
  614.     }
  615.     set obj [lindex $args 0]
  616.     if {$obj != ""} {
  617.         $obj _generator $this
  618.     }
  619.     $this _assocattr $obj
  620. }
  621.  
  622.  
  623. #      File:           @(#)vbgclassen.tcl    /main/hindenburg/5
  624.  
  625.  
  626. Class VBGClassEnum : {VBGClass} {
  627.     constructor
  628.     method destructor
  629.     method baseClass
  630.     method hasMain
  631.     method hasExtras
  632.     method generate
  633. }
  634.  
  635. constructor VBGClassEnum {class this name} {
  636.     set this [VBGClass::constructor $class $this $name]
  637.     # Start constructor user section
  638.     # End constructor user section
  639.     return $this
  640. }
  641.  
  642. method VBGClassEnum::destructor {this} {
  643.     # Start destructor user section
  644.     # End destructor user section
  645. }
  646.  
  647. method VBGClassEnum::baseClass {this} {
  648.         if {[$this bseClass] == ""} { 
  649.             $this bseClass "Enum"
  650.         }
  651.         return [$this bseClass] 
  652. }
  653.  
  654. method VBGClassEnum::hasMain {this} {
  655.         return 0 
  656. }
  657.  
  658. method VBGClassEnum::hasExtras {this} {
  659.         return 1
  660. }
  661.  
  662. method VBGClassEnum::generate {this tgt} {
  663.     set enummodule [VBEnumModule new]
  664.         $enummodule name [$this getName]
  665.  
  666.         foreach enum [$this dataAttrSet] {
  667.               $enum generate $enummodule
  668.         }
  669.         $tgt setModule [$this getName] $enummodule
  670. }
  671.  
  672. # Do not delete this line -- regeneration end marker
  673.  
  674. Class VBGClassEnumD : {VBGClassEnum OPClassEnum} {
  675. }
  676.  
  677. selfPromoter OPClassEnum {this} {
  678.     VBGClassEnumD promote $this
  679. }
  680.  
  681. #      File:           @(#)vbgclassge.tcl    /main/hindenburg/2
  682.  
  683.  
  684. Class VBGClassGenericTypeDef : {VBGClass} {
  685.     constructor
  686.     method destructor
  687. }
  688.  
  689. constructor VBGClassGenericTypeDef {class this name} {
  690.     set this [VBGClass::constructor $class $this $name]
  691.     # Start constructor user section
  692.     # End constructor user section
  693.     return $this
  694. }
  695.  
  696. method VBGClassGenericTypeDef::destructor {this} {
  697.     # Start destructor user section
  698.     # End destructor user section
  699. }
  700.  
  701. # Do not delete this line -- regeneration end marker
  702.  
  703. Class VBGClassGenericTypeDefD : {VBGClassGenericTypeDef OPClassGenericTypeDef} {
  704. }
  705.  
  706. selfPromoter OPClassGenericTypeDef {this} {
  707.     VBGClassGenericTypeDefD promote $this
  708. }
  709.  
  710. #      File:           @(#)vbgclasstd.tcl    /main/hindenburg/2
  711.  
  712.  
  713. Class VBGClassTDef : {VBGClass} {
  714.     constructor
  715.     method destructor
  716. }
  717.  
  718. constructor VBGClassTDef {class this name} {
  719.     set this [VBGClass::constructor $class $this $name]
  720.     # Start constructor user section
  721.     # End constructor user section
  722.     return $this
  723. }
  724.  
  725. method VBGClassTDef::destructor {this} {
  726.     # Start destructor user section
  727.     # End destructor user section
  728. }
  729.  
  730. # Do not delete this line -- regeneration end marker
  731.  
  732. Class VBGClassTDefD : {VBGClassTDef OPClassTDef} {
  733. }
  734.  
  735. selfPromoter OPClassTDef {this} {
  736.     VBGClassTDefD promote $this
  737. }
  738.  
  739. #      File:           @(#)vbglinkcla.tcl    /main/hindenburg/3
  740.  
  741.  
  742. Class VBGLinkClass : {VBGClass} {
  743.     constructor
  744.     method destructor
  745. }
  746.  
  747. constructor VBGLinkClass {class this name} {
  748.     set this [VBGClass::constructor $class $this $name]
  749.     # Start constructor user section
  750.     # End constructor user section
  751.     return $this
  752. }
  753.  
  754. method VBGLinkClass::destructor {this} {
  755.     # Start destructor user section
  756.     # End destructor user section
  757. }
  758.  
  759. # Do not delete this line -- regeneration end marker
  760.  
  761. Class VBGLinkClassD : {VBGLinkClass OPLinkClass} {
  762. }
  763.  
  764. selfPromoter OPLinkClass {this} {
  765.     VBGLinkClassD promote $this
  766. }
  767.  
  768. #      File:           @(#)vbgattribu.tcl    /main/hindenburg/4
  769.  
  770.  
  771. Class VBGAttribute : {VBGFeature} {
  772.     constructor
  773.     method destructor
  774. }
  775.  
  776. constructor VBGAttribute {class this name} {
  777.     set this [VBGFeature::constructor $class $this $name]
  778.     # Start constructor user section
  779.     # End constructor user section
  780.     return $this
  781. }
  782.  
  783. method VBGAttribute::destructor {this} {
  784.     # Start destructor user section
  785.     # End destructor user section
  786. }
  787.  
  788. # Do not delete this line -- regeneration end marker
  789.  
  790. Class VBGAttributeD : {VBGAttribute OPAttribute} {
  791. }
  792.  
  793. selfPromoter OPAttribute {this} {
  794.     VBGAttributeD promote $this
  795. }
  796.  
  797. #      File:           @(#)vbgconstru.tcl    /main/hindenburg/5
  798.  
  799.  
  800. Class VBGConstructor : {VBGFeature} {
  801.     constructor
  802.     method destructor
  803.     method generate
  804. }
  805.  
  806. constructor VBGConstructor {class this name} {
  807.     set this [VBGFeature::constructor $class $this $name]
  808.     # Start constructor user section
  809.     # End constructor user section
  810.     return $this
  811. }
  812.  
  813. method VBGConstructor::destructor {this} {
  814.     # Start destructor user section
  815.     # End destructor user section
  816. }
  817.  
  818. method VBGConstructor::generate {this cl} {
  819.         set ctor [VBSub new]
  820.         set comment [VBComment new]
  821.         $ctor comment $comment
  822.         $comment comment  [$this getPropertyValue "freeText"]
  823.  
  824.         $ctor name "Constructor"                                
  825.         $ctor access [$this getPropertyValue "method_access"]
  826.         if {[$ctor access] == ""} {
  827.            $ctor access "Public"
  828.         }
  829.  
  830.         set gencode [TextSection new]
  831.         $ctor gencode $gencode    
  832.  
  833.         foreach attrib [[$this ooplClass] dataAttrSet] {
  834.                 $attrib generateSetDefault $ctor
  835.         }
  836.  
  837.         foreach param [[$this ooplClass] creationParamSet] {
  838.                 $param generate $ctor
  839.         }
  840.  
  841.         foreach initializer [$this initializerSet] {
  842.                 $initializer generate $ctor
  843.         }
  844.     
  845.         $cl constructor $ctor
  846. }
  847.  
  848. # Do not delete this line -- regeneration end marker
  849.  
  850. Class VBGConstructorD : {VBGConstructor OPConstructor} {
  851. }
  852.  
  853. selfPromoter OPConstructor {this} {
  854.     VBGConstructorD promote $this
  855. }
  856.  
  857. #      File:           @(#)vbgoperati.tcl    /main/hindenburg/13
  858.  
  859.  
  860. Class VBGOperation : {VBGFeature} {
  861.     constructor
  862.     method destructor
  863.     method generate
  864. }
  865.  
  866. constructor VBGOperation {class this name} {
  867.     set this [VBGFeature::constructor $class $this $name]
  868.     # Start constructor user section
  869.     # End constructor user section
  870.     return $this
  871. }
  872.  
  873. method VBGOperation::destructor {this} {
  874.     # Start destructor user section
  875.     # End destructor user section
  876. }
  877.  
  878. method VBGOperation::generate {this cl} {
  879.         switch [[$this ooplClass] baseType] {
  880.                "NodeControl" {
  881.                       if {[$this getPropertyValue "is_event"] != 1} {
  882.                            m4_error $E_CANTCONTMETH [[$this ooplClass] getName]
  883.                            return
  884.                       } else {
  885.                            set oper [VBEvent new]
  886.                            $oper name [$this getName]
  887.                            if {[$cl getEvent [$oper name]] == ""} {
  888.                                 $cl setEvent [$oper name] $oper
  889.                                 $cl addSevent $oper
  890.                            } else {
  891.                                 m4_warning $W_EVENTDBDEF [$oper name] [$cl name]
  892.                            }
  893.                       }
  894.                }
  895.                "LeafControl" {
  896.                       if {[$this getPropertyValue "is_event"] != 1} {
  897.                            m4_error $E_CANTCONTMETH [[$this ooplClass] getName]
  898.                            return
  899.                       } else {
  900.                            set oper [VBEvent new]
  901.                            $oper name [$this getName]
  902.                            if {[$cl getEvent [$oper name]] == ""} {
  903.                                 $cl setEvent [$oper name] $oper
  904.                                 $cl addSevent $oper
  905.                            } else {
  906.                                 m4_warning $W_EVENTDBDEF [$oper name] [$cl name]
  907.                            }
  908.                       }
  909.                }
  910.                "Class"       {
  911.                       if {[$this getPropertyValue "is_event"] == 1} {
  912.                            m4_error $E_CANTCONTEVENT [[$this ooplClass] getName]
  913.                            return
  914.                       } else {
  915.                            set returntype [[$this ooplType] generate]
  916.                            if {[$returntype name] != ""} {
  917.                                    set oper [VBFunction new $returntype]                 
  918.                                    $oper name [$this getName]
  919.  
  920.                                    if {[$this isClassFeature]} {
  921.                                         if {[$cl getGlobproc [$oper name]] == ""} {
  922.                                              $cl setGlobproc [$oper name] $oper
  923.                                              $cl addGlobSproc $oper
  924.                                         } else {
  925.                                              m4_warning $W_EVENTDBMTH [$oper name] [$cl name]
  926.                                         }
  927.                                    } else {
  928.                                         if {[$cl getUserproc [$oper name]] == ""} {
  929.                                              $cl addUserSproc $oper
  930.                                              $cl setUserproc [$oper name] $oper
  931.                                         } else {
  932.                                              m4_warning $W_EVENTDBMTH [$oper name] [$cl name]
  933.                                         }
  934.                                    }
  935.                            } else {
  936.                                    set oper [VBSub new]
  937.                                    $oper name [$this getName]
  938.  
  939.                                    if {[$this getName] == "create" && [$this isClassFeature]} {
  940.                                           $oper name "Constructor"
  941.                                           $cl constructor $oper
  942.                                    } else {
  943.                                            if {[$this isClassFeature]} {
  944.                                               if {[$cl getGlobproc [$oper name]] == ""} {
  945.                                                    $cl setGlobproc [$oper name] $oper
  946.                                                     $cl addGlobSproc $oper
  947.                                               } else {
  948.                                                    m4_warning $W_EVENTDBMTH [$oper name] [$cl name]
  949.                                               }
  950.                                            } else {
  951.                                               if {[$cl getUserproc [$oper name]] == ""} {
  952.                                                     $cl addUserSproc $oper
  953.                                                    $cl setUserproc [$oper name] $oper
  954.                                               } else {
  955.                                                    m4_warning $W_EVENTDBMTH [$oper name] [$cl name]
  956.                                               }
  957.                                            }
  958.                                    }
  959.                            }
  960.                       }
  961.                }
  962.                "Window"      {
  963.                       if {[$this getPropertyValue "is_event"] == 1} {
  964.                                    set oper [VBEvent new]
  965.                                    $oper name [$this getName]
  966.                                    if {[$cl getEvent [$oper name]] == ""} {
  967.                                         $cl setEvent [$oper name] $oper
  968.                                         $cl addSevent $oper
  969.                                    } else {
  970.                                         m4_warning $W_EVENTDBDEF [$oper name] [$cl name]
  971.                                    }
  972.                       } else {
  973.                            set returntype [[$this ooplType] generate]
  974.                            if {[$returntype name] != ""} {
  975.                                    set oper [VBFunction new $returntype]                 
  976.                                    $oper name [$this getName]
  977.  
  978.                                    if {[$this isClassFeature]} {
  979.                                         if {[$cl getGlobproc [$oper name]] == ""} {
  980.                                              $cl setGlobproc [$oper name] $oper
  981.                                              $cl addGlobSproc $oper
  982.                                         } else {
  983.                                              m4_warning $W_EVENTDBMTH [$oper name] [$cl name]
  984.                                         }
  985.                                    } else {
  986.                                         if {[$cl getUserproc [$oper name]] == ""} {
  987.                                              $cl addUserSproc $oper
  988.                                              $cl setUserproc [$oper name] $oper
  989.                                         } else {
  990.                                              m4_warning $W_EVENTDBMTH [$oper name] [$cl name]
  991.                                         }
  992.                                    }
  993.                            } else {
  994.                                    set oper [VBSub new]
  995.                                    $oper name [$this getName]
  996.  
  997.                                    if {[$this getName] == "create" && [$this isClassFeature]} {
  998.                                           $oper name "Constructor"
  999.                                           $cl constructor $oper
  1000.                                    } else {
  1001.                                            if {[$this isClassFeature]} {
  1002.                                               if {[$cl getGlobproc [$oper name]] == ""} {
  1003.                                                    $cl setGlobproc [$oper name] $oper
  1004.                                                    $cl addGlobSproc $oper
  1005.                                               }
  1006.                                            } else {
  1007.                                               if {[$cl getUserproc [$oper name]] == ""} {
  1008.                                                     $cl addUserSproc $oper
  1009.                                                    $cl setUserproc [$oper name] $oper
  1010.                                               }
  1011.                                            }
  1012.                                    }
  1013.                            }
  1014.                       }
  1015.                }
  1016.         }
  1017.  
  1018.         $oper access [$this getPropertyValue "method_access"]
  1019.         $oper hasUserSection 0                                          
  1020.  
  1021.         if {[$oper access] == ""} {
  1022.              $oper access "Public"
  1023.         }
  1024.  
  1025.         set comment [VBComment new]
  1026.         $oper comment $comment
  1027.         $comment comment  [$this getPropertyValue "freeText"]
  1028.  
  1029.         foreach param [$this parameterSet] {
  1030.                 $param generate $oper
  1031.         }
  1032. }
  1033.  
  1034. # Do not delete this line -- regeneration end marker
  1035.  
  1036. Class VBGOperationD : {VBGOperation OPOperation} {
  1037. }
  1038.  
  1039. selfPromoter OPOperation {this} {
  1040.     VBGOperationD promote $this
  1041. }
  1042.  
  1043. #      File:           @(#)vbgctorpar.tcl    /main/hindenburg/10
  1044.  
  1045.  
  1046. Class VBGCtorParameter : {VBGParameter} {
  1047.     constructor
  1048.     method destructor
  1049.     method generate
  1050. }
  1051.  
  1052. constructor VBGCtorParameter {class this name} {
  1053.     set this [VBGParameter::constructor $class $this $name]
  1054.     # Start constructor user section
  1055.     # End constructor user section
  1056.     return $this
  1057. }
  1058.  
  1059. method VBGCtorParameter::destructor {this} {
  1060.     # Start destructor user section
  1061.     # End destructor user section
  1062. }
  1063.  
  1064. method VBGCtorParameter::generate {this method} {
  1065.         if {[$this attrib] != ""} {
  1066.            if {[[$this attrib] isClassFeature]} {
  1067.                return
  1068.            }
  1069.         }  
  1070.         set param [VBArgument new [[$this ooplType] generate]]
  1071.         set param2 ""
  1072.  
  1073.         if {[$this initializer] != ""} {
  1074.        if {[[$this initializer] isA OPQualInitializer]} {
  1075.         return
  1076.        }
  1077.            if {[[$this initializer] isA OPAssocInitializer]} { 
  1078.               if {[[[[$this initializer] assoc] ooplType] ooplClass] != ""} {
  1079.                  if {[[[[[$this initializer] assoc] ooplType] ooplClass] baseType] == "NodeControl" ||
  1080.                      [[[[[$this initializer] assoc] ooplType] ooplClass] baseType] == "LeafControl"} {
  1081.                     return    
  1082.                  }
  1083.               }
  1084.               if {[[[$this initializer] assoc] opposite] != ""} {
  1085.                  if {[[[$this initializer] assoc] isMandatory] &&
  1086.                      [[[$this initializer] assoc] getMultiplicity] == "one" &&
  1087.                      [[[[$this initializer] assoc] opposite] isQualified]} {
  1088.                     set type [VBType new]
  1089.                     $type name [[[[[[$this initializer] assoc] opposite] qualifier] ooplType] getType3GL]
  1090.                     set param2 [VBArgument new $type]
  1091.                     $param2 name "a_[$this getName]_[[[[[$this initializer] assoc] opposite] qualifier] getName]"
  1092.                   }
  1093.               } 
  1094.               $param name "a_[$this getName]"
  1095.            } else {
  1096.               $param name [$this getName]
  1097.            }
  1098.         } else {
  1099.            $param name [$this getName]
  1100.         }
  1101.  
  1102.         $param passedBy [$this getPropertyValue "pass_by"]
  1103.  
  1104.         if {[$this getPropertyValue "optional"] != ""} {
  1105.            $param optional [$this getPropertyValue "optional"]
  1106.         }
  1107.   
  1108.         $method addArg $param
  1109.         
  1110.         if {$param2 != ""} {
  1111.            $method addArg $param2
  1112.         }
  1113. }
  1114.  
  1115. # Do not delete this line -- regeneration end marker
  1116.  
  1117. Class VBGCtorParameterD : {VBGCtorParameter OPCtorParameter} {
  1118. }
  1119.  
  1120. selfPromoter OPCtorParameter {this} {
  1121.     VBGCtorParameterD promote $this
  1122. }
  1123.  
  1124. #      File:           @(#)vbgoperpar.tcl    /main/hindenburg/5
  1125.  
  1126.  
  1127. Class VBGOperParameter : {VBGParameter} {
  1128.     constructor
  1129.     method destructor
  1130.     method generate
  1131. }
  1132.  
  1133. constructor VBGOperParameter {class this name} {
  1134.     set this [VBGParameter::constructor $class $this $name]
  1135.     # Start constructor user section
  1136.     # End constructor user section
  1137.     return $this
  1138. }
  1139.  
  1140. method VBGOperParameter::destructor {this} {
  1141.     # Start destructor user section
  1142.     # End destructor user section
  1143. }
  1144.  
  1145. method VBGOperParameter::generate {this method} {
  1146.         set param [VBArgument new [[$this ooplType] generate]]
  1147.         $param name [$this getName]
  1148.         $param passedBy [$this getPropertyValue "pass_by"]
  1149.  
  1150.         if {[$this getPropertyValue "optional"] != ""} {
  1151.            $param optional [$this getPropertyValue "optional"]
  1152.         }
  1153.  
  1154.         $method addArg $param
  1155. }
  1156.  
  1157. # Do not delete this line -- regeneration end marker
  1158.  
  1159. Class VBGOperParameterD : {VBGOperParameter OPOperParameter} {
  1160. }
  1161.  
  1162. selfPromoter OPOperParameter {this} {
  1163.     VBGOperParameterD promote $this
  1164. }
  1165.  
  1166. #      File:           @(#)vbgbasetyp.tcl    /main/hindenburg/3
  1167.  
  1168.  
  1169. Class VBGBaseType : {VBGType} {
  1170.     constructor
  1171.     method destructor
  1172.     method generate
  1173. }
  1174.  
  1175. constructor VBGBaseType {class this name} {
  1176.     set this [VBGType::constructor $class $this $name]
  1177.     # Start constructor user section
  1178.     # End constructor user section
  1179.     return $this
  1180. }
  1181.  
  1182. method VBGBaseType::destructor {this} {
  1183.     # Start destructor user section
  1184.     # End destructor user section
  1185. }
  1186.  
  1187. method VBGBaseType::generate {this} {
  1188.         set type [VBType new]
  1189.         $type name [$this getType3GL]
  1190.         return $type
  1191. }
  1192.  
  1193. # Do not delete this line -- regeneration end marker
  1194.  
  1195. Class VBGBaseTypeD : {VBGBaseType OPBaseType} {
  1196. }
  1197.  
  1198. selfPromoter OPBaseType {this} {
  1199.     VBGBaseTypeD promote $this
  1200. }
  1201.  
  1202. #      File:           @(#)vbgclassty.tcl    /main/hindenburg/5
  1203.  
  1204.  
  1205. Class VBGClassType : {VBGType} {
  1206.     constructor
  1207.     method destructor
  1208.     method generate
  1209. }
  1210.  
  1211. constructor VBGClassType {class this name} {
  1212.     set this [VBGType::constructor $class $this $name]
  1213.     # Start constructor user section
  1214.     # End constructor user section
  1215.     return $this
  1216. }
  1217.  
  1218. method VBGClassType::destructor {this} {
  1219.     # Start destructor user section
  1220.     # End destructor user section
  1221. }
  1222.  
  1223. method VBGClassType::generate {this} {
  1224.         set type [VBType new]
  1225.         if {[$this ooplClass] != ""} {
  1226.            set name [[$this ooplClass] getName]
  1227.         } else {
  1228.            set name ""
  1229.         }
  1230.         $type name $name                      
  1231.         return $type
  1232. }
  1233.  
  1234. # Do not delete this line -- regeneration end marker
  1235.  
  1236. Class VBGClassTypeD : {VBGClassType OPClassType} {
  1237. }
  1238.  
  1239. selfPromoter OPClassType {this} {
  1240.     VBGClassTypeD promote $this
  1241. }
  1242.  
  1243. #      File:           @(#)vbgenumtyp.tcl    /main/hindenburg/6
  1244.  
  1245.  
  1246. Class VBGEnumType : {VBGType} {
  1247.     constructor
  1248.     method destructor
  1249.     method generate
  1250. }
  1251.  
  1252. constructor VBGEnumType {class this name} {
  1253.     set this [VBGType::constructor $class $this $name]
  1254.     # Start constructor user section
  1255.     # End constructor user section
  1256.     return $this
  1257. }
  1258.  
  1259. method VBGEnumType::destructor {this} {
  1260.     # Start destructor user section
  1261.     # End destructor user section
  1262. }
  1263.  
  1264. method VBGEnumType::generate {this} {
  1265.         set type [VBType new]
  1266.         if {[$this ooplClass] != ""} {
  1267.            set name [[$this ooplClass] getName]
  1268.         } else {
  1269.            set name ""
  1270.         }
  1271.         $type name $name
  1272.         return $type
  1273. }
  1274.  
  1275. # Do not delete this line -- regeneration end marker
  1276.  
  1277. Class VBGEnumTypeD : {VBGEnumType OPEnumType} {
  1278. }
  1279.  
  1280. selfPromoter OPEnumType {this} {
  1281.     VBGEnumTypeD promote $this
  1282. }
  1283.  
  1284. #      File:           @(#)vbgassocma.tcl    /main/hindenburg/15
  1285.  
  1286.  
  1287. Class VBGAssocMany : {VBGAssocGen} {
  1288.     constructor
  1289.     method destructor
  1290.     method hasAdd
  1291.     method hasDtor
  1292.     method hasRemove
  1293.     method generate
  1294.     method generateGet
  1295.     method generateAdd
  1296.     method generateRemove
  1297.     method generateDtor
  1298. }
  1299.  
  1300. constructor VBGAssocMany {class this assocattr} {
  1301.     set this [VBGAssocGen::constructor $class $this $assocattr]
  1302.     # Start constructor user section
  1303.     # End constructor user section
  1304.     return $this
  1305. }
  1306.  
  1307. method VBGAssocMany::destructor {this} {
  1308.     # Start destructor user section
  1309.     # End destructor user section
  1310.     $this VBGAssocGen::destructor
  1311. }
  1312.  
  1313. method VBGAssocMany::hasAdd {this self} {
  1314.         set wr [$this hasWrite]
  1315.         if {$self} {
  1316.                 if {$wr == "None"} {
  1317.                         return 0
  1318.                 }
  1319.         } else {
  1320.                 if {$wr == "None" || $wr == "Private"} {
  1321.                         return 0
  1322.                 }
  1323.         }
  1324.         if {[[$this assocattr] opposite] != ""} {
  1325.            if {[[[$this assocattr] opposite] isQualified]} {
  1326.               m4_warning $W_NOSET [[$this assocattr] getName]
  1327.               return 0
  1328.            }
  1329.         }
  1330.         return 1
  1331. }
  1332.  
  1333. method VBGAssocMany::hasDtor {this self} {
  1334.         if {[[$this assocattr] opposite] != ""} {
  1335.            if {[[[$this assocattr] opposite] isMandatory] && [[[$this assocattr] opposite] getMultiplicity] == "one"} {
  1336.               return 0
  1337.            }
  1338.            if {[[[$this assocattr] opposite] isQualified]} {
  1339.               m4_warning $W_NODTOR [[$this assocattr] getName]
  1340.               return 0
  1341.            }
  1342.     }
  1343.     return 1
  1344. }
  1345.  
  1346. method VBGAssocMany::hasRemove {this self} {
  1347.         set wr [$this hasWrite]
  1348.         if {$self} {
  1349.                 if {$wr == "None"} {
  1350.                         return 0
  1351.                 }
  1352.         } else {
  1353.                 if {$wr == "None" || $wr == "Private"} {
  1354.                         return 0
  1355.                 }
  1356.         }
  1357.         if {[[$this assocattr] opposite] != ""} {
  1358.            if {[[[$this assocattr] opposite] isMandatory] && [[[$this assocattr] opposite] getMultiplicity] == "one"} {
  1359.               return 0
  1360.            }
  1361.            if {[[[$this assocattr] opposite] isQualified]} {
  1362.               m4_warning $W_NOREMOVE [[$this assocattr] getName]
  1363.               return 0
  1364.            }
  1365.         }
  1366.     return 1
  1367. }
  1368.  
  1369. method VBGAssocMany::generate {this cl} {
  1370.         set type [VBType new]
  1371.         $type name "New ClassSet"
  1372.         set vari [VBVariable new $type]
  1373.         $vari name "[[$this assocattr] getName]_"
  1374.         $cl addAssocvar $vari
  1375.         $vari access "Private"
  1376.         if {[[$this assocattr] opposite] != ""} {
  1377.                 [[$this assocattr] opposite] setGenerator
  1378.         }
  1379.         $this generateGet $vari
  1380.         $this generateAdd $vari
  1381.         $this generateRemove $vari
  1382.         $this generateDtor $cl
  1383. }
  1384.  
  1385. method VBGAssocMany::generateGet {this vari} {
  1386.         if {![$this hasGet 0]} {
  1387.                 $vari access "Public"
  1388.         }
  1389.         if {![$this hasGet 1]} {
  1390.                 return
  1391.         }
  1392.         set type [VBType new]
  1393.         $type name "ClassSet"
  1394.         set getproc [VBGetProperty new $type]
  1395.         set getcode [TextSection new]
  1396.         $getproc gencode $getcode
  1397.         $getproc hasUserSection 0
  1398.         $getproc access [$this hasRead]
  1399.         $getproc name [[$this assocattr] getName]
  1400.         $getcode append "Set "
  1401.         $getcode append "[[$this assocattr] getName] = "
  1402.         $getcode append "[[$this assocattr] getName]_\n"
  1403.         $vari addProc $getproc
  1404. }
  1405.  
  1406. method VBGAssocMany::generateAdd {this vari} {
  1407.         if {![$this hasAdd 0]} {
  1408.                 $vari access "Public"
  1409.         }
  1410.         if {![$this hasAdd 1]} {
  1411.                 return
  1412.         }
  1413.         set type [VBType new]
  1414.         $type name [[[[$this assocattr] ooplType] ooplClass] getName]
  1415.         set arg [VBArgument new $type]
  1416.         $arg name "x"
  1417.         set addsub [VBSub new]
  1418.         $addsub addArg $arg
  1419.         set addcode [TextSection new]
  1420.  
  1421.         $addsub gencode $addcode
  1422.         $addsub hasUserSection 0
  1423.         $addsub access [$this hasWrite]
  1424.         $addsub name "Add[cap [[$this assocattr] getName]]"
  1425.  
  1426.         $addcode append "If Not([$vari name].Contains(x)) Then\n"
  1427.         $addcode indent +
  1428.         $addcode append "[$vari name].Add x\n"
  1429.         
  1430.         if {[[$this assocattr] opposite] != ""} {
  1431.             if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1432.         if {[[[[$this assocattr] opposite] generator] hasAdd 0]} {
  1433.                     $addcode append "x.Add[cap [[[$this assocattr] opposite] getName]] Me\n"
  1434.            } else {
  1435.                     $addcode append "x.[[[$this assocattr] opposite] getName]_.Add Me\n"
  1436.         }
  1437.             } else {
  1438.         if {[[[[$this assocattr] opposite] generator] hasSet 0]} {
  1439.                     $addcode append "Set x.[[[$this assocattr] opposite] getName] = Me\n"
  1440.         } else {
  1441.                   $addcode append "If Not(x.[[[$this assocattr] opposite] getName]_ Is Nothing) Then\n"
  1442.                         $addcode indent +
  1443.             if {[$this hasRemove 1]} {
  1444.                 $addcode append "x.[[[$this assocattr] opposite] getName]_.Remove[cap [[$this assocattr] getName]] x\n"
  1445.             } else {
  1446.                 $addcode append "x.[[[$this assocattr] opposite] getName]_.[[$this assocattr] getName]_.Remove x\n"
  1447.                 if {[[[[$this assocattr] opposite] generator] hasRemove 0]} {
  1448.                     $addcode append "x.Remove[cap [[[$this assocattr] opposite] getName]]\n"
  1449.                 } else {
  1450.                     $addcode append "Set x.[[[$this assocattr] opposite] getName]_ = Nothing\n"
  1451.                 }
  1452.             }
  1453.                         $addcode indent -
  1454.                         $addcode append "End If\n"
  1455.                     $addcode append "Set x.[[[$this assocattr] opposite] getName]_ = Me\n"
  1456.         }
  1457.             }
  1458.         }
  1459.         $addcode indent -
  1460.         $addcode append "End If\n"
  1461.  
  1462.         $vari addProc $addsub
  1463. }
  1464.  
  1465. method VBGAssocMany::generateRemove {this vari} {
  1466.         if {![$this hasRemove 0]} {
  1467.                 $vari access "Public"
  1468.         }
  1469.         if {![$this hasRemove 1]} {
  1470.                 return
  1471.         }
  1472.         set removesub [VBSub new]
  1473.         set type [VBType new]
  1474.         $type name [[[[$this assocattr] ooplType] ooplClass] getName]
  1475.         set arg [VBArgument new $type]
  1476.         $arg name "x"
  1477.         $removesub addArg $arg
  1478.         set removecode [TextSection new]
  1479.         $removesub gencode $removecode
  1480.         $removesub hasUserSection 0
  1481.         $removesub access [$this hasWrite]
  1482.         $removesub name "Remove[cap [[$this assocattr] getName]]"
  1483.  
  1484.         if {[[$this assocattr] opposite] != ""} {
  1485.             $removecode append "If [$vari name].Contains(x) Then\n"
  1486.             $removecode indent +
  1487.             $removecode append "[$vari name].Remove x\n"
  1488.  
  1489.             if {[[[[$this assocattr] opposite] generator] hasRemove 0]} {
  1490.                 $removecode append "x.Remove[cap [[[$this assocattr] opposite] getName]]"
  1491.                 if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1492.                         $removecode append " Me"
  1493.                 }
  1494.             } else {
  1495.                if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1496.                    $removecode append "x.[[[$this assocattr] opposite] getName]_.Remove Me"
  1497.                } else {
  1498.                    $removecode append "Set x.[[[$this assocattr] opposite] getName]_ = Nothing"
  1499.                }
  1500.             }
  1501.  
  1502.             $removecode append "\n"
  1503.             $removecode indent -
  1504.             $removecode append "End If\n"
  1505.         } else {
  1506.             $removecode append "[$vari name].Remove x\n"
  1507.         }
  1508.         $vari addProc $removesub
  1509. }
  1510.  
  1511. method VBGAssocMany::generateDtor {this cl} {
  1512.         if {![$this hasDtor 1]} {
  1513.                 return
  1514.         }
  1515.         if {[[$this assocattr] opposite] != ""} {
  1516.            [[$cl terminate] gencode] append "While [[$this assocattr] getName]_.Count > 0\n"
  1517.            [[$cl terminate] gencode] indent +
  1518.  
  1519.         if {[$this hasRemove 1]} {
  1520.               [[$cl terminate] gencode] append "Remove[cap [[$this assocattr] getName]] [[$this assocattr] getName]_.item(1)\n"
  1521.        } else {
  1522.               [[$cl terminate] gencode] append "Dim temp As [[[[$this assocattr] ooplType] ooplClass] getName]\n"
  1523.               [[$cl terminate] gencode] append "Set temp = [[$this assocattr] getName]_.item(1)\n"
  1524.               [[$cl terminate] gencode] append "[[$this assocattr] getName]_.Remove temp\n"
  1525.               if {[[[[$this assocattr] opposite] generator] hasRemove 0]} {
  1526.                     [[$cl terminate] gencode] append "temp.Remove[cap [[[$this assocattr] opposite] getName]]"
  1527.                   if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1528.                             [[$cl terminate] gencode] append " Me"
  1529.                   }
  1530.               } else {
  1531.                  if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1532.                      [[$cl terminate] gencode] append "temp.[[[$this assocattr] opposite] getName]_.Remove Me"
  1533.                  } else {
  1534.                      [[$cl terminate] gencode] append "Set temp.[[[$this assocattr] opposite] getName]_ = Nothing"
  1535.                  }
  1536.               }
  1537.             [[$cl terminate] gencode] append "\n"
  1538.        }
  1539.            [[$cl terminate] gencode] indent -
  1540.            [[$cl terminate] gencode] append "Wend\n"
  1541.         }
  1542. }
  1543.  
  1544. # Do not delete this line -- regeneration end marker
  1545.  
  1546.  
  1547. #      File:           @(#)vbgassocon.tcl    /main/hindenburg/14
  1548.  
  1549.  
  1550. Class VBGAssocOne : {VBGAssocGen} {
  1551.     constructor
  1552.     method destructor
  1553.     method hasSet
  1554.     method hasDtor
  1555.     method hasRemove
  1556.     method generate
  1557.     method generateSet
  1558.     method generateGet
  1559.     method generateRemove
  1560.     method generateDtor
  1561. }
  1562.  
  1563. constructor VBGAssocOne {class this assocattr} {
  1564.     set this [VBGAssocGen::constructor $class $this $assocattr]
  1565.     # Start constructor user section
  1566.     # End constructor user section
  1567.     return $this
  1568. }
  1569.  
  1570. method VBGAssocOne::destructor {this} {
  1571.     # Start destructor user section
  1572.     # End destructor user section
  1573.     $this VBGAssocGen::destructor
  1574. }
  1575.  
  1576. method VBGAssocOne::hasSet {this self} {
  1577.         set wr [$this hasWrite]
  1578.         if {$self} {
  1579.                 if {$wr == "None"} {
  1580.                         return 0
  1581.                 }
  1582.         } else {
  1583.                 if {$wr == "None" || $wr == "Private"} {
  1584.                         return 0
  1585.                 }
  1586.         }
  1587.         if {[[$this assocattr] opposite] != ""} {
  1588.        if {[[[$this assocattr] opposite] isMandatory] && [[[$this assocattr] opposite] getMultiplicity] == "one"} {
  1589.               return 0
  1590.        }
  1591.            if {[[[$this assocattr] opposite] isQualified]} {
  1592.               m4_warning $W_NOADD [[$this assocattr] getName]
  1593.               return 0
  1594.            }
  1595.         }
  1596.         return 1
  1597. }
  1598.  
  1599. method VBGAssocOne::hasDtor {this self} {
  1600.         if {[[$this assocattr] opposite] != ""} {
  1601.            if {[[[$this assocattr] opposite] isMandatory] && [[[$this assocattr] opposite] getMultiplicity] == "one"} {
  1602.               return 0
  1603.            }
  1604.            if {[[[$this assocattr] opposite] isQualified]} {
  1605.               m4_warning $W_NODTOR [[$this assocattr] getName]
  1606.               return 0
  1607.            }
  1608.     }
  1609.     return 1
  1610. }
  1611.  
  1612. method VBGAssocOne::hasRemove {this self} {
  1613.         set wr [$this hasWrite]
  1614.         if {$self} {
  1615.                 if {$wr == "None"} {
  1616.                         return 0
  1617.                 }
  1618.         } else {
  1619.                 if {$wr == "None" || $wr == "Private"} {
  1620.                         return 0
  1621.                 }
  1622.         }
  1623.         if {[[$this assocattr] opposite] != ""} {
  1624.            if {[[[$this assocattr] opposite] isMandatory] && [[[$this assocattr] opposite] getMultiplicity] == "one"} {
  1625.               return 0
  1626.            }
  1627.            if {[[[$this assocattr] opposite] isQualified]} {
  1628.               m4_warning $W_NOREMOVE [[$this assocattr] getName]
  1629.               return 0
  1630.            }
  1631.         }
  1632.         if {[[$this assocattr] isMandatory]} {
  1633.            return 0
  1634.         }
  1635.         return 1
  1636. }
  1637.  
  1638. method VBGAssocOne::generate {this cl} {
  1639.         set type [VBType new]
  1640.         $type name [[[[$this assocattr] ooplType] ooplClass] getName]
  1641.         set vari [VBVariable new $type]
  1642.         $vari name "[[$this assocattr] getName]_"
  1643.         $cl addAssocvar $vari
  1644.         $vari access "Private"
  1645.     if {[[$this assocattr] opposite] != ""} {
  1646.         [[$this assocattr] opposite] setGenerator
  1647.     }
  1648.         $this generateGet $vari
  1649.         $this generateSet $vari
  1650.         $this generateRemove $vari
  1651.         $this generateDtor $cl
  1652. }
  1653.  
  1654. method VBGAssocOne::generateSet {this vari} {
  1655.     if {![$this hasSet 0]} {
  1656.         $vari access "Public"
  1657.     }
  1658.     if {![$this hasSet 1]} {
  1659.         return
  1660.     }
  1661.         set type [VBType new]
  1662.         $type name [[[[$this assocattr] ooplType] ooplClass] getName]
  1663.         set arg [VBArgument new $type]
  1664.         $arg name "x"
  1665.         set setproc [VBSetProperty new]
  1666.         $setproc addArg $arg
  1667.         set setcode [TextSection new]
  1668.         
  1669.         $setproc gencode $setcode
  1670.         $setproc hasUserSection 0
  1671.         $setproc access [$this hasWrite]
  1672.         $setproc name [[$this assocattr] getName]
  1673.         if {[[$this assocattr] opposite] != ""} {
  1674.             $setcode append "If Not(x Is Nothing) Then\n"
  1675.             $setcode indent +
  1676.  
  1677.             if {[[$this assocattr] isMandatory]} {
  1678.                  if {[[[$this assocattr] opposite] getMultiplicity] == "one"} {
  1679.                     if {[[[[$this assocattr] opposite] generator] hasGet 0]} {
  1680.                        $setcode append "If x.[[[$this assocattr] opposite] getName] Is Nothing Then\n"
  1681.             } else {
  1682.                        $setcode append "If x.[[[$this assocattr] opposite] getName]_ Is Nothing Then\n"
  1683.             }
  1684.                     $setcode indent +
  1685.                     $setcode append "Set [$vari name].[[[$this assocattr] opposite] getName]_ = Nothing\n"
  1686.                  } else {
  1687.                     $setcode append "If Not(x Is [$vari name]) Then\n"
  1688.                     $setcode indent +
  1689.                     $setcode append "If Not([$vari name] Is Nothing) Then\n"
  1690.                     $setcode indent +
  1691.                     $setcode append "[$vari name].[[[$this assocattr] opposite] getName]_.Remove Me\n"
  1692.                     $setcode indent -
  1693.                     $setcode append "End If\n"
  1694.                  }
  1695.             } else {
  1696.                  $setcode append "If Not(x Is [$vari name]) Then\n"
  1697.                  $setcode indent +
  1698.                  $setcode append "If Not([$vari name] Is Nothing) Then\n"
  1699.                  $setcode indent +
  1700.                  if {[[[[$this assocattr] opposite] generator] hasRemove 0]} {
  1701.                      $setcode append "[$vari name].Remove[cap [[[$this assocattr] opposite] getName]]"
  1702.                      if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1703.                          $setcode append " Me"
  1704.                      }
  1705.          } else {
  1706.                      if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1707.                          $setcode append "[$vari name].[[[$this assocattr] opposite] getName]_.Remove Me"
  1708.                      } else {
  1709.                          $setcode append "Set [$vari name].[[[$this assocattr] opposite] getName]_ = Nothing"
  1710.              }
  1711.          }
  1712.                  $setcode append "\n"
  1713.                  $setcode indent -
  1714.                  $setcode append "End If\n"
  1715.             }
  1716.  
  1717.             $setcode append "Set [$vari name] = x\n"
  1718.  
  1719.             if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1720.                 if {[[[[$this assocattr] opposite] generator] hasAdd 0]} {
  1721.                    $setcode append "x.Add[cap [[[$this assocattr] opposite] getName]] Me\n"
  1722.                 } else {
  1723.                    $setcode append "x.[[[$this assocattr] opposite] getName]_.Add Me\n"
  1724.                 }
  1725.             } else {
  1726.                 if {[[[[$this assocattr] opposite] generator] hasSet 0]} {
  1727.                     $setcode append "Set x.[[[$this assocattr] opposite] getName] = Me\n"
  1728.                 } else {
  1729.                     $setcode append "Set x.[[[$this assocattr] opposite] getName]_ = Me\n"
  1730.                 }
  1731.             }
  1732.             $setcode indent -
  1733.             $setcode append "End If\n"
  1734.  
  1735.             if {[$this hasRemove 1]} {
  1736.                $setcode indent -
  1737.                $setcode append "Else\n"
  1738.                $setcode indent +
  1739.                $setcode append "Remove[cap [[$this assocattr] getName]]\n"
  1740.             }
  1741.             $setcode indent -
  1742.             $setcode append "End If\n"
  1743.         } else {
  1744.             if {[[$this assocattr] isMandatory]} {
  1745.                  $setcode append "If Not(x Is Nothing) Then\n"
  1746.                  $setcode indent +
  1747.                  $setcode append "Set [$vari name] = x\n"
  1748.                  $setcode indent -
  1749.                  $setcode append "End If\n"
  1750.             } else {
  1751.                  $setcode append "Set [$vari name] = x\n"
  1752.             }
  1753.         }
  1754.         $vari addProc $setproc
  1755. }
  1756.  
  1757. method VBGAssocOne::generateGet {this vari} {
  1758.     if {![$this hasGet 0]} {
  1759.         $vari access "Public"
  1760.     }
  1761.     if {![$this hasGet 1]} {
  1762.         return
  1763.     }
  1764.         set type [VBType new]
  1765.         $type name [[[[$this assocattr] ooplType] ooplClass] getName]
  1766.         set getproc [VBGetProperty new $type]
  1767.         set getcode [TextSection new]
  1768.         $getproc gencode $getcode
  1769.         $getproc hasUserSection 0
  1770.         $getproc access [$this hasRead]
  1771.         $getproc name [[$this assocattr] getName]
  1772.         $getcode append "Set "
  1773.         $getcode append "[[$this assocattr] getName] = "
  1774.         $getcode append "[[$this assocattr] getName]_\n"
  1775.         $vari addProc $getproc
  1776. }
  1777.  
  1778. method VBGAssocOne::generateRemove {this vari} {
  1779.     if {![$this hasRemove 0]} {
  1780.         $vari access "Public"
  1781.     }
  1782.     if {![$this hasRemove 1]} {
  1783.         return
  1784.     }
  1785.         set removesub [VBSub new]
  1786.         set removecode [TextSection new]
  1787.         $removesub gencode $removecode
  1788.         $removesub hasUserSection 0
  1789.         $removesub access [$this hasWrite]
  1790.         $removesub name "Remove[cap [[$this assocattr] getName]]"
  1791.         if {[[$this assocattr] opposite] != ""} {
  1792.             $removecode append "If Not([$vari name] Is Nothing) Then\n"
  1793.             $removecode indent +
  1794.             $removecode append "Dim temp As [[$vari type] name]\n"
  1795.             $removecode append "Set temp = [$vari name]\n"
  1796.             $removecode append "Set [$vari name] = Nothing\n"
  1797.             if {[[[[$this assocattr] opposite] generator] hasRemove 0]} {
  1798.                $removecode append "temp.Remove[cap [[[$this assocattr] opposite] getName]]"
  1799.                if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1800.                    $removecode append " Me"
  1801.                }
  1802.         } else {
  1803.                if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1804.                    $removecode append "temp.[[[$this assocattr] opposite] getName]_.Remove Me"
  1805.                } else {
  1806.                    $removecode append "Set temp.[[[$this assocattr] opposite] getName]_ = Nothing"
  1807.            }
  1808.         }
  1809.             $removecode append "\n"
  1810.             $removecode indent -
  1811.             $removecode append "End If\n"
  1812.         } else {
  1813.             $removecode append "Set [$vari name] = Nothing\n"
  1814.         }
  1815.         $vari addProc $removesub
  1816. }
  1817.  
  1818. method VBGAssocOne::generateDtor {this cl} {
  1819.     if {![$this hasDtor 1]} {
  1820.         return
  1821.     }
  1822.         if {[[$this assocattr] opposite] != ""} {
  1823.            if {[$this hasRemove 1]} {
  1824.                  [[$cl terminate] gencode] append "Remove[cap [[$this assocattr] getName]]\n"
  1825.            } else {
  1826.             [[$cl terminate] gencode] append "If Not([[$this assocattr] getName]_ Is Nothing) Then\n"
  1827.             [[$cl terminate] gencode] indent +
  1828.             if {[[[[$this assocattr] opposite] generator] hasRemove 0]} {
  1829.                [[$cl terminate] gencode] append "[[$this assocattr] getName]_.Remove[cap [[[$this assocattr] opposite] getName]]"
  1830.                if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1831.                    [[$cl terminate] gencode] append " Me"
  1832.                }
  1833.         } else {
  1834.                if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  1835.                    [[$cl terminate] gencode] append "[[$this assocattr] getName]_.[[[$this assocattr] opposite] getName]_.Remove Me"
  1836.                } else {
  1837.                    [[$cl terminate] gencode] append "Set [[$this assocattr] getName]_.[[[$this assocattr] opposite] getName]_ = Nothing"
  1838.            }
  1839.         }
  1840.             [[$cl terminate] gencode] append "\n"
  1841.             [[$cl terminate] gencode] indent -
  1842.             [[$cl terminate] gencode] append "End If\n"
  1843.          }
  1844.     }
  1845. }
  1846.  
  1847. # Do not delete this line -- regeneration end marker
  1848.  
  1849.  
  1850. #      File:           @(#)vbgqual.tcl    /main/hindenburg/2
  1851.  
  1852.  
  1853. Class VBGQual : {VBGAssocGen} {
  1854.     constructor
  1855.     method destructor
  1856.     method hasAdd
  1857.     method hasDtor
  1858.     method hasRemove
  1859. }
  1860.  
  1861. constructor VBGQual {class this assocattr} {
  1862.     set this [VBGAssocGen::constructor $class $this $assocattr]
  1863.     # Start constructor user section
  1864.     # End constructor user section
  1865.     return $this
  1866. }
  1867.  
  1868. method VBGQual::destructor {this} {
  1869.     # Start destructor user section
  1870.     # End destructor user section
  1871.     $this VBGAssocGen::destructor
  1872. }
  1873.  
  1874. method VBGQual::hasAdd {this self} {
  1875.         set wr [$this hasWrite]
  1876.         if {$self} {
  1877.                 if {$wr == "None"} {
  1878.                         return 0
  1879.                 }
  1880.         } else {
  1881.                 if {$wr == "None" || $wr == "Private"} {
  1882.                         return 0
  1883.                 }
  1884.         }
  1885.         return 1
  1886. }
  1887.  
  1888. method VBGQual::hasDtor {this self} {
  1889.         if {[[$this assocattr] opposite] != ""} {
  1890.            if {[[[$this assocattr] opposite] isMandatory] && [[[$this assocattr] opposite] getMultiplicity] == "one"} {
  1891.               return 0
  1892.            }
  1893.     }
  1894.     return 1
  1895. }
  1896.  
  1897. method VBGQual::hasRemove {this self} {
  1898.         set wr [$this hasWrite]
  1899.         if {$self} {
  1900.         } else {
  1901.                 if {$wr == "None" || $wr == "Private"} {
  1902.                         return 0
  1903.                 }
  1904.         }
  1905.         if {[[$this assocattr] opposite] != ""} {
  1906.            if {[[[$this assocattr] opposite] isMandatory] && [[[$this assocattr] opposite] getMultiplicity] == "one"} {
  1907.               return 0
  1908.            }
  1909.         }
  1910.     return 1
  1911. }
  1912.  
  1913. # Do not delete this line -- regeneration end marker
  1914.  
  1915.  
  1916. #      File:           @(#)vbgdataatt.tcl    /main/hindenburg/9
  1917.  
  1918.  
  1919. Class VBGDataAttr : {VBGAttribute} {
  1920.     constructor
  1921.     method destructor
  1922.     method generateSetDefault
  1923.     method generateAccesProcs
  1924.     method generate
  1925. }
  1926.  
  1927. constructor VBGDataAttr {class this name} {
  1928.     set this [VBGAttribute::constructor $class $this $name]
  1929.     # Start constructor user section
  1930.     # End constructor user section
  1931.     return $this
  1932. }
  1933.  
  1934. method VBGDataAttr::destructor {this} {
  1935.     # Start destructor user section
  1936.     # End destructor user section
  1937. }
  1938.  
  1939. method VBGDataAttr::generateSetDefault {this proc} {
  1940.         if {[$this getInitialValue] != ""} {
  1941.             if {[$this isClassFeature]} {
  1942.                  m4_warning $W_NODEFAULT [$this getName] [[$this ooplClass] getName]
  1943.             } else {
  1944.                if {[[$this ooplType] get_obj_type] == "class_type" ||
  1945.                    [[$this ooplType] getType3GL] == "Object"} {
  1946.                    [$proc gencode] append "Set "
  1947.                }
  1948.  
  1949.                [$proc gencode] append [$this getName]
  1950.                [$proc gencode] append " = "
  1951.                [$proc gencode] append [$this getInitialValue]
  1952.                [$proc gencode] append "\n"
  1953.            }
  1954.        }
  1955. }
  1956.  
  1957. method VBGDataAttr::generateAccesProcs {this var} {
  1958.         set accessTxt [$this getPropertyValue "attrib_access"]
  1959.         set accessList [split $accessTxt -]
  1960.         set readAccess [lindex $accessList 0]
  1961.         if {$readAccess == ""} {
  1962.                 set readAccess "Public"
  1963.         }
  1964.         set writeAccess [lindex $accessList 1]
  1965.         if {$writeAccess == ""} {
  1966.                 set writeAccess "Public"
  1967.         }
  1968.   
  1969.         set getproc [VBGetProperty new [[$this ooplType] generate]]             
  1970.         set getcode [TextSection new]
  1971.         $getproc gencode $getcode
  1972.         $getproc hasUserSection 0
  1973.         $getproc access $readAccess  
  1974.         $getproc name [$this getName]
  1975.         $getproc refName [$var refName]
  1976.  
  1977.         set setcode [TextSection new]
  1978.  
  1979.         if {[[$this ooplType] get_obj_type] == "class_type" ||
  1980.             [[$this ooplType] getType3GL] == "Object"} {
  1981.               $setcode append "Set "
  1982.               $getcode append "Set "
  1983.               set setproc [VBSetProperty new]             
  1984.         } else {
  1985.               set setproc [VBLetProperty new]             
  1986.         }
  1987.  
  1988.         set arg [VBArgument new [[$this ooplType] generate]]             
  1989.         $arg name "x"
  1990.         $setproc addArg $arg
  1991.         $setproc gencode $setcode
  1992.         $setproc hasUserSection 0
  1993.         $setproc access $writeAccess  
  1994.         $setproc name [$this getName]
  1995.         $setproc refName [$var refName]
  1996.  
  1997.         if {[$setproc refName] != ""} {
  1998.            $setcode append "[$setproc refName]_"
  1999.         }
  2000.         $setcode append "[$var name] = x\n"
  2001.  
  2002.         if {[$getproc refName] != ""} {
  2003.            set addin "[$getproc refName]_[$this getName]"
  2004.         } else {
  2005.            set addin "[$this getName]"
  2006.         }
  2007.         
  2008.         $getcode append "$addin = "
  2009.         $getcode append "${addin}_\n"
  2010.  
  2011.         $var addProc $getproc 
  2012.         $var addProc $setproc 
  2013. }
  2014.  
  2015. method VBGDataAttr::generate {this cl} {
  2016.         if {[[$this ooplClass] baseType] == "NodeControl" || [[$this ooplClass] baseType] == "LeafControl"} {
  2017.            m4_error $E_CONTHASNOAT [[$this ooplClass] getName]
  2018.            return
  2019.         }
  2020.  
  2021.        if {[[$this ooplType] getType3GL] == "enum"} {
  2022.            if {![[$this ooplClass] isEnumClass]} {
  2023.                 m4_error $E_NOENUM [[$this ooplClass] getName]
  2024.                 return 
  2025.            } else {
  2026.                 set enum [VBEnumConstant new $cl]
  2027.                 $enum name [$this getName]
  2028.  
  2029.                 set comment [VBComment new]
  2030.                 $enum comment $comment
  2031.                 $comment comment  [$this getPropertyValue "freeText"]
  2032.  
  2033.                 if {[$this getPropertyValue "initial_value"] != ""} {
  2034.                      $enum value [$this getPropertyValue "initial_value"]
  2035.                      $enum hasValue 1
  2036.                 }
  2037.            }
  2038.        } else {
  2039.            set variable [VBVariable new [[$this ooplType] generate]]             
  2040.            $variable name "[$this getName]_"
  2041.  
  2042.            if {![$this isClassFeature]} {
  2043.            $variable defaultValue [$this getInitialValue]
  2044.        }
  2045.  
  2046.            set comment [VBComment new]
  2047.            $variable comment $comment
  2048.            $comment comment  [$this getPropertyValue "freeText"]
  2049.  
  2050.            if {[$this isClassFeature]} {
  2051.                 $variable access "Public"                                  
  2052.                 $variable refName [$cl name]
  2053.                 $cl addGlobvar $variable
  2054.            } else {
  2055.                 $variable access "Private"                                  
  2056.                 $cl addUservar $variable
  2057.            }
  2058.  
  2059.  
  2060.            $this generateAccesProcs $variable
  2061.        }
  2062. }
  2063.  
  2064. # Do not delete this line -- regeneration end marker
  2065.  
  2066. Class VBGDataAttrD : {VBGDataAttr OPDataAttr} {
  2067. }
  2068.  
  2069. selfPromoter OPDataAttr {this} {
  2070.     VBGDataAttrD promote $this
  2071. }
  2072.  
  2073. #      File:           @(#)vbggenasso.tcl    /main/hindenburg/12
  2074.  
  2075.  
  2076. Class VBGGenAssocAttr : {VBGAttribute} {
  2077.     constructor
  2078.     method destructor
  2079.     method getName
  2080.     method hasContainer
  2081.     method generateContainer
  2082.     method generator
  2083.     attribute _generator
  2084. }
  2085.  
  2086. constructor VBGGenAssocAttr {class this name} {
  2087.     set this [VBGAttribute::constructor $class $this $name]
  2088.     # Start constructor user section
  2089.     # End constructor user section
  2090.     return $this
  2091. }
  2092.  
  2093. method VBGGenAssocAttr::destructor {this} {
  2094.     set ref [$this _generator]
  2095.     if {$ref != ""} {
  2096.         $ref _assocattr ""
  2097.     }
  2098.     # Start destructor user section
  2099.     # End destructor user section
  2100. }
  2101.  
  2102. method VBGGenAssocAttr::getName {this} {
  2103.     if {[$this isLinkAttr]} {
  2104.        if {[$this opposite] != ""} {
  2105.           return "[uncap [[[$this opposite] ooplClass] getName]]of[$this OPGenAssocAttr::getName]"
  2106.        }
  2107.     }
  2108.     return [$this OPGenAssocAttr::getName]
  2109. }
  2110.  
  2111. method VBGGenAssocAttr::hasContainer {this} {
  2112.         set baseType [[[$this ooplType] ooplClass] baseType]
  2113.  
  2114.         if {$baseType == "NodeControl" || $baseType == "LeafControl"} {
  2115.              return 1
  2116.         } else {
  2117.              return 0
  2118.         }
  2119. }
  2120.  
  2121. method VBGGenAssocAttr::generateContainer {this cl} {
  2122.         if {[[$this ooplClass] baseType] == "Window" || [[$this ooplClass] baseType] == "NodeControl"} {
  2123.             set number [$this getConstraint]
  2124.             if {$number != ""} {
  2125.                 if {![regexp {^[0123456789]*} $number]} {
  2126.                    set number ""
  2127.                    m4_warning $W_INCORCONTAR [$this getName] [[$this ooplClass] getName]
  2128.                 } 
  2129.             }
  2130.             [[$this ooplType] ooplClass] generateContainer [$this getName] $number $cl
  2131.         } else {
  2132.             m4_error $E_CANTCONTCONT [[$this ooplClass] getName]
  2133.         }
  2134. }
  2135.  
  2136. # Do not delete this line -- regeneration end marker
  2137.  
  2138. Class VBGGenAssocAttrD : {VBGGenAssocAttr OPGenAssocAttr} {
  2139. }
  2140.  
  2141. selfPromoter OPGenAssocAttr {this} {
  2142.     VBGGenAssocAttrD promote $this
  2143. }
  2144. method VBGGenAssocAttr::generator {this args} {
  2145.     if {$args == ""} {
  2146.         return [$this _generator]
  2147.     }
  2148.     set ref [$this _generator]
  2149.     if {$ref != ""} {
  2150.         $ref _assocattr ""
  2151.     }
  2152.     set obj [lindex $args 0]
  2153.     if {$obj != ""} {
  2154.         $obj _assocattr $this
  2155.     }
  2156.     $this _generator $obj
  2157. }
  2158.  
  2159.  
  2160. #      File:           @(#)vbgtypedef.tcl    /main/hindenburg/4
  2161.  
  2162.  
  2163. Class VBGTypeDefType : {VBGClassType} {
  2164.     constructor
  2165.     method destructor
  2166. }
  2167.  
  2168. constructor VBGTypeDefType {class this name} {
  2169.     set this [VBGClassType::constructor $class $this $name]
  2170.     # Start constructor user section
  2171.     # End constructor user section
  2172.     return $this
  2173. }
  2174.  
  2175. method VBGTypeDefType::destructor {this} {
  2176.     # Start destructor user section
  2177.     # End destructor user section
  2178. }
  2179.  
  2180. # Do not delete this line -- regeneration end marker
  2181.  
  2182. Class VBGTypeDefTypeD : {VBGTypeDefType OPTypeDefType} {
  2183. }
  2184.  
  2185. selfPromoter OPTypeDefType {this} {
  2186.     VBGTypeDefTypeD promote $this
  2187. }
  2188.  
  2189.  
  2190. #      File:           @(#)vbgmanyqua.tcl    /main/hindenburg/15
  2191.  
  2192.  
  2193. Class VBGManyQual : {VBGQual} {
  2194.     constructor
  2195.     method destructor
  2196.     method generate
  2197.     method generateAdd
  2198.     method generateGet
  2199.     method generateRemove
  2200.     method generateDtor
  2201. }
  2202.  
  2203. constructor VBGManyQual {class this assocattr} {
  2204.     set this [VBGQual::constructor $class $this $assocattr]
  2205.     # Start constructor user section
  2206.     # End constructor user section
  2207.     return $this
  2208. }
  2209.  
  2210. method VBGManyQual::destructor {this} {
  2211.     # Start destructor user section
  2212.     # End destructor user section
  2213.     $this VBGQual::destructor
  2214. }
  2215.  
  2216. method VBGManyQual::generate {this cl} {
  2217.         set type [VBType new]
  2218.         $type name "New ClassSet"
  2219.         set vari [VBVariable new $type]
  2220.         $vari name "[[$this assocattr] getName]_"
  2221.         $cl addAssocvar $vari
  2222.         $vari access "Private"
  2223.         if {[[$this assocattr] opposite] != ""} {
  2224.                 [[$this assocattr] opposite] setGenerator
  2225.         }
  2226.         $this generateGet $vari
  2227.         $this generateAdd $vari
  2228.         $this generateRemove $vari
  2229.         $this generateDtor $cl
  2230. }
  2231.  
  2232. method VBGManyQual::generateAdd {this vari} {
  2233.         if {![$this hasAdd 0]} {
  2234.                 $vari access "Public"
  2235.         }
  2236.         if {![$this hasAdd 1]} {
  2237.                 return
  2238.         }
  2239.         set type [VBType new]
  2240.         $type name [[[[$this assocattr] ooplType] ooplClass] getName]
  2241.         set arg [VBArgument new $type]
  2242.         $arg name "x"
  2243.         set addsub [VBSub new]
  2244.         $addsub addArg $arg
  2245.         set type [VBType new]
  2246.         $type name [[[[$this assocattr] qualifier] ooplType] getType3GL]
  2247.         set arg [VBArgument new $type]
  2248.         $arg name  [[[$this assocattr] qualifier] getName]
  2249.         $addsub addArg $arg
  2250.         if {[[$this assocattr] opposite] != ""} {
  2251.            if {[[[$this assocattr] opposite] getMultiplicity] == "one"} {
  2252.               set type [VBType new]
  2253.               $type name [[[[$this assocattr] qualifier] ooplType] getType3GL]
  2254.               set arg [VBArgument new $type]
  2255.               $arg name  "old_[[[$this assocattr] qualifier] getName]"
  2256.               $arg optional 1
  2257.               $addsub addArg $arg
  2258.            }
  2259.         }
  2260.         set addcode [TextSection new]
  2261.  
  2262.         $addsub gencode $addcode
  2263.         $addsub hasUserSection 0
  2264.         $addsub access [$this hasWrite]
  2265.         $addsub name "Add[cap [[$this assocattr] getName]]"
  2266.  
  2267.         $addcode append "Dim tempSet As ClassSet\n"
  2268.  
  2269.         if {[[$this assocattr] opposite] != ""} {
  2270.             if {[[[$this assocattr] opposite] getMultiplicity] == "one"} {
  2271.                $addcode append "If IsMissing(old_[[[$this assocattr] qualifier] getName]) Then\n"
  2272.                $addcode indent +
  2273.                $addcode append "If Not(x.[[[$this assocattr] opposite] getName]_ Is Nothing) Then\n"
  2274.                $addcode indent +
  2275.                if {[[[$this assocattr] opposite] isMandatory]} {
  2276.                   $addcode append "Set tempSet = x.[[[$this assocattr] opposite] getName]_.[[$this assocattr] getName]_.Item(CStr([[[$this assocattr] qualifier] getName]))\n"
  2277.                } else {
  2278.                   $addcode append "x.[[[$this assocattr] opposite] getName]_.Remove[cap [[$this assocattr] getName]] [[[$this assocattr] qualifier] getName], x\n"
  2279.                }
  2280.                $addcode indent -
  2281.                $addcode append "End If\n"
  2282.                $addcode indent -
  2283.                $addcode append "Else\n"
  2284.                $addcode indent +
  2285.                $addcode append "If Not(x.[[[$this assocattr] opposite] getName]_ Is Nothing) Then\n"
  2286.                $addcode indent +
  2287.                if {[[[$this assocattr] opposite] isMandatory]} {
  2288.                   $addcode append "Set tempSet = x.[[[$this assocattr] opposite] getName]_.[[$this assocattr] getName]_.Item(CStr(old_[[[$this assocattr] qualifier] getName]))\n"
  2289.                } else {
  2290.                   $addcode append "x.[[[$this assocattr] opposite] getName]_.Remove[cap [[$this assocattr] getName]] old_[[[$this assocattr] qualifier] getName], x\n"
  2291.                }
  2292.                $addcode indent -
  2293.                $addcode append "End If\n"
  2294.                $addcode indent -
  2295.                $addcode append "End If\n"
  2296.                if {[[[$this assocattr] opposite] isMandatory]} {
  2297.                   $addcode append "tempSet.Remove x\n"
  2298.                } 
  2299.             }
  2300.             if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  2301.                 $addcode append "x.[[[$this assocattr] opposite] getName]_.Add Me\n"
  2302.             } else {
  2303.                 $addcode append "Set x.[[[$this assocattr] opposite] getName]_ = Me\n"
  2304.             }
  2305.         } 
  2306.         $addcode append "If [$vari name].ContainsKey(CStr([[[$this assocattr] qualifier] getName])) Then\n"
  2307.         $addcode indent +
  2308.         $addcode append "Set tempSet = [$vari name].Item(CStr([[[$this assocattr] qualifier] getName]))\n"
  2309.         $addcode indent -
  2310.         $addcode append "Else\n"
  2311.         $addcode indent +
  2312.         $addcode append "Set tempSet = New ClassSet\n"
  2313.         $addcode append "[$vari name].Add tempSet, CStr([[[$this assocattr] qualifier] getName])\n"
  2314.         $addcode indent -
  2315.         $addcode append "End If\n"
  2316.         $addcode append "tempSet.Add x\n"
  2317.  
  2318.         $vari addProc $addsub
  2319. }
  2320.  
  2321. method VBGManyQual::generateGet {this vari} {
  2322.         if {![$this hasGet 0]} {
  2323.                 $vari access "Public"
  2324.         }
  2325.         if {![$this hasGet 1]} {
  2326.                 return
  2327.         }
  2328.         set type [VBType new]
  2329.         $type name "ClassSet"
  2330.         set getproc [VBGetProperty new $type]
  2331.         set getcode [TextSection new]
  2332.         $getproc gencode $getcode
  2333.         $getproc hasUserSection 0
  2334.         $getproc access [$this hasRead]
  2335.         $getproc name [[$this assocattr] getName]
  2336.         $getcode append "Set "
  2337.         $getcode append "[[$this assocattr] getName] = "
  2338.         $getcode append "[[$this assocattr] getName]_.Item(CStr([[[$this assocattr] qualifier] getName]))\n"
  2339.         set type [VBType new]
  2340.         $type name [[[[$this assocattr] qualifier] ooplType] getType3GL]
  2341.         set arg [VBArgument new $type]
  2342.         $arg name  [[[$this assocattr] qualifier] getName]
  2343.         $getproc addArg $arg
  2344.         $vari addProc $getproc
  2345. }
  2346.  
  2347. method VBGManyQual::generateRemove {this vari} {
  2348.         if {![$this hasRemove 0]} {
  2349.                 $vari access "Public"
  2350.         }
  2351.         if {![$this hasRemove 1]} {
  2352.                 return
  2353.         }
  2354.         set removesub [VBSub new]
  2355.         set type [VBType new]
  2356.         $type name [[[[$this assocattr] qualifier] ooplType] getType3GL]
  2357.         set arg [VBArgument new $type]
  2358.         $arg name [[[$this assocattr] qualifier] getName]
  2359.         $removesub addArg $arg
  2360.         set type [VBType new]
  2361.         $type name [[[[$this assocattr] ooplType] ooplClass] getName]
  2362.         set arg [VBArgument new $type]
  2363.         $arg name "x"
  2364.         $arg optional 1
  2365.  
  2366.         $removesub addArg $arg
  2367.         set removecode [TextSection new]
  2368.         $removesub gencode $removecode
  2369.         $removesub hasUserSection 0
  2370.         $removesub name "Remove[cap [[$this assocattr] getName]]"
  2371.  
  2372.     if {[$this hasWrite] == "None"} {
  2373.             $removesub access "Private"
  2374.         m4_warning $W_CHANGEDREM [[$this assocattr] getName]
  2375.     } else {
  2376.                $removesub access [$this hasWrite]
  2377.     }
  2378.  
  2379.         $removecode append "Dim tempSet As ClassSet\n"
  2380.         $removecode append "Set tempSet = [$vari name].Item(CStr([[[$this assocattr] qualifier] getName]))\n"
  2381.    
  2382.         $removecode append "If IsMissing(x) Then\n"
  2383.         $removecode indent +
  2384.  
  2385.         $removecode append "Dim temp As [[[[$this assocattr] ooplType] ooplClass] getName]\n"
  2386.         $removecode append "While tempSet.Count > 0\n"
  2387.         $removecode indent +
  2388.         $removecode append "Set temp = tempSet.Item(1)\n"
  2389.  
  2390.         if {[[$this assocattr] opposite] != ""} {
  2391.            if {[[[$this assocattr] opposite] getMultiplicity] == "one"} {
  2392.               $removecode append "Set "
  2393.            }
  2394.            $removecode append "temp.[[[$this assocattr] opposite] getName]_"
  2395.            if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  2396.                $removecode append ".Remove Me"
  2397.            } else {
  2398.                $removecode append " = Nothing"
  2399.            }
  2400.            $removecode append "\n"
  2401.         }
  2402.  
  2403.         $removecode append "tempSet.Remove temp\n"
  2404.         $removecode indent -
  2405.         $removecode append "Wend\n"
  2406.         $removecode append "[$vari name].RemoveUsingKey(CStr([[[$this assocattr] qualifier] getName]))\n"
  2407.         $removecode indent -
  2408.         $removecode append "Else\n"
  2409.         $removecode indent +
  2410.  
  2411.         if {[[$this assocattr] opposite] != ""} {
  2412.            if {[[[$this assocattr] opposite] getMultiplicity] == "one"} {
  2413.               $removecode append "Set "
  2414.            }
  2415.            $removecode append "temp.[[[$this assocattr] opposite] getName]_"
  2416.            if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  2417.                $removecode append ".Remove Me"
  2418.            } else {
  2419.                $removecode append " = Nothing"
  2420.            }
  2421.            $removecode append "\n"
  2422.         }
  2423.  
  2424.         $removecode append "tempSet.Remove x\n"
  2425.  
  2426.         $removecode append "If tempSet.Count = 0 Then\n"
  2427.         $removecode indent +
  2428.         $removecode append "[$vari name].RemoveUsingKey(CStr([[[$this assocattr] qualifier] getName]))\n"
  2429.         $removecode indent -
  2430.         $removecode append "End If\n"
  2431.  
  2432.         $removecode indent -
  2433.         $removecode append "End If\n"
  2434.  
  2435.         $vari addProc $removesub
  2436. }
  2437.  
  2438. method VBGManyQual::generateDtor {this cl} {
  2439.         if {![$this hasDtor 1]} {
  2440.                 return
  2441.         }
  2442.         if {[[$this assocattr] opposite] != ""} {
  2443.            [[$cl terminate] gencode] append "While [[$this assocattr] getName]_.Count > 0\n"
  2444.            [[$cl terminate] gencode] indent +
  2445.            [[$cl terminate] gencode] append "Remove[cap [[$this assocattr] getName]] [[$this assocattr] getName]_.key(1)\n"
  2446.            [[$cl terminate] gencode] indent -
  2447.            [[$cl terminate] gencode] append "Wend\n"
  2448.         }
  2449. }
  2450.  
  2451. # Do not delete this line -- regeneration end marker
  2452.  
  2453.  
  2454. #      File:           @(#)vbgonequal.tcl    /main/hindenburg/14
  2455.  
  2456.  
  2457. Class VBGOneQual : {VBGQual} {
  2458.     constructor
  2459.     method destructor
  2460.     method generate
  2461.     method generateAdd
  2462.     method generateGet
  2463.     method generateRemove
  2464.     method generateDtor
  2465. }
  2466.  
  2467. constructor VBGOneQual {class this assocattr} {
  2468.     set this [VBGQual::constructor $class $this $assocattr]
  2469.     # Start constructor user section
  2470.     # End constructor user section
  2471.     return $this
  2472. }
  2473.  
  2474. method VBGOneQual::destructor {this} {
  2475.     # Start destructor user section
  2476.     # End destructor user section
  2477.     $this VBGQual::destructor
  2478. }
  2479.  
  2480. method VBGOneQual::generate {this cl} {
  2481.         set type [VBType new]
  2482.         $type name "New ClassSet"
  2483.         set vari [VBVariable new $type]
  2484.         $vari name "[[$this assocattr] getName]_"
  2485.         $cl addAssocvar $vari
  2486.         $vari access "Private"
  2487.         if {[[$this assocattr] opposite] != ""} {
  2488.                 [[$this assocattr] opposite] setGenerator
  2489.         if {[[[$this assocattr] opposite] getMultiplicity] == "one"} {
  2490.                 $vari access "Public"
  2491.         }
  2492.         }
  2493.         $this generateGet $vari
  2494.         $this generateAdd $vari
  2495.         $this generateRemove $vari
  2496.         $this generateDtor $cl
  2497. }
  2498.  
  2499. method VBGOneQual::generateAdd {this vari} {
  2500.         if {![$this hasAdd 0]} {
  2501.                 $vari access "Public"
  2502.         }
  2503.         if {![$this hasAdd 1]} {
  2504.                 return
  2505.         }
  2506.         set type [VBType new]
  2507.         $type name [[[[$this assocattr] ooplType] ooplClass] getName]
  2508.         set arg [VBArgument new $type]
  2509.         $arg name "x"
  2510.         set addsub [VBSub new]
  2511.         $addsub addArg $arg
  2512.         set type [VBType new]
  2513.         $type name [[[[$this assocattr] qualifier] ooplType] getType3GL]
  2514.         set arg [VBArgument new $type]
  2515.         $arg name  [[[$this assocattr] qualifier] getName]
  2516.         $addsub addArg $arg
  2517.         if {[[$this assocattr] opposite] != ""} {
  2518.            if {[[[$this assocattr] opposite] getMultiplicity] == "one"} {
  2519.               set type [VBType new]
  2520.               $type name [[[[$this assocattr] qualifier] ooplType] getType3GL]
  2521.               set arg [VBArgument new $type]
  2522.               $arg name  "old_[[[$this assocattr] qualifier] getName]"
  2523.               $arg optional 1
  2524.               $addsub addArg $arg
  2525.            }
  2526.         }
  2527.         set addcode [TextSection new]
  2528.  
  2529.         $addsub gencode $addcode
  2530.         $addsub hasUserSection 0
  2531.         $addsub access [$this hasWrite]
  2532.         $addsub name "Add[cap [[$this assocattr] getName]]"
  2533.  
  2534.         if {[[$this assocattr] isMandatory]} {
  2535.            $addcode append "If Not(x Is Nothing) Then\n"
  2536.            $addcode indent +
  2537.         }
  2538.         if {[[$this assocattr] opposite] != ""} {
  2539.             if {[[[$this assocattr] opposite] getMultiplicity] == "one"} {
  2540.                $addcode append "If IsMissing(old_[[[$this assocattr] qualifier] getName]) Then\n"
  2541.                $addcode indent +
  2542.                $addcode append "If Not(x.[[[$this assocattr] opposite] getName]_ Is Nothing) Then\n"
  2543.                $addcode indent +
  2544.                if {[[[$this assocattr] opposite] isMandatory]} {
  2545.                   $addcode append "x.[[[$this assocattr] opposite] getName]_.[[$this assocattr] getName]_.RemoveUsingKey(CStr([[[$this assocattr] qualifier] getName]))\n"
  2546.                } else {
  2547.                   $addcode append "x.[[[$this assocattr] opposite] getName]_.Remove[cap [[$this assocattr] getName]]([[[$this assocattr] qualifier] getName])\n"
  2548.                }
  2549.                $addcode indent -
  2550.                $addcode append "End If\n"
  2551.                $addcode indent -
  2552.                $addcode append "Else\n"
  2553.                $addcode indent +
  2554.                $addcode append "If Not(x.[[[$this assocattr] opposite] getName]_ Is Nothing) Then\n"
  2555.                $addcode indent +
  2556.                if {[[[$this assocattr] opposite] isMandatory]} {
  2557.                   $addcode append "x.[[[$this assocattr] opposite] getName]_.[[$this assocattr] getName]_.RemoveUsingKey(CStr(old_[[[$this assocattr] qualifier] getName]))\n"
  2558.                } else {
  2559.                   $addcode append "x.[[[$this assocattr] opposite] getName]_.Remove[cap [[$this assocattr] getName]](old_[[[$this assocattr] qualifier] getName])\n"
  2560.                }
  2561.                $addcode indent -
  2562.                $addcode append "End If\n"
  2563.                $addcode indent -
  2564.                $addcode append "End If\n"
  2565.             }
  2566.             if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  2567.                 $addcode append "x.[[[$this assocattr] opposite] getName]_.Add Me\n"
  2568.             } else {
  2569.                 $addcode append "Set x.[[[$this assocattr] opposite] getName]_ = Me\n"
  2570.             }
  2571.         } 
  2572.         $addcode append "[$vari name].Add x, CStr([[[$this assocattr] qualifier] getName])\n"
  2573.  
  2574.         if {[[$this assocattr] isMandatory]} {
  2575.            $addcode indent -
  2576.            $addcode append "End If\n"
  2577.         }
  2578.         $vari addProc $addsub
  2579. }
  2580.  
  2581. method VBGOneQual::generateGet {this vari} {
  2582.         if {![$this hasGet 0]} {
  2583.                 $vari access "Public"
  2584.         }
  2585.         if {![$this hasGet 1]} {
  2586.                 return
  2587.         }
  2588.         set type [VBType new]
  2589.         $type name [[[[$this assocattr] ooplType] ooplClass] getName]
  2590.         set getproc [VBGetProperty new $type]
  2591.         set getcode [TextSection new]
  2592.         $getproc gencode $getcode
  2593.         $getproc hasUserSection 0
  2594.         $getproc access [$this hasRead]
  2595.         $getproc name [[$this assocattr] getName]
  2596.         $getcode append "Set "
  2597.         $getcode append "[[$this assocattr] getName] = "
  2598.         $getcode append "[[$this assocattr] getName]_.Item(CStr([[[$this assocattr] qualifier] getName]))\n"
  2599.         set type [VBType new]
  2600.         $type name [[[[$this assocattr] qualifier] ooplType] getType3GL]
  2601.         set arg [VBArgument new $type]
  2602.         $arg name  [[[$this assocattr] qualifier] getName]
  2603.         $getproc addArg $arg
  2604.         $vari addProc $getproc
  2605. }
  2606.  
  2607. method VBGOneQual::generateRemove {this vari} {
  2608.         if {![$this hasRemove 0]} {
  2609.                 $vari access "Public"
  2610.         }
  2611.         if {![$this hasRemove 1]} {
  2612.                 return
  2613.         }
  2614.         set removesub [VBSub new]
  2615.         set type [VBType new]
  2616.         $type name [[[[$this assocattr] qualifier] ooplType] getType3GL]
  2617.         set arg [VBArgument new $type]
  2618.         $arg name [[[$this assocattr] qualifier] getName]
  2619.         $removesub addArg $arg
  2620.         set removecode [TextSection new]
  2621.         $removesub gencode $removecode
  2622.         $removesub hasUserSection 0
  2623.         $removesub name "Remove[cap [[$this assocattr] getName]]"
  2624.  
  2625.         if {[$this hasWrite] == "None"} {
  2626.                 $removesub access "Private"
  2627.                 m4_warning $W_CHANGEDREM [[$this assocattr] getName]
  2628.         } else {
  2629.                 $removesub access [$this hasWrite]
  2630.         }
  2631.  
  2632.         $removecode append "Dim temp As [[[[$this assocattr] ooplType] ooplClass] getName]\n"
  2633.         $removecode append "Set temp = [$vari name].Item(CStr([[[$this assocattr] qualifier] getName]))\n"
  2634.  
  2635.         if {[[$this assocattr] opposite] != ""} {
  2636.             $removecode append "[$vari name].RemoveUsingKey(CStr([[[$this assocattr] qualifier] getName]))\n"
  2637.             if {[[[$this assocattr] opposite] getMultiplicity] == "one"} {
  2638.                 $removecode append "Set "
  2639.             }
  2640.             $removecode append "temp.[[[$this assocattr] opposite] getName]_"
  2641.             if {[[[$this assocattr] opposite] getMultiplicity] != "one"} {
  2642.                 $removecode append ".Remove Me"
  2643.             } else {
  2644.                 $removecode append " = Nothing"
  2645.             }
  2646.             $removecode append "\n"
  2647.         } else {
  2648.             $removecode append "[$vari name].RemoveUsingKey(CStr([[[$this assocattr] qualifier] getName]))\n"
  2649.         }
  2650.  
  2651.         $vari addProc $removesub
  2652. }
  2653.  
  2654. method VBGOneQual::generateDtor {this cl} {
  2655.         if {![$this hasDtor 1]} {
  2656.                 return
  2657.         }
  2658.         if {[[$this assocattr] opposite] != ""} {
  2659.            [[$cl terminate] gencode] append "While [[$this assocattr] getName]_.Count > 0\n"
  2660.            [[$cl terminate] gencode] indent +
  2661.            [[$cl terminate] gencode] append "Remove[cap [[$this assocattr] getName]] [[$this assocattr] getName]_.key(1)\n"
  2662.            [[$cl terminate] gencode] indent -
  2663.            [[$cl terminate] gencode] append "Wend\n"
  2664.         }
  2665. }
  2666.  
  2667. # Do not delete this line -- regeneration end marker
  2668.  
  2669.  
  2670. #      File:           @(#)vbgassocat.tcl    /main/hindenburg/8
  2671.  
  2672.  
  2673. Class VBGAssocAttr : {VBGGenAssocAttr} {
  2674.     constructor
  2675.     method destructor
  2676.     method setGenerator
  2677.     method generate
  2678. }
  2679.  
  2680. constructor VBGAssocAttr {class this name} {
  2681.     set this [VBGGenAssocAttr::constructor $class $this $name]
  2682.     # Start constructor user section
  2683.     # End constructor user section
  2684.     return $this
  2685. }
  2686.  
  2687. method VBGAssocAttr::destructor {this} {
  2688.     # Start destructor user section
  2689.     # End destructor user section
  2690. }
  2691.  
  2692. method VBGAssocAttr::setGenerator {this} {
  2693.        if {[$this generator] == ""} {
  2694.           if {[$this getMultiplicity]=="one"} {
  2695.                $this generator [VBGAssocOne new $this]
  2696.           } else {
  2697.                $this generator [VBGAssocMany new $this]
  2698.           }
  2699.        }
  2700. }
  2701.  
  2702. method VBGAssocAttr::generate {this cl} {
  2703.         if {[[$this ooplType] isA OPBaseType]} {
  2704.         m4_warning $W_ASSOCTYPEERR [$this getName] [[$this ooplType] getName]
  2705.                 return
  2706.         }
  2707.  
  2708.         if {[$this hasContainer]} {
  2709.            $this generateContainer $cl
  2710.         } else {
  2711.        $this setGenerator
  2712.            [$this generator] generate $cl
  2713.         }
  2714. }
  2715.  
  2716. # Do not delete this line -- regeneration end marker
  2717.  
  2718. Class VBGAssocAttrD : {VBGAssocAttr OPAssocAttr} {
  2719. }
  2720.  
  2721. selfPromoter OPAssocAttr {this} {
  2722.     VBGAssocAttrD promote $this
  2723. }
  2724.  
  2725. #      File:           @(#)vbglinkatt.tcl    /main/hindenburg/7
  2726.  
  2727.  
  2728. Class VBGLinkAttr : {VBGGenAssocAttr} {
  2729.     constructor
  2730.     method destructor
  2731.     method setGenerator
  2732.     method generate
  2733. }
  2734.  
  2735. constructor VBGLinkAttr {class this name} {
  2736.     set this [VBGGenAssocAttr::constructor $class $this $name]
  2737.     # Start constructor user section
  2738.     # End constructor user section
  2739.     return $this
  2740. }
  2741.  
  2742. method VBGLinkAttr::destructor {this} {
  2743.     # Start destructor user section
  2744.     # End destructor user section
  2745. }
  2746.  
  2747. method VBGLinkAttr::setGenerator {this} {
  2748.       if {[$this generator] == ""} {
  2749.           if {[$this getMultiplicity]=="one"} {
  2750.                $this generator [VBGAssocOne new $this]
  2751.           } else {
  2752.                $this generator [VBGAssocMany new $this]
  2753.           }
  2754.       }
  2755. }
  2756.  
  2757. method VBGLinkAttr::generate {this cl} {
  2758.         if {[[$this ooplType] isA OPBaseType]} {
  2759.                 m4_warning $W_ASSOCTYPEERR [$this getName] [[$this ooplType] getName]
  2760.                 return
  2761.         }
  2762.  
  2763.         if {[$this hasContainer]} {
  2764.            $this generateContainer $cl
  2765.         } else {
  2766.        $this setGenerator
  2767.            [$this generator] generate $cl
  2768.         }
  2769. }
  2770.  
  2771. # Do not delete this line -- regeneration end marker
  2772.  
  2773. Class VBGLinkAttrD : {VBGLinkAttr OPLinkAttr} {
  2774. }
  2775.  
  2776. selfPromoter OPLinkAttr {this} {
  2777.     VBGLinkAttrD promote $this
  2778. }
  2779.  
  2780. #      File:           @(#)vbgqualass.tcl    /main/hindenburg/9
  2781.  
  2782.  
  2783. Class VBGQualAssocAttr : {VBGGenAssocAttr} {
  2784.     constructor
  2785.     method destructor
  2786.     method setGenerator
  2787.     method generate
  2788. }
  2789.  
  2790. constructor VBGQualAssocAttr {class this name} {
  2791.     set this [VBGGenAssocAttr::constructor $class $this $name]
  2792.     # Start constructor user section
  2793.     # End constructor user section
  2794.     return $this
  2795. }
  2796.  
  2797. method VBGQualAssocAttr::destructor {this} {
  2798.     # Start destructor user section
  2799.     # End destructor user section
  2800. }
  2801.  
  2802. method VBGQualAssocAttr::setGenerator {this} {
  2803.       if {[$this generator] == ""} {
  2804.           if {[$this getMultiplicity]=="one"} {
  2805.                $this generator [VBGOneQual new $this]
  2806.           } else {
  2807.                $this generator [VBGManyQual new $this]
  2808.           }
  2809.       }
  2810. }
  2811.  
  2812. method VBGQualAssocAttr::generate {this cl} {
  2813.         if {[[$this ooplType] isA OPBaseType]} {
  2814.                 m4_warning $W_ASSOCTYPEERR [$this getName] [[$this ooplType] getName]
  2815.                 return
  2816.         }
  2817.  
  2818.         if {![[[$this qualifier] ooplType] isA OPBaseType]} {
  2819.            m4_error $E_QUALTYPEWRONG [[$this qualifier] getName] [$this getName]
  2820.            return
  2821.         }
  2822.         if {[$this hasContainer]} {
  2823.            $this generateContainer $cl
  2824.         } else {
  2825.        $this setGenerator
  2826.            [$this generator] generate $cl
  2827.         }
  2828. }
  2829.  
  2830. # Do not delete this line -- regeneration end marker
  2831.  
  2832. Class VBGQualAssocAttrD : {VBGQualAssocAttr OPQualAssocAttr} {
  2833. }
  2834.  
  2835. selfPromoter OPQualAssocAttr {this} {
  2836.     VBGQualAssocAttrD promote $this
  2837. }
  2838.  
  2839. #      File:           @(#)vbgquallin.tcl    /main/hindenburg/10
  2840.  
  2841.  
  2842. Class VBGQualLinkAttr : {VBGGenAssocAttr} {
  2843.     constructor
  2844.     method destructor
  2845.     method setGenerator
  2846.     method generate
  2847. }
  2848.  
  2849. constructor VBGQualLinkAttr {class this name} {
  2850.     set this [VBGGenAssocAttr::constructor $class $this $name]
  2851.     # Start constructor user section
  2852.     # End constructor user section
  2853.     return $this
  2854. }
  2855.  
  2856. method VBGQualLinkAttr::destructor {this} {
  2857.     # Start destructor user section
  2858.     # End destructor user section
  2859. }
  2860.  
  2861. method VBGQualLinkAttr::setGenerator {this} {
  2862.       if {[$this generator] == ""} {
  2863.           if {[$this getMultiplicity]=="one"} {
  2864.                $this generator [VBGOneQual new $this]
  2865.           } else {
  2866.                $this generator [VBGManyQual new $this]
  2867.           }
  2868.       }
  2869. }
  2870.  
  2871. method VBGQualLinkAttr::generate {this cl} {
  2872.         if {[[$this ooplType] isA OPBaseType]} {
  2873.                 m4_warning $W_ASSOCTYPEERR [$this getName] [[$this ooplType] getName]
  2874.                 return
  2875.         }
  2876.  
  2877.         if {![[[$this qualifier] ooplType] isA OPBaseType]} {
  2878.            m4_error $E_QUALTYPEWRONG [[$this qualifier] getName] [$this getName]
  2879.            return
  2880.         }
  2881.         if {[$this hasContainer]} {
  2882.            $this generateContainer $cl
  2883.         } else {
  2884.        $this setGenerator
  2885.            [$this generator] generate $cl
  2886.         }
  2887. }
  2888.  
  2889. # Do not delete this line -- regeneration end marker
  2890.  
  2891. Class VBGQualLinkAttrD : {VBGQualLinkAttr OPQualLinkAttr} {
  2892. }
  2893.  
  2894. selfPromoter OPQualLinkAttr {this} {
  2895.     VBGQualLinkAttrD promote $this
  2896. }
  2897.  
  2898. #      File:           @(#)vbgreverse.tcl    /main/hindenburg/7
  2899.  
  2900.  
  2901. Class VBGReverseLinkAttr : {VBGGenAssocAttr} {
  2902.     constructor
  2903.     method destructor
  2904.     method setGenerator
  2905.     method generate
  2906. }
  2907.  
  2908. constructor VBGReverseLinkAttr {class this name} {
  2909.     set this [VBGGenAssocAttr::constructor $class $this $name]
  2910.     # Start constructor user section
  2911.     # End constructor user section
  2912.     return $this
  2913. }
  2914.  
  2915. method VBGReverseLinkAttr::destructor {this} {
  2916.     # Start destructor user section
  2917.     # End destructor user section
  2918. }
  2919.  
  2920. method VBGReverseLinkAttr::setGenerator {this} {
  2921.       if {[$this generator] == ""} {
  2922.           if {[$this getMultiplicity]=="one"} {
  2923.                $this generator [VBGAssocOne new $this]
  2924.           } else {
  2925.                $this generator [VBGAssocOne new $this]
  2926.           }
  2927.       }
  2928. }
  2929.  
  2930. method VBGReverseLinkAttr::generate {this cl} {
  2931.         if {[[$this ooplType] isA OPBaseType]} {
  2932.                 m4_warning $W_ASSOCTYPEERR [$this getName] [[$this ooplType] getName]
  2933.                 return
  2934.         }
  2935.  
  2936.         if {[$this hasContainer]} {
  2937.            $this generateContainer $cl
  2938.         } else {
  2939.        $this setGenerator
  2940.            [$this generator] generate $cl
  2941.         }
  2942.  
  2943. }
  2944.  
  2945. # Do not delete this line -- regeneration end marker
  2946.  
  2947. Class VBGReverseLinkAttrD : {VBGReverseLinkAttr OPReverseLinkAttr} {
  2948. }
  2949.  
  2950. selfPromoter OPReverseLinkAttr {this} {
  2951.     VBGReverseLinkAttrD promote $this
  2952. }
  2953.