source: tags/20110125/instant/types/string.tcl @ 2742

Last change on this file since 2742 was 1728, checked in by mmc, 14 years ago

Initial version of the "instant rappture" gui builder. To run this,
just say "irappture" or "irappture -tool path/to/tool.xml". It will
bring up an editor that lets you specify inputs/outputs and preview
the tool.

Made two fixes along the way to the scroller, so that it handles
automatic scrollbars better, and to the grab stack, so that it avoids
pushing the same window on the grab stack twice. Both of these fixes
solved problems in iRappture, and they'll probably fix strange behaviors
in the main rappture as well.

File size: 3.1 KB
Line 
1# ----------------------------------------------------------------------
2#  EDITOR: string attribute values
3#
4#  Used within the Instant Rappture builder to edit string values.
5#  Strings can have the following additional options:
6#
7#    -lines N ......... height of editor (default is 1 line)
8#    -validate type ... validation routine applied to string values
9#
10# ======================================================================
11#  AUTHOR:  Michael McLennan, Purdue University
12#  Copyright (c) 2004-2010  Purdue Research Foundation
13#
14#  See the file "license.terms" for information on usage and
15#  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
16# ======================================================================
17itcl::class AttrString {
18    constructor {win args} {
19        Rappture::getopts args params {
20            value -lines 1
21            value -validate ""
22        }
23
24        if {$params(-lines) > 1} {
25            Rappture::Scroller $win.scrl -xscrollmode none -yscrollmode auto
26            pack $win.scrl -expand yes -fill both
27            text $win.scrl.text -width 10 -height $params(-lines) -wrap word
28            $win.scrl contents $win.scrl.text
29        } else {
30            entry $win.str
31            pack $win.str -fill x
32        }
33        set _win $win
34        set _validate $params(-validate)
35    }
36
37    public method load {val} {
38        if {[winfo exists $_win.str]} {
39            $_win.str delete 0 end
40            $_win.str insert end $val
41        } else {
42            $_win.scrl.text delete 1.0 end
43            $_win.scrl.text insert end $val
44        }
45    }
46
47    public method check {} {
48        if {[string length $_validate] > 0} {
49            if {[winfo exists $_win.str]} {
50                set str [$_win.str get]
51            } else {
52                set str [$_win.scrl.text get 1.0 end-1char]
53            }
54            if {[catch {uplevel #0 $_validate [list $str]} result]} {
55                return [list error "Bad value: $result"]
56            }
57        }
58    }
59
60    public method save {var} {
61        upvar $var value
62
63        set err [lindex [check] 1]
64        if {[string length $err] > 0} {
65            Rappture::Tooltip::cue $_win $err
66            return 0
67        }
68
69        if {[winfo exists $_win.str]} {
70            set value [$_win.str get]
71        } else {
72            set value [$_win.scrl.text get 1.0 end-1char]
73        }
74        return 1
75    }
76
77    public method edit {} {
78        if {[winfo exists $_win.str]} {
79            focus $_win.str
80            $_win.str selection from 0
81            $_win.str selection to end
82        } else {
83            focus $_win.scrl.text
84            $_win.scrl.text tag add sel 1.0 end
85        }
86    }
87
88    public proc import {xmlobj path} {
89        # trivial import -- just return info as-is from XML
90        return [$xmlobj get $path]
91    }
92
93    public proc export {xmlobj path value} {
94        # trivial export -- just save info as-is into XML
95        if {[string length $value] > 0} {
96            $xmlobj put $path $value
97        }
98    }
99
100    private variable _win ""       ;# containing frame
101    private variable _validate ""  ;# validation command for checking values
102}
Note: See TracBrowser for help on using the repository browser.