home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / xuibuilder / xuiBuilder.tcl < prev    next >
Text File  |  2000-11-02  |  3KB  |  107 lines

  1. # xuiBuilder.tcl --
  2.  
  3.  
  4. # xuiBuilder --
  5. #    This class provides a factory object. It creates xuiObjects from XML
  6. # descriptions. The XML description is passed as a TclDOM token.
  7. # How the tags are handled is specified by adding Creators to the xuiBUilder
  8. # and specifying the tags the creator is responsible for.
  9. # To add support for creating xuiLabel objects, the creator xuiLabel is added.
  10.  
  11. class xuiBuilder {
  12.  
  13.     variable objectCreators 
  14.     public variable currentParentName {}
  15.  
  16. constructor {args} {
  17.     eval array set objectCreators $args
  18. }
  19.     method renderDocument { token }
  20.     method loadValueFromNode { token objectClass }
  21.     method handleObject { token }
  22.     method addCreator { tag object }
  23. }
  24.  
  25. body xuiBuilder::addCreator { tag object } {
  26.       set objectCreators($tag) $object
  27. }
  28.  
  29. body xuiBuilder::loadValueFromNode { token object } {
  30.     set objectClass [$object getXuiClass]
  31.     $objectCreators($objectClass) loadValueFromNode $token $object $this
  32. }
  33.  
  34. body xuiBuilder::renderDocument { token } {
  35.     set currentParentName {}
  36.     set token [dom::document cget $token -documentElement]
  37.     foreach element [dom::getElements $token] {
  38.     return [handleObject $element]
  39.     }
  40. }
  41.  
  42. body xuiBuilder::handleObject { token } {
  43.     $objectCreators([dom::getTagName $token]) create $token $this
  44. }
  45.  
  46. class objectCreator { 
  47.     method create {token xuiBuilder}
  48.     method createObject {token xuiBuilder}
  49.     method processSyntax {token obj xuiBuilder}
  50.     method configName {token object xuiBuilder}
  51.     method setXuiClass {token object xuiBuilder}
  52.     method setClasses { token object xuiBuilder} 
  53.     method configLabel {token object xuiBuilder}
  54.     method loadValue {token object xuiBuilder}    
  55.     method loadDefault {token object xuiBuilder}
  56.     method extraStuff {token object xuiBuilder}
  57. }
  58.  
  59. body objectCreator::create {token xuiBuilder} {
  60.     set object [$this createObject $token $xuiBuilder]
  61.     $this setXuiClass $token $object $xuiBuilder
  62.     $this setClasses $token $object $xuiBuilder
  63.     $this configName $token $object $xuiBuilder
  64.     $this configLabel $token $object $xuiBuilder
  65.     $this processSyntax $token $object $xuiBuilder
  66.     $this loadValue $token $object $xuiBuilder
  67.     $this loadDefault $token $object $xuiBuilder
  68.     $this extraStuff $token $object $xuiBuilder
  69.     return $object
  70. }
  71.  
  72. body objectCreator::configName {token object xuiBuilder} {
  73.     $object setName [dom::getAttribute $token name]
  74. }
  75.  
  76. body objectCreator::configLabel {token object xuiBuilder} {
  77.     $object setLabel [mesg::get [dom::getAttribute $token label]]
  78. }
  79.  
  80.  
  81. body objectCreator::loadValue {token object xuiBuilder} {
  82.     if ![ catch "set valueToken [dom::rp $token value]" ] {
  83.       $this loadValueFromNode $valueToken $object $xuiBuilder
  84.     }
  85. }
  86.  
  87. body objectCreator::loadDefault {token object xuiBuilder} {
  88.     if ![catch "set defaultToken [dom::rp $token default]"] {
  89.     $this loadDefaultFromNode $defaultToken $object $xuiBuilder
  90.     }
  91. }
  92.     
  93. body objectCreator::processSyntax { token object xuiBuilder} {
  94. }
  95.  
  96. body objectCreator::setXuiClass { token object xuiBuilder} {
  97.         $object setXuiClass [dom::getTagName $token]
  98. }
  99.  
  100. body objectCreator::setClasses { token object xuiBuilder} {
  101.         $object setClasses [dom::getAttribute $token classes]
  102. }
  103.  
  104. body objectCreator::extraStuff { token object xuiBuilder} {
  105. }
  106.  
  107.