3 # Tell newlisp embedding to exit on window close
5 bind . <Destroy> {puts {newLISP: (exit)}}
8 set f [open hourglass.conf]
12 foreach line [split $data \n] {
13 if [regexp {(\S[^ =]*)\s*=\s*(.*)} $line all key value] {
14 set site($key) [string trim $value]
22 set f [open hourglass.conf w]
25 foreach key [lsort [array names site]] {
27 set v [string trimright $site($key)]
28 puts "$key = >>>$v<<<"
35 proc tooltipOn {w name} {
36 if {![winfo exist .balloon]} {
38 wm overrideredirect .balloon 1
39 label .balloon.l -foreground blue -background lightyellow \
40 -highlightthick 0 -relief solid -borderwidth 1 \
41 -font {sanserif} -textvariable balloon_text \
42 -justify left -wrap 480 -padx 10
46 set ::balloon_text $desc($name)
47 set x [expr {[winfo rootx $w]+10}]
48 set y [expr {[winfo rooty $w]+[winfo height $w]+5}]
49 set g [format +%d+%d $x $y]
50 # This is probably overdoing it, but better too much than too little
51 wm geometry .balloon $g
53 wm geometry .balloon $g
55 after idle "[list wm geometry .balloon $g]; raise .balloon"
59 if {[winfo exist .balloon]} {
65 set i [string first value $w]
66 set k [string replace $w $i [expr $i + 4] name]
67 set key [$k cget -text]
68 set value [$w get 1.0 end]
76 proc setting {name defval} {
80 if {[array names site $name] != ""} {
81 set defval "$site($name)"
83 set site($name) $defval
85 set wname .fr.settings.name$count ;
86 set wvalue .fr.settings.value$count ;
87 set weq .fr.settings.eq$count ;
88 label $wname -text "$name" -font sanserif;
90 text $wvalue -height 1 -wrap none -padx 4 -font sanserif -width 30;
91 $wvalue insert end "$defval";
92 bind $wvalue <Leave> [list leaving $wvalue]
93 grid $wname -row $count -column 0;
94 grid $weq -row $count -column 1;
95 grid $wvalue -row $count -column 2;
96 #pack .fr.settings ; #grid $me -row $count -column 0 -sticky w;
97 bind $wname <Enter> [list tooltipOn $wname $name]
98 bind $wname <Leave> {tooltipOff}
101 wm title . {Hourglass sitetool}
105 grid columnconfigure .fr.settings 0 -weight 1 -uniform A;
107 setting {listener.net} {192.168.255}
108 setting {listener.ports} {80 443 1080}
109 setting {listener.activity.dir} {activity}
110 setting {listener.tap} {hourglass}
112 setting {control.action} {ipset-control.lsp}
113 setting {control.dat} {control.dat}
114 setting {control.net} {10.0.0.0/24}
115 setting {control.extra.dat} {control-extra.dat}
116 setting {control.usage.dat} {usage.dat}
117 setting {control.usage.tmp} {.usage.dat}
118 setting {control.activity.gap} {10}
119 setting {control.activity.clip} {1000}
121 setting {ipset.bin} {/usr/sbin/ipset}
122 setting {ipset.table} {TIMO}
124 setting {wui.port} {1070}
125 setting {wui.passwd} {htpasswd}
131 button .fr.buttons.save -text save -command {savesite}
132 button .fr.buttons.exit -text "done" -command {exit}
134 grid .fr.buttons.save -column 0 -row 0
135 grid .fr.buttons.exit -column 1 -row 0
138 grid .fr -column 0 -row 0 -sticky w -padx {10 4} -pady {12 0}