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

  1.  
  2. class xuiStructure {
  3.     inherit xuiObject
  4.  
  5.     variable children {}
  6.     variable nameMap
  7.     variable align horizontal
  8.  
  9.     variable style none
  10.  
  11.     constructor {} {
  12.         array set nameMap {}
  13.     setXuiClass structure
  14.  
  15.     }
  16.     destructor {
  17.         eval delete object $children
  18.     }
  19.     method getComponentByName { name }
  20.     method addComponent { xuiObject }
  21.     method getText {}
  22.     method getComponents {}
  23.     method clear {}
  24.     method forgetComponents {}
  25.     method insertComponent {xuiObject name}
  26.     method clone 
  27.     method copyClone { clone }
  28.     method setAlign { newAlign } {  set align $newAlign }
  29.     method getAlign {} { return $align }
  30.     method setStyle { newStyle } {  set style $newStyle }
  31.     method getStyle {} { return $style }
  32.     method reset {}
  33. }
  34.  
  35. body xuiStructure::reset {} {
  36.     foreach child $children {
  37.         $child reset
  38.     }
  39. }
  40.  
  41. body xuiStructure::clone {{parentName {::#auto}}} {
  42.    #puts "********************Cloning $this with parentname $parentName"
  43.    set clone [xuiStructure $parentName.$name]
  44.    copyClone $clone
  45.    $clone setXuiClass $xuiClass  
  46.    return $clone
  47. }
  48.  
  49. body xuiStructure::copyClone { clone } {
  50.    #puts "going to copy clone $this to $clone which has children [$clone getComponents]"
  51.    xuiObject::copyClone $clone
  52.    $clone clear
  53.    foreach component $children {
  54.       $clone addComponent [$component clone $clone]
  55.    }
  56.    $clone setAlign $align
  57.    $clone setStyle $style
  58.  
  59.  
  60. }
  61.  
  62.  
  63. body xuiStructure::forgetComponents {} {
  64.    set children {}
  65.    catch {unset nameMap}
  66.    variable nameMap
  67. }
  68.  
  69. body xuiStructure::clear {} {
  70.    #puts "clearing $this"
  71.    #puts "--[$this getComponents]"
  72.    #puts "children $children"
  73.    foreach child $children {
  74.       #puts "Deleting $child"
  75.       delete object $child
  76.    }
  77.    set children {}
  78.    catch {unset nameMap}
  79.    variable nameMap
  80. }
  81.  
  82. body xuiStructure::getComponentByName { name } {
  83.     if [info exists nameMap($name)] {
  84.     return $nameMap($name)
  85.     } else {
  86.     return {}
  87.     }
  88. }
  89.  
  90. body xuiStructure::addComponent { xuiObject } {
  91.     #puts "adding $xuiObject"
  92.     lappend children $xuiObject
  93.     #puts "$children"
  94.     array set nameMap [list [$xuiObject getName] $xuiObject]
  95. }
  96.  
  97. body xuiStructure::getText {} {
  98.     set result {}
  99.     foreach object $children {
  100.     append result "[$object getText] "
  101.     }
  102.     
  103.     return [string trimleft $result ]
  104. }
  105.  
  106. body xuiStructure::getComponents {} {
  107.     return $children
  108. }
  109.  
  110. body xuiStructure::insertComponent { xuiObject name} {    
  111.      set children [linsert $children \
  112.          [lsearch -exact $nameMap($name)] $xuiObject]   
  113.      array set nameMap [list [$xuiObject getName] $xuiObject] 
  114. }
  115.  
  116.      
  117.  
  118.