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

  1.  
  2. class guiList {
  3.     inherit guiObject
  4.     variable guiBuilder 
  5.     variable childrenCount
  6.     variable listBox
  7.     array set buttons {add 0 delete 2 edit 1 up {} down {}}
  8.     constructor {frame xuiObject gBuilder} {
  9.     set subject $xuiObject
  10.     set guiBuilder $gBuilder
  11.     set label [$subject getLabel]
  12.     set orient vertical
  13.     set contframe [ frame $frame.f]
  14.     set scwin [ScrolledWindow $contframe.scwin]
  15.     set listBox [ ListBox [$scwin getframe].listbox  -multicolumn 0 \
  16.     -background white -height 8 -selectbackground DarkBlue \
  17.     -selectforeground white]
  18.     $listBox bindText <Button-1> [code $this selectItem ]
  19.     $listBox bindImage <Button-1> [code $this selectItem ]
  20.     $listBox bindText <Double-Button-1> [code $this editSelected ]
  21.     $listBox bindImage <Double-Button-1> [code $this editSelected ]
  22.     $scwin setwidget $listBox
  23.     pack [label $contframe.label -text $label ] -fill x 
  24.     set bbox [ ButtonBox $contframe.bbox -orient $orient]
  25.     switch $orient {
  26.         vertical {
  27.         pack $bbox -side right
  28.         }
  29.         horizontal {
  30.         pack $bbox -side bottom
  31.         }
  32.         
  33.     }
  34.     $bbox add -text Add -command [code $this addNewItem]
  35.     $bbox add -text Edit -command [code $this editSelected]
  36.     $bbox add -text Delete -command [code $this deleteSelected]
  37.     pack $scwin -fill both    -expand true
  38.     pack $contframe -fill both -expand true
  39.     foreach element [$subject getChildren] {
  40.         addItem $element
  41.     }
  42.     }
  43.     method sync {}
  44.     method getText {}
  45.     method selectItem { item }
  46.     method addNewItem {{position end}}
  47.     method addItem { xuiObject {position end}}
  48.     method editSelected {args}
  49.     method deleteSelected {}
  50.     method moveItemUp { position }
  51.     method moveItemDown { position }
  52. }
  53.  
  54.  
  55. body guiList::deleteSelected { } {
  56.     foreach lbitem [$listBox selection get] {
  57.     $subject deleteChild [$listBox itemcget $lbitem -data]
  58.     $listBox delete $lbitem
  59.     }
  60. }
  61.  
  62. body guiList::selectItem { item } {        
  63.     $listBox selection set $item
  64. }
  65.  
  66. body guiList::addItem { xuiObject {position end}} {
  67.     if {[string length [set text [$xuiObject getText]]] > 40} {
  68.         set text [string range $text 0 40](...)
  69.     }
  70.     $listBox insert end  [unique::newId] \
  71.         -text $text \
  72.         -data $xuiObject -image listicon
  73. }                
  74.  
  75. body guiList::addNewItem {{position end}} {
  76.     set grab [grab current]
  77.     set xui [$subject newChild]
  78.     #set w .[string trimleft $this ::]
  79.     set w .[unique::newId]
  80.     set dialog [Dialog $w  \
  81.         -title "Add new Element" -separator 1 \
  82.         -default 0 -cancel 1 -modal local]
  83.     wm protocol $w WM_DELETE_WINDOW { ; }          
  84.     $dialog add -text Ok
  85.     $dialog add -text Cancel
  86.     $dialog configure -cancel 1
  87.     set frame [$dialog getframe]
  88.     set gui [$guiBuilder render $frame $xui]
  89.     switch [$dialog draw] {
  90.     1 {
  91.         delete object $gui
  92.         delete object $xui
  93.         destroy $dialog
  94.     } 0 {
  95.         delete object $gui
  96.         destroy $dialog
  97.         $subject insertChild $xui
  98.         addItem $xui
  99.     } default {
  100.         error {should never occur}
  101.     }
  102.     }
  103.     catch {grab set $grab}
  104. }
  105.  
  106. body guiList::editSelected { args } {
  107.     set grab [grab current]
  108.     set item [lindex [$listBox selection get] 0]
  109.     if ![llength $item] return {}
  110.     set oldxui [$listBox itemcget $item -data]
  111.     set xui [ $oldxui clone]
  112.     set dialog [Dialog .[unique::newId] \
  113.         -title "Edit Element" -separator 1 -default 0 -cancel 1]
  114.     $dialog add -text Ok
  115.     $dialog add -text Cancel
  116.     $dialog configure -cancel 1
  117.     set frame [$dialog getframe]
  118.     set gui [$guiBuilder render $frame $xui]
  119.     switch [$dialog draw] {
  120.     1 {
  121.         delete object $gui
  122.         delete object $xui
  123.         destroy $dialog
  124.     } 0 {
  125.         delete object $gui
  126.         destroy $dialog
  127.         $subject replaceChild $oldxui $xui
  128.         if {[string length [set text [$xui getText]]] > 40} {
  129.                  set text [string range $text 0 40](...)
  130.             }
  131.         $listBox itemconfigure $item -text $text -data $xui
  132.     } default {
  133.         error {should never occur}
  134.     }
  135.     }
  136.     grab set $grab
  137. }
  138.  
  139. body guiList::getText {} {
  140. }
  141.  
  142. body guiList::moveItemUp { position } {
  143. }
  144.  
  145. body guiList::moveItemDown { position } {
  146. }
  147.  
  148.  
  149.