Error processing request

Parameters

CONTENT_LENGTH0
REQUEST_METHODGET
REQUEST_URI/revision/A+TclOO+megawidget+based+on+tablelist+%2D+extended+%28XTableList%29?V=4
QUERY_STRINGV=4
CONTENT_TYPE
DOCUMENT_URI/revision/A+TclOO+megawidget+based+on+tablelist+-+extended+(XTableList)
DOCUMENT_ROOT/var/www/nikit/nikit/nginx/../docroot
SCGI1
SERVER_PROTOCOLHTTP/1.1
HTTPSon
REMOTE_ADDR172.69.7.89
REMOTE_PORT57196
SERVER_PORT4443
SERVER_NAMEwiki.tcl-lang.org
HTTP_HOSTwiki.tcl-lang.org
HTTP_CONNECTIONKeep-Alive
HTTP_ACCEPT_ENCODINGgzip, br
HTTP_X_FORWARDED_FOR3.141.200.180
HTTP_CF_RAY87ead5be0e2361cc-ORD
HTTP_X_FORWARDED_PROTOhttps
HTTP_CF_VISITOR{"scheme":"https"}
HTTP_ACCEPT*/*
HTTP_USER_AGENTMozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
HTTP_CF_CONNECTING_IP3.141.200.180
HTTP_CDN_LOOPcloudflare
HTTP_CF_IPCOUNTRYUS

Body


Error

Unknow state transition: LINE -> END

-code

1

-level

0

-errorstack

INNER {returnImm {Unknow state transition: LINE -> END} {}} CALL {my render_wikit {A TclOO megawidget based on tablelist - extended (XTableList)} <<TOC>>\n\n\[JOB\]\ 2016-07-08\ Playing\ with\ TclOO...\n\nThe\ following\ source\ implements\ a\ TclOO\ megawidget\ based\ on\ \[tablelist\]\ with\ some\ extended\ features\ to\ manipulate\ the\ tablelist\ content.\n\n\[WikiDBImage\ xtablelist_demo.png\]\n\n\n**Features**\n\nThe\ following\ additional\ commands\ are\ implemented:\n\n\ \ \ *\ Move\ selected\ items\ up\ or\ down,\n\ \ \ *\ reverse\ the\ list\ order,\n\ \ \ *\ delete\ selected\ items,\n\ \ \ *\ delete\ all,\ but\ just\ keep\ selected\ items\ (exceptional\ delete),\n\ \ \ *\ undo\ previous\ operations\ (restore\ content\ to\ it's\ original\ state),\n\ \ \ *\ save\ listbox\ to\ file,\n\ \ \ *\ restore\ content\ from\ file\n\n\n**Source\ Code**\n\n\nThe\ megawidget\ source\ is\ divided\ into\ various\ files\ to\ keep\ public\ and\ private\ interface\ separated.\n\n***pkgIndex.tcl***\n\n======\n#\ Tcl\ package\ index\ file\n\npackage\ ifneeded\ xtablelist\ 0.3\ \\\n\"\ \[list\ source\ \[file\ join\ \$dir\ xtablelist.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_public.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_private.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_readwrite.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_filesel.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_popupmenu.tcl\]\]\;\ \\\n\"\n======\n\n***xtablelist.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist.tcl\ ---\n#\ -----------------------------------------------------------------------------\n#\ (c)\ 2016,\ Johann\ Oberdorfer\ -\ Engineering\ Support\ |\ CAD\ |\ Software\n#\ \ \ \ \ johann.oberdorfer\ \[at\]\ gmail.com\n#\ \ \ \ \ www.johann-oberdorfer.eu\n#\ -----------------------------------------------------------------------------\n#\ This\ source\ file\ is\ distributed\ under\ the\ BSD\ license.\n#\ \ \ This\ program\ is\ distributed\ in\ the\ hope\ that\ it\ will\ be\ useful,\n#\ \ \ but\ WITHOUT\ ANY\ WARRANTY\;\ without\ even\ the\ implied\ warranty\ of\n#\ \ \ MERCHANTABILITY\ or\ FITNESS\ FOR\ A\ PARTICULAR\ PURPOSE.\n#\ \ \ See\ the\ BSD\ License\ for\ more\ details.\n#\ -----------------------------------------------------------------------------\n#\ Purpose:\n#\ \ \ A\ TclOO\ class\ template\ to\ extend\ tablelist\ functionality.\n#\ \ \ Might\ be\ usefull\ as\ a\ starting\ point.\n#\ -----------------------------------------------------------------------------\n#\ TclOO\ naming\ conventions:\n#\ \ \ public\ methods\ \ -\ starts\ with\ lower\ case\ declaration\ names,\ whereas\n#\ \ \ private\ methods\ -\ starts\ with\ uppercase\ naming,\ so\ we\ use\ CamelCase\ ...\n#\ -----------------------------------------------------------------------------\n#\ Credits:\n#\ \ \ tablelist\ widget:\ Copyright\ (c)\ 2000-2015\ \ Csaba\ Nemethi\n#\ \ \ tooltip:\ \ \ \ \ \ \ \ \ \ Copyright\ (c)\ 1996-2007\ Jeffrey\ Hobbs\n#\ \ \ autoscroll:\ \ \ \ \ \ \ Copyright\ (c)\ 2003\ Kevin\ B\ Kenny\n#\ \ \ icons\ used\ from:\ \ Open\ Icon\ Library\n#\ -----------------------------------------------------------------------------\n\n#\ -----------------------------------------------------------------------------\n#\ widget\ commands:\n#\ \ xtablelist::xtablelist\n#\ \ xtablelist::configure\n#\ \ xtablelist::cget\n#\n#\ \ xtablelist::...\ +\ all\ commands\ from\ original\ tablelist\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ more\ sub-command\ refer\ as\ well\ to\ the\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ public\ class\ interface\n#\n#\ -----------------------------------------------------------------------------\n#\ widget\ options\n#\n#\ \ -xhideoption\ \ boolean\ \"yes\",1\ /\ \"no\",0\ (default:\ \"yes\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ hide/show\ popup-menu\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ to\ manipulate\ tablelist\ column\ display\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default\ is\ \"yes\":\ show\ relev.\ menu\ items\n#\n#\ \ -xshowbuttons\ boolean\ (default:\ \"yes\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ show\ sidebar\ action\ buttons\ to\ manipulate\ tablelist\ content\n\n#\ \ -xsortoption\ \ boolean\ (default:\ \"yes\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ hide/show\ popup-menu\ to\ modify\ tablelist\ column\ sort\ order\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n#\ \ -xfileread\ \ \ \ boolean\ (default:\ \"no\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ allows\ reading\ in\ a\ previously\ stored\ file,\n#\n#\ \ -xfilesave\ \ \ \ boolean\ (default:\ \"no\")\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ allows\ to\ saving\ tablelist\ data\ to\ a\ file\n#\n#\ \ -xfilereadpostcmd\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ file\ read\ post\ command\ (default:\ \"\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ defined,\ allows\ to\ e.g.\ set\ widget\ state\ of\ depending\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ action\ buttons\ in\ the\ caller\ program\n#\n#\ \ -xdeletepostcmd\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ table\ entry\ delete\ post\ command\ (default:\ \"\")\ \n#\n#\ \ -xrefreshpostcmd\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ executed\ after\ a\ delete\ /\ refresh\ action\ takes\ place\n#\n#\ \ -xselectpostcmd\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ specify\ a\ command\ to\ be\ executed\ after\ selecting\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ an\ item\ in\ the\ tablelist\ (default:\ \"\")\n#\n#\ \ -xmoveovereffect\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ boolean\ (default:\ \"no\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ enable\ visual\ \"move\ over\"\ effect\n#\n#\ virtual\ events:\n#\n#\ \ \ <<TLExtDataModified>>\ \ \ \ \ -\ delete,\ modified\ or\ sort\ action\ took\ place\n#\ \ \ <<TLExtDataModifiedUndo>>\ -\ undo,\ nothing\ changed\ so\ far!\n#\ -----------------------------------------------------------------------------\n#\ Hint:\n#\ \ \ some\ of\ the\ options\ need\ to\ be\ specified\ when\ creating\ the\ widget\n#\ \ \ and\ are\ not\ fully\ configureable\ later\ on\ once\ the\ widget\ has\ been\n#\ \ \ created\ (open\ issue\ to\ be\ implemented\ later\ on...)\n#\ -----------------------------------------------------------------------------\n\n\n#\ for\ development:\ try\ to\ find\ autoscroll,\ etc\ ...\nset\ this_file\ \[file\ normalize\ \[file\ dirname\ \[info\ script\]\]\]\n\n#\ where\ to\ find\ required\ packages...\n#\ set\ auto_path\ \[linsert\ \$auto_path\ 0\ \[file\ join\ \$this_file\ \"..\"\ \"contrib\"\ \]\]\n\npackage\ require\ Tk\npackage\ require\ TclOO\npackage\ require\ tablelist_tile\npackage\ require\ tooltip\npackage\ require\ autoscroll\n\n\npackage\ provide\ xtablelist\ 0.3\n\n\n#\ workaround\ for\ aqua\nif\ \{\ \[tk\ windowingsystem\]\ eq\ \"aqua\"\ \}\ \{\n\ \ \ \ \ \ \ \ interp\ alias\ \{\}\ ttk::scrollbar\ \{\}\ ::scrollbar\n\}\n\n\nnamespace\ eval\ xtablelist\ \{\n\n\ \ \ \ \ \ \ \ #\ the\ widget's\ interface\ declaration\n\ \ \ \ \ \ \ \ namespace\ export\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ addValues\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ deleteAllItems\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ this_dir\ \ \ \[file\ dirname\ \[info\ script\]\]\n\ \ \ \ \ \ \ \ set\ image_dir\ \ \[file\ join\ \$this_dir\ \"images\"\]\n\ \ \ \ \ \ \ \ set\ image_file\ \[file\ join\ \$this_dir\ \"ImageLib.tcl\"\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ proc\ LoadImages\ \{image_dir\ \{patterns\ \{*.gif\}\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ p\ \$patterns\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ file\ \[glob\ -nocomplain\ -directory\ \$image_dir\ \$p\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ img\ \[file\ tail\ \[file\ rootname\ \$file\]\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ !\[info\ exists\ images(\$img)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ images(\$img)\ \[image\ create\ photo\ -file\ \$file\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[array\ get\ images\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ proc\ xtablelist\ \{path\ args\}\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ this\ is\ a\ tk-like\ wrapper\ around\ my...\ class\ so\ that\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ object\ creation\ works\ like\ other\ tk\ widgets\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ obj\ \[XTableList\ create\ tmp\ \$path\ \{*\}\$args\]\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ rename\ oldName\ newName\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ rename\ \$obj\ ::\$path\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$path\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\}\n\n#\ -----------------------------------------------------------------------------\n#\ Tk\ widget\ 'a\ like\ interface\ declaration\ \n#\ -----------------------------------------------------------------------------\n\noo::class\ create\ XTableList\ \{\n\ \ \ \ \ \ \ \ variable\ tblwidget\n\ \ \ \ \ \ \ \ variable\ widgetOptions\n\ \ \ \ \ \ \ \ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ constructor\ \{path\ args\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ read\ images\ from\ library\ file\ or\ alternatively\ one\ by\ one\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ image_file\ \$::xtablelist::image_file\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ image_dir\ \$::xtablelist::image_dir\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[file\ exists\ \$image_file\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ source\ \$image_file\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ widgetCompounds\ \[array\ get\ images\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ widgetCompounds\ \[::tablelistbrowser::LoadImages\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[file\ join\ \$image_dir\]\ \{\"*.gif\"\ \"*.png\"\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ widgetCompounds\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ undo_flag\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ sortby\ -1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ undoList\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ DELIM\ \"@\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default_dir\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ declaration\ of\ additional\ (configureable)\ widget\ options\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ widgetOptions\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xtabheader\ \ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xmoveovereffect\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xhideoption\ \ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xsortoption\ \ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xshowbuttons\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfileread\ \ \ \ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilesave\ \ \ \ \ \ \ \ \ \ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilereadpostcmd\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xdeletepostcmd\ \ \ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xrefreshpostcmd\ \ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xselectpostcmd\ \ \ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ --\ \$::tcl_platform(platform)\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"windows\"\ \ \ \ \ \ \ \ \{\ set\ widgetCompounds(default_dir)\ \$::env(TEMP)\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"unix\"\ -\ default\ \{\ set\ widgetCompounds(default_dir)\ \$::env(HOME)\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ we\ use\ a\ frame\ for\ this\ specific\ widget\ class\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$path\ -class\ xtablelist\]\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ we\ must\ rename\ the\ widget\ command\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ since\ it\ clashes\ with\ the\ object\ being\ created\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widget\ \$\{path\}_\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ Build\ \$f\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ rename\ \$path\ \$widget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ configure\ \{*\}\$args\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ destructor\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ add\ a\ destructor\ to\ clean\ up\ the\ widget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ w\ \[namespace\ tail\ \[self\]\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{bind\ \$w\ <Destroy>\ \{\}\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{destroy\ \$w\}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ cget\ \{\ \{opt\ \"\"\ \}\ \ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[string\ length\ \$opt\]\ ==\ 0\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[array\ get\ widgetOptions\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[info\ exists\ widgetOptions(\$opt)\ \]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$widgetOptions(\$opt)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[\$tblwidget\ cget\ \$opt\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ configure\ \{\ args\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \$args\]\ ==\ 0\}\ \ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ return\ all\ tablelist\ options\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ opt_list\ \[\$tblwidget\ configure\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ as\ well\ as\ all\ custom\ options\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ xopt\ \[array\ get\ widgetOptions\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ opt_list\ \$xopt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$opt_list\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ elseif\ \{\[llength\ \$args\]\ ==\ 1\}\ \ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ return\ configuration\ value\ for\ this\ option\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ opt\ \$args\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[info\ exists\ widgetOptions(\$opt)\ \]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$widgetOptions(\$opt)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[\$tblwidget\ cget\ \$opt\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ error\ checking\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[expr\ \{\[llength\ \$args\]%2\}\]\ ==\ 1\}\ \ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \"value\ for\ \\\"\[lindex\ \$args\ end\]\\\"\ missing\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ process\ the\ new\ configuration\ options...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ opts\ \$args\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ opt_name\ \[array\ names\ opts\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ opt_value\ \$opts(\$opt_name)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ overwrite\ with\ new\ value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[info\ exists\ widgetOptions(\$opt_name)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetOptions(\$opt_name)\ \$opt_value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ some\ options\ need\ action\ from\ the\ widgets\ side\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ --\ \$opt_name\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -labelcommand\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ replace\ sortcolumn\ command\ by\ our\ own\ method...\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xsortoption)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -labelcommand\ \"\[namespace\ code\ \{my\ SortByColumnCmd\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ -labelcommand\ \$opt_value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xtabheader\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ InitializeTabHeader\ \$opt_value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xmoveovereffect\ \ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xmoveovereffect)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ EnableMoveover\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ -activestyle\ none\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xhideoption\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xsortoption\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xshowbuttons\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfileread\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilesave\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilereadpostcmd\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xdeletepostcmd\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xrefreshpostcmd\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xselectpostcmd\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ if\ the\ configure\ option\ wasn't\ one\ of\ our\ special\ one's,\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ pass\ control\ over\ to\ the\ original\ tablelist\ widget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{\$tblwidget\ configure\ \$opt_name\ \$opt_value\}\ result\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \$result\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ insert\ \{method\ args\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ overloaded\ tablelist\ method\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ maintain\ undo\ list\ +\ button\ states...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ widgetCompounds(undoList)\ \{*\}\$args\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ hand\ over\ to\ tablelist\ widget...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{\$tblwidget\ insert\ \$method\ \{*\}\$args\}\ result\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \$result\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ insertlist\ \{method\ args\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ overloaded\ tablelist\ method\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ maintain\ undo\ list\ +\ button\ states...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ widgetCompounds(undoList)\ \{*\}\$args\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{\$tblwidget\ insertlist\ \$method\ \{*\}\$args\}\ result\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \$result\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ unknown\ \{method\ args\}\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ if\ the\ command\ wasn't\ one\ of\ our\ special\ one's,\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ pass\ control\ over\ to\ the\ original\ tablelist\ widget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{\$tblwidget\ \$method\ \{*\}\$args\}\ result\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \$result\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\}\n\n\n#\ -----------------------------------------------------------------------------\n#\ Private\ interface\ methods\n#\ -----------------------------------------------------------------------------\n\noo::define\ XTableList\ \{\n\n\ \ \ \ \ \ \ \ method\ SortByColumnCmd\ \{args\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ set\ tbl\ \[lindex\ \$args\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx\ \[lindex\ \$args\ 1\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(sortby)\ \$idx\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tablelist::sortByColumn\ \$tblwidget\ \$idx\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ InitBindings\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \[\$tblwidget\ bodypath\]\ <ButtonPress-3>\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ t\ \[winfo\ parent\ %W\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ x\ \[expr\ \{%x\ +\ \[winfo\ x\ %W\]\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ y\ \[expr\ \{%y\ +\ \[winfo\ y\ %W\]\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ oo_my\ \[winfo\ parent\ \$t\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move\ up\ hierachy\ until\ our\ own\ class\ is\ reached:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ notes:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ -\ maybe\ there\ is\ a\ more\ convinient\ way\ to\ adress\ a\ class\ member\ function\ ?\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ -\ pls\ note\ that\ the\ member\ function\ needs\ to\ start\ with\ lowercase\ char\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ otherwise\ it's\ hidden\ in\ global\ namespace\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ while\ \{\ \[winfo\ exists\ \$oo_my\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ puts\ \"-->\ \$oo_my\ :\ \[winfo\ class\ \$oo_my\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[winfo\ class\ \$oo_my\]\ ==\ \"xtablelist\"\ \}\ \{\ break\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ oo_my\ \[winfo\ parent\ \$oo_my\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$oo_my\ showContextMenu\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[\$t\ nearestcolumn\ \$x\]\ \[\$t\ nearest\ \$y\]\ %X\ %Y\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ Build\ \{frm\}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ build\ the\ (mega-)\ widget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ frm\ -\ parent\ frame\ widget\ path\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ status\ line\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -----------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$frm.flabel\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f\ -side\ bottom\ -fill\ both\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::label\ \$f.lbl\ -text\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f.lbl\ -side\ bottom\ -fill\ x\ -anchor\ w\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(label)\ \$f.lbl\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ listbox\ and\ two\ scrollbars\ embedded\ into\ a\ frame\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$frm.f\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f\ -side\ left\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ a.)\ right\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fright\ \[ttk::frame\ \$f.fright\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fright\ -side\ right\ -fill\ y\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::scrollbar\ \$fright.scrolly\ -orient\ vertical\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fright.scrolly\ -side\ top\ -fill\ y\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::frame\ \$fright.spacery\ -height\ 15\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fright.spacery\ -side\ bottom\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ b.)\ left\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fleft\ \[ttk::frame\ \$f.fleft\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fleft\ -side\ left\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ left/top\ frame\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fltop\ \[ttk::frame\ \$fleft.fltop\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ left/bottom\ x\ scrollbar\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::scrollbar\ \$fleft.scrollx\ -orient\ horizontal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ pack\ scrollbar\ 1st,\ so\ that\ it\ won't\ disappear\ while\ panning\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fleft.scrollx\ -side\ bottom\ -fill\ x\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fltop\ -side\ top\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ another\ frame\ for\ the\ tablelist\ object\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fxx\ \[ttk::frame\ \$fltop.fleft\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fxx\ -side\ top\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tablelist::tablelist\ \$fxx.tlist\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -selectmode\ extended\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -takefocus\ 0\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -activestyle\ none\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xscrollcommand\ \"\$fleft.scrollx\ set\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -yscrollcommand\ \"\$fright.scrolly\ set\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fxx.tlist\ -side\ bottom\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tblwidget\ \$fxx.tlist\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \$tblwidget\ <<TablelistSelect>>\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"+\ \[namespace\ code\ \{my\ SelectionCallback\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \$tblwidget\ <<TablelistCellUpdated>>\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"+\ event\ generate\ \$tblwidget\ <<TLExtDataModified>>\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$fleft.scrollx\ configure\ -command\ \ \"\$fxx.tlist\ xview\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$fright.scrolly\ configure\ -command\ \"\$fxx.tlist\ yview\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ enable\ auto\ scrolling...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ autoscroll::autoscroll\ \$fleft.scrollx\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ autoscroll::autoscroll\ \$fright.scrolly\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ icon-box\ for\ list\ manipulation\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ----------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ f1\ \[ttk::frame\ \$frm.f1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1\ -side\ right\ -fill\ both\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xshowbuttons)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b1\ -image\ \$widgetCompounds(up)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 1\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b1\ \"Move-Up\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b1\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b1)\ \$f1.b1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b1i\ -image\ \$widgetCompounds(reverselist)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 10\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b1i\ \"Reverse\ the\ list\ order\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b1i\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b1i)\ \$f1.b1i\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b2\ -image\ \$widgetCompounds(down)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 2\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b2\ \"Move-Down\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b2\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b2)\ \$f1.b2\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b3\ -image\ \$widgetCompounds(delete)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 3\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b3\ \"Remove\ item(s)\ from\ the\ list\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b3\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b3)\ \$f1.b3\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b3i\ -image\ \$widgetCompounds(delete_reverse)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 5\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b3i\ \"Remove\ All\ item(s)-\ except\ selected\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b3i\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b3i)\ \$f1.b3i\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b4\ -image\ \$widgetCompounds(reload)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 4\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b4\ \"Undo\ previous\ operation\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b4\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b4)\ \$f1.b4\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ elseif\ \{\$widgetOptions(-xshowbuttons)\ ==\ \"arrows\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b1\ -image\ \$widgetCompounds(up)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 1\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b1\ \"Move-Up\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b1\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b1)\ \$f1.b1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b2\ -image\ \$widgetCompounds(down)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 2\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b2\ \"Move-Down\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \ \$f1.b2\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b2)\ \ \$f1.b2\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfileread)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b8\ -image\ \$widgetCompounds(folder)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ OpenFromFile\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b8\ \"Open\ Listbox\ content\ from\ file\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b8\ -pady\ 1\ -side\ bottom\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b8)\ \ \$f1.b8\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b5\ -image\ \$widgetCompounds(filesaveas)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ Save2File\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b5\ \"Save\ Listbox\ to\ file\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b5\ -pady\ 1\ -side\ bottom\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b7)\ \$f1.b5\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ disabled\ by\ default:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xshowbuttons)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3i)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b4)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ elseif\ \{\$widgetOptions(-xshowbuttons)\ ==\ \"arrows\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\$tlist(\$w,b6)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b7)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ note:\ There\ is\ also\ a\ popup-menu,\ which\ corresponds\ with\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ the\ button\ box.\ So,\ if\ you\ do\ any\ changes\ here,\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ do\ not\ forget\ to\ maintain\ there\ as\ well!\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(mstate)\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ InitBindings\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\}\n======\n\n***xtablelist_public.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_public.tcl\ ---\n#\ -----------------------------------------------------------------------------\n#\ Purpose:\n#\ \ A\ TclOO\ class\ template\ to\ extend\ tablelist\ functionality.\n#\ -----------------------------------------------------------------------------\n\n#\ -----------------------------------------------------------------------------\n#\ Public\ interface\n#\ -----------------------------------------------------------------------------\n\n\noo::define\ XTableList\ \{\n\n\ \ \ \ \ \ \ \ method\ info\ \{\}\ \{\ puts\ \[self\ class\]\ \}\n\n\ \ \ \ \ \ \ \ method\ selectArrowCallback\ \{\}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ this\ function\ is\ called\ every\ time\ an\ up-down\ arrow\ is\ selected\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ by\ default,\ it's\ empty,\ but\ can\ be\ predefined\ to\ suit\ the\ needs\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ in\ the\ caller\ application\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ dummy\ 0\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ unused\n\ \ \ \ \ \ \ \ method\ deleteAllItems\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \{\}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \"Undo\"\ button\ also\ needs\ to\ be\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[winfo\ exists\ widgetCompounds(b4)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b4)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ addValues\ \{lst\ \{mode\ \"\"\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{!\[info\ exists\ widgetCompounds(undoList)\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undoList)\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ re-initialize\ variable\ (if\ necessary)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$mode\ ==\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undoList)\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ populate\ columns\ with\ information\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ sublist\ \$lst\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ insert\ end\ \$sublist\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ widgetCompounds(undoList)\ \$sublist\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ update\ status\ text\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \$lst\n\ \ \ \ \ \ \ \ \}\n\n\}\n======\n\n***xtablelist_private.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_private.tcl\ ---\n#\ -----------------------------------------------------------------------------\n\n#\ -----------------------------------------------------------------------------\n#\ Private\ interface\ methods\n#\ -----------------------------------------------------------------------------\n\noo::define\ XTableList\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ GetBoolean\ \{value\ \{errorValue\ 1\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ returns\ the\ value\ of\ a\ (presumably)\ boolean\ string\ (ie:\ it\ should\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ do\ the\ right\ thing\ if\ the\ string\ is\ \"yes\",\ \"no\",\ \"true\",\ 1,\ etc\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ value\ -\ value\ to\ be\ converted\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ errorValue\ -\ a\ default\ value\ to\ be\ returned\ in\ case\ of\ an\ error\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ Returns:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ a\ 1\ or\ zero,\ or\ the\ value\ of\ errorValue\ if\ the\ string\ isn't\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ a\ proper\ boolean\ value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{expr\ \{(\[string\ trim\ \$value\])?1:0\}\}\ res\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$errorValue\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$res\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ GetTblColumnNames\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ retrieve\ all\ column\ names,\ regardless\ if\ they\ are\ hidden\ or\ not\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ col_names\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ \{with\ name\ pos\}\ \[\$tblwidget\ cget\ -columns\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ col_names\ \$name\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$col_names\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ GetOnlyVisibleTblColumnNames\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ retrieve\ only\ column\ names\ which\ are\ not\ hidden\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ col_names\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ \{with\ name\ pos\}\ \[\$tblwidget\ cget\ -columns\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ !\ \[\$tblwidget\ columncget\ \$cnt\ -hide\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ col_names\ \$name\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$col_names\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ InitializeTabHeader\ \{kword_list\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cols\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$kword_list\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ descr\ \ \[lindex\ \$i\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ visual\ \[lindex\ \$i\ 1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ orient\ \[lindex\ \$i\ 2\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[string\ length\ \$orient\]\ ==\ 0\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ orient\ \"left\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ regsub\ -all\ \"\ \"\ \$descr\ \"_\"\ descr\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$descr\ !=\ \"...\"\ &&\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[string\ range\ \$descr\ end\ end\]\ !=\ \":\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ descr\ \"\$\{descr\}:\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ could\ be\ either\ a\ string\ or\ an\ integer:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$visual\ ==\ \"hidden\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ width\ 20\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ width\ \$visual\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ append\ cols\ \"\$width\ \$descr\ \$orient\ \"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ -columns\ \$cols\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ hide\ specific\ columns\ as\ indicated\ with\ \"hidden\"\ in\ declaration\ array\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$kword_list\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[set\ width\ \[lindex\ \$i\ 1\]\]\ ==\ \"hidden\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$cnt\ -hide\ yes\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ expand\ last\ *visible*\ column\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ----------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ lastcol\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ tablelist\ -columns\ option\ are\ always\ 3\ attributes\ each...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ \{w\ col\ pos\}\ \[\$tblwidget\ cget\ -columns\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[\$tblwidget\ columncget\ \$cnt\ -hide\]\ ==\ 0\}\ \{set\ lastcol\ \ \$cnt\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$lastcol\ >\ 0\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ -stretch\ \$lastcol\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ SelectionCallback\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ !\[my\ GetBoolean\ \$widgetOptions(-xshowbuttons)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ manage\ visualisation\ mode\ of\ toolboxes\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ csel\ \[\$tblwidget\ curselection\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xshowbuttons)\ ==\ \"arrows\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$csel\ ==\ \{\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$csel\ ==\ \{\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3i)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3i)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ does\ it\ make\ sense\ to\ enable\ undo\ button:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetCompounds(undo_flag)\ ==\ 1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b4)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ event\ generate\ \$tblwidget\ <<TLExtDataModified>>\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b4)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ event\ generate\ \$tblwidget\ <<TLExtDataModifiedUndo>>\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-up\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ 0\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-down\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ len\ \[expr\ \[llength\ \$data\]\ -1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$len\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ evaluate\ post\ command\ in\ parent\ namespace...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xselectpostcmd)\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{uplevel\ \$widgetOptions(-xselectpostcmd)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ UpdateStatusInfo\ \{lst\}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ method\ to\ maintain\ additional\ status\ information\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ msg\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ --\ \[set\ cnt\ \[llength\ \$lst\]\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(label)\ configure\ -text\ \"Tablelist\ is\ empty.\"\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b7)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ required\ to\ manage\ state,\ when\ the\ widget\ is\ popping\ up!\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(mstate)\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ maintain\ pop-up\ menu\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ note:\ catch\ is\ required\ if\ the\ pop-up\ is\ not\ \"pinned\"\ on\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ the\ screen\ (which\ is\ most\ likely\ the\ case!)\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xhideoption)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx_list\ \{8\ 9\ 10\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx_list\ \{5\ 6\ 7\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1i)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1i)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(label)\ configure\ -text\ \"1\ item\ in\ tablelist.\ \$msg\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1i)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(label)\ configure\ -text\ \"\$cnt\ items\ in\ tablelist.\ \$msg\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b7)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(mstate)\ normal\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xhideoption)\]\ \}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx_list\ \{8\ 9\ 10\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx_list\ \{5\ 6\ 7\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ @@@\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$idx_list\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(m_\$tblwidget)\ entryconfigure\ \$idx\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ ToolbuttonCallback\ \{nr\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ refresh\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$nr\ ==\ 4\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$widgetCompounds(undoList)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(sortby)\ -1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \$widgetCompounds(undoList)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ evaluate\ post\ command\ in\ parent\ namespace...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xrefreshpostcmd)\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{uplevel\ \$widgetOptions(-xrefreshpostcmd)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ SelectionCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ reverse\ the\ list\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$nr\ ==\ 10\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data_len\ \[llength\ \$data\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ csel\ \[\$tblwidget\ curselection\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ reversed_data\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ reversed_csel\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ \[expr\ \{\$data_len\ -1\}\]\}\ \{\$cnt\ >=\ \ 0\}\ \{incr\ cnt\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ reversed_data\ \[lindex\ \$data\ \$cnt\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$csel\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ reversed_csel\ \[expr\ \{\$data_len\ -\ \$idx\ \}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$reversed_data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ highlight\ again\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$reversed_csel\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx1\ \[expr\ \{\$idx\ -1\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ selection\ set\ \$idx1\ \$idx1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ re-position\ listbox\ acc.\ to\ current\ selection\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ csel\ \[\$tblwidget\ curselection\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ see\ \[lindex\ \$csel\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ selectArrowCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ csel\ \[\$tblwidget\ curselection\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$csel\ ==\ \{\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ call\ get's\ important,\ if\ more\ than\ one\ widgets\ exists\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ at\ the\ same\ time,\ and\ the\ focus\ get's\ lost/shiftet:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ action\ buttons\ are\ still\ enabled,\ but\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ the\ following\ call\ 'll\ disable\ them\ accordingly\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ SelectionCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ --\ \$nr\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-up\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ 0\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ 0\}\ \{\$cnt\ <\ \[llength\ \$data\]\}\ \{incr\ cnt\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt0\ \[expr\ \$cnt\ -1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tmp0\ \[lindex\ \[lrange\ \$data\ \$cnt0\ \$cnt0\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tmp\ \ \[lindex\ \[lrange\ \$data\ \$cnt\ \ \$cnt\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$cnt\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt0\ \$cnt0\ \$tmp\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt\ \ \$cnt\ \ \$tmp0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ highlight\ again\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$csel\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx0\ \[expr\ \$idx\ -1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ selection\ set\ \$idx0\ \$idx0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ 06.06.05:\ and\ (!)\ position\ listbox\ as\ it\ was\ before!\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ see\ \[lindex\ \$csel\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ selectArrowCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-down\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ len\ \[expr\ \[llength\ \$data\]\ -1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$len\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ \[llength\ \$data\]\}\ \{\$cnt\ >=\ \ 0\}\ \{incr\ cnt\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt1\ \[expr\ \$cnt\ +1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tmp1\ \[lindex\ \[lrange\ \$data\ \$cnt1\ \$cnt1\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tmp\ \ \[lindex\ \[lrange\ \$data\ \$cnt\ \$cnt\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$cnt\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt\ \ \$cnt\ \ \$tmp1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt1\ \$cnt1\ \$tmp\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ highlight\ again\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$csel\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx1\ \[expr\ \$idx\ +1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ selection\ set\ \$idx1\ \$idx1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ set\ visual\ region\ as\ it\ was\ before...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ see\ \[lindex\ \$csel\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ selectArrowCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 3\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ does\ not\ work\ with\ empty\ lines:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ foreach\ i\ \[lsort\ -decreasing\ \$csel\]\ \{\ \$w\ delete\ \$i\ \$i\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ \[llength\ \$data\]\}\ \{\$cnt\ >=\ \ 0\}\ \{incr\ cnt\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ check\ if\ index\ is\ within\ current\ selection\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ if\ true\ -\ remove\ list\ item\ !\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$cnt\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt\ \$cnt\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ evaluate\ post\ command\ in\ parent\ namespace...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xdeletepostcmd)\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{uplevel\ \$widgetOptions(-xdeletepostcmd)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 5\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ inverse\ delete\ =\ delete\ all,\ except\ selected\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ new_data\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ 0\}\ \{\$cnt\ <\ \[llength\ \$data\]\}\ \{incr\ cnt\ 1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ check\ if\ the\ current\ index\ is\ *not*\ part\ of\ the\ selection\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$cnt\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ new_data\ \[lindex\ \$data\ \$cnt\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ puts\ \"-->\ \[lindex\ \$data\ \$cnt\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$new_data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \$new_data\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ evaluate\ post\ command\ in\ parent\ namespace...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xdeletepostcmd)\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{uplevel\ \$widgetOptions(-xdeletepostcmd)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ SelectionCallback\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ EnableMoveover\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-over\ effect:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \[\$tblwidget\ bodypath\]\ <Motion>\ \{+\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ t\ \[winfo\ parent\ %W\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ x\ \[expr\ \{%x\ +\ \[winfo\ x\ %W\]\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ y\ \[expr\ \{%y\ +\ \[winfo\ y\ %W\]\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ set\ cell\ \[\$t\ nearestcell\ \$x\ \$y\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ puts\ \"Clicked\ on\ cell:\ \$cell\ \"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ set\ rownum\ \ \[lindex\ \[split\ \$cell\ \",\"\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ focus\ \$t\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$t\ configure\ -activestyle\ frame\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$t\ activate\ \"@\$x,\$y\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \[\$tblwidget\ bodypath\]\ <Leave>\ \{+\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ t\ \[winfo\ parent\ %W\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$t\ configure\ -activestyle\ none\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\}\n======\n\n***xtablelist_popupmenu.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_popupmenu.tcl\ ---\n#\ -----------------------------------------------------------------------------\n\noo::define\ XTableList\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ unused\n\ \ \ \ \ \ \ \ method\ showColumnByIndex\ \{idx\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ column\ \[my\ GetTblColumnNames\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$cnt\ ==\ \$idx\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$cnt\ -hide\ false\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(hide_column,\$cnt)\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ sort\ the\ list\ based\ on\ a\ particular\ column\n\ \ \ \ \ \ \ \ method\ SortCmd\ \{index\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ sortbycolumn\ \$index\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(sortby)\ \$index\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ HideColumnCmd\ \{index\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ hiding\ all\ columns\ doesn't\ make\ sense\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \[my\ GetOnlyVisibleTblColumnNames\]\]\ ==\ 1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tk_messageBox\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \$tblwidget\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \"Warning\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -icon\ \"warning\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -message\ \"Cannot\ hide\ all\ columns!\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -type\ ok\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \$widgetCompounds(hide_column,\$index)\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$index\ -hide\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$index\ -hide\ false\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ ShowAllColumnsCmd\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ column\ \[my\ GetTblColumnNames\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$cnt\ -hide\ false\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(hide_column,\$cnt)\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ showContextMenu\ \{colx\ coly\ rootx\ rooty\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ x,y\ are\ the\ coordinates\ relative\ to\ the\ upper-left\ corner\ of\ the\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ listbox\;\ rootx,rooty\ are\ screen\ coordinates\ (for\ knowing\ where\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ to\ place\ the\ menu).\ w\ is\ the\ name\ of\ the\ mclistbox\ widget\ that\ was\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ clicked\ on.\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ re-create\ widget\ all\ the\ time:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ contextMenu\ \$tblwidget.tblContextMenu\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{destroy\ \$contextMenu\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ columnLabel\ \[\$tblwidget\ columncget\ \$colx\ -title\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ colIndex\ \$colx\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ column\ \$columnLabel\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ m\ \[menu\ \$contextMenu\ -tearoff\ 1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xsortoption)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ menu\ \$m.sort_by\ -tearoff\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ cascade\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Sort\ by\ ...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -menu\ \$m.sort_by\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk_cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ col_names\ \[my\ GetOnlyVisibleTblColumnNames\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$col_names\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ manage\ multi\ column\ menu,\ otherwise\ the\ menu\ limits\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ would\ exceed\ screen\ dimensions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \$col_names\]\ >\ 39\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$cbrk_cnt\ <\ 10\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cbrk_cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk_cnt\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{set\ cbrk\ 0\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m.sort_by\ add\ radiobutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -variable\ \"\[namespace\ current\]::widgetCompounds(sortby)\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -value\ \$cnt\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \$i\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ SortCmd\}\]\ \$cnt\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -columnbreak\ \$cbrk\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Sort\ by:\ \$columnLabel\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ SortCmd\}\]\ \$colIndex\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ separator\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ --------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ *only*\ show\ context-menu\ if\ specified\ by\ argument:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ --------------------------------------------------\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xhideoption)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ menu\ \$m.hide_column\ -tearoff\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ cascade\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Hide\ column...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -menu\ \$m.hide_column\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \$m.hide_column\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ \ -label\ \"Hide\ column:\"\ -state\ disabled\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk_cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ col_names\ \[my\ GetOnlyVisibleTblColumnNames\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$col_names\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ manage\ multi\ column\ menu,\ otherwise\ the\ menu\ limits\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ would\ exceed\ screen\ dimensions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \$col_names\]\ >\ 39\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$cbrk_cnt\ <\ 10\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cbrk_cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk_cnt\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{set\ cbrk\ 0\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ colLabel\ \[\$tblwidget\ columncget\ \$cnt\ -title\]\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m.hide_column\ add\ checkbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -variable\ \"\[namespace\ current\]::widgetCompounds(hide_column,\$cnt)\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \$colLabel\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ HideColumnCmd\}\]\ \$cnt\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -columnbreak\ \$cbrk\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Hide\ column:\ \$columnLabel\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ \[namespace\ current\]::widgetCompounds(hide_column,\$colIndex)\ 1\;\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[namespace\ code\ \{my\ HideColumnCmd\}\]\ \$colIndex\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ separator\ doesn't\ work\ in\ column\ mode\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \$col_names\]\ <=\ 39\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m.hide_column\ add\ separator\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ m_item\ \[list\ \$m\ \$m.hide_column\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m_item\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Show\ All\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ShowAllColumnsCmd\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ separator\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ manage\ visualisation\ mode\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \[\$w\ get\ 0\ end\]\ is\ too\ slow\ if\ the\ listbox\ is\ pretty\ full...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[info\ exists\ widgetCompounds(mstate)\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ st\ \$widgetCompounds(mstate)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ st\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"File\ Operations:\"\ -state\ disabled\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Save\ to\ file...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ Save2File\}\]\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -state\ \$st\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfileread)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Open\ from\ file...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ OpenFromFile\}\]\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -state\ \$st\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -----------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tk_popup\ \$m\ \$rootx\ \$rooty\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -----------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ make\ sure,\ popup-window\ stays\ on\ top\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ when\ using\ \"tear-off\"\ the\ 1st\ time\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ wm\ withdraw\ \$m\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ wm\ deiconify\ \$m\n\ \ \ \ \ \ \ \ \}\n\}\n======\n\n***xtablelist_readwrite.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_readwrite.tcl\ ---\n#\ -----------------------------------------------------------------------------\n\noo::define\ XTableList\ \{\n\n\ \ \ \ \ \ \ \ method\ GetAllVisibleItems\ \{\}\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ only\ take\ visible\ columns\ into\ account\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \"...what\ you\ see\ is\ what\ you\ get...\"\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ is_hidden\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ column\ \[my\ GetTblColumnNames\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ is_hidden\ \[\$tblwidget\ columncget\ \$cnt\ -hide\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ lst\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \[\$tblwidget\ get\ 0\ end\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ sublst\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ xitem\ \$i\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lindex\ \$is_hidden\ \$cnt\]\ !=\ 1\}\ \{\ lappend\ sublst\ \$xitem\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ lst\ \$sublst\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$lst\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ Write2File\ \{fname\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$fname\ ==\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ lst\ \[my\ GetAllVisibleItems\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fp\ \ \[open\ \$fname\ \"w\"\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$lst\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ regsub\ -all\ \"\\\{\"\ \$i\ \"\"\ i\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ regsub\ -all\ \"\\\}\"\ \$i\ \"\"\ i\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ str\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ item\ \$i\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$str\ ==\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ str\ \$item\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ append\ str\ \$widgetCompounds(DELIM)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ append\ str\ \$item\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ puts\ \$fp\ \$str\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ close\ \$fp\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ Save2File\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #-now\ we\ use\ this\ one-\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fname\ \[xtablelist::getfilename\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \ \ \ \ \ \$tblwidget\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \ \ \ \ \ \ \"Select\ file\ where\ to\ store\ Listbox\ information:\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -oktext\ \ \ \ \ \ \"\ Save\ to\ File...\ \"\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[string\ length\ \$fname\]\ >\ 0\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ Write2File\ \$fname\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ OpenFromFile\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ in_file\ \[\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tk_getOpenFile\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \$tblwidget\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \"Select\ file:\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -initialdir\ \$widgetCompounds(default_dir)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -defaultextension\ \{.txt\}\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -filetypes\ \ \{\{\"Text-Files\"\ \"*.txt*\"\}\ \{all\ \"*.*\"\}\}\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -initialfile\ \"\"\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ read\ values\ from\ file\ and\ uptdate\ listbox\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$in_file\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fp\ \[open\ \$in_file\ \"r\"\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ while\ \{!\[eof\ \$fp\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ i\ \[string\ trim\ \[gets\ \$fp\]\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$i\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ data\ \[split\ \$i\ \$widgetCompounds(DELIM)\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ close\ \$fp\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ foreach\ i\ \$data\ \{puts\ \"-->\ \$i\ <--\"\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ addValues\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ finally\ execute\ post\ command\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetOptions(-xfilereadpostcmd)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\}\n======\n\n***xtablelist_filesel.tcl***\n======\n#\ -------------------------------------------------------------------------\n#\ xtablelist_filesel.tcl\ ---\n#\ -------------------------------------------------------------------------\n#\n#\ Purpose:\n#\ \ \ Utility\ package\ supporting\ a\ more\ convinient\ file\ selection\ dialog.\n#\ \ \ The\ following\ additional\ features\ where\ added:\n#\ \ \ \ \ -\ the\ possibility\ to\ generate\ a\ file-name,\n#\ \ \ \ \ -\ use\ the\ dialog's\ default\ file-name,\n#\ \ \ \ \ \ \ which\ might\ be\ sufficient\ for\ most\ of\ all\ cases,\n#\ \ \ \ \ -\ use\ standard\ file\ selection\ dialog\n#\n#\ -------------------------------------------------------------------------\n\n#\ -------------------------------------------------------------------------\n#\ file\ action\ utility\ dialog\ ...\n#\ -------------------------------------------------------------------------\n\nnamespace\ eval\ xtablelist\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ switch\ --\ \$::tcl_platform(platform)\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"windows\"\ \ \ \ \ \ \ \ \{\ set\ homeDir\ \$::env(TEMP)\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"unix\"\ -\ default\ \{\ set\ homeDir\ \$::env(HOME)\ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ array\ set\ widgetDefaults\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ title\ \"Selection\ file:\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ DEFNAME\ \"NONAME\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ def_ext\ \".txt\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ oktext\ \"\ OK\ \"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ENTRY_WITH\ 45\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ is_ok\ 0\n\ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ set\ widgetDefaults(init_dir)\ \ \ \ \$homeDir\n\ \ \ \ \ \ \ \ set\ widgetDefaults(defaultfile)\ \[file\ join\ \$homeDir\ \"NONAME.txt\"\]\n\ \ \ \ \ \ \ \ set\ widgetDefaults(filetypes)\ \ \ \{\{\"Text-Files\"\ \"*.txt*\"\}\ \{all\ \"*.*\"\}\}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ initializing\ required\ images...\n\ \ \ \ \ \ \ \ set\ imgdir\ \[file\ join\ \[file\ dirname\ \[info\ script\]\]\ \"images\"\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ proc\ LoadImages1\ \{imgdir\ \{patterns\ \{*.gif\ *.png\}\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ pattern\ \$patterns\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ file\ \[glob\ -nocomplain\ -directory\ \$imgdir\ \$pattern\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ img\ \[file\ tail\ \[file\ rootname\ \$file\]\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ !\[info\ exists\ images(\$img)\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ images(\$img)\ \[image\ create\ photo\ -file\ \$file\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[array\ get\ images\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ array\ set\ widgetImages\ \[LoadImages1\ \$imgdir\]\n\}\n\n\nproc\ xtablelist::PositionWindow\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ wm\ geometry\ \$widgetDefaults(this)\ \"+250+350\"\n\}\n\nproc\ xtablelist::_ok_callback\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \[file\ exists\ \[set\ fname\ \[\$widgetDefaults(input_entry)\ get\]\]\]\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ answer\ \[tk_messageBox\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \$widgetDefaults(this)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \"Question:\ \"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -message\ \"\$fname\\nalready\ exists\\noverwrite\ ?\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -type\ yesno\ -icon\ question\]\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$answer\ eq\ \"no\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(is_ok)\ 2\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ widgetDefaults(is_ok)\ 1\n\}\n\nproc\ xtablelist::EntryBindingsCmd\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \{\[\$widgetDefaults(input_entry)\ get\]\ ==\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(isempty)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(ok_button)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(ok)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(ok_button)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \}\n\}\n\n\nproc\ xtablelist::SelectFileCmd\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ log_file\ \[tk_getSaveFile\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -initialdir\ \$widgetDefaults(init_dir)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -defaultextension\ \$widgetDefaults(def_ext)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -filetypes\ \ \$widgetDefaults(filetypes)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -initialfile\ \"\"\ -title\ \"Select\ file\ dialog...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \$widgetDefaults(this)\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \{\$log_file\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(init_dir)\ \[file\ dirname\ \$log_file\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(entry_val)\ \$log_file\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(ok)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(ok_button)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \}\n\}\n\nproc\ xtablelist::GenerateFilename\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ note:\ it\ is\ not\ possible\ under\ windows\ to\ use\ \":\"\ as\ date\ separator!\n\ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ clock\ format\ \[clock\ seconds\]\ -format\ \"%H:%M:%S\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ fname\ \[clock\ format\ \[clock\ seconds\]\ -format\ \"%Y-%m-%d\"\]\n\ \ \ \ \ \ \ \ append\ fname\ \"_\"\n\ \ \ \ \ \ \ \ append\ fname\ \$widgetDefaults(DEFNAME)\n\ \ \ \ \ \ \ \ append\ fname\ \$widgetDefaults(def_ext)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ widgetDefaults(entry_val)\ \[file\ join\ \$widgetDefaults(init_dir)\ \$fname\]\n\ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(ok)\n\}\n\nproc\ xtablelist::CancelCmd\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ set\ widgetDefaults(is_ok)\ 2\n\}\n\n\n#\ -------------------------------------------------------------------------\n#\ gui\ declaration\n#\ -------------------------------------------------------------------------\n\nproc\ xtablelist::getfilename\ \{args\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ wparent\ \"\"\n\ \ \ \ \ \ \ \ set\ ind\ 0\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ while\ \{\ \$ind\ <\ \[llength\ \$args\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ -exact\ --\ \[lindex\ \$args\ \$ind\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-parent\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ wparent\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-title\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(title)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-defaultfile\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(defaultfile)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-defaultext\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(def_ext)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-filetypes\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(filetypes)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-oktext\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(oktext)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ puts\ \"unknown\ option\ \[lindex\ \$args\ \$ind\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ w\ \$wparent.getfilename\n\ \ \ \ \ \ \ \ set\ widgetDefaults(this)\ \$w\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ catch\ \{destroy\ \$w\}\n\ \ \ \ \ \ \ \ toplevel\ \$w\n\ \ \ \ \ \ \ \ wm\ title\ \$w\ \$widgetDefaults(title)\n\ \ \ \ \ \ \ \ wm\ iconname\ \$w\ \$widgetDefaults(title)\n\ \ \ \ \ \ \ \ PositionWindow\n\ \ \ \ \ \ \ \ wm\ transient\ \$w\ \$wparent\n\ \ \ \ \ \ \ \ bind\ \$w\ <KeyPress-Escape>\ \"\[namespace\ current\]::CancelCmd\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$w.info\ -relief\ flat\]\n\ \ \ \ \ \ \ \ pack\ \$f\ -side\ top\ -fill\ x\ -padx\ 1\ -pady\ 1\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::label\ \$f.img\ -image\ \$widgetImages(job_engineering_logo)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ msg\ \"\n\ \ \ \ \ \ \ \ Select\ a\ filename\ or\ press\n\ \ \ \ \ \ \ \ \\\"generate-filename\\\"\ to\ create\ one.\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::label\ \$f.msg\ -text\ \$msg\n\ \ \ \ \ \ \ \ pack\ \$f.img\ \$f.msg\ -side\ left\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ button\ row\n\ \ \ \ \ \ \ \ #\ ----------\n\ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$w.buttons\ -relief\ groove\]\n\ \ \ \ \ \ \ \ pack\ \$f\ -side\ bottom\ -fill\ x\ -pady\ 2\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ image\ +\ button\n\ \ \ \ \ \ \ \ #\ --------------\n\ \ \ \ \ \ \ \ set\ fb\ \[ttk::frame\ \$f.img_button\]\n\ \ \ \ \ \ \ \ #\ pack\ follows\ later\ on:\ pack\ \$fb\ -side\ left\ -fill\ x\ -expand\ true\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::button\ \$fb.ok\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -text\ \$widgetDefaults(oktext)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -image\ \$widgetImages(filesaveas)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -compound\ left\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ current\]::_ok_callback\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -state\ disabled\n\n\ \ \ \ \ \ \ \ pack\ \$fb.ok\ -side\ left\ -padx\ 4\ -pady\ 4\n\ \ \ \ \ \ \ \ set\ widgetDefaults(ok_button)\ \$fb.ok\n\n\ \ \ \ \ \ \ \ ttk::button\ \$f.cancel\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -text\ \"Cancel\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ current\]::CancelCmd\"\n\n\ \ \ \ \ \ \ \ pack\ \$fb\ \$f.cancel\ -side\ left\ -padx\ 4\ -pady\ 4\ -expand\ true\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$w.rbuttons\]\n\ \ \ \ \ \ \ \ pack\ \$f\ -side\ bottom\ -fill\ x\ -padx\ 2\ -pady\ 2\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::button\ \$f.getlatest\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -text\ \"Generate\ filename\ ...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ current\]::GenerateFilename\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\n\n\ \ \ \ \ \ \ \ pack\ \$f.getlatest\ -padx\ 4\ -pady\ 4\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ f_file1\ \[ttk::frame\ \$f.part_num1\]\n\ \ \ \ \ \ \ \ pack\ \$f_file1\ -fill\ x\ -expand\ true\n\n\n\ \ \ \ \ \ \ \ ttk::label\ \$f_file1.img\ -image\ \$widgetImages(isempty)\n\ \ \ \ \ \ \ \ pack\ \$f_file1.img\ -side\ left\n\ \ \ \ \ \ \ \ set\ widgetDefaults(input_label)\ \$f_file1.img\n\n\ \ \ \ \ \ \ \ pack\ \[ttk::label\ \$f_file1.lb\ -text\ \"File-name:\"\]\ -side\ left\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::entry\ \$f_file1.en\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -width\ \$widgetDefaults(ENTRY_WITH)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -textvariable\ \"\[namespace\ current\]::widgetDefaults(entry_val)\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ pack\ \$f_file1.en\ -side\ left\ -fill\ x\ -padx\ 4\ -expand\ true\n\ \ \ \ \ \ \ \ set\ widgetDefaults(input_entry)\ \$f_file1.en\n\n\ \ \ \ \ \ \ \ ttk::button\ \$f_file1.b\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -text\ \"...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ current\]::SelectFileCmd\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ pack\ \$f_file1.b\ -side\ left\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ bind\ \$widgetDefaults(input_entry)\ <Leave>\ \ \"\[namespace\ current\]::EntryBindingsCmd\"\n\ \ \ \ \ \ \ \ bind\ \$widgetDefaults(input_entry)\ <Return>\ \"\[namespace\ current\]::EntryBindingsCmd\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ widgetDefaults(entry_val)\ \$widgetDefaults(defaultfile)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ focus\ \$widgetDefaults(input_entry)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \{\[\$widgetDefaults(input_entry)\ get\]\ !=\ \"\"\}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(ok)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_entry)\ selection\ range\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(ok_button)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ wait\ user\n\ \ \ \ \ \ \ \ grab\ \$widgetDefaults(this)\n\ \ \ \ \ \ \ \ tkwait\ variable\ \"\[namespace\ current\]::widgetDefaults(is_ok)\"\n\ \ \ \ \ \ \ \ grab\ release\ \$widgetDefaults(this)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \{\ \$widgetDefaults(is_ok)\ ==\ 1\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ retval\ \[\$widgetDefaults(input_entry)\ get\]\n\ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ retval\ \"\"\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ destroy\ \$w\n\ \ \ \ \ \ \ \ return\ \$retval\n\}\n\n\n#\ -------------------------------------------------------------------------\n#\ test-run\ ...\n#\ -------------------------------------------------------------------------\nif\ 0\ \{\n\ \ \ \ \ \ \ \ package\ require\ Tk\n\ \ \ \ \ \ \ \ wm\ withdraw\ .\n\ \ \ \ \ \ \ \ catch\ \{console\ show\}\n\n\ \ \ \ \ \ \ \ set\ rval\ \[xtablelist::getfilename\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \ \ \ \ \ \"\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \ \ \ \ \ \ \"Select\ file\ where\ to\ store\ Listbox\ information:\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -defaultfile\ \[file\ join\ \$env(HOME)\ \"Test.txt\"\]\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -filetypes\ \ \ \{\{\"Text-Files\"\ \"*.txt\"\}\ \{all\ \"*.*\"\}\}\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -defaultext\ \ \".txt\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -oktext\ \ \ \ \ \ \"\ Save\ to\ File...\ \"\]\n\n\ \ \ \ \ \ \ \ puts\ \"File\ selection\ result:\ \\\"\$rval\\\"\"\n\}\n\n======\n\n***xtablelist_demo.tcl***\n\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_demo.tcl\ ---\n#\ -----------------------------------------------------------------------------\n\n#\ for\ development:\ try\ to\ find\ autoscroll,\ etc\ ...\nset\ dir\ \[file\ normalize\ \[file\ dirname\ \[info\ script\]\]\]\n\n#\ where\ to\ find\ required\ packages...\nset\ auto_path\ \[linsert\ \$auto_path\ 0\ \[file\ join\ \$dir\ \".\"\]\]\nset\ auto_path\ \[linsert\ \$auto_path\ 0\ \[file\ join\ \$dir\ \"../lib\"\]\]\n\n\npackage\ require\ Tk\npackage\ require\ TclOO\n\npackage\ require\ autoscroll\npackage\ require\ tablelist_tile\n\npackage\ require\ xtablelist\n\n\n#\ catch\ \{console\ show\}\n\n#\ 1st\ example:\n\nset\ t\ \[xtablelist::xtablelist\ .t\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -showseparators\ \"yes\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -labelcommand\ \"tablelist::sortByColumn\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -width\ 80\ -height\ 10\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilesave\ 1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfileread\ 1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xshowbuttons\ \"yes\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xrefreshpostcmd\ \{puts\ \"Refresh\ postcommand\ done.\"\}\]\n\npack\ \$t\ -fill\ both\ -expand\ true\n\n\n#\ maybe\ some\ configuration\ changes\ later\ on\ ...\n\$t\ configure\ -xmoveovereffect\ \"yes\"\n\n#\ create\ some\ random\ test\ data...\n\nset\ header\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"ID\"\ 10\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"Category\"\ \ \ \ \ \ 22\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"test-column\"\ \ \ 16\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"Hello\\\\nWorld\"\ 10\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"test\"\ \ \ \ \ \ \ \ \ \ \"hidden\"\ center\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"last\\\\ncolumn\"\ 10\ left\}\n\ \ \ \ \ \ \ \ \}\n\n\$t\ configure\ -xtabheader\ \$header\n\nset\ data_list\ \{\}\nset\ cnt\ 0\n\nwhile\ \{\$cnt\ <\ 40\}\ \{\n\ \ \ \ \ \ \ \ lappend\ data_list\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[list\ \$cnt\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[expr\ \{\$cnt\ +3\}\]\ \[expr\ \{\$cnt\ +4\}\]\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[expr\ \{\$cnt\ +1\}\]\ \[expr\ \{\$cnt\ +2\}\]\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[expr\ \{\$cnt\ +5\}\]\]\n\ \ \ \ \ \ \ \ incr\ cnt\n\}\n\nforeach\ item\ \$data_list\ \{\n\ \ \ \ \ \ \ \ \$t\ insert\ end\ \$item\n\}\n\n\n#\ 2nd\ example:\n\nset\ t1\ \[xtablelist::xtablelist\ .t1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -showseparators\ \"yes\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -labelcommand\ \"tablelist::sortByColumn\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -width\ 80\ -height\ 10\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilesave\ 1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfileread\ 1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xshowbuttons\ \"yes\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xrefreshpostcmd\ \{puts\ \"Refresh\ postcommand\ done.\"\}\]\n\npack\ \$t1\ -fill\ both\ -expand\ true\n\n\nset\ header\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"ID\"\ 10\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"Info_Procs\"\ 20\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"Body\"\ \ \ \ \ \ \ hidden\ left\}\n\ \ \ \ \ \ \ \ \}\n\n\$t1\ configure\ \\\n\ \ -snipstring\ \"...\"\ \\\n\ \ -xtabheader\ \$header\n\nset\ data_list\ \{\}\n\nset\ cnt\ 0\nforeach\ p\ \[lsort\ -dictionary\ \[info\ procs\]\]\ \{\n\ \ \ \ \ \ \ \ #\ set\ body\ \[string\ map\ \{\"\\n\"\ \"\ \"\}\ \[info\ body\ \$p\]\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ row\ \[list\ \$cnt\ \$p\ \[string\ trim\ \[info\ body\ \$p\]\]\]\n\ \ \ \ \ \ \ \ \$t1\ insert\ end\ \$row\n\ \ \ \ \ \ \ \ incr\ cnt\n\}\n\n======\n\n\n***ImageLib.tcl***\n======\n#\ ImageLib.tcl\ ---\n#\ Automatically\ created\ by:\ CreateImageLib.tcl\n\nset\ images(up)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0\nU29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL/SURBVDiNtZRNaFxVFMd/5368eZkxRmQs\nbTEGxbZC0IWMpU5SbCmxILapFCO2LgSlWbhLbFJBcKErP0BcCIqCdeEiUAviQoJIwIgW3biwCoYG\njTImTIXWTjsz7+O4yLzwUkuSgjlwuPdd7vmd/z33vCuqymaY2RTqZoLdRjfunXTvg2zfNh8PT01p\n8r+AByf9S9vv6DuGQWr627vA6Hox65ZiYMIdva1Ufvlg9WhpaM+RYs+t5eN7J4IX1ouTtbpicCyo\nFEulmacOniidr8+SpBG7ynv4dPrjxpVW48i3b0Rf3rTiR8al13o3/cSBZ0uLV+f46/IFapfmWLh8\nnsf2PVnyzp0ZnAx33RR4cFK6U2dnDu97pie1LS5c/BFnHNZ4fl36nkZSZ6h6qBuNv6qOye0bAo+M\niFXc54/uHundUt5qfln6Dmt8xx2I8MPCF5RuKcrAg0NbjHfTlVHx64Jrd9v3qv1Du/t3VPxPta+x\nYvHOUwgCfGBQ28Z45dzCWfruvMfdf+9D/V099vSa4IEX/fh9d1WO7a8Mhz/XZjFOCMMCYVggCD2R\naeAKQlAw4CPO/XmGygMPh33bdg5XJ/ypPGulK6rj7vG+rTumnjt0qss5j5KikjAzf5pYWtSvzXMt\n+Wc5SuHwzpNoqmgKzXaLs9OfXK1f/OPp2bfizyD3gxgr478vznW98sHzAFgvzVdPfBj6wNFoLxLZ\nBt4bBFAF44R3PnqtGbc17CCKOBkDVoNnX4/2X1cWNdbiA8+V1hK+YDAGEEFVsVaI2xp+82Yk19d3\nFfhGZozQiP9GbYwLBOMEEUFTRewNeRsEi6WZXkIMGCs4bzBOiNspsjZ3dVfIsjkRKWRrzbgBCppC\nmihJpGgC6EpMUUQKIrJKpMuAgO98u84cVTjQO4pKirEgIizfHqTpyhvTDcRAJCJxNne5BDYHdUD9\n5NvHy2sfmHomImcKJKKqmeI8NBuzZKbjHb2kHY+BJFMJtIG2qqb/eTY7SWzOM6jtbElz8CQHV83B\n/gXtSQriGSyg6AAAAABJRU5ErkJggg==\n\}\]\nset\ images(filesaveas)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAU1QTFRFtQBI\nAAAAOGeLP2qJO2yRP2yGQWyKPG2RQm6IZmhkSW6CZ2lkQnCSP3KWTXKCVHJ7bnBrRHicVHeAV3h9\nTXmRbXRlbnRlUXmKU3mKW3pycnVrR32iR32jXnx5YH1udXlsSoCmW36ISoCod3l1ToewfIFtbIV3\nUIixUImyf4F+UYu1aImTU4y1cIqCg4WAbY2OWJK9W5bBYpa7XJfDjo+NXpnGXprHYJzKYJ3LlJaR\nYp/OY6DOY6HQZ6LOZ6PSa6XTm52ZdKjTdKjUdanVga3Rj7bbsbGwuLi4yMjIysrKy8vLzMzLytDE\nzs7Oz8/NzNHF0NDQ0tbM09jM2NrY3t7e3t7f397e3t/f39/e39/f4ODg4eHh4eLh4uLh4+Pj5eXl\n5ubm5+fn6Ojo6eno6uvq6+vr7Ozs7e3t7u7u8PDv8PDw8PDx9vb2+vn6////640m9AAAAAF0Uk5T\nAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AYLFTEZSbLK\nvAAAACJ0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUCBvbiBhIE1hY4eod0MAAAEjSURBVBjT\nbc9nV8IwFIDhNKJ1G/feVXBhapGoqLgnLowURa2oqSv2/3/0pvRAOfh+aO95mnNPihBCsz0YauhG\n1bWuHOwe7qcGmqu0f6uzLTKS2ktP1YV0dHkSno3DyaQ5UV/h9iX/FVmk5lrXWJkHZwg0jim00KHm\nkg9Jlc8Mq7HkcVcKITCNUbqJhbgVcZ933HcJ91a8gXX8KNaVkvNnOMvYdmyemtYqnL9UW8gL8I3O\njKgRMyz9SghX8bS/OoOZYUQtnBFCunPACdeR8kO5r1I6bgJ2HBffivBBZjHTs4DO08MRQS3XJKgX\n9wXTRRMikti5O27zPOd2jms8fw+ESIG8npb71L5+voEU/1bY0zzPC9gLFeKaFJ8VajqB3yT/hP4A\nlj1VqgSJVQgAAAAASUVORK5CYII=\n\}\]\nset\ images(folder)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAhlQTFRFAAAN\nPDw8RUVFRkZGSkpKTU1NLFWJUlJSVVVVOVqFVVdTVlhUVllXV1lVWFpWWlpaWVtYWlxZWlxbW11Z\nM2OhXF5bXl5eNGShNGSiXV9bXl9cNWWkNWakNWalNWelNmekYWFhNmelNmemN2ilN2imOGmmOWmn\nOWmoO2mlOmuoZWVlPGumQW+pRG+ma2tqQnKvb29vTHSmcnJyVnqmdnZ2TX22VX6xToC2enp6UYG4\ne3t7YH+laX+aa4SlXom9dYumkZGQcJjFc5nEj5ehi5iolpeVcJ7PcZ7PdKDQnJ2bnJ2cgKLLm5+j\nnp+hn6CeoKCffKbTfabUfqfUoqOlgKnVhqjPpKWnhKvVpaamhKvWpqampqeph63XqKioja3Sia7Y\nqqqqiq/Yq6uri7DZjLHXrKysjbHZra2tjrLYj7LakLLZjrPZrq6ukLPZr6+vlbPWkrTbkrXakrXb\nsbGxlLbblLbclbbclLfclbfcs7Ozlrjclrjdm7fZl7jctbW0nbnamrrdnbzeubm5ob7eor/go7/e\nvb29p8Hep8HfqMPiqcTiwcHBqcXiqsXhxMTEycnIts7my8vLzc3Nz8/P0NDQvtPq0NHQv9TqwNTq\n0tLS09PT1dXU1NXX2tra3Nzc3d3d4ODg4eHh4uLi4uPl4+Pj4+Tm5OXn5eXl5ebo5ubm5ufp6enp\n9/f3+Pj4+fn5+vr6+/v7/f39/v7+lBbl4QAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBI\nWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AYLFTEsHwEOnwAAACJ0RVh0Q29tbWVudABDcmVhdGVk\nIHdpdGggR0lNUCBvbiBhIE1hY4eod0MAAAE3SURBVBjTY2CAAm5ebl5ePj4pBlTAvWbtuvUbNvgL\nQPkWVmDANXfWrJmTJ21yEIUIm8yaMnnSpIlc87yAYPamja6CYGGjyZV56UkJ3IsWLVy4YMHq5VMk\nwcIGk/JSE2KjuFf6eXp6zl+yZJowWFivPzU6LNiXZ9WKFcuWLV26eI4QWFirz0VeVVVVWU1NDUip\nqqjIyCoBhRW67Z2mT506dToEzJgxY4I0UFiszda7JxsJVPWqAIX5m6zjuoqQQHmrOlCYo864prMa\nAZJL6zWBwuzFhu2dDTBQmxbTmA8SZs3R7WgBCVSUFGTGx8TENIaqAYVZEjSayxIjgwJgoNBRDijM\nFCGT5eGOBMLtQN5h8tEOcUMGgaZgYWez3BRkkKEPEma20bFEAeaKIGFGTnEUICHCxkAiAADVtH2Y\nSZPqewAAAABJRU5ErkJggg==\n\}\]\nset\ images(mail)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAsRQTFRFNmut\nVTFgXzRlQD1zHUeBHkiCWzxYIkqFdDpQJUyHbD86J06Jb0oLNFCHYFETR1Q/MFaMMVeNQlSNYU19\nf1IEJF+fNluSQlmGilEJZFNxllAFglIyaF0Wj1QDNWKeLWSmNmOfPmKZRmCZOGSgX2YaVmkhMWep\nMmiqYWsKkldAO2ejQGeYkVwdUGOYNWqsfmA/Z2ksrVcWaWonRGqbOW2vZ2hmaHEUpWEYa3EsR3Cu\ncHEta21qz1oAmGgmTXKkj2lDbncbzF4AbnBtSHWsjGpVQ3ezw2MJymIARHi0RXm1THivV3ajwWcJ\nRnyy1GQAdXs2T3qyVXmsw2kNq20wwGsLdXd0UXy0eX85U362S4G3Wn6xVX+3eXt4q3YeXICzUIW8\nXIOwvXUlfoB9WYe4XIa/sXwsWoi5Yoa5r4Aug4WCx30l1Xgwt4ExaouyYI2/hZBBynw8YY7A03wy\niIqHcY2vt4YtaY+8co6wt4c1uIg9eZK7wYo6fJSxvY1CcJfEcpnGxY5F24k8c5rHw5E/dJvIu5JR\neprDwpJNmZiQyZBh4o46tphmf6DIgaLKuJtvxZpTy5lO4pgm2JhKu55y35sniaXIz51Qi6fKjKjL\njanM359Qj6vOkKzP4KM90KVd5aI+4aQ+46JTqauo5aNO5KNU5KdBlbHVmbHPlrLWm7LQ3qpd56pL\n66lasbOvrLS85K5U465bo7bPr7bL46+CqbnM4LRrwLq57rhkssHVrsLb6bxz67108rxutMTXssXe\nwsTB9L5x7sB3uMjcu8rex8nGwsvTycvI9MZ878Sg+8Z+v8/iy87KwNDjzc/L98qGzdLV786a5dC/\ny9flzNjm09vk3d/c8dzL3+He2eLq6evo7vDt7/Hu8PLv8fPw8vTx9fP38/Xy+fTy9Pfz9vj09/n2\n+/j9+Pr3+fv4+vz5/fzz/P/7/v/8YPjk8wAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBI\nWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AYLFTAZUKn7/QAAACJ0RVh0Q29tbWVudABDcmVhdGVk\nIHdpdGggR0lNUCBvbiBhIE1hY4eod0MAAAGvSURBVBjTY2Bg6ChGB6YMQFD8Gh0Ug4QzTz9/8ezJ\nkyePgejx40dP75zOBAknvT794vHjB4+AQo8f3Xv8YtHrJJBwzOvHR148uAcEd+/effJi7Z3XMSDh\n0Nf37519DhS6e+fOvdfnb95+HQoWPmErJRu8+c6tuw9vvd5/+zZU2L5x0rxpDebXQG7YdhUk7AQS\n1pnV316R6GPjXtB57PpjkLA1SFhiQm1rVtDicwfWFF18ua789u0tN0DCIs2llSFrju9efbAr+yi7\nwO3bNZf2AoX5qjNi/U7uvrB+/gZD9svsp28bHyoBCnNJ56S67Vm6dcrcyexnTrG/fq290puBgd9C\nRZ9HZsn2iQu62ffNOSzGqWjXJsjA7++Qn2/AoblwVR/7oZUzZ67obWkqFAcKm+UbMU2XdHFk31mW\nFunr5eURH8UCEjZjmq5nskmYfWWYl6enp0dgPQvQaH9VDbZ0Nb2NV5zZZ6e4BtT3TOVmBwmHWzGl\nyaup74gTZe/Jq+Pm5hYE+Yafn58pQV5IOVdBjpd95jJ2Bjhgio7W9bS0tFTSYq9CEmZkggFmdlaw\nCAAubtLM/zAGbQAAAABJRU5ErkJggg==\n\}\]\nset\ images(reload)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBI\nWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gcaChMjSyiLTwAAArdJREFUOMutlE1rE1EUht9z5yOt\nqa39NNaKjSKiVAtWhYJYqShtlSwEEcGVyPwGl/4BF+ouGxf6C2bhR6GgoBQXxbYLsdQWa2maJpiJ\nzUczNzP3uknCZJiktXjgMHDP4TnvvHPmAv8YsbguY3H94G59DPuL7Vhc7/zv4CsT5wEg0wy+X8W7\nwmkXP8MAHgJ47odul1No1/rw6d0iAHSZBrf2BI7F9UkAbyb1/kX38sDZYltJrdbKZQd5noGdE4hE\nIoFwagC9CeD97fFRFFpd/Mla4HIHjBFIJXDbBlMJVrIAYkA0Gq3Cw6bBi4HgWFw/AWDl+q1RlGUR\naStZkyAcCaYQpGbDzknYeQGqfCUPXDMN7qgBgl9cvXTaJlAoZW1CuvVFl2yoCsGxRe3MA+0yDe4A\nQBB4SvaGkMyvQlEYujsPA2DQKARZaZBwsS2WoIcJA5HBQI+DwNCoFQqp6Ohph7ZVxMzscl392tRF\nqC1oCG2yx4S2jlZspRNyZnY5C+CMaXAyDU4AoJDWFNoQrEBFRBmSS5+zLoC7psG/e+u2W6hCjwVB\nG1phy5xbkqoDIHQqwb/5t8cD3djrL00AVo/Ou7k/pTQA4OkTJCt9VB3AC/K4afCE96yZYgJAUsov\nv62FCcKwqDnjCdPguk+U9GVdsTqZ5TfxeHpH6XRcLtVSKDv5TLtfgau+1CpPxf9GXjVUKbKfH0Tx\n5A2WSqxlYhfGoyK5kRmzVmW8mAZV+r3JPFB4FSs+xQSAlt+Kr4NjbC6VtB70dx9Ybx9y7x0ZYT/W\nPoqEB1YFKhWg8Nqh+C6jGnxlWqwcitJLrjoaAUSMcpFhZod7ycn+krZwahARACbygZnHlprvI4+U\n7r5z7A4x9EkXWwuv3NfClaJHKCLST2qoRYqNdbkzP+c61SEUsG5B2eiK9W5DnRV/AfIcOgCbYwEf\nAAAAAElFTkSuQmCC\n\}\]\nset\ images(delete_reverse)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0\nU29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPESURBVDiNtZVfaFt1FMe/53eT3CQ3N+uS\ntmnarC6hGGVizdrRTgoTJutDUJ988GnI9jSqgmzgWwhbQV8mqAx98MXhk0/Cxh7WgQ4GrStkxbbU\nbSk1/ZPENqHrTW5u7r+fD2lcm9YyhR74wu8Pv8/v/A7n/A5xznEYxg6FCsBx0CYRCQD8ANwA3DIg\nKkAdgLatLc659Z/AROSTge7vgPfDRGe8QL/AeYdF9FcNmFnh/JdLwE9EVOCcV/ac3y/GPp8v9Anw\n+juq+k3HwMBL7cmk6OrthaO9HWapBH15GRt379bXHzxY/Nnr/fhr4PdKpVI8EByNRtuubGyMDpvm\n98fHxry+06epns/D2tqCVa2CiSIESYLY0wN1dpb/ef26+itj57/q7JzIZrPP9gUPDg46+1Q1/unC\nwr1X0ulOR1cXak+egJsmwHlDtg1YFjgRvPE4rM1N/JFOF76Ix99e8ngeT09PG0BLVoRCoeClbPaz\n7mQy4OzpQTWTga0ogKY9V73eULWK6vQ0nMEgQmfPBscWF6/IshxssnaB/X6/WzKMd4PnzjnUR48A\nVd0Xyut1QNeBWg3KxASC/f1On66/19XV5d4DTqfTjrdyubDzyBGReTwwi0XwWm0XlDQNpGng6+sw\n5+ehT01Bm5oCMQaHKHrfXF3tTKfTjtZ0c/UuL7/qDYdNY27OZWazEHw+MFEEt+2Gh5oGXi7DNgxw\nzkG2DUYEq1yGLxKx+paWXvsNmAVg7gTbJMuKoSiAYcDO5wHGwBkDMQYiaohzMMbAOQcHYNs2yOWC\noWkcfv8WALs1xnp1dHReKxREoa0NzOl8DiMCa14gCI1xc93phOD3o7a25tpIJucA6LvAqVTKppGR\nZ5zzolEsQozFQERAC3wnFEQQYzEYxSIgCGvS0JCSSqX2eIxAIFCxYrHx1du3NWlgAEySdnu9reZc\nkCR4Tp7E6p07mh6Nfh4IBP4p7dbKo5mZmW5rZOSHUCJx5uipU0JtchJWoQAmCA0vAXDbBguF4B4a\nwubDh1Yhk7lH9+9/mEgk8gD4fmAAcM1fvXqiPj7+o9zbG+1OJt22qsIulcArFTBZBgsGQV4v8rdu\naUout+i5du2D+OXLC834/hsYKysrnnZB6Hg8PDzGi8WP5L4+LoXDoisQYHq5bKv5fH3r6VOiUOjL\nlycnv92wrPVIJFLb9fQDOogA4Oj6jRuR0s2bb+i5XAKVygkmy7OOY8cygQsXMp0XL64BKDdT7EXB\nOy8QAbgURXHIsmxuP7kOYN9P/kXB/8sOref9DbaUvAtd86h8AAAAAElFTkSuQmCC\n\}\]\nset\ images(down)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0\nU29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL8SURBVDiNtZRPbBRVHMc/781Md1bTGMCk\nhYNtOIiAnkw0bSFpNCGeOEAwMRyMMaReNCY0JXpFozQWT3JWExsEIzaxJkSREGiJIglRNCqVDSEI\nxlKqsN3ZeX9+HnZ2O112Wznwkl/e78283+f33nd+v1Eiwv0Y+r5QgbDdi4GR6AaermWjNX9NjZru\newLj6Xp76COsNzhvsT7FeYvzBusNqUs4dPittonbgwFQnP7jCFW7QNUukLqk4T+3cc8Kl7nHoVD/\na98KYEFYrBqR2lrEs1I1LQtehHgEX3signHVFU/c0HjLSHRSPIONjKFKRHws4vF4vNQsdRUSW27s\nGRiOFo+uOTU1agaXgL2TsZ7uR5/es/3NYhhEOLGx8xYvFrRHh4L3CQm3iAoaHcAru96IRcCYKhMn\nxhdmb/15sM5Tea0GhqO9m9Y/uX/H4MvFC9e+oWLnsVSp+jvMVa+R2H9BAQIiEOtOtvbs5uTUVwuX\nr8/snx4177bUeOo9M/brlR/Gvz13LNm8rp8gVBhV5u/qDFbfIYo1HbEmijXFYszW9bs4f/FscuXG\npYk89C4wwNqSG5r+5evvf7z0ndm4tp/ZtITq8EQZMIoDOuKAvp4dlK5etj/9fu7nyrx7sZmjWpXN\nln2qU6nowvZnX+gNH6roi/PHCUKNDhVKweOrtlGZ0zIxefS6M/aJ6YMy18xoWW5nDshtbczg5Imj\n/xTcKjas6SfsUEQFzYaH+yi61Xx5/IvbQvBMK2hbMMCpMblqU7vt2OSn5e5oE+sefKxmhc0c/ny8\nXE3NzjMHkt/axbeUIj8GRsKdqzvXfLz7+ZceCCLFJ599WL45e3Pf6dH0g+XiloCVUgoIcqYB3fda\nsPeR3t7hoKBUaaZ05Oz77nXA58wBTkTsEnAGjKg1TJjzg2zWT70avBMEuuv8ITOUppgMaDOoBUw2\nW8DUwVEO2Ow3r00OYtqs03pL16/Q/E+sX1NnlvVdQ4LmE6dAKiL+ro/XTufMryerw10OLpKD/Qce\nAIZcIO5IFQAAAABJRU5ErkJggg==\n\}\]\nset\ images(ok)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dE\nAAAAAAAA+UO7fwAAAAlwSFlzAABJ0gAASdIBqEWK+AAAAAl2cEFnAAAAGAAAABgAeEylpgAAA3dJ\nREFUSMftlE1MHGUYx/8zszO7M8t+FOxSoHZbRCzFtLQH2lCbIMWqbUiNsSH2YGNMPBlNLxZ64qKk\n1XixMTGNmnjxq0YvhESFkm1AUJvCtnalAlKWlcrusuzMztc7X15Y3a5LacB48p/887555nmeXybP\nkxf4X2uI2khxW1dZG0u7LlEMNUeI3j14Tun/1wAdPRA0wz/T9fz5Ssdx8MngRSmR+i1hqKRz4G05\nms+j1wtQia9n/yMHAz6vB7oTx6vPnvU981jnTs7jfr8wb12A1m7fTreLf+VI83HPbHIUSXEaKhFx\nfXpCMWzz8w0DOJr+6OiB426FLCKr3EGFtw6TczecqcTNhMmJ724I0H7WezLkr9rdEG6k55eicNEC\neFcFvox8qpu2fWqoB+a6AU/3lPtpuC4ca+kQ/shOghgqQr56RMa/03WS+2KgV/q+uKYk4MQJMKXi\nFrHeaqrbxwu8GylxFl5uM5YlCaOxEWLazulSNXcBWl/nt7Z3+xcydWXKE2f8r6Fgjdu7hL0Mw73Q\n3NDs+T3zMxwHCPDV6B/tUyzHOj3QK6VLAf5ucGZTAIx1tXV36/btVTuY/rE+Obmc+smC0XmIk5Mj\nJDDxeFPbrupQOZ2WZlHhCyORzNhD44PXv3kjuxeAc88/YBj7q6aH9tSEq6oZUY3j6IEnvfvqm1oY\nsL9EVO/X5f6K2m1bqumUdBsM7YbtcLgSvUIM0zy1WnMAcOUvtuM0Ch43Z1kmND0HWYuhrmYrWxnc\nHBwaHz528NH99JIUh2kYCPprMHbjB802yQeXz8kT91qMv4ZZ28L2JdILT2VlkQ9X1rK2bSKr3AHL\n0mgI11OWrSCnpeHhfBBlHVdvXRNli+uIDyvkvgAzwyT14GH9oiyR8MzCXP2WTZWc4PZC1jKQtQx0\nQwZAgWeDiETHZJXoL0fOL1/DGir52B3uLnuOoZgPd4UfFraFQoyii7BsAt4dwPxi2ozFp0a/fVM8\ntFbzf6xpXgO9uUsg2HPz9mRsLBZVABYsw0PTdcTiU6atOS/hPl9iZpWYa3pEl5cS5OPgDvuB+fRi\no08Q2FvxuCrl9PcuvyP1AeBW7FqpoVZ810ZRRXemlJtf5I/4Q+wF2Pj1x8/Ek9k5qACsNeyUmgG9\n0rTwLHQ+3wFgF9kqOlcfctG3fGOqCOAUgPKx/15/ArQwg1fnUtydAAAAJXRFWHRkYXRlOmNyZWF0\nZQAyMDEwLTAyLTE3VDA2OjQ2OjUwLTA3OjAwat5j0AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0w\nMS0xMVQwOToxMzoyNS0wNzowMAO3oKwAAAA0dEVYdExpY2Vuc2UAaHR0cDovL2NyZWF0aXZlY29t\nbW9ucy5vcmcvbGljZW5zZXMvR1BMLzIuMC9sagaoAAAAE3RFWHRTb3VyY2UAR05PTUUtQ29sb3Jz\nqplE4gAAADF0RVh0U291cmNlX1VSTABodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ25vbWUtY29s\nb3JzL1AdtesAAAAASUVORK5CYII=\n\}\]\nset\ images(delete)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAF1QTFRFAAAA\nxwgAzRUA0R4A1ycA3jIA6QIA6h0D/gEA/hoC6i8I4zoA/ikG/jUL6EMA60cS7V4e/kcU/lYd73It\n+2cq/XY38oc9/oZH9JVJ+phV/qFm/qx1/riG/sSX/sui1vsBTgAAAAF0Uk5TAEDm2GYAAAABYktH\nRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AYLFTAtcR0PSAAAALhJREFUGNN9\n0dkSgyAMBVCSgBsVqIji1v//zLoB6kzLE3PmTshVxn4fpdKdKKmSSQmDDl6KoMYgnvpZvNidk3FO\n766kX5a543zPOtdqgC0ipZ/nyXEKeg6Xopum0fK7Mia4HcfBtqtWSdenuB36fssiXgtxsofCrefx\n2pOJtrlN01QAj6zT+l3XefJzX4SqfpVZ8NgNIS+L4vRLN4CsCE5oYrfdQxx1XGz1OBwxrQuQVrl+\nB4A/f/cLR24LBcAhtFwAAAAASUVORK5CYII=\n\}\]\nset\ images(printer)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAV9QTFRFAAAA\na2lobGtpbGxpbW1rbm1sbm5scXFudnV0dnd0d3d1eHl3enp3fX57gYB/g4OAhISBhYWDh4aDh4eF\nioqIi4qIiouIi4uIi4uJjIyKjo2KkpKQk5ORlJSSlJSUlZWVl5eVmZmXnJuanJyanZybnpyanp6e\nn5+dn5+foaGfoqKgo6Ogo6OhpaSjpaWkpqWkpqamp6enqKinq6qpq6uprKuoq6urrKuqra2tr7Cu\nsLCws7OxtLS0tbW0t7e1uLe1uLi4ubq4urq4urq5vLy7vLy8vb29vr68v7+/wMDAw8PDxMTExcXF\nx8fGyMjHy8vJy8vLzc3Nzs7O09PT1NTU4ODf4eHh4uLi5OTj5OTk5eXl5+fm5+fn6Ofn6Ojo6eno\n6enp6urq6+vr7Ozs7e3t7u7u8O/u8PDw8fDu8fDw8vLy8/Py9/b19/f3+Pf3+fn4+fn5+vr6+/v7\n/f39////KTpVyAAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwY\nAAAAB3RJTUUH3AYLFTIVaynVVAAAACJ0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUCBvbiBh\nIE1hY4eod0MAAAD7SURBVBjTY2DAAyyRALJwSTEUlKAKhwUEiEgEBsWhC4dJy8jIxiWiC0sAgaRk\nEppweGSUrGxCUjKacGRgkKJeUnIqsjCvZUlUTJyvX0pqeoklL1y0xDIrCgqyLLV5YaIZlmzMUCBk\nGuHPCxEtyS1BAgkJwSBx3jSr6CKvlOTU1KT4+Nj4+Hhxd7BwsHy2R2h+QVFhUVFeXl5OJo8DWDhE\njoOdjYWNlYWFmZmJkZ2NywYs7O1srqyqoqKkIMrHLyAoKCwFEfZ0tLc2MTYy0jc00NXR0lRXswAL\n8/rwogANMU6wC+1c3TyAwMXV1cXJycnWDOIfXnTAzUAiAACtUkaqnD2S7AAAAABJRU5ErkJggg==\n\}\]\nset\ images(reverselist)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0\nU29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOwSURBVDiNtZRfTBxVFMa/e2dmB3aBFRZK\nFWSLLYWlqYXShYTFSK3GtFRt++qfxBdNjG9uGh/0ycQHM4/qg2nfNCYY20STmkhatDjQYghIS/gj\nWJZlLbusXbplt8vOzD0+dHczrlvoS09ycmbO3Pubb7659zIiwuMI/lioAOTiRiCouMHwvqSwl8mi\nDiI4uMTWGUdYmHRVWPhU14zkTmBmtyIQVF7nEvvcd2B/eWtrq+qp8cDpqEI6ncLdzQT+XFja+uPG\ndEaY4iyAc7pmiB3BfWeVj+tqd30YePGwc3dtA5ySG2lrA4spHVkzBdmowi65Dfx+FYZHLqdvx8KD\nv31mvL0tOBBUjjxRWTPSfniPGgnFN9ciMadDVY2WfXvFEb/f+dfmNfydWEQ2I1CB3fC5+zH066V0\nfCP6hq4ZF0uCez+Quao6Qi7V3ZC8fydkGtZ7AEYBuBnHO25nTfDVgTPqVOwS7iTXkc0I1KiNOFD3\nPC4MfZ0kIdp1zYgUg2UAh7a2so2miI9aBh3TNSOTe3YXwEeBoDLzy9Xh8z3dR8tH1r6HEBbiZhhp\nTwJ7vfuUxVsLpwB8UQzmALqYhIRl0GkbtBC6Znwbji6NRSKraKr2FfrhxCyan2orZxx9pazgagVv\nBOETXTNiD/sRJPDVWmwtVVlWW+glM3G4XJUA0F1qjmwZNEoCE/lGIKhIAL4DcNo+MB5fp2fbOwv3\nWSuDMocKEmgOBJXi7XuRldrSgaCiMo4rntqarqPdJ9Uy2fVAOQg/z52DoAfL97jv3cIcS5i4Mv7D\nVjQWnSCBF0qCc3AX4xhtaGhoC3S85Lge+hGbW4n/jatQq9HjfQXXpoezK+HQHAn06pqReuhZoWtG\nigT6V1cjK5OzY6a/6QTyyvNRJrvgbzqBydkxM7QSWiGBfl0zUsAOh5CuGQkQ+haW5qPzyzeF3zsA\nRVIBAIqkwu8dwPzyTbGwNB8FoU/XjMInlbSCMcZzL+UA2KE3Ja+rno12d/ZW19c9ySfCP6Hr6eOI\nrq+J8Uk9YaSp+/cvrVtkgxXAjDEGQMolt1UGgPvO8JbqZj70XM+xysb6PWw1ukwj45fvbd6m/ulv\nrDkAAoAFwCIiYkSUVyhtkxwAa3uNH/S0yBcO+jqcN2an0hsr1smZQWsqD7SlmQfnAXIRUC6+bjvF\nO6uf4eeTq/TWzKA1lgfZoXbwIynOJXn2M+c/C3SvhFILgElE5iN7nKv5oJyn+WqHiu1WhR1mV8ty\nsP+A8zB7/AuncspNor9CdAAAAABJRU5ErkJggg==\n\}\]\nset\ images(isempty)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI\nWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAYAAAAGAB4TKWmAAADkklEQVRIx+1US2xUVRj+eu/M\nGZ37AJf42GkrpQ0aTVxQbXRnQhOTaWKiCCqlU6cQ9o6ZVzqtwYUJ2BfWtqPBsOjCgAsXRor1sTFC\nx3bDRlACovS+5869587c34UztaEPinFl/JN/c873OPf/bz7gP1m5XLork3/7+X8DK9x5kMmne4SI\nuBARI19l8umercTvBbtKKI7kfbfqkuu6VBzJ+5sRm1in4pBTcbbENgmJwlCGqlWXwjCkMAzJtMwN\niU1x3dCIc5845+Q4NhWGMpTLvfPChiMSqEUHACIAIPCAQ5IkHE0dZzHG5pommXy6J8bYXOqtYywe\nl2BXLBBoVTBsoQfWGrTc+bIYY3NHU8eZJMnwuY8YY3AcB6PjJ3nAeSnK2KHUwDEWlyTYjgVZUuBW\nKhibPMU5D3oL2eL5be3BMA0KagHZjkVBwEk3NBp+t0CarpHPPbqt/U6e75GmrdDQSM7f1pLXmRg6\n8YCTYerk+x6FYUie79EfK7fI86vbEhc3Orw4v3Cl67l9iz9e+iHxxN4nxfj9cdgVC261At/zoEgq\nXNfF+MQHnAdbj0XY7KKQLZ4POC+NjZ9CNMoQhuFfTSEYi2FiYhS1ICjdbebiZheZfLqHMTY80D8o\nCkILPL8KIgIRQRRFdHR04vLlS51d3fsWL84vXLkng+bf1H8kxSRZguWYkGUVqrIDoiDCtHQoioL2\n9g7xp/JiYiuTDaMiFo3OHekbYJIUh2kZkOMKbMvCifeGYVkWVGUHNGMFkiThtYOvMxaJzm22aHEj\n8b7DSSbLMizHhCKpME0T09Mf8loQTJfLi51tbY+LqqJCN1egKipaW9vE5eWlxLPdXeu+RFgjnogI\n4rlkcpDJigLLNiHHFeiGgZmZKc5rQW8uW+zntaC39PEM1w0dqrITmn4biqLgwIGDTBSEc3eNinpY\nBxFBisvQDR2zs1NcN41XC9niBQByIVu8YNn2K2fOfMI1TYOq7EQYhqjX6gDWR8XqiObnv/7l6Wee\nKi8tlV9qb98jcp9jdnYquHHz1uGT749+CYABuA+A+N0331/dvWf38rVrP+9/9LFW0fc8nD37Kbcr\nzssjQyc+A/4Op2YWRQDEAMSSqb79D+7aVQKAX69ff3NqcuYLAEGj641HRQFE+pJvvPjIQw9PA8CN\n324emhyb+hyA3+jaWgM0SDEAkeRgXzcFVDt9+qNvG0C/YfBPsP/X1vUnKKIevOk3P2MAAAAldEVY\ndGNyZWF0ZS1kYXRlADIwMDktMTEtMTVUMjM6MDQ6MjUtMDc6MDBt/LoyAAAAJXRFWHRkYXRlOmNy\nZWF0ZQAyMDEwLTAxLTExVDA5OjEwOjE5LTA3OjAw0PLOhAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAx\nMC0wMS0xMVQwOToxMDoxOS0wNzowMKGvdjgAAAA0dEVYdExpY2Vuc2UAaHR0cDovL2NyZWF0aXZl\nY29tbW9ucy5vcmcvbGljZW5zZXMvR1BMLzIuMC9sagaoAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDA5\nLTExLTE1VDIzOjA0OjI1LTA3OjAwMk3MBgAAABd0RVh0U291cmNlAEdOT01FIEljb24gVGhlbWXB\n+SZpAAAAIHRFWHRTb3VyY2VfVVJMAGh0dHA6Ly9hcnQuZ25vbWUub3JnLzLkkXkAAAAASUVORK5C\nYII=\n\}\]\nset\ images(job_engineering_logo)\ \[image\ create\ photo\ -data\ \{\n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\nnv8PbNpb9t40/Q8AAAAASUVORK5CYII=\n\}\]\n=====\n\n\n<<categories>>\ Widget\ |\ TclOO regexp2} CALL {my render {A TclOO megawidget based on tablelist - extended (XTableList)} <<TOC>>\n\n\[JOB\]\ 2016-07-08\ Playing\ with\ TclOO...\n\nThe\ following\ source\ implements\ a\ TclOO\ megawidget\ based\ on\ \[tablelist\]\ with\ some\ extended\ features\ to\ manipulate\ the\ tablelist\ content.\n\n\[WikiDBImage\ xtablelist_demo.png\]\n\n\n**Features**\n\nThe\ following\ additional\ commands\ are\ implemented:\n\n\ \ \ *\ Move\ selected\ items\ up\ or\ down,\n\ \ \ *\ reverse\ the\ list\ order,\n\ \ \ *\ delete\ selected\ items,\n\ \ \ *\ delete\ all,\ but\ just\ keep\ selected\ items\ (exceptional\ delete),\n\ \ \ *\ undo\ previous\ operations\ (restore\ content\ to\ it's\ original\ state),\n\ \ \ *\ save\ listbox\ to\ file,\n\ \ \ *\ restore\ content\ from\ file\n\n\n**Source\ Code**\n\n\nThe\ megawidget\ source\ is\ divided\ into\ various\ files\ to\ keep\ public\ and\ private\ interface\ separated.\n\n***pkgIndex.tcl***\n\n======\n#\ Tcl\ package\ index\ file\n\npackage\ ifneeded\ xtablelist\ 0.3\ \\\n\"\ \[list\ source\ \[file\ join\ \$dir\ xtablelist.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_public.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_private.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_readwrite.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_filesel.tcl\]\]\;\ \\\n\ \ \[list\ source\ \[file\ join\ \$dir\ xtablelist_popupmenu.tcl\]\]\;\ \\\n\"\n======\n\n***xtablelist.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist.tcl\ ---\n#\ -----------------------------------------------------------------------------\n#\ (c)\ 2016,\ Johann\ Oberdorfer\ -\ Engineering\ Support\ |\ CAD\ |\ Software\n#\ \ \ \ \ johann.oberdorfer\ \[at\]\ gmail.com\n#\ \ \ \ \ www.johann-oberdorfer.eu\n#\ -----------------------------------------------------------------------------\n#\ This\ source\ file\ is\ distributed\ under\ the\ BSD\ license.\n#\ \ \ This\ program\ is\ distributed\ in\ the\ hope\ that\ it\ will\ be\ useful,\n#\ \ \ but\ WITHOUT\ ANY\ WARRANTY\;\ without\ even\ the\ implied\ warranty\ of\n#\ \ \ MERCHANTABILITY\ or\ FITNESS\ FOR\ A\ PARTICULAR\ PURPOSE.\n#\ \ \ See\ the\ BSD\ License\ for\ more\ details.\n#\ -----------------------------------------------------------------------------\n#\ Purpose:\n#\ \ \ A\ TclOO\ class\ template\ to\ extend\ tablelist\ functionality.\n#\ \ \ Might\ be\ usefull\ as\ a\ starting\ point.\n#\ -----------------------------------------------------------------------------\n#\ TclOO\ naming\ conventions:\n#\ \ \ public\ methods\ \ -\ starts\ with\ lower\ case\ declaration\ names,\ whereas\n#\ \ \ private\ methods\ -\ starts\ with\ uppercase\ naming,\ so\ we\ use\ CamelCase\ ...\n#\ -----------------------------------------------------------------------------\n#\ Credits:\n#\ \ \ tablelist\ widget:\ Copyright\ (c)\ 2000-2015\ \ Csaba\ Nemethi\n#\ \ \ tooltip:\ \ \ \ \ \ \ \ \ \ Copyright\ (c)\ 1996-2007\ Jeffrey\ Hobbs\n#\ \ \ autoscroll:\ \ \ \ \ \ \ Copyright\ (c)\ 2003\ Kevin\ B\ Kenny\n#\ \ \ icons\ used\ from:\ \ Open\ Icon\ Library\n#\ -----------------------------------------------------------------------------\n\n#\ -----------------------------------------------------------------------------\n#\ widget\ commands:\n#\ \ xtablelist::xtablelist\n#\ \ xtablelist::configure\n#\ \ xtablelist::cget\n#\n#\ \ xtablelist::...\ +\ all\ commands\ from\ original\ tablelist\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ more\ sub-command\ refer\ as\ well\ to\ the\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ public\ class\ interface\n#\n#\ -----------------------------------------------------------------------------\n#\ widget\ options\n#\n#\ \ -xhideoption\ \ boolean\ \"yes\",1\ /\ \"no\",0\ (default:\ \"yes\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ hide/show\ popup-menu\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ to\ manipulate\ tablelist\ column\ display\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default\ is\ \"yes\":\ show\ relev.\ menu\ items\n#\n#\ \ -xshowbuttons\ boolean\ (default:\ \"yes\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ show\ sidebar\ action\ buttons\ to\ manipulate\ tablelist\ content\n\n#\ \ -xsortoption\ \ boolean\ (default:\ \"yes\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ hide/show\ popup-menu\ to\ modify\ tablelist\ column\ sort\ order\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n#\ \ -xfileread\ \ \ \ boolean\ (default:\ \"no\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ allows\ reading\ in\ a\ previously\ stored\ file,\n#\n#\ \ -xfilesave\ \ \ \ boolean\ (default:\ \"no\")\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ allows\ to\ saving\ tablelist\ data\ to\ a\ file\n#\n#\ \ -xfilereadpostcmd\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ file\ read\ post\ command\ (default:\ \"\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ defined,\ allows\ to\ e.g.\ set\ widget\ state\ of\ depending\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ action\ buttons\ in\ the\ caller\ program\n#\n#\ \ -xdeletepostcmd\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ table\ entry\ delete\ post\ command\ (default:\ \"\")\ \n#\n#\ \ -xrefreshpostcmd\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ executed\ after\ a\ delete\ /\ refresh\ action\ takes\ place\n#\n#\ \ -xselectpostcmd\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ specify\ a\ command\ to\ be\ executed\ after\ selecting\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ an\ item\ in\ the\ tablelist\ (default:\ \"\")\n#\n#\ \ -xmoveovereffect\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ boolean\ (default:\ \"no\"),\n#\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ enable\ visual\ \"move\ over\"\ effect\n#\n#\ virtual\ events:\n#\n#\ \ \ <<TLExtDataModified>>\ \ \ \ \ -\ delete,\ modified\ or\ sort\ action\ took\ place\n#\ \ \ <<TLExtDataModifiedUndo>>\ -\ undo,\ nothing\ changed\ so\ far!\n#\ -----------------------------------------------------------------------------\n#\ Hint:\n#\ \ \ some\ of\ the\ options\ need\ to\ be\ specified\ when\ creating\ the\ widget\n#\ \ \ and\ are\ not\ fully\ configureable\ later\ on\ once\ the\ widget\ has\ been\n#\ \ \ created\ (open\ issue\ to\ be\ implemented\ later\ on...)\n#\ -----------------------------------------------------------------------------\n\n\n#\ for\ development:\ try\ to\ find\ autoscroll,\ etc\ ...\nset\ this_file\ \[file\ normalize\ \[file\ dirname\ \[info\ script\]\]\]\n\n#\ where\ to\ find\ required\ packages...\n#\ set\ auto_path\ \[linsert\ \$auto_path\ 0\ \[file\ join\ \$this_file\ \"..\"\ \"contrib\"\ \]\]\n\npackage\ require\ Tk\npackage\ require\ TclOO\npackage\ require\ tablelist_tile\npackage\ require\ tooltip\npackage\ require\ autoscroll\n\n\npackage\ provide\ xtablelist\ 0.3\n\n\n#\ workaround\ for\ aqua\nif\ \{\ \[tk\ windowingsystem\]\ eq\ \"aqua\"\ \}\ \{\n\ \ \ \ \ \ \ \ interp\ alias\ \{\}\ ttk::scrollbar\ \{\}\ ::scrollbar\n\}\n\n\nnamespace\ eval\ xtablelist\ \{\n\n\ \ \ \ \ \ \ \ #\ the\ widget's\ interface\ declaration\n\ \ \ \ \ \ \ \ namespace\ export\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ addValues\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ deleteAllItems\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ this_dir\ \ \ \[file\ dirname\ \[info\ script\]\]\n\ \ \ \ \ \ \ \ set\ image_dir\ \ \[file\ join\ \$this_dir\ \"images\"\]\n\ \ \ \ \ \ \ \ set\ image_file\ \[file\ join\ \$this_dir\ \"ImageLib.tcl\"\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ proc\ LoadImages\ \{image_dir\ \{patterns\ \{*.gif\}\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ p\ \$patterns\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ file\ \[glob\ -nocomplain\ -directory\ \$image_dir\ \$p\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ img\ \[file\ tail\ \[file\ rootname\ \$file\]\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ !\[info\ exists\ images(\$img)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ images(\$img)\ \[image\ create\ photo\ -file\ \$file\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[array\ get\ images\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ proc\ xtablelist\ \{path\ args\}\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ this\ is\ a\ tk-like\ wrapper\ around\ my...\ class\ so\ that\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ object\ creation\ works\ like\ other\ tk\ widgets\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ obj\ \[XTableList\ create\ tmp\ \$path\ \{*\}\$args\]\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ rename\ oldName\ newName\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ rename\ \$obj\ ::\$path\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$path\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\}\n\n#\ -----------------------------------------------------------------------------\n#\ Tk\ widget\ 'a\ like\ interface\ declaration\ \n#\ -----------------------------------------------------------------------------\n\noo::class\ create\ XTableList\ \{\n\ \ \ \ \ \ \ \ variable\ tblwidget\n\ \ \ \ \ \ \ \ variable\ widgetOptions\n\ \ \ \ \ \ \ \ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ constructor\ \{path\ args\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ read\ images\ from\ library\ file\ or\ alternatively\ one\ by\ one\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ image_file\ \$::xtablelist::image_file\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ image_dir\ \$::xtablelist::image_dir\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[file\ exists\ \$image_file\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ source\ \$image_file\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ widgetCompounds\ \[array\ get\ images\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ widgetCompounds\ \[::tablelistbrowser::LoadImages\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[file\ join\ \$image_dir\]\ \{\"*.gif\"\ \"*.png\"\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ widgetCompounds\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ undo_flag\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ sortby\ -1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ undoList\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ DELIM\ \"@\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default_dir\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ declaration\ of\ additional\ (configureable)\ widget\ options\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ widgetOptions\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xtabheader\ \ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xmoveovereffect\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xhideoption\ \ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xsortoption\ \ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xshowbuttons\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfileread\ \ \ \ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilesave\ \ \ \ \ \ \ \ \ \ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilereadpostcmd\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xdeletepostcmd\ \ \ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xrefreshpostcmd\ \ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xselectpostcmd\ \ \ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ --\ \$::tcl_platform(platform)\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"windows\"\ \ \ \ \ \ \ \ \{\ set\ widgetCompounds(default_dir)\ \$::env(TEMP)\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"unix\"\ -\ default\ \{\ set\ widgetCompounds(default_dir)\ \$::env(HOME)\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ we\ use\ a\ frame\ for\ this\ specific\ widget\ class\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$path\ -class\ xtablelist\]\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ we\ must\ rename\ the\ widget\ command\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ since\ it\ clashes\ with\ the\ object\ being\ created\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widget\ \$\{path\}_\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ Build\ \$f\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ rename\ \$path\ \$widget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ configure\ \{*\}\$args\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ destructor\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ add\ a\ destructor\ to\ clean\ up\ the\ widget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ w\ \[namespace\ tail\ \[self\]\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{bind\ \$w\ <Destroy>\ \{\}\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{destroy\ \$w\}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ cget\ \{\ \{opt\ \"\"\ \}\ \ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[string\ length\ \$opt\]\ ==\ 0\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[array\ get\ widgetOptions\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[info\ exists\ widgetOptions(\$opt)\ \]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$widgetOptions(\$opt)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[\$tblwidget\ cget\ \$opt\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ configure\ \{\ args\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \$args\]\ ==\ 0\}\ \ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ return\ all\ tablelist\ options\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ opt_list\ \[\$tblwidget\ configure\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ as\ well\ as\ all\ custom\ options\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ xopt\ \[array\ get\ widgetOptions\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ opt_list\ \$xopt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$opt_list\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ elseif\ \{\[llength\ \$args\]\ ==\ 1\}\ \ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ return\ configuration\ value\ for\ this\ option\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ opt\ \$args\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[info\ exists\ widgetOptions(\$opt)\ \]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$widgetOptions(\$opt)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[\$tblwidget\ cget\ \$opt\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ error\ checking\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[expr\ \{\[llength\ \$args\]%2\}\]\ ==\ 1\}\ \ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \"value\ for\ \\\"\[lindex\ \$args\ end\]\\\"\ missing\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ process\ the\ new\ configuration\ options...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ array\ set\ opts\ \$args\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ opt_name\ \[array\ names\ opts\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ opt_value\ \$opts(\$opt_name)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ overwrite\ with\ new\ value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[info\ exists\ widgetOptions(\$opt_name)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetOptions(\$opt_name)\ \$opt_value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ some\ options\ need\ action\ from\ the\ widgets\ side\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ --\ \$opt_name\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -labelcommand\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ replace\ sortcolumn\ command\ by\ our\ own\ method...\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xsortoption)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -labelcommand\ \"\[namespace\ code\ \{my\ SortByColumnCmd\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ -labelcommand\ \$opt_value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xtabheader\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ InitializeTabHeader\ \$opt_value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xmoveovereffect\ \ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xmoveovereffect)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ EnableMoveover\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ -activestyle\ none\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xhideoption\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xsortoption\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xshowbuttons\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfileread\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilesave\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilereadpostcmd\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xdeletepostcmd\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xrefreshpostcmd\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xselectpostcmd\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ if\ the\ configure\ option\ wasn't\ one\ of\ our\ special\ one's,\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ pass\ control\ over\ to\ the\ original\ tablelist\ widget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -------------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{\$tblwidget\ configure\ \$opt_name\ \$opt_value\}\ result\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \$result\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ insert\ \{method\ args\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ overloaded\ tablelist\ method\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ maintain\ undo\ list\ +\ button\ states...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ widgetCompounds(undoList)\ \{*\}\$args\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ hand\ over\ to\ tablelist\ widget...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{\$tblwidget\ insert\ \$method\ \{*\}\$args\}\ result\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \$result\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ insertlist\ \{method\ args\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ overloaded\ tablelist\ method\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ maintain\ undo\ list\ +\ button\ states...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ widgetCompounds(undoList)\ \{*\}\$args\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{\$tblwidget\ insertlist\ \$method\ \{*\}\$args\}\ result\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \$result\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ unknown\ \{method\ args\}\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ if\ the\ command\ wasn't\ one\ of\ our\ special\ one's,\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ pass\ control\ over\ to\ the\ original\ tablelist\ widget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{\$tblwidget\ \$method\ \{*\}\$args\}\ result\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ -code\ error\ \$result\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\}\n\n\n#\ -----------------------------------------------------------------------------\n#\ Private\ interface\ methods\n#\ -----------------------------------------------------------------------------\n\noo::define\ XTableList\ \{\n\n\ \ \ \ \ \ \ \ method\ SortByColumnCmd\ \{args\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ set\ tbl\ \[lindex\ \$args\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx\ \[lindex\ \$args\ 1\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(sortby)\ \$idx\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tablelist::sortByColumn\ \$tblwidget\ \$idx\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ InitBindings\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \[\$tblwidget\ bodypath\]\ <ButtonPress-3>\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ t\ \[winfo\ parent\ %W\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ x\ \[expr\ \{%x\ +\ \[winfo\ x\ %W\]\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ y\ \[expr\ \{%y\ +\ \[winfo\ y\ %W\]\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ oo_my\ \[winfo\ parent\ \$t\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move\ up\ hierachy\ until\ our\ own\ class\ is\ reached:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ notes:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ -\ maybe\ there\ is\ a\ more\ convinient\ way\ to\ adress\ a\ class\ member\ function\ ?\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ -\ pls\ note\ that\ the\ member\ function\ needs\ to\ start\ with\ lowercase\ char\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ otherwise\ it's\ hidden\ in\ global\ namespace\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ while\ \{\ \[winfo\ exists\ \$oo_my\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ puts\ \"-->\ \$oo_my\ :\ \[winfo\ class\ \$oo_my\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[winfo\ class\ \$oo_my\]\ ==\ \"xtablelist\"\ \}\ \{\ break\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ oo_my\ \[winfo\ parent\ \$oo_my\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$oo_my\ showContextMenu\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[\$t\ nearestcolumn\ \$x\]\ \[\$t\ nearest\ \$y\]\ %X\ %Y\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ Build\ \{frm\}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ build\ the\ (mega-)\ widget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ frm\ -\ parent\ frame\ widget\ path\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ status\ line\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -----------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$frm.flabel\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f\ -side\ bottom\ -fill\ both\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::label\ \$f.lbl\ -text\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f.lbl\ -side\ bottom\ -fill\ x\ -anchor\ w\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(label)\ \$f.lbl\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ listbox\ and\ two\ scrollbars\ embedded\ into\ a\ frame\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$frm.f\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f\ -side\ left\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ a.)\ right\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fright\ \[ttk::frame\ \$f.fright\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fright\ -side\ right\ -fill\ y\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::scrollbar\ \$fright.scrolly\ -orient\ vertical\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fright.scrolly\ -side\ top\ -fill\ y\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::frame\ \$fright.spacery\ -height\ 15\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fright.spacery\ -side\ bottom\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ b.)\ left\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fleft\ \[ttk::frame\ \$f.fleft\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fleft\ -side\ left\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ left/top\ frame\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fltop\ \[ttk::frame\ \$fleft.fltop\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ left/bottom\ x\ scrollbar\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::scrollbar\ \$fleft.scrollx\ -orient\ horizontal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ pack\ scrollbar\ 1st,\ so\ that\ it\ won't\ disappear\ while\ panning\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fleft.scrollx\ -side\ bottom\ -fill\ x\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fltop\ -side\ top\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ another\ frame\ for\ the\ tablelist\ object\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fxx\ \[ttk::frame\ \$fltop.fleft\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fxx\ -side\ top\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tablelist::tablelist\ \$fxx.tlist\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -selectmode\ extended\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -takefocus\ 0\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -activestyle\ none\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xscrollcommand\ \"\$fleft.scrollx\ set\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -yscrollcommand\ \"\$fright.scrolly\ set\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$fxx.tlist\ -side\ bottom\ -fill\ both\ -expand\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tblwidget\ \$fxx.tlist\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \$tblwidget\ <<TablelistSelect>>\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"+\ \[namespace\ code\ \{my\ SelectionCallback\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \$tblwidget\ <<TablelistCellUpdated>>\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"+\ event\ generate\ \$tblwidget\ <<TLExtDataModified>>\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$fleft.scrollx\ configure\ -command\ \ \"\$fxx.tlist\ xview\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$fright.scrolly\ configure\ -command\ \"\$fxx.tlist\ yview\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ enable\ auto\ scrolling...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ autoscroll::autoscroll\ \$fleft.scrollx\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ autoscroll::autoscroll\ \$fright.scrolly\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ icon-box\ for\ list\ manipulation\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ----------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ f1\ \[ttk::frame\ \$frm.f1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1\ -side\ right\ -fill\ both\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xshowbuttons)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b1\ -image\ \$widgetCompounds(up)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 1\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b1\ \"Move-Up\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b1\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b1)\ \$f1.b1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b1i\ -image\ \$widgetCompounds(reverselist)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 10\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b1i\ \"Reverse\ the\ list\ order\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b1i\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b1i)\ \$f1.b1i\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b2\ -image\ \$widgetCompounds(down)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 2\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b2\ \"Move-Down\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b2\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b2)\ \$f1.b2\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b3\ -image\ \$widgetCompounds(delete)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 3\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b3\ \"Remove\ item(s)\ from\ the\ list\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b3\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b3)\ \$f1.b3\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b3i\ -image\ \$widgetCompounds(delete_reverse)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 5\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b3i\ \"Remove\ All\ item(s)-\ except\ selected\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b3i\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b3i)\ \$f1.b3i\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b4\ -image\ \$widgetCompounds(reload)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 4\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b4\ \"Undo\ previous\ operation\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b4\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b4)\ \$f1.b4\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ elseif\ \{\$widgetOptions(-xshowbuttons)\ ==\ \"arrows\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b1\ -image\ \$widgetCompounds(up)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 1\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b1\ \"Move-Up\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b1\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b1)\ \$f1.b1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b2\ -image\ \$widgetCompounds(down)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ToolbuttonCallback\}\]\ 2\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b2\ \"Move-Down\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \ \$f1.b2\ -pady\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b2)\ \ \$f1.b2\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfileread)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b8\ -image\ \$widgetCompounds(folder)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ OpenFromFile\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b8\ \"Open\ Listbox\ content\ from\ file\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b8\ -pady\ 1\ -side\ bottom\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b8)\ \ \$f1.b8\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ttk::button\ \$f1.b5\ -image\ \$widgetCompounds(filesaveas)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ Save2File\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ::tooltip::tooltip\ \$f1.b5\ \"Save\ Listbox\ to\ file\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pack\ \$f1.b5\ -pady\ 1\ -side\ bottom\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(b7)\ \$f1.b5\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ disabled\ by\ default:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xshowbuttons)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3i)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b4)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ elseif\ \{\$widgetOptions(-xshowbuttons)\ ==\ \"arrows\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\$tlist(\$w,b6)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b7)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ note:\ There\ is\ also\ a\ popup-menu,\ which\ corresponds\ with\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ the\ button\ box.\ So,\ if\ you\ do\ any\ changes\ here,\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ do\ not\ forget\ to\ maintain\ there\ as\ well!\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(mstate)\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ InitBindings\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\}\n======\n\n***xtablelist_public.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_public.tcl\ ---\n#\ -----------------------------------------------------------------------------\n#\ Purpose:\n#\ \ A\ TclOO\ class\ template\ to\ extend\ tablelist\ functionality.\n#\ -----------------------------------------------------------------------------\n\n#\ -----------------------------------------------------------------------------\n#\ Public\ interface\n#\ -----------------------------------------------------------------------------\n\n\noo::define\ XTableList\ \{\n\n\ \ \ \ \ \ \ \ method\ info\ \{\}\ \{\ puts\ \[self\ class\]\ \}\n\n\ \ \ \ \ \ \ \ method\ selectArrowCallback\ \{\}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ this\ function\ is\ called\ every\ time\ an\ up-down\ arrow\ is\ selected\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ by\ default,\ it's\ empty,\ but\ can\ be\ predefined\ to\ suit\ the\ needs\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ in\ the\ caller\ application\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ dummy\ 0\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ unused\n\ \ \ \ \ \ \ \ method\ deleteAllItems\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \{\}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \"Undo\"\ button\ also\ needs\ to\ be\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[winfo\ exists\ widgetCompounds(b4)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b4)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ addValues\ \{lst\ \{mode\ \"\"\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{!\[info\ exists\ widgetCompounds(undoList)\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undoList)\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ re-initialize\ variable\ (if\ necessary)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$mode\ ==\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undoList)\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ populate\ columns\ with\ information\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ sublist\ \$lst\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ insert\ end\ \$sublist\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ widgetCompounds(undoList)\ \$sublist\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ update\ status\ text\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \$lst\n\ \ \ \ \ \ \ \ \}\n\n\}\n======\n\n***xtablelist_private.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_private.tcl\ ---\n#\ -----------------------------------------------------------------------------\n\n#\ -----------------------------------------------------------------------------\n#\ Private\ interface\ methods\n#\ -----------------------------------------------------------------------------\n\noo::define\ XTableList\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ GetBoolean\ \{value\ \{errorValue\ 1\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ returns\ the\ value\ of\ a\ (presumably)\ boolean\ string\ (ie:\ it\ should\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ do\ the\ right\ thing\ if\ the\ string\ is\ \"yes\",\ \"no\",\ \"true\",\ 1,\ etc\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ value\ -\ value\ to\ be\ converted\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ errorValue\ -\ a\ default\ value\ to\ be\ returned\ in\ case\ of\ an\ error\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ Returns:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ a\ 1\ or\ zero,\ or\ the\ value\ of\ errorValue\ if\ the\ string\ isn't\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ a\ proper\ boolean\ value\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[catch\ \{expr\ \{(\[string\ trim\ \$value\])?1:0\}\}\ res\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$errorValue\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$res\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ GetTblColumnNames\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ retrieve\ all\ column\ names,\ regardless\ if\ they\ are\ hidden\ or\ not\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ col_names\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ \{with\ name\ pos\}\ \[\$tblwidget\ cget\ -columns\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ col_names\ \$name\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$col_names\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ GetOnlyVisibleTblColumnNames\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ retrieve\ only\ column\ names\ which\ are\ not\ hidden\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ col_names\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ \{with\ name\ pos\}\ \[\$tblwidget\ cget\ -columns\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ !\ \[\$tblwidget\ columncget\ \$cnt\ -hide\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ col_names\ \$name\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$col_names\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ InitializeTabHeader\ \{kword_list\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cols\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$kword_list\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ descr\ \ \[lindex\ \$i\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ visual\ \[lindex\ \$i\ 1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ orient\ \[lindex\ \$i\ 2\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[string\ length\ \$orient\]\ ==\ 0\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ orient\ \"left\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ regsub\ -all\ \"\ \"\ \$descr\ \"_\"\ descr\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$descr\ !=\ \"...\"\ &&\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[string\ range\ \$descr\ end\ end\]\ !=\ \":\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ descr\ \"\$\{descr\}:\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ could\ be\ either\ a\ string\ or\ an\ integer:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$visual\ ==\ \"hidden\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ width\ 20\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ width\ \$visual\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ append\ cols\ \"\$width\ \$descr\ \$orient\ \"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ -columns\ \$cols\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ hide\ specific\ columns\ as\ indicated\ with\ \"hidden\"\ in\ declaration\ array\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$kword_list\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[set\ width\ \[lindex\ \$i\ 1\]\]\ ==\ \"hidden\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$cnt\ -hide\ yes\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ expand\ last\ *visible*\ column\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ----------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ lastcol\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ tablelist\ -columns\ option\ are\ always\ 3\ attributes\ each...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ \{w\ col\ pos\}\ \[\$tblwidget\ cget\ -columns\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[\$tblwidget\ columncget\ \$cnt\ -hide\]\ ==\ 0\}\ \{set\ lastcol\ \ \$cnt\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$lastcol\ >\ 0\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ configure\ -stretch\ \$lastcol\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ SelectionCallback\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ !\[my\ GetBoolean\ \$widgetOptions(-xshowbuttons)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ manage\ visualisation\ mode\ of\ toolboxes\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ csel\ \[\$tblwidget\ curselection\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xshowbuttons)\ ==\ \"arrows\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$csel\ ==\ \{\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$csel\ ==\ \{\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3i)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b3i)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ does\ it\ make\ sense\ to\ enable\ undo\ button:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetCompounds(undo_flag)\ ==\ 1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b4)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ event\ generate\ \$tblwidget\ <<TLExtDataModified>>\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b4)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ event\ generate\ \$tblwidget\ <<TLExtDataModifiedUndo>>\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-up\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ 0\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-down\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ len\ \[expr\ \[llength\ \$data\]\ -1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$len\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b2)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ evaluate\ post\ command\ in\ parent\ namespace...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xselectpostcmd)\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{uplevel\ \$widgetOptions(-xselectpostcmd)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ UpdateStatusInfo\ \{lst\}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ method\ to\ maintain\ additional\ status\ information\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ msg\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ --\ \[set\ cnt\ \[llength\ \$lst\]\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(label)\ configure\ -text\ \"Tablelist\ is\ empty.\"\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b7)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ required\ to\ manage\ state,\ when\ the\ widget\ is\ popping\ up!\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(mstate)\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ maintain\ pop-up\ menu\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ note:\ catch\ is\ required\ if\ the\ pop-up\ is\ not\ \"pinned\"\ on\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ the\ screen\ (which\ is\ most\ likely\ the\ case!)\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xhideoption)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx_list\ \{8\ 9\ 10\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx_list\ \{5\ 6\ 7\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1i)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1i)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(label)\ configure\ -text\ \"1\ item\ in\ tablelist.\ \$msg\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b1i)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(label)\ configure\ -text\ \"\$cnt\ items\ in\ tablelist.\ \$msg\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(b7)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(mstate)\ normal\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xhideoption)\]\ \}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx_list\ \{8\ 9\ 10\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx_list\ \{5\ 6\ 7\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ @@@\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$idx_list\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetCompounds(m_\$tblwidget)\ entryconfigure\ \$idx\ -state\ normal\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ ToolbuttonCallback\ \{nr\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ refresh\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$nr\ ==\ 4\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$widgetCompounds(undoList)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(sortby)\ -1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \$widgetCompounds(undoList)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ evaluate\ post\ command\ in\ parent\ namespace...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xrefreshpostcmd)\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{uplevel\ \$widgetOptions(-xrefreshpostcmd)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ SelectionCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ reverse\ the\ list\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$nr\ ==\ 10\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data_len\ \[llength\ \$data\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ csel\ \[\$tblwidget\ curselection\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ reversed_data\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ reversed_csel\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ \[expr\ \{\$data_len\ -1\}\]\}\ \{\$cnt\ >=\ \ 0\}\ \{incr\ cnt\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ reversed_data\ \[lindex\ \$data\ \$cnt\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$csel\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ reversed_csel\ \[expr\ \{\$data_len\ -\ \$idx\ \}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$reversed_data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ highlight\ again\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$reversed_csel\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx1\ \[expr\ \{\$idx\ -1\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ selection\ set\ \$idx1\ \$idx1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ re-position\ listbox\ acc.\ to\ current\ selection\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ csel\ \[\$tblwidget\ curselection\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ see\ \[lindex\ \$csel\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ selectArrowCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ csel\ \[\$tblwidget\ curselection\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$csel\ ==\ \{\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ call\ get's\ important,\ if\ more\ than\ one\ widgets\ exists\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ at\ the\ same\ time,\ and\ the\ focus\ get's\ lost/shiftet:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ action\ buttons\ are\ still\ enabled,\ but\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ the\ following\ call\ 'll\ disable\ them\ accordingly\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ SelectionCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ --\ \$nr\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-up\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ 0\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ 0\}\ \{\$cnt\ <\ \[llength\ \$data\]\}\ \{incr\ cnt\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt0\ \[expr\ \$cnt\ -1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tmp0\ \[lindex\ \[lrange\ \$data\ \$cnt0\ \$cnt0\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tmp\ \ \[lindex\ \[lrange\ \$data\ \$cnt\ \ \$cnt\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$cnt\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt0\ \$cnt0\ \$tmp\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt\ \ \$cnt\ \ \$tmp0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ highlight\ again\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$csel\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx0\ \[expr\ \$idx\ -1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ selection\ set\ \$idx0\ \$idx0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ 06.06.05:\ and\ (!)\ position\ listbox\ as\ it\ was\ before!\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ see\ \[lindex\ \$csel\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ selectArrowCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-down\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ len\ \[expr\ \[llength\ \$data\]\ -1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$len\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ \[llength\ \$data\]\}\ \{\$cnt\ >=\ \ 0\}\ \{incr\ cnt\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt1\ \[expr\ \$cnt\ +1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tmp1\ \[lindex\ \[lrange\ \$data\ \$cnt1\ \$cnt1\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ tmp\ \ \[lindex\ \[lrange\ \$data\ \$cnt\ \$cnt\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$cnt\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt\ \ \$cnt\ \ \$tmp1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt1\ \$cnt1\ \$tmp\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ highlight\ again\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ idx\ \$csel\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ idx1\ \[expr\ \$idx\ +1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ selection\ set\ \$idx1\ \$idx1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ set\ visual\ region\ as\ it\ was\ before...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ see\ \[lindex\ \$csel\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ selectArrowCallback\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 3\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ does\ not\ work\ with\ empty\ lines:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ foreach\ i\ \[lsort\ -decreasing\ \$csel\]\ \{\ \$w\ delete\ \$i\ \$i\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ \[llength\ \$data\]\}\ \{\$cnt\ >=\ \ 0\}\ \{incr\ cnt\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ check\ if\ index\ is\ within\ current\ selection\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ if\ true\ -\ remove\ list\ item\ !\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$cnt\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[lreplace\ \$data\ \$cnt\ \$cnt\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ evaluate\ post\ command\ in\ parent\ namespace...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xdeletepostcmd)\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{uplevel\ \$widgetOptions(-xdeletepostcmd)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 5\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ inverse\ delete\ =\ delete\ all,\ except\ selected\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \[\$tblwidget\ get\ 0\ end\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ new_data\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ for\ \{set\ cnt\ 0\}\ \{\$cnt\ <\ \[llength\ \$data\]\}\ \{incr\ cnt\ 1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ check\ if\ the\ current\ index\ is\ *not*\ part\ of\ the\ selection\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lsearch\ \$csel\ \$cnt\]\ !=\ -1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ new_data\ \[lindex\ \$data\ \$cnt\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ puts\ \"-->\ \[lindex\ \$data\ \$cnt\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ delete\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ eval\ \$tblwidget\ insert\ end\ \$new_data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ UpdateStatusInfo\ \$new_data\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ evaluate\ post\ command\ in\ parent\ namespace...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$widgetOptions(-xdeletepostcmd)\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{uplevel\ \$widgetOptions(-xdeletepostcmd)\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(undo_flag)\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ SelectionCallback\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ EnableMoveover\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ move-over\ effect:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \[\$tblwidget\ bodypath\]\ <Motion>\ \{+\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ t\ \[winfo\ parent\ %W\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ x\ \[expr\ \{%x\ +\ \[winfo\ x\ %W\]\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ y\ \[expr\ \{%y\ +\ \[winfo\ y\ %W\]\}\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ set\ cell\ \[\$t\ nearestcell\ \$x\ \$y\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ puts\ \"Clicked\ on\ cell:\ \$cell\ \"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ set\ rownum\ \ \[lindex\ \[split\ \$cell\ \",\"\]\ 0\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ focus\ \$t\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$t\ configure\ -activestyle\ frame\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$t\ activate\ \"@\$x,\$y\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bind\ \[\$tblwidget\ bodypath\]\ <Leave>\ \{+\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ t\ \[winfo\ parent\ %W\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$t\ configure\ -activestyle\ none\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\}\n======\n\n***xtablelist_popupmenu.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_popupmenu.tcl\ ---\n#\ -----------------------------------------------------------------------------\n\noo::define\ XTableList\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ unused\n\ \ \ \ \ \ \ \ method\ showColumnByIndex\ \{idx\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ column\ \[my\ GetTblColumnNames\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$cnt\ ==\ \$idx\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$cnt\ -hide\ false\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(hide_column,\$cnt)\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ sort\ the\ list\ based\ on\ a\ particular\ column\n\ \ \ \ \ \ \ \ method\ SortCmd\ \{index\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ sortbycolumn\ \$index\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(sortby)\ \$index\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ HideColumnCmd\ \{index\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ hiding\ all\ columns\ doesn't\ make\ sense\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \[my\ GetOnlyVisibleTblColumnNames\]\]\ ==\ 1\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tk_messageBox\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \$tblwidget\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \"Warning\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -icon\ \"warning\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -message\ \"Cannot\ hide\ all\ columns!\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -type\ ok\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \$widgetCompounds(hide_column,\$index)\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$index\ -hide\ true\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$index\ -hide\ false\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ ShowAllColumnsCmd\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ column\ \[my\ GetTblColumnNames\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$tblwidget\ columnconfigure\ \$cnt\ -hide\ false\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetCompounds(hide_column,\$cnt)\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ showContextMenu\ \{colx\ coly\ rootx\ rooty\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ x,y\ are\ the\ coordinates\ relative\ to\ the\ upper-left\ corner\ of\ the\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ listbox\;\ rootx,rooty\ are\ screen\ coordinates\ (for\ knowing\ where\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ to\ place\ the\ menu).\ w\ is\ the\ name\ of\ the\ mclistbox\ widget\ that\ was\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ clicked\ on.\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetOptions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ re-create\ widget\ all\ the\ time:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ contextMenu\ \$tblwidget.tblContextMenu\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{destroy\ \$contextMenu\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ columnLabel\ \[\$tblwidget\ columncget\ \$colx\ -title\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ colIndex\ \$colx\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ column\ \$columnLabel\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ m\ \[menu\ \$contextMenu\ -tearoff\ 1\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xsortoption)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ menu\ \$m.sort_by\ -tearoff\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ cascade\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Sort\ by\ ...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -menu\ \$m.sort_by\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk_cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ col_names\ \[my\ GetOnlyVisibleTblColumnNames\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$col_names\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ manage\ multi\ column\ menu,\ otherwise\ the\ menu\ limits\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ would\ exceed\ screen\ dimensions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \$col_names\]\ >\ 39\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$cbrk_cnt\ <\ 10\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cbrk_cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk_cnt\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{set\ cbrk\ 0\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m.sort_by\ add\ radiobutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -variable\ \"\[namespace\ current\]::widgetCompounds(sortby)\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -value\ \$cnt\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \$i\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ SortCmd\}\]\ \$cnt\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -columnbreak\ \$cbrk\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Sort\ by:\ \$columnLabel\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ SortCmd\}\]\ \$colIndex\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ separator\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ --------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ *only*\ show\ context-menu\ if\ specified\ by\ argument:\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ --------------------------------------------------\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xhideoption)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ menu\ \$m.hide_column\ -tearoff\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ cascade\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Hide\ column...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -menu\ \$m.hide_column\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \$m.hide_column\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ \ -label\ \"Hide\ column:\"\ -state\ disabled\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk_cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ col_names\ \[my\ GetOnlyVisibleTblColumnNames\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$col_names\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ manage\ multi\ column\ menu,\ otherwise\ the\ menu\ limits\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ would\ exceed\ screen\ dimensions\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \$col_names\]\ >\ 39\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$cbrk_cnt\ <\ 10\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cbrk_cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk_cnt\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cbrk\ 1\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{set\ cbrk\ 0\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ ---------------------------------------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ colLabel\ \[\$tblwidget\ columncget\ \$cnt\ -title\]\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m.hide_column\ add\ checkbutton\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -variable\ \"\[namespace\ current\]::widgetCompounds(hide_column,\$cnt)\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \$colLabel\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ HideColumnCmd\}\]\ \$cnt\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -columnbreak\ \$cbrk\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Hide\ column:\ \$columnLabel\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ \[namespace\ current\]::widgetCompounds(hide_column,\$colIndex)\ 1\;\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[namespace\ code\ \{my\ HideColumnCmd\}\]\ \$colIndex\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ separator\ doesn't\ work\ in\ column\ mode\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[llength\ \$col_names\]\ <=\ 39\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m.hide_column\ add\ separator\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ m_item\ \[list\ \$m\ \$m.hide_column\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m_item\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Show\ All\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ ShowAllColumnsCmd\}\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ separator\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ manage\ visualisation\ mode\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \[\$w\ get\ 0\ end\]\ is\ too\ slow\ if\ the\ listbox\ is\ pretty\ full...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[info\ exists\ widgetCompounds(mstate)\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ st\ \$widgetCompounds(mstate)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ st\ disabled\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"File\ Operations:\"\ -state\ disabled\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfilesave)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Save\ to\ file...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ Save2File\}\]\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -state\ \$st\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ \[my\ GetBoolean\ \$widgetOptions(-xfileread)\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$m\ add\ command\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -label\ \"Open\ from\ file...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ code\ \{my\ OpenFromFile\}\]\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -state\ \$st\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -----------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tk_popup\ \$m\ \$rootx\ \$rooty\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ -----------------------\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ make\ sure,\ popup-window\ stays\ on\ top\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ when\ using\ \"tear-off\"\ the\ 1st\ time\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ wm\ withdraw\ \$m\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ wm\ deiconify\ \$m\n\ \ \ \ \ \ \ \ \}\n\}\n======\n\n***xtablelist_readwrite.tcl***\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_readwrite.tcl\ ---\n#\ -----------------------------------------------------------------------------\n\noo::define\ XTableList\ \{\n\n\ \ \ \ \ \ \ \ method\ GetAllVisibleItems\ \{\}\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ only\ take\ visible\ columns\ into\ account\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ \"...what\ you\ see\ is\ what\ you\ get...\"\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ is_hidden\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ column\ \[my\ GetTblColumnNames\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ is_hidden\ \[\$tblwidget\ columncget\ \$cnt\ -hide\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ lst\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \[\$tblwidget\ get\ 0\ end\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ cnt\ 0\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ sublst\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ xitem\ \$i\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[lindex\ \$is_hidden\ \$cnt\]\ !=\ 1\}\ \{\ lappend\ sublst\ \$xitem\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ cnt\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ lst\ \$sublst\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \$lst\n\ \ \ \ \ \ \ \ \}\n\n\n\ \ \ \ \ \ \ \ method\ Write2File\ \{fname\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$fname\ ==\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ lst\ \[my\ GetAllVisibleItems\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fp\ \ \[open\ \$fname\ \"w\"\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ i\ \$lst\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ regsub\ -all\ \"\\\{\"\ \$i\ \"\"\ i\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ regsub\ -all\ \"\\\}\"\ \$i\ \"\"\ i\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ str\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ item\ \$i\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$str\ ==\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ str\ \$item\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ append\ str\ \$widgetCompounds(DELIM)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ append\ str\ \$item\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ puts\ \$fp\ \$str\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ close\ \$fp\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ Save2File\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #-now\ we\ use\ this\ one-\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fname\ \[xtablelist::getfilename\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \ \ \ \ \ \$tblwidget\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \ \ \ \ \ \ \"Select\ file\ where\ to\ store\ Listbox\ information:\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -oktext\ \ \ \ \ \ \"\ Save\ to\ File...\ \"\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\[string\ length\ \$fname\]\ >\ 0\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ Write2File\ \$fname\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ method\ OpenFromFile\ \{\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ tblwidget\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ variable\ widgetCompounds\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ in_file\ \[\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ tk_getOpenFile\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \$tblwidget\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \"Select\ file:\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -initialdir\ \$widgetCompounds(default_dir)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -defaultextension\ \{.txt\}\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -filetypes\ \ \{\{\"Text-Files\"\ \"*.txt*\"\}\ \{all\ \"*.*\"\}\}\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -initialfile\ \"\"\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ read\ values\ from\ file\ and\ uptdate\ listbox\ ...\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$in_file\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ data\ \{\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ fp\ \[open\ \$in_file\ \"r\"\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ while\ \{!\[eof\ \$fp\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ i\ \[string\ trim\ \[gets\ \$fp\]\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$i\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lappend\ data\ \[split\ \$i\ \$widgetCompounds(DELIM)\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ close\ \$fp\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ foreach\ i\ \$data\ \{puts\ \"-->\ \$i\ <--\"\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ my\ addValues\ \$data\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #\ finally\ execute\ post\ command\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ catch\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetOptions(-xfilereadpostcmd)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\}\n======\n\n***xtablelist_filesel.tcl***\n======\n#\ -------------------------------------------------------------------------\n#\ xtablelist_filesel.tcl\ ---\n#\ -------------------------------------------------------------------------\n#\n#\ Purpose:\n#\ \ \ Utility\ package\ supporting\ a\ more\ convinient\ file\ selection\ dialog.\n#\ \ \ The\ following\ additional\ features\ where\ added:\n#\ \ \ \ \ -\ the\ possibility\ to\ generate\ a\ file-name,\n#\ \ \ \ \ -\ use\ the\ dialog's\ default\ file-name,\n#\ \ \ \ \ \ \ which\ might\ be\ sufficient\ for\ most\ of\ all\ cases,\n#\ \ \ \ \ -\ use\ standard\ file\ selection\ dialog\n#\n#\ -------------------------------------------------------------------------\n\n#\ -------------------------------------------------------------------------\n#\ file\ action\ utility\ dialog\ ...\n#\ -------------------------------------------------------------------------\n\nnamespace\ eval\ xtablelist\ \{\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ switch\ --\ \$::tcl_platform(platform)\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"windows\"\ \ \ \ \ \ \ \ \{\ set\ homeDir\ \$::env(TEMP)\ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"unix\"\ -\ default\ \{\ set\ homeDir\ \$::env(HOME)\ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ array\ set\ widgetDefaults\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ title\ \"Selection\ file:\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ DEFNAME\ \"NONAME\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ def_ext\ \".txt\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ oktext\ \"\ OK\ \"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ENTRY_WITH\ 45\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ is_ok\ 0\n\ \ \ \ \ \ \ \ \}\n\n\ \ \ \ \ \ \ \ set\ widgetDefaults(init_dir)\ \ \ \ \$homeDir\n\ \ \ \ \ \ \ \ set\ widgetDefaults(defaultfile)\ \[file\ join\ \$homeDir\ \"NONAME.txt\"\]\n\ \ \ \ \ \ \ \ set\ widgetDefaults(filetypes)\ \ \ \{\{\"Text-Files\"\ \"*.txt*\"\}\ \{all\ \"*.*\"\}\}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ initializing\ required\ images...\n\ \ \ \ \ \ \ \ set\ imgdir\ \[file\ join\ \[file\ dirname\ \[info\ script\]\]\ \"images\"\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ proc\ LoadImages1\ \{imgdir\ \{patterns\ \{*.gif\ *.png\}\}\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ pattern\ \$patterns\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ foreach\ file\ \[glob\ -nocomplain\ -directory\ \$imgdir\ \$pattern\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ img\ \[file\ tail\ \[file\ rootname\ \$file\]\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\ !\[info\ exists\ images(\$img)\]\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ images(\$img)\ \[image\ create\ photo\ -file\ \$file\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \[array\ get\ images\]\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ array\ set\ widgetImages\ \[LoadImages1\ \$imgdir\]\n\}\n\n\nproc\ xtablelist::PositionWindow\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ wm\ geometry\ \$widgetDefaults(this)\ \"+250+350\"\n\}\n\nproc\ xtablelist::_ok_callback\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \[file\ exists\ \[set\ fname\ \[\$widgetDefaults(input_entry)\ get\]\]\]\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ answer\ \[tk_messageBox\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \$widgetDefaults(this)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \"Question:\ \"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -message\ \"\$fname\\nalready\ exists\\noverwrite\ ?\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -type\ yesno\ -icon\ question\]\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \{\$answer\ eq\ \"no\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(is_ok)\ 2\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ widgetDefaults(is_ok)\ 1\n\}\n\nproc\ xtablelist::EntryBindingsCmd\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \{\[\$widgetDefaults(input_entry)\ get\]\ ==\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(isempty)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(ok_button)\ configure\ -state\ disabled\n\ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(ok)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(ok_button)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \}\n\}\n\n\nproc\ xtablelist::SelectFileCmd\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ log_file\ \[tk_getSaveFile\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -initialdir\ \$widgetDefaults(init_dir)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -defaultextension\ \$widgetDefaults(def_ext)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -filetypes\ \ \$widgetDefaults(filetypes)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -initialfile\ \"\"\ -title\ \"Select\ file\ dialog...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \$widgetDefaults(this)\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \{\$log_file\ !=\ \"\"\}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(init_dir)\ \[file\ dirname\ \$log_file\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(entry_val)\ \$log_file\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(ok)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(ok_button)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \}\n\}\n\nproc\ xtablelist::GenerateFilename\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ note:\ it\ is\ not\ possible\ under\ windows\ to\ use\ \":\"\ as\ date\ separator!\n\ \ \ \ \ \ \ \ #\ \ \ \ \ \ \ clock\ format\ \[clock\ seconds\]\ -format\ \"%H:%M:%S\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ fname\ \[clock\ format\ \[clock\ seconds\]\ -format\ \"%Y-%m-%d\"\]\n\ \ \ \ \ \ \ \ append\ fname\ \"_\"\n\ \ \ \ \ \ \ \ append\ fname\ \$widgetDefaults(DEFNAME)\n\ \ \ \ \ \ \ \ append\ fname\ \$widgetDefaults(def_ext)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ widgetDefaults(entry_val)\ \[file\ join\ \$widgetDefaults(init_dir)\ \$fname\]\n\ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(ok)\n\}\n\nproc\ xtablelist::CancelCmd\ \{\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ set\ widgetDefaults(is_ok)\ 2\n\}\n\n\n#\ -------------------------------------------------------------------------\n#\ gui\ declaration\n#\ -------------------------------------------------------------------------\n\nproc\ xtablelist::getfilename\ \{args\}\ \{\n\ \ \ \ \ \ \ \ variable\ widgetDefaults\n\ \ \ \ \ \ \ \ variable\ widgetImages\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ wparent\ \"\"\n\ \ \ \ \ \ \ \ set\ ind\ 0\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ while\ \{\ \$ind\ <\ \[llength\ \$args\]\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ switch\ -exact\ --\ \[lindex\ \$args\ \$ind\]\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-parent\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ wparent\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-title\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(title)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-defaultfile\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(defaultfile)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-defaultext\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(def_ext)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-filetypes\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(filetypes)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"-oktext\"\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ widgetDefaults(oktext)\ \[lindex\ \$args\ \$ind\]\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ incr\ ind\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ default\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ puts\ \"unknown\ option\ \[lindex\ \$args\ \$ind\]\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ return\ \"\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ w\ \$wparent.getfilename\n\ \ \ \ \ \ \ \ set\ widgetDefaults(this)\ \$w\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ catch\ \{destroy\ \$w\}\n\ \ \ \ \ \ \ \ toplevel\ \$w\n\ \ \ \ \ \ \ \ wm\ title\ \$w\ \$widgetDefaults(title)\n\ \ \ \ \ \ \ \ wm\ iconname\ \$w\ \$widgetDefaults(title)\n\ \ \ \ \ \ \ \ PositionWindow\n\ \ \ \ \ \ \ \ wm\ transient\ \$w\ \$wparent\n\ \ \ \ \ \ \ \ bind\ \$w\ <KeyPress-Escape>\ \"\[namespace\ current\]::CancelCmd\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$w.info\ -relief\ flat\]\n\ \ \ \ \ \ \ \ pack\ \$f\ -side\ top\ -fill\ x\ -padx\ 1\ -pady\ 1\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::label\ \$f.img\ -image\ \$widgetImages(job_engineering_logo)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ msg\ \"\n\ \ \ \ \ \ \ \ Select\ a\ filename\ or\ press\n\ \ \ \ \ \ \ \ \\\"generate-filename\\\"\ to\ create\ one.\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::label\ \$f.msg\ -text\ \$msg\n\ \ \ \ \ \ \ \ pack\ \$f.img\ \$f.msg\ -side\ left\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ button\ row\n\ \ \ \ \ \ \ \ #\ ----------\n\ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$w.buttons\ -relief\ groove\]\n\ \ \ \ \ \ \ \ pack\ \$f\ -side\ bottom\ -fill\ x\ -pady\ 2\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ image\ +\ button\n\ \ \ \ \ \ \ \ #\ --------------\n\ \ \ \ \ \ \ \ set\ fb\ \[ttk::frame\ \$f.img_button\]\n\ \ \ \ \ \ \ \ #\ pack\ follows\ later\ on:\ pack\ \$fb\ -side\ left\ -fill\ x\ -expand\ true\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::button\ \$fb.ok\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -text\ \$widgetDefaults(oktext)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -image\ \$widgetImages(filesaveas)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -compound\ left\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ current\]::_ok_callback\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -state\ disabled\n\n\ \ \ \ \ \ \ \ pack\ \$fb.ok\ -side\ left\ -padx\ 4\ -pady\ 4\n\ \ \ \ \ \ \ \ set\ widgetDefaults(ok_button)\ \$fb.ok\n\n\ \ \ \ \ \ \ \ ttk::button\ \$f.cancel\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -text\ \"Cancel\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ current\]::CancelCmd\"\n\n\ \ \ \ \ \ \ \ pack\ \$fb\ \$f.cancel\ -side\ left\ -padx\ 4\ -pady\ 4\ -expand\ true\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ f\ \[ttk::frame\ \$w.rbuttons\]\n\ \ \ \ \ \ \ \ pack\ \$f\ -side\ bottom\ -fill\ x\ -padx\ 2\ -pady\ 2\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::button\ \$f.getlatest\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -text\ \"Generate\ filename\ ...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ current\]::GenerateFilename\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -style\ Toolbutton\n\n\ \ \ \ \ \ \ \ pack\ \$f.getlatest\ -padx\ 4\ -pady\ 4\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ f_file1\ \[ttk::frame\ \$f.part_num1\]\n\ \ \ \ \ \ \ \ pack\ \$f_file1\ -fill\ x\ -expand\ true\n\n\n\ \ \ \ \ \ \ \ ttk::label\ \$f_file1.img\ -image\ \$widgetImages(isempty)\n\ \ \ \ \ \ \ \ pack\ \$f_file1.img\ -side\ left\n\ \ \ \ \ \ \ \ set\ widgetDefaults(input_label)\ \$f_file1.img\n\n\ \ \ \ \ \ \ \ pack\ \[ttk::label\ \$f_file1.lb\ -text\ \"File-name:\"\]\ -side\ left\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ ttk::entry\ \$f_file1.en\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -width\ \$widgetDefaults(ENTRY_WITH)\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -textvariable\ \"\[namespace\ current\]::widgetDefaults(entry_val)\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ pack\ \$f_file1.en\ -side\ left\ -fill\ x\ -padx\ 4\ -expand\ true\n\ \ \ \ \ \ \ \ set\ widgetDefaults(input_entry)\ \$f_file1.en\n\n\ \ \ \ \ \ \ \ ttk::button\ \$f_file1.b\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -text\ \"...\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -command\ \"\[namespace\ current\]::SelectFileCmd\"\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ pack\ \$f_file1.b\ -side\ left\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ bind\ \$widgetDefaults(input_entry)\ <Leave>\ \ \"\[namespace\ current\]::EntryBindingsCmd\"\n\ \ \ \ \ \ \ \ bind\ \$widgetDefaults(input_entry)\ <Return>\ \"\[namespace\ current\]::EntryBindingsCmd\"\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ widgetDefaults(entry_val)\ \$widgetDefaults(defaultfile)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ focus\ \$widgetDefaults(input_entry)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \{\[\$widgetDefaults(input_entry)\ get\]\ !=\ \"\"\}\ \{\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_label)\ configure\ -image\ \$widgetImages(ok)\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(input_entry)\ selection\ range\ 0\ end\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \$widgetDefaults(ok_button)\ configure\ -state\ normal\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ #\ wait\ user\n\ \ \ \ \ \ \ \ grab\ \$widgetDefaults(this)\n\ \ \ \ \ \ \ \ tkwait\ variable\ \"\[namespace\ current\]::widgetDefaults(is_ok)\"\n\ \ \ \ \ \ \ \ grab\ release\ \$widgetDefaults(this)\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ if\ \{\ \$widgetDefaults(is_ok)\ ==\ 1\ \}\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ retval\ \[\$widgetDefaults(input_entry)\ get\]\n\ \ \ \ \ \ \ \ \}\ else\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ set\ retval\ \"\"\n\ \ \ \ \ \ \ \ \}\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ destroy\ \$w\n\ \ \ \ \ \ \ \ return\ \$retval\n\}\n\n\n#\ -------------------------------------------------------------------------\n#\ test-run\ ...\n#\ -------------------------------------------------------------------------\nif\ 0\ \{\n\ \ \ \ \ \ \ \ package\ require\ Tk\n\ \ \ \ \ \ \ \ wm\ withdraw\ .\n\ \ \ \ \ \ \ \ catch\ \{console\ show\}\n\n\ \ \ \ \ \ \ \ set\ rval\ \[xtablelist::getfilename\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -parent\ \ \ \ \ \ \"\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -title\ \ \ \ \ \ \ \"Select\ file\ where\ to\ store\ Listbox\ information:\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -defaultfile\ \[file\ join\ \$env(HOME)\ \"Test.txt\"\]\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -filetypes\ \ \ \{\{\"Text-Files\"\ \"*.txt\"\}\ \{all\ \"*.*\"\}\}\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -defaultext\ \ \".txt\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -oktext\ \ \ \ \ \ \"\ Save\ to\ File...\ \"\]\n\n\ \ \ \ \ \ \ \ puts\ \"File\ selection\ result:\ \\\"\$rval\\\"\"\n\}\n\n======\n\n***xtablelist_demo.tcl***\n\n======\n#\ -----------------------------------------------------------------------------\n#\ xtablelist_demo.tcl\ ---\n#\ -----------------------------------------------------------------------------\n\n#\ for\ development:\ try\ to\ find\ autoscroll,\ etc\ ...\nset\ dir\ \[file\ normalize\ \[file\ dirname\ \[info\ script\]\]\]\n\n#\ where\ to\ find\ required\ packages...\nset\ auto_path\ \[linsert\ \$auto_path\ 0\ \[file\ join\ \$dir\ \".\"\]\]\nset\ auto_path\ \[linsert\ \$auto_path\ 0\ \[file\ join\ \$dir\ \"../lib\"\]\]\n\n\npackage\ require\ Tk\npackage\ require\ TclOO\n\npackage\ require\ autoscroll\npackage\ require\ tablelist_tile\n\npackage\ require\ xtablelist\n\n\n#\ catch\ \{console\ show\}\n\n#\ 1st\ example:\n\nset\ t\ \[xtablelist::xtablelist\ .t\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -showseparators\ \"yes\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -labelcommand\ \"tablelist::sortByColumn\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -width\ 80\ -height\ 10\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilesave\ 1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfileread\ 1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xshowbuttons\ \"yes\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xrefreshpostcmd\ \{puts\ \"Refresh\ postcommand\ done.\"\}\]\n\npack\ \$t\ -fill\ both\ -expand\ true\n\n\n#\ maybe\ some\ configuration\ changes\ later\ on\ ...\n\$t\ configure\ -xmoveovereffect\ \"yes\"\n\n#\ create\ some\ random\ test\ data...\n\nset\ header\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"ID\"\ 10\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"Category\"\ \ \ \ \ \ 22\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"test-column\"\ \ \ 16\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"Hello\\\\nWorld\"\ 10\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"test\"\ \ \ \ \ \ \ \ \ \ \"hidden\"\ center\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"last\\\\ncolumn\"\ 10\ left\}\n\ \ \ \ \ \ \ \ \}\n\n\$t\ configure\ -xtabheader\ \$header\n\nset\ data_list\ \{\}\nset\ cnt\ 0\n\nwhile\ \{\$cnt\ <\ 40\}\ \{\n\ \ \ \ \ \ \ \ lappend\ data_list\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[list\ \$cnt\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[expr\ \{\$cnt\ +3\}\]\ \[expr\ \{\$cnt\ +4\}\]\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[expr\ \{\$cnt\ +1\}\]\ \[expr\ \{\$cnt\ +2\}\]\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \[expr\ \{\$cnt\ +5\}\]\]\n\ \ \ \ \ \ \ \ incr\ cnt\n\}\n\nforeach\ item\ \$data_list\ \{\n\ \ \ \ \ \ \ \ \$t\ insert\ end\ \$item\n\}\n\n\n#\ 2nd\ example:\n\nset\ t1\ \[xtablelist::xtablelist\ .t1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -showseparators\ \"yes\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -labelcommand\ \"tablelist::sortByColumn\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -width\ 80\ -height\ 10\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfilesave\ 1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xfileread\ 1\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xshowbuttons\ \"yes\"\ \\\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ -xrefreshpostcmd\ \{puts\ \"Refresh\ postcommand\ done.\"\}\]\n\npack\ \$t1\ -fill\ both\ -expand\ true\n\n\nset\ header\ \{\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"ID\"\ 10\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"Info_Procs\"\ 20\ left\}\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\"Body\"\ \ \ \ \ \ \ hidden\ left\}\n\ \ \ \ \ \ \ \ \}\n\n\$t1\ configure\ \\\n\ \ -snipstring\ \"...\"\ \\\n\ \ -xtabheader\ \$header\n\nset\ data_list\ \{\}\n\nset\ cnt\ 0\nforeach\ p\ \[lsort\ -dictionary\ \[info\ procs\]\]\ \{\n\ \ \ \ \ \ \ \ #\ set\ body\ \[string\ map\ \{\"\\n\"\ \"\ \"\}\ \[info\ body\ \$p\]\]\n\ \ \ \ \ \ \ \ \n\ \ \ \ \ \ \ \ set\ row\ \[list\ \$cnt\ \$p\ \[string\ trim\ \[info\ body\ \$p\]\]\]\n\ \ \ \ \ \ \ \ \$t1\ insert\ end\ \$row\n\ \ \ \ \ \ \ \ incr\ cnt\n\}\n\n======\n\n\n***ImageLib.tcl***\n======\n#\ ImageLib.tcl\ ---\n#\ Automatically\ created\ by:\ CreateImageLib.tcl\n\nset\ images(up)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0\nU29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL/SURBVDiNtZRNaFxVFMd/5368eZkxRmQs\nbTEGxbZC0IWMpU5SbCmxILapFCO2LgSlWbhLbFJBcKErP0BcCIqCdeEiUAviQoJIwIgW3biwCoYG\njTImTIXWTjsz7+O4yLzwUkuSgjlwuPdd7vmd/z33vCuqymaY2RTqZoLdRjfunXTvg2zfNh8PT01p\n8r+AByf9S9vv6DuGQWr627vA6Hox65ZiYMIdva1Ufvlg9WhpaM+RYs+t5eN7J4IX1ouTtbpicCyo\nFEulmacOniidr8+SpBG7ynv4dPrjxpVW48i3b0Rf3rTiR8al13o3/cSBZ0uLV+f46/IFapfmWLh8\nnsf2PVnyzp0ZnAx33RR4cFK6U2dnDu97pie1LS5c/BFnHNZ4fl36nkZSZ6h6qBuNv6qOye0bAo+M\niFXc54/uHundUt5qfln6Dmt8xx2I8MPCF5RuKcrAg0NbjHfTlVHx64Jrd9v3qv1Du/t3VPxPta+x\nYvHOUwgCfGBQ28Z45dzCWfruvMfdf+9D/V099vSa4IEX/fh9d1WO7a8Mhz/XZjFOCMMCYVggCD2R\naeAKQlAw4CPO/XmGygMPh33bdg5XJ/ypPGulK6rj7vG+rTumnjt0qss5j5KikjAzf5pYWtSvzXMt\n+Wc5SuHwzpNoqmgKzXaLs9OfXK1f/OPp2bfizyD3gxgr478vznW98sHzAFgvzVdPfBj6wNFoLxLZ\nBt4bBFAF44R3PnqtGbc17CCKOBkDVoNnX4/2X1cWNdbiA8+V1hK+YDAGEEFVsVaI2xp+82Yk19d3\nFfhGZozQiP9GbYwLBOMEEUFTRewNeRsEi6WZXkIMGCs4bzBOiNspsjZ3dVfIsjkRKWRrzbgBCppC\nmihJpGgC6EpMUUQKIrJKpMuAgO98u84cVTjQO4pKirEgIizfHqTpyhvTDcRAJCJxNne5BDYHdUD9\n5NvHy2sfmHomImcKJKKqmeI8NBuzZKbjHb2kHY+BJFMJtIG2qqb/eTY7SWzOM6jtbElz8CQHV83B\n/gXtSQriGSyg6AAAAABJRU5ErkJggg==\n\}\]\nset\ images(filesaveas)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAU1QTFRFtQBI\nAAAAOGeLP2qJO2yRP2yGQWyKPG2RQm6IZmhkSW6CZ2lkQnCSP3KWTXKCVHJ7bnBrRHicVHeAV3h9\nTXmRbXRlbnRlUXmKU3mKW3pycnVrR32iR32jXnx5YH1udXlsSoCmW36ISoCod3l1ToewfIFtbIV3\nUIixUImyf4F+UYu1aImTU4y1cIqCg4WAbY2OWJK9W5bBYpa7XJfDjo+NXpnGXprHYJzKYJ3LlJaR\nYp/OY6DOY6HQZ6LOZ6PSa6XTm52ZdKjTdKjUdanVga3Rj7bbsbGwuLi4yMjIysrKy8vLzMzLytDE\nzs7Oz8/NzNHF0NDQ0tbM09jM2NrY3t7e3t7f397e3t/f39/e39/f4ODg4eHh4eLh4uLh4+Pj5eXl\n5ubm5+fn6Ojo6eno6uvq6+vr7Ozs7e3t7u7u8PDv8PDw8PDx9vb2+vn6////640m9AAAAAF0Uk5T\nAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AYLFTEZSbLK\nvAAAACJ0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUCBvbiBhIE1hY4eod0MAAAEjSURBVBjT\nbc9nV8IwFIDhNKJ1G/feVXBhapGoqLgnLowURa2oqSv2/3/0pvRAOfh+aO95mnNPihBCsz0YauhG\n1bWuHOwe7qcGmqu0f6uzLTKS2ktP1YV0dHkSno3DyaQ5UV/h9iX/FVmk5lrXWJkHZwg0jim00KHm\nkg9Jlc8Mq7HkcVcKITCNUbqJhbgVcZ933HcJ91a8gXX8KNaVkvNnOMvYdmyemtYqnL9UW8gL8I3O\njKgRMyz9SghX8bS/OoOZYUQtnBFCunPACdeR8kO5r1I6bgJ2HBffivBBZjHTs4DO08MRQS3XJKgX\n9wXTRRMikti5O27zPOd2jms8fw+ESIG8npb71L5+voEU/1bY0zzPC9gLFeKaFJ8VajqB3yT/hP4A\nlj1VqgSJVQgAAAAASUVORK5CYII=\n\}\]\nset\ images(folder)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAhlQTFRFAAAN\nPDw8RUVFRkZGSkpKTU1NLFWJUlJSVVVVOVqFVVdTVlhUVllXV1lVWFpWWlpaWVtYWlxZWlxbW11Z\nM2OhXF5bXl5eNGShNGSiXV9bXl9cNWWkNWakNWalNWelNmekYWFhNmelNmemN2ilN2imOGmmOWmn\nOWmoO2mlOmuoZWVlPGumQW+pRG+ma2tqQnKvb29vTHSmcnJyVnqmdnZ2TX22VX6xToC2enp6UYG4\ne3t7YH+laX+aa4SlXom9dYumkZGQcJjFc5nEj5ehi5iolpeVcJ7PcZ7PdKDQnJ2bnJ2cgKLLm5+j\nnp+hn6CeoKCffKbTfabUfqfUoqOlgKnVhqjPpKWnhKvVpaamhKvWpqampqeph63XqKioja3Sia7Y\nqqqqiq/Yq6uri7DZjLHXrKysjbHZra2tjrLYj7LakLLZjrPZrq6ukLPZr6+vlbPWkrTbkrXakrXb\nsbGxlLbblLbclbbclLfclbfcs7Ozlrjclrjdm7fZl7jctbW0nbnamrrdnbzeubm5ob7eor/go7/e\nvb29p8Hep8HfqMPiqcTiwcHBqcXiqsXhxMTEycnIts7my8vLzc3Nz8/P0NDQvtPq0NHQv9TqwNTq\n0tLS09PT1dXU1NXX2tra3Nzc3d3d4ODg4eHh4uLi4uPl4+Pj4+Tm5OXn5eXl5ebo5ubm5ufp6enp\n9/f3+Pj4+fn5+vr6+/v7/f39/v7+lBbl4QAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBI\nWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AYLFTEsHwEOnwAAACJ0RVh0Q29tbWVudABDcmVhdGVk\nIHdpdGggR0lNUCBvbiBhIE1hY4eod0MAAAE3SURBVBjTY2CAAm5ebl5ePj4pBlTAvWbtuvUbNvgL\nQPkWVmDANXfWrJmTJ21yEIUIm8yaMnnSpIlc87yAYPamja6CYGGjyZV56UkJ3IsWLVy4YMHq5VMk\nwcIGk/JSE2KjuFf6eXp6zl+yZJowWFivPzU6LNiXZ9WKFcuWLV26eI4QWFirz0VeVVVVWU1NDUip\nqqjIyCoBhRW67Z2mT506dToEzJgxY4I0UFiszda7JxsJVPWqAIX5m6zjuoqQQHmrOlCYo864prMa\nAZJL6zWBwuzFhu2dDTBQmxbTmA8SZs3R7WgBCVSUFGTGx8TENIaqAYVZEjSayxIjgwJgoNBRDijM\nFCGT5eGOBMLtQN5h8tEOcUMGgaZgYWez3BRkkKEPEma20bFEAeaKIGFGTnEUICHCxkAiAADVtH2Y\nSZPqewAAAABJRU5ErkJggg==\n\}\]\nset\ images(mail)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAsRQTFRFNmut\nVTFgXzRlQD1zHUeBHkiCWzxYIkqFdDpQJUyHbD86J06Jb0oLNFCHYFETR1Q/MFaMMVeNQlSNYU19\nf1IEJF+fNluSQlmGilEJZFNxllAFglIyaF0Wj1QDNWKeLWSmNmOfPmKZRmCZOGSgX2YaVmkhMWep\nMmiqYWsKkldAO2ejQGeYkVwdUGOYNWqsfmA/Z2ksrVcWaWonRGqbOW2vZ2hmaHEUpWEYa3EsR3Cu\ncHEta21qz1oAmGgmTXKkj2lDbncbzF4AbnBtSHWsjGpVQ3ezw2MJymIARHi0RXm1THivV3ajwWcJ\nRnyy1GQAdXs2T3qyVXmsw2kNq20wwGsLdXd0UXy0eX85U362S4G3Wn6xVX+3eXt4q3YeXICzUIW8\nXIOwvXUlfoB9WYe4XIa/sXwsWoi5Yoa5r4Aug4WCx30l1Xgwt4ExaouyYI2/hZBBynw8YY7A03wy\niIqHcY2vt4YtaY+8co6wt4c1uIg9eZK7wYo6fJSxvY1CcJfEcpnGxY5F24k8c5rHw5E/dJvIu5JR\neprDwpJNmZiQyZBh4o46tphmf6DIgaLKuJtvxZpTy5lO4pgm2JhKu55y35sniaXIz51Qi6fKjKjL\njanM359Qj6vOkKzP4KM90KVd5aI+4aQ+46JTqauo5aNO5KNU5KdBlbHVmbHPlrLWm7LQ3qpd56pL\n66lasbOvrLS85K5U465bo7bPr7bL46+CqbnM4LRrwLq57rhkssHVrsLb6bxz67108rxutMTXssXe\nwsTB9L5x7sB3uMjcu8rex8nGwsvTycvI9MZ878Sg+8Z+v8/iy87KwNDjzc/L98qGzdLV786a5dC/\ny9flzNjm09vk3d/c8dzL3+He2eLq6evo7vDt7/Hu8PLv8fPw8vTx9fP38/Xy+fTy9Pfz9vj09/n2\n+/j9+Pr3+fv4+vz5/fzz/P/7/v/8YPjk8wAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBI\nWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AYLFTAZUKn7/QAAACJ0RVh0Q29tbWVudABDcmVhdGVk\nIHdpdGggR0lNUCBvbiBhIE1hY4eod0MAAAGvSURBVBjTY2Bg6ChGB6YMQFD8Gh0Ug4QzTz9/8ezJ\nkyePgejx40dP75zOBAknvT794vHjB4+AQo8f3Xv8YtHrJJBwzOvHR148uAcEd+/effJi7Z3XMSDh\n0Nf37519DhS6e+fOvdfnb95+HQoWPmErJRu8+c6tuw9vvd5/+zZU2L5x0rxpDebXQG7YdhUk7AQS\n1pnV316R6GPjXtB57PpjkLA1SFhiQm1rVtDicwfWFF18ua789u0tN0DCIs2llSFrju9efbAr+yi7\nwO3bNZf2AoX5qjNi/U7uvrB+/gZD9svsp28bHyoBCnNJ56S67Vm6dcrcyexnTrG/fq290puBgd9C\nRZ9HZsn2iQu62ffNOSzGqWjXJsjA7++Qn2/AoblwVR/7oZUzZ67obWkqFAcKm+UbMU2XdHFk31mW\nFunr5eURH8UCEjZjmq5nskmYfWWYl6enp0dgPQvQaH9VDbZ0Nb2NV5zZZ6e4BtT3TOVmBwmHWzGl\nyaup74gTZe/Jq+Pm5hYE+Yafn58pQV5IOVdBjpd95jJ2Bjhgio7W9bS0tFTSYq9CEmZkggFmdlaw\nCAAubtLM/zAGbQAAAABJRU5ErkJggg==\n\}\]\nset\ images(reload)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBI\nWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gcaChMjSyiLTwAAArdJREFUOMutlE1rE1EUht9z5yOt\nqa39NNaKjSKiVAtWhYJYqShtlSwEEcGVyPwGl/4BF+ouGxf6C2bhR6GgoBQXxbYLsdQWa2maJpiJ\nzUczNzP3uknCZJiktXjgMHDP4TnvvHPmAv8YsbguY3H94G59DPuL7Vhc7/zv4CsT5wEg0wy+X8W7\nwmkXP8MAHgJ47odul1No1/rw6d0iAHSZBrf2BI7F9UkAbyb1/kX38sDZYltJrdbKZQd5noGdE4hE\nIoFwagC9CeD97fFRFFpd/Mla4HIHjBFIJXDbBlMJVrIAYkA0Gq3Cw6bBi4HgWFw/AWDl+q1RlGUR\naStZkyAcCaYQpGbDzknYeQGqfCUPXDMN7qgBgl9cvXTaJlAoZW1CuvVFl2yoCsGxRe3MA+0yDe4A\nQBB4SvaGkMyvQlEYujsPA2DQKARZaZBwsS2WoIcJA5HBQI+DwNCoFQqp6Ohph7ZVxMzscl392tRF\nqC1oCG2yx4S2jlZspRNyZnY5C+CMaXAyDU4AoJDWFNoQrEBFRBmSS5+zLoC7psG/e+u2W6hCjwVB\nG1phy5xbkqoDIHQqwb/5t8cD3djrL00AVo/Ou7k/pTQA4OkTJCt9VB3AC/K4afCE96yZYgJAUsov\nv62FCcKwqDnjCdPguk+U9GVdsTqZ5TfxeHpH6XRcLtVSKDv5TLtfgau+1CpPxf9GXjVUKbKfH0Tx\n5A2WSqxlYhfGoyK5kRmzVmW8mAZV+r3JPFB4FSs+xQSAlt+Kr4NjbC6VtB70dx9Ybx9y7x0ZYT/W\nPoqEB1YFKhWg8Nqh+C6jGnxlWqwcitJLrjoaAUSMcpFhZod7ycn+krZwahARACbygZnHlprvI4+U\n7r5z7A4x9EkXWwuv3NfClaJHKCLST2qoRYqNdbkzP+c61SEUsG5B2eiK9W5DnRV/AfIcOgCbYwEf\nAAAAAElFTkSuQmCC\n\}\]\nset\ images(delete_reverse)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0\nU29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPESURBVDiNtZVfaFt1FMe/53eT3CQ3N+uS\ntmnarC6hGGVizdrRTgoTJutDUJ988GnI9jSqgmzgWwhbQV8mqAx98MXhk0/Cxh7WgQ4GrStkxbbU\nbSk1/ZPENqHrTW5u7r+fD2lcm9YyhR74wu8Pv8/v/A7n/A5xznEYxg6FCsBx0CYRCQD8ANwA3DIg\nKkAdgLatLc659Z/AROSTge7vgPfDRGe8QL/AeYdF9FcNmFnh/JdLwE9EVOCcV/ac3y/GPp8v9Anw\n+juq+k3HwMBL7cmk6OrthaO9HWapBH15GRt379bXHzxY/Nnr/fhr4PdKpVI8EByNRtuubGyMDpvm\n98fHxry+06epns/D2tqCVa2CiSIESYLY0wN1dpb/ef26+itj57/q7JzIZrPP9gUPDg46+1Q1/unC\nwr1X0ulOR1cXak+egJsmwHlDtg1YFjgRvPE4rM1N/JFOF76Ix99e8ngeT09PG0BLVoRCoeClbPaz\n7mQy4OzpQTWTga0ogKY9V73eULWK6vQ0nMEgQmfPBscWF6/IshxssnaB/X6/WzKMd4PnzjnUR48A\nVd0Xyut1QNeBWg3KxASC/f1On66/19XV5d4DTqfTjrdyubDzyBGReTwwi0XwWm0XlDQNpGng6+sw\n5+ehT01Bm5oCMQaHKHrfXF3tTKfTjtZ0c/UuL7/qDYdNY27OZWazEHw+MFEEt+2Gh5oGXi7DNgxw\nzkG2DUYEq1yGLxKx+paWXvsNmAVg7gTbJMuKoSiAYcDO5wHGwBkDMQYiaohzMMbAOQcHYNs2yOWC\noWkcfv8WALs1xnp1dHReKxREoa0NzOl8DiMCa14gCI1xc93phOD3o7a25tpIJucA6LvAqVTKppGR\nZ5zzolEsQozFQERAC3wnFEQQYzEYxSIgCGvS0JCSSqX2eIxAIFCxYrHx1du3NWlgAEySdnu9reZc\nkCR4Tp7E6p07mh6Nfh4IBP4p7dbKo5mZmW5rZOSHUCJx5uipU0JtchJWoQAmCA0vAXDbBguF4B4a\nwubDh1Yhk7lH9+9/mEgk8gD4fmAAcM1fvXqiPj7+o9zbG+1OJt22qsIulcArFTBZBgsGQV4v8rdu\naUout+i5du2D+OXLC834/hsYKysrnnZB6Hg8PDzGi8WP5L4+LoXDoisQYHq5bKv5fH3r6VOiUOjL\nlycnv92wrPVIJFLb9fQDOogA4Oj6jRuR0s2bb+i5XAKVygkmy7OOY8cygQsXMp0XL64BKDdT7EXB\nOy8QAbgURXHIsmxuP7kOYN9P/kXB/8sOref9DbaUvAtd86h8AAAAAElFTkSuQmCC\n\}\]\nset\ images(down)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0\nU29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL8SURBVDiNtZRPbBRVHMc/781Md1bTGMCk\nhYNtOIiAnkw0bSFpNCGeOEAwMRyMMaReNCY0JXpFozQWT3JWExsEIzaxJkSREGiJIglRNCqVDSEI\nxlKqsN3ZeX9+HnZ2O112Wznwkl/e78283+f33nd+v1Eiwv0Y+r5QgbDdi4GR6AaermWjNX9NjZru\newLj6Xp76COsNzhvsT7FeYvzBusNqUs4dPittonbgwFQnP7jCFW7QNUukLqk4T+3cc8Kl7nHoVD/\na98KYEFYrBqR2lrEs1I1LQtehHgEX3signHVFU/c0HjLSHRSPIONjKFKRHws4vF4vNQsdRUSW27s\nGRiOFo+uOTU1agaXgL2TsZ7uR5/es/3NYhhEOLGx8xYvFrRHh4L3CQm3iAoaHcAru96IRcCYKhMn\nxhdmb/15sM5Tea0GhqO9m9Y/uX/H4MvFC9e+oWLnsVSp+jvMVa+R2H9BAQIiEOtOtvbs5uTUVwuX\nr8/snx4177bUeOo9M/brlR/Gvz13LNm8rp8gVBhV5u/qDFbfIYo1HbEmijXFYszW9bs4f/FscuXG\npYk89C4wwNqSG5r+5evvf7z0ndm4tp/ZtITq8EQZMIoDOuKAvp4dlK5etj/9fu7nyrx7sZmjWpXN\nln2qU6nowvZnX+gNH6roi/PHCUKNDhVKweOrtlGZ0zIxefS6M/aJ6YMy18xoWW5nDshtbczg5Imj\n/xTcKjas6SfsUEQFzYaH+yi61Xx5/IvbQvBMK2hbMMCpMblqU7vt2OSn5e5oE+sefKxmhc0c/ny8\nXE3NzjMHkt/axbeUIj8GRsKdqzvXfLz7+ZceCCLFJ599WL45e3Pf6dH0g+XiloCVUgoIcqYB3fda\nsPeR3t7hoKBUaaZ05Oz77nXA58wBTkTsEnAGjKg1TJjzg2zWT70avBMEuuv8ITOUppgMaDOoBUw2\nW8DUwVEO2Ow3r00OYtqs03pL16/Q/E+sX1NnlvVdQ4LmE6dAKiL+ro/XTufMryerw10OLpKD/Qce\nAIZcIO5IFQAAAABJRU5ErkJggg==\n\}\]\nset\ images(ok)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dE\nAAAAAAAA+UO7fwAAAAlwSFlzAABJ0gAASdIBqEWK+AAAAAl2cEFnAAAAGAAAABgAeEylpgAAA3dJ\nREFUSMftlE1MHGUYx/8zszO7M8t+FOxSoHZbRCzFtLQH2lCbIMWqbUiNsSH2YGNMPBlNLxZ64qKk\n1XixMTGNmnjxq0YvhESFkm1AUJvCtnalAlKWlcrusuzMztc7X15Y3a5LacB48p/887555nmeXybP\nkxf4X2uI2khxW1dZG0u7LlEMNUeI3j14Tun/1wAdPRA0wz/T9fz5Ssdx8MngRSmR+i1hqKRz4G05\nms+j1wtQia9n/yMHAz6vB7oTx6vPnvU981jnTs7jfr8wb12A1m7fTreLf+VI83HPbHIUSXEaKhFx\nfXpCMWzz8w0DOJr+6OiB426FLCKr3EGFtw6TczecqcTNhMmJ724I0H7WezLkr9rdEG6k55eicNEC\neFcFvox8qpu2fWqoB+a6AU/3lPtpuC4ca+kQ/shOghgqQr56RMa/03WS+2KgV/q+uKYk4MQJMKXi\nFrHeaqrbxwu8GylxFl5uM5YlCaOxEWLazulSNXcBWl/nt7Z3+xcydWXKE2f8r6Fgjdu7hL0Mw73Q\n3NDs+T3zMxwHCPDV6B/tUyzHOj3QK6VLAf5ucGZTAIx1tXV36/btVTuY/rE+Obmc+smC0XmIk5Mj\nJDDxeFPbrupQOZ2WZlHhCyORzNhD44PXv3kjuxeAc88/YBj7q6aH9tSEq6oZUY3j6IEnvfvqm1oY\nsL9EVO/X5f6K2m1bqumUdBsM7YbtcLgSvUIM0zy1WnMAcOUvtuM0Ch43Z1kmND0HWYuhrmYrWxnc\nHBwaHz528NH99JIUh2kYCPprMHbjB802yQeXz8kT91qMv4ZZ28L2JdILT2VlkQ9X1rK2bSKr3AHL\n0mgI11OWrSCnpeHhfBBlHVdvXRNli+uIDyvkvgAzwyT14GH9oiyR8MzCXP2WTZWc4PZC1jKQtQx0\nQwZAgWeDiETHZJXoL0fOL1/DGir52B3uLnuOoZgPd4UfFraFQoyii7BsAt4dwPxi2ozFp0a/fVM8\ntFbzf6xpXgO9uUsg2HPz9mRsLBZVABYsw0PTdcTiU6atOS/hPl9iZpWYa3pEl5cS5OPgDvuB+fRi\no08Q2FvxuCrl9PcuvyP1AeBW7FqpoVZ810ZRRXemlJtf5I/4Q+wF2Pj1x8/Ek9k5qACsNeyUmgG9\n0rTwLHQ+3wFgF9kqOlcfctG3fGOqCOAUgPKx/15/ArQwg1fnUtydAAAAJXRFWHRkYXRlOmNyZWF0\nZQAyMDEwLTAyLTE3VDA2OjQ2OjUwLTA3OjAwat5j0AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0w\nMS0xMVQwOToxMzoyNS0wNzowMAO3oKwAAAA0dEVYdExpY2Vuc2UAaHR0cDovL2NyZWF0aXZlY29t\nbW9ucy5vcmcvbGljZW5zZXMvR1BMLzIuMC9sagaoAAAAE3RFWHRTb3VyY2UAR05PTUUtQ29sb3Jz\nqplE4gAAADF0RVh0U291cmNlX1VSTABodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ25vbWUtY29s\nb3JzL1AdtesAAAAASUVORK5CYII=\n\}\]\nset\ images(delete)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAF1QTFRFAAAA\nxwgAzRUA0R4A1ycA3jIA6QIA6h0D/gEA/hoC6i8I4zoA/ikG/jUL6EMA60cS7V4e/kcU/lYd73It\n+2cq/XY38oc9/oZH9JVJ+phV/qFm/qx1/riG/sSX/sui1vsBTgAAAAF0Uk5TAEDm2GYAAAABYktH\nRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AYLFTAtcR0PSAAAALhJREFUGNN9\n0dkSgyAMBVCSgBsVqIji1v//zLoB6kzLE3PmTshVxn4fpdKdKKmSSQmDDl6KoMYgnvpZvNidk3FO\n766kX5a543zPOtdqgC0ipZ/nyXEKeg6Xopum0fK7Mia4HcfBtqtWSdenuB36fssiXgtxsofCrefx\n2pOJtrlN01QAj6zT+l3XefJzX4SqfpVZ8NgNIS+L4vRLN4CsCE5oYrfdQxx1XGz1OBwxrQuQVrl+\nB4A/f/cLR24LBcAhtFwAAAAASUVORK5CYII=\n\}\]\nset\ images(printer)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAAXNSR0IArs4c6QAAAV9QTFRFAAAA\na2lobGtpbGxpbW1rbm1sbm5scXFudnV0dnd0d3d1eHl3enp3fX57gYB/g4OAhISBhYWDh4aDh4eF\nioqIi4qIiouIi4uIi4uJjIyKjo2KkpKQk5ORlJSSlJSUlZWVl5eVmZmXnJuanJyanZybnpyanp6e\nn5+dn5+foaGfoqKgo6Ogo6OhpaSjpaWkpqWkpqamp6enqKinq6qpq6uprKuoq6urrKuqra2tr7Cu\nsLCws7OxtLS0tbW0t7e1uLe1uLi4ubq4urq4urq5vLy7vLy8vb29vr68v7+/wMDAw8PDxMTExcXF\nx8fGyMjHy8vJy8vLzc3Nzs7O09PT1NTU4ODf4eHh4uLi5OTj5OTk5eXl5+fm5+fn6Ofn6Ojo6eno\n6enp6urq6+vr7Ozs7e3t7u7u8O/u8PDw8fDu8fDw8vLy8/Py9/b19/f3+Pf3+fn4+fn5+vr6+/v7\n/f39////KTpVyAAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwY\nAAAAB3RJTUUH3AYLFTIVaynVVAAAACJ0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUCBvbiBh\nIE1hY4eod0MAAAD7SURBVBjTY2DAAyyRALJwSTEUlKAKhwUEiEgEBsWhC4dJy8jIxiWiC0sAgaRk\nEppweGSUrGxCUjKacGRgkKJeUnIqsjCvZUlUTJyvX0pqeoklL1y0xDIrCgqyLLV5YaIZlmzMUCBk\nGuHPCxEtyS1BAgkJwSBx3jSr6CKvlOTU1KT4+Nj4+Hhxd7BwsHy2R2h+QVFhUVFeXl5OJo8DWDhE\njoOdjYWNlYWFmZmJkZ2NywYs7O1srqyqoqKkIMrHLyAoKCwFEfZ0tLc2MTYy0jc00NXR0lRXswAL\n8/rwogANMU6wC+1c3TyAwMXV1cXJycnWDOIfXnTAzUAiAACtUkaqnD2S7AAAAABJRU5ErkJggg==\n\}\]\nset\ images(reverselist)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAABl0RVh0\nU29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOwSURBVDiNtZRfTBxVFMa/e2dmB3aBFRZK\nFWSLLYWlqYXShYTFSK3GtFRt++qfxBdNjG9uGh/0ycQHM4/qg2nfNCYY20STmkhatDjQYghIS/gj\nWJZlLbusXbplt8vOzD0+dHczrlvoS09ycmbO3Pubb7659zIiwuMI/lioAOTiRiCouMHwvqSwl8mi\nDiI4uMTWGUdYmHRVWPhU14zkTmBmtyIQVF7nEvvcd2B/eWtrq+qp8cDpqEI6ncLdzQT+XFja+uPG\ndEaY4iyAc7pmiB3BfWeVj+tqd30YePGwc3dtA5ySG2lrA4spHVkzBdmowi65Dfx+FYZHLqdvx8KD\nv31mvL0tOBBUjjxRWTPSfniPGgnFN9ciMadDVY2WfXvFEb/f+dfmNfydWEQ2I1CB3fC5+zH066V0\nfCP6hq4ZF0uCez+Quao6Qi7V3ZC8fydkGtZ7AEYBuBnHO25nTfDVgTPqVOwS7iTXkc0I1KiNOFD3\nPC4MfZ0kIdp1zYgUg2UAh7a2so2miI9aBh3TNSOTe3YXwEeBoDLzy9Xh8z3dR8tH1r6HEBbiZhhp\nTwJ7vfuUxVsLpwB8UQzmALqYhIRl0GkbtBC6Znwbji6NRSKraKr2FfrhxCyan2orZxx9pazgagVv\nBOETXTNiD/sRJPDVWmwtVVlWW+glM3G4XJUA0F1qjmwZNEoCE/lGIKhIAL4DcNo+MB5fp2fbOwv3\nWSuDMocKEmgOBJXi7XuRldrSgaCiMo4rntqarqPdJ9Uy2fVAOQg/z52DoAfL97jv3cIcS5i4Mv7D\nVjQWnSCBF0qCc3AX4xhtaGhoC3S85Lge+hGbW4n/jatQq9HjfQXXpoezK+HQHAn06pqReuhZoWtG\nigT6V1cjK5OzY6a/6QTyyvNRJrvgbzqBydkxM7QSWiGBfl0zUsAOh5CuGQkQ+haW5qPzyzeF3zsA\nRVIBAIqkwu8dwPzyTbGwNB8FoU/XjMInlbSCMcZzL+UA2KE3Ja+rno12d/ZW19c9ySfCP6Hr6eOI\nrq+J8Uk9YaSp+/cvrVtkgxXAjDEGQMolt1UGgPvO8JbqZj70XM+xysb6PWw1ukwj45fvbd6m/ulv\nrDkAAoAFwCIiYkSUVyhtkxwAa3uNH/S0yBcO+jqcN2an0hsr1smZQWsqD7SlmQfnAXIRUC6+bjvF\nO6uf4eeTq/TWzKA1lgfZoXbwIynOJXn2M+c/C3SvhFILgElE5iN7nKv5oJyn+WqHiu1WhR1mV8ty\nsP+A8zB7/AuncspNor9CdAAAAABJRU5ErkJggg==\n\}\]\nset\ images(isempty)\ \[image\ create\ photo\ -data\ \{\niVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI\nWXMAAAsTAAALEwEAmpwYAAAACXZwQWcAAAAYAAAAGAB4TKWmAAADkklEQVRIx+1US2xUVRj+eu/M\nGZ37AJf42GkrpQ0aTVxQbXRnQhOTaWKiCCqlU6cQ9o6ZVzqtwYUJ2BfWtqPBsOjCgAsXRor1sTFC\nx3bDRlACovS+5869587c34UztaEPinFl/JN/c873OPf/bz7gP1m5XLork3/7+X8DK9x5kMmne4SI\nuBARI19l8umercTvBbtKKI7kfbfqkuu6VBzJ+5sRm1in4pBTcbbENgmJwlCGqlWXwjCkMAzJtMwN\niU1x3dCIc5845+Q4NhWGMpTLvfPChiMSqEUHACIAIPCAQ5IkHE0dZzHG5pommXy6J8bYXOqtYywe\nl2BXLBBoVTBsoQfWGrTc+bIYY3NHU8eZJMnwuY8YY3AcB6PjJ3nAeSnK2KHUwDEWlyTYjgVZUuBW\nKhibPMU5D3oL2eL5be3BMA0KagHZjkVBwEk3NBp+t0CarpHPPbqt/U6e75GmrdDQSM7f1pLXmRg6\n8YCTYerk+x6FYUie79EfK7fI86vbEhc3Orw4v3Cl67l9iz9e+iHxxN4nxfj9cdgVC261At/zoEgq\nXNfF+MQHnAdbj0XY7KKQLZ4POC+NjZ9CNMoQhuFfTSEYi2FiYhS1ICjdbebiZheZfLqHMTY80D8o\nCkILPL8KIgIRQRRFdHR04vLlS51d3fsWL84vXLkng+bf1H8kxSRZguWYkGUVqrIDoiDCtHQoioL2\n9g7xp/JiYiuTDaMiFo3OHekbYJIUh2kZkOMKbMvCifeGYVkWVGUHNGMFkiThtYOvMxaJzm22aHEj\n8b7DSSbLMizHhCKpME0T09Mf8loQTJfLi51tbY+LqqJCN1egKipaW9vE5eWlxLPdXeu+RFgjnogI\n4rlkcpDJigLLNiHHFeiGgZmZKc5rQW8uW+zntaC39PEM1w0dqrITmn4biqLgwIGDTBSEc3eNinpY\nBxFBisvQDR2zs1NcN41XC9niBQByIVu8YNn2K2fOfMI1TYOq7EQYhqjX6gDWR8XqiObnv/7l6Wee\nKi8tlV9qb98jcp9jdnYquHHz1uGT749+CYABuA+A+N0331/dvWf38rVrP+9/9LFW0fc8nD37Kbcr\nzssjQyc+A/4Op2YWRQDEAMSSqb79D+7aVQKAX69ff3NqcuYLAEGj641HRQFE+pJvvPjIQw9PA8CN\n324emhyb+hyA3+jaWgM0SDEAkeRgXzcFVDt9+qNvG0C/YfBPsP/X1vUnKKIevOk3P2MAAAAldEVY\ndGNyZWF0ZS1kYXRlADIwMDktMTEtMTVUMjM6MDQ6MjUtMDc6MDBt/LoyAAAAJXRFWHRkYXRlOmNy\nZWF0ZQAyMDEwLTAxLTExVDA5OjEwOjE5LTA3OjAw0PLOhAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAx\nMC0wMS0xMVQwOToxMDoxOS0wNzowMKGvdjgAAAA0dEVYdExpY2Vuc2UAaHR0cDovL2NyZWF0aXZl\nY29tbW9ucy5vcmcvbGljZW5zZXMvR1BMLzIuMC9sagaoAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDA5\nLTExLTE1VDIzOjA0OjI1LTA3OjAwMk3MBgAAABd0RVh0U291cmNlAEdOT01FIEljb24gVGhlbWXB\n+SZpAAAAIHRFWHRTb3VyY2VfVVJMAGh0dHA6Ly9hcnQuZ25vbWUub3JnLzLkkXkAAAAASUVORK5C\nYII=\n\}\]\nset\ images(job_engineering_logo)\ \[image\ create\ photo\ -data\ \{\n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\nnv8PbNpb9t40/Q8AAAAASUVORK5CYII=\n\}\]\n=====\n\n\n<<categories>>\ Widget\ |\ TclOO} CALL {my revision {A TclOO megawidget based on tablelist - extended (XTableList)}} CALL {::oo::Obj5730121 process revision/A+TclOO+megawidget+based+on+tablelist+%2D+extended+%28XTableList%29} CALL {::oo::Obj5730119 process}

-errorcode

NONE

-errorinfo

Unknow state transition: LINE -> END
    while executing
"error $msg"
    (class "::Wiki" method "render_wikit" line 6)
    invoked from within
"my render_$default_markup $N $C $mkup_rendering_engine"
    (class "::Wiki" method "render" line 8)
    invoked from within
"my render $name $C"
    (class "::Wiki" method "revision" line 31)
    invoked from within
"my revision $page"
    (class "::Wiki" method "process" line 56)
    invoked from within
"$server process [string trim $uri /]"

-errorline

4