home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / m4optdlgel.tcl < prev    next >
Text File  |  1997-07-30  |  6KB  |  236 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)m4optdlgel.tcl    /main/titanic/6
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)m4optdlgel.tcl    /main/titanic/6   30 Jul 1997 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require m4optionbr.tcl
  13. # End user added include file section
  14.  
  15.  
  16. Class M4OptDlgElem : {DlgColumn} {
  17.     constructor
  18.     method destructor
  19.     method options
  20.     method selOption
  21.     method setOption
  22.     method delOption
  23.     attribute list
  24.     attribute text
  25.     attribute optionBrowser
  26. }
  27.  
  28. constructor M4OptDlgElem {class this name} {
  29.     set this [DlgColumn::constructor $class $this $name]
  30.     # Start constructor user section
  31.  
  32.     $this verStretchFactor 100
  33.  
  34.         interface DlgColumn $this.gui {
  35.         verStretchFactor 100
  36.             TextList list {
  37.                 rowCount 4
  38.                 selectionPolicy BROWSE
  39.         verStretchFactor 100
  40.                 entrySet { }
  41.             }
  42.             DlgRow r {
  43.         horStretchFactor 100
  44.         verStretchFactor 0
  45.         spaceType NONE
  46.                 DlgColumn t {
  47.             spaceType EVEN
  48.             horStretchFactor 100
  49.             verStretchFactor 0
  50.             SingleLineText text {
  51.             horStretchFactor 100
  52.             verStretchFactor 0
  53.             columnCount 20
  54.             text "M4_"
  55.             cursorIndex 3
  56.             }
  57.                 }
  58.         PushButton sel {
  59.             horStretchFactor 0
  60.             label "Select"
  61.         }
  62.         PushButton set {
  63.             horStretchFactor 0
  64.             label "Set"
  65.             sensitive 0
  66.         }
  67.         PushButton del {
  68.             horStretchFactor 0
  69.             label "Delete"
  70.             sensitive 0
  71.                 }
  72.             }
  73.     }
  74.  
  75.         $this list $this.gui.list
  76.         $this text $this.gui.r.t.text
  77.         set sel $this.gui.r.sel
  78.         set set $this.gui.r.set
  79.         set del $this.gui.r.del
  80.  
  81.         [$this list] selectionChanged "
  82.             set selected \[lindex \[%this selectedSet] 0]
  83.             [$this text] text \$selected
  84.         if \[lempty \$selected] {
  85.         $set sensitive 0
  86.         $del sensitive 0
  87.             } else {
  88.         eval \[[$this text] textModified]
  89.         $del sensitive 1
  90.             }"
  91.  
  92.         [$this text] textModified "
  93.             set t \[%this text]
  94.             set n \[string length \$t]
  95.             if {\$n >= 4 && \[string range \$t 0 2] == \"M4_\"} {
  96.         $set sensitive 1
  97.             } else {
  98.         $set sensitive 0
  99.             }"
  100.  
  101.         $sel activated "$this selOption"
  102.         $set activated "$this setOption"
  103.         $del activated "$this delOption"
  104.  
  105.     # End constructor user section
  106.     return $this
  107. }
  108.  
  109. method M4OptDlgElem::destructor {this} {
  110.     # Start destructor user section
  111.     # End destructor user section
  112. }
  113.  
  114. method M4OptDlgElem::options {this {list {}}} {
  115.     if [lempty $list] {
  116.         set entrySet {}
  117.         foreach entry [[$this list] entrySet] {
  118.             lappend entrySet [M4OptDlgElem::normalize $entry 0]
  119.         }
  120.         return $entrySet
  121.     } else {
  122.         set entrySet {}
  123.         foreach entry $list {
  124.             lappend entrySet [M4OptDlgElem::normalize $entry]
  125.         }
  126.         [$this list] entrySet $entrySet
  127.     }
  128. }
  129.  
  130. proc M4OptDlgElem::normalize {option {quote 1}} {
  131.     # Remove all spaces before the '=',
  132.     #
  133.     set list [split $option =]
  134.     regsub -all {[ "]} [lindex $list 0] {} name
  135.     set value [join [lrange $list 1 end] =]
  136.  
  137.     # Remove all leading and trailing spaces.
  138.     #
  139.     set value [string trim $value]
  140.  
  141.     # Remove any double quotes since we'll quote the entire option
  142.     # ourselves later if it contains spaces.
  143.     #
  144.     regsub -all {"} $value {} value
  145.  
  146.     if {$quote && [string first " " $value] != -1} {
  147.         set value "\"$value\""
  148.     }
  149.  
  150.     return [join [list $name $value] =]
  151. }
  152.  
  153. method M4OptDlgElem::selOption {this} {
  154.     if {[$this optionBrowser] == ""} {
  155.         $this optionBrowser [M4OptionBrowser new .main.optbrowser \
  156.             [Repository::serverOptions] \
  157.             -okPressed "set value \[%this selectedOption]=; \
  158.                         [$this text] text \$value; \
  159.             [$this text] cursorIndex \[string length \$value]; \
  160.                         eval \[[$this text] textModified]"]
  161.     }     
  162.     [$this optionBrowser] selectedSet NONE
  163.     [$this optionBrowser] popUp
  164. }
  165.  
  166. method M4OptDlgElem::setOption {this} {
  167.     set option [M4OptDlgElem::normalize [[$this text] text]]
  168.  
  169.     if ![regexp "^M4_\[^=]*" $option optionName] {
  170.         wmtkerror "Invalid format for option '$option'."
  171.         return
  172.     }
  173.  
  174.     set index 0
  175.     set selIndex -1
  176.     set newEntries {}
  177.     set overwritten 0
  178.     foreach entry [[$this list] entrySet] {
  179.         if ![regexp "${optionName}=.*" $entry] {
  180.             lappend newEntries $entry
  181.         } else {
  182.         lappend newEntries $option
  183.             set overwritten 1
  184.             set selIndex $index
  185.         }
  186.         incr index
  187.     }
  188.     if !$overwritten {
  189.     lappend newEntries $option
  190.         set selIndex $index
  191.     }
  192.  
  193.     [$this list] entrySet $newEntries
  194.  
  195.     [$this list] selectedIndexSet $selIndex
  196.     [$this list] makeIndexVisible $selIndex
  197.     $this.gui.r.del sensitive 1
  198. }
  199.  
  200. method M4OptDlgElem::delOption {this} {
  201.     set index [[$this list] selectedIndexSet]
  202.     set entries [[$this list] entrySet]
  203.     set count [llength $entries]
  204.     if {$index == 0} {
  205.         [$this list] entrySet [lrange $entries 1 end]
  206.     } else {
  207.         set i $index
  208.         incr i -1
  209.         set head [lrange $entries 0 $i]
  210.         incr i 2
  211.         set tail [lrange $entries $i end]
  212.         [$this list] entrySet [concat $head $tail]
  213.  
  214.     if {$index == $count - 1} {
  215.         incr index -1
  216.         }
  217.     }
  218.     set newEntry [lindex [[$this list] entrySet] $index]
  219.     [$this list] selectedIndexSet $index
  220.     [$this text] text $newEntry
  221.     [$this text] cursorIndex [string length $newEntry]
  222.  
  223.     if [lempty [[$this list] selectedIndexSet]] {
  224.     $this.gui.r.set sensitive 0
  225.     $this.gui.r.del sensitive 0
  226.  
  227.     [$this text] text "M4_"
  228.     [$this text] cursorIndex 3
  229.     } else {
  230.     $this.gui.r.del sensitive 1
  231.     }
  232. }
  233.  
  234. # Do not delete this line -- regeneration end marker
  235.  
  236.