Mercurial > forge
diff extra/tk_octave/tk_entry.m @ 0:6b33357c7561 octave-forge
Initial revision
author | pkienzle |
---|---|
date | Wed, 10 Oct 2001 19:54:49 +0000 |
parents | |
children | cc9b4c05d84d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/tk_octave/tk_entry.m Wed Oct 10 19:54:49 2001 +0000 @@ -0,0 +1,104 @@ +## Copyright (C) 1998, 1999, 2000 Joao Cardoso. +## +## This program is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by the +## Free Software Foundation; either version 2 of the License, or (at your +## option) any later version. +## +## This program is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## This file is part of tk_octave. + +## usage: [r1, r2, ...] = tk_entry (title, name, value, name, value, ...) +## +## Dialog to input several variables at once. + +## 2001-09-14 Paul Kienzle <pkienzle@users.sf.net> +## * convert for pthreads-based tk_octave + +function [...] = tk_entry (t, ...) + +tk_init + +if (nargin < 2) + usage ("tk_entry (title, legend_1, value_1 | variable_1, ...)"); +endif + +tk_cmd( sprintf( "proc isnum {x} {regexp {^[0-9.eE+-]*$} $x}") ); + +tk_cmd( sprintf( "proc varcheck {name element op} {\n\ +upvar $name x ${name}_ x_\n\ +if {([isnum $x] && ![isnum $x_]) || (![isnum $x] && [isnum $x_])} {\n\ + set erro [format \"Value entered, `%%s' has not same type as previous one, `%%s'\" $x $x_]\n\ + set x $x_\n tkerror $erro \n}\n}\n") ); + +tk_cmd( sprintf("wm deiconify .;frame .master") ); + +if (! isempty (t)) + tk_cmd( sprintf("wm title . \"%s\"", t) ); + tk_cmd( sprintf("label .master.ltitle -pady 5 -relief groove -borderwidth 2 -text \"%s\";\ + pack .master.ltitle -fill x -side top", t) ); +endif + + nopt = (nargin - 1)/2; + cmd_ok = cmd_res = ""; + va_start(); + +for i=1:nopt + desc = va_arg(); + val = va_arg(); + + tk_cmd( sprintf( "unset val_%d val_%d_\n", i, i) ); # unset previous invocation values + + if (isstr(val)) # string + tk_cmd( sprintf( "set val_%d \"%s\"", i, val) ); # work value + tk_cmd( sprintf( "set val_%d_ \"%s\"", i, val) ); # original value + cmd_ok = strcat( cmd_ok, sprintf("val_%d = \\\"$val_%d\\\";", i, i)); + elseif (floor(val) == val) # integer + tk_cmd( sprintf( "set val_%d %d", i, val)); + tk_cmd( sprintf( "set val_%d_ %d", i, val)); + cmd_ok = strcat( cmd_ok, sprintf("val_%d = $val_%d;", i, i)); + else # float + tk_cmd( sprintf( "set val_%d %f", i, val)); + tk_cmd( sprintf( "set val_%d_ %f", i, val)); + cmd_ok = strcat( cmd_ok, sprintf("val_%d = $val_%d;", i, i)); + endif + + tk_cmd( sprintf( "trace variable val_%d w varcheck", i)); + + tk_cmd( sprintf( "frame .master.f%d", i)); + tk_cmd( sprintf( "entry .master.f%d.e%d -textvariable val_%d", i, i, i)); + tk_cmd( sprintf( "pack .master.f%d -fill x", i)); + if (desc != "") + tk_cmd( sprintf( "label .master.f%d.l%d -font 8x13bold -text \"%s\"", i, i, desc)); + tk_cmd( sprintf( "pack .master.f%d.l%d -side left", i, i)); + endif + tk_cmd( sprintf( "pack .master.f%d.e%d -side right", i, i)); + tk_cmd( sprintf( "bind .master.f%d.e%d <Return> {set val_%d $val_%d}", i, i, i, i)); + tk_cmd( sprintf( "bind .master.f%d.e%d <Tab> {set val_%d $val_%d}", i, i, i, i)); + cmd_res = strcat( cmd_res, sprintf("set val_%d $val_%d_;", i, i)); +endfor + +tk_cmd( sprintf( "frame .master.f%d -relief groove -borderwidth 2", nargin) ); + +tk_cmd( sprintf( "button .master.f%d.b1 -text OK -command { destroy .master}", nargin) ); +tk_cmd( sprintf( "bind .master.f%d.b1 <Return> {destroy .master }", nargin) ); +tk_cmd( sprintf( "button .master.f%d.b2 -text Restore -command {%s}", nargin, cmd_res) ); +tk_cmd( sprintf( "bind .master.f%d.b2 <Return> {%s}", nargin, cmd_res) ); +tk_cmd( sprintf( "pack .master.f%d -side bottom -fill x", nargin) ); +tk_cmd( sprintf( "pack .master.f%d.b1 .master.f%d.b2 -side left", nargin, nargin) ); + +tk_cmd( sprintf("pack .master -fill both -expand 1") ); + +tk_cmd( "tkwait window .master" ); +eval(tk_cmd(sprintf("set result \"%s\" ", cmd_ok ))); + +for i=1:nopt + vr_val(eval(sprintf("val_%d;",i))); + tk_cmd( sprintf( "trace vdelete val_%d w varcheck", i) ); +endfor + +endfunction