From b3484511608349898f4e3cfce9ffcbc73f7f5639 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 00:53:46 +0100 Subject: [PATCH 01/11] new symbol browser: add Update button to refresh list of dirs and files; fix Alt-s (Reload) incorrectly moved in r keybind after handle_key_press() refactoring --- src/callback.c | 31 +++++++++++++++------------- src/xschem.tcl | 55 ++++++++++++++++++++++++++++---------------------- 2 files changed, 48 insertions(+), 38 deletions(-) diff --git a/src/callback.c b/src/callback.c index 278a5838..ab55319e 100644 --- a/src/callback.c +++ b/src/callback.c @@ -3434,19 +3434,6 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m tcleval("[xschem get top_path].menubar invoke Simulate"); } } - else if(SET_MODMASK) { /* reload */ - if(xctx->semaphore >= 2) break; - tcleval("tk_messageBox -type okcancel -parent [xschem get topwindow] " - "-message {Are you sure you want to reload from disk?}"); - if(strcmp(tclresult(),"ok")==0) { - char filename[PATH_MAX]; - unselect_all(1); - remove_symbols(); - my_strncpy(filename, abs_sym_path(xctx->sch[xctx->currsch], ""), S(filename)); - load_schematic(1, filename, 1, 1); - draw(); - } - } else if(EQUAL_MODMASK) { /* rotate objects around their anchor points 20171208 */ if(xctx->ui_state & STARTMOVE) move_objects(ROTATE|ROTATELOCAL,0,0,0); else if(xctx->ui_state & STARTCOPY) copy_objects(ROTATE|ROTATELOCAL); @@ -3490,7 +3477,8 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m tcleval("[xschem get top_path].menubar invoke Simulate"); } } - else if(/* !xctx->ui_state && */ (rstate == 0) && cadence_compat) { /* create wire snapping to closest instance pin (cadence keybind) */ + /* create wire snapping to closest instance pin (cadence keybind) */ + else if(/* !xctx->ui_state && */ (rstate == 0) && cadence_compat) { if(xctx->semaphore >= 2) break; snapped_wire(c_snap); } @@ -3507,6 +3495,21 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m save(1, 0); } } + + else if(SET_MODMASK) { /* reload */ + if(xctx->semaphore >= 2) break; + tcleval("tk_messageBox -type okcancel -parent [xschem get topwindow] " + "-message {Are you sure you want to reload from disk?}"); + if(strcmp(tclresult(),"ok")==0) { + char filename[PATH_MAX]; + unselect_all(1); + remove_symbols(); + my_strncpy(filename, abs_sym_path(xctx->sch[xctx->currsch], ""), S(filename)); + load_schematic(1, filename, 1, 1); + draw(); + } + } + else if(SET_MODMASK && (state & ControlMask) ) { /* save as symbol */ if(xctx->semaphore >= 2) break; saveas(NULL, SYMBOL); diff --git a/src/xschem.tcl b/src/xschem.tcl index 428493e6..5303e18d 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -4878,9 +4878,34 @@ proc insert_symbol_preview {} { } } +proc insert_symbol_update_dirs {paths {maxdepth -1}} { + global insert_symbol new_symbol_browser_ext + # regenerate list of dirs + set insert_symbol(dirs) [get_list_of_dirs_with_symbols $paths $maxdepth $new_symbol_browser_ext] + set insert_symbol(dirtails) {} + foreach i $insert_symbol(dirs) { + lappend insert_symbol(dirtails) [file tail $i] + } + # sort dirs using dirtails as key + set files {} + foreach f $insert_symbol(dirtails) ff $insert_symbol(dirs) { + lappend files [list $f $ff] + } + set files [lsort -dictionary -index 0 $files] + set insert_symbol(dirtails) {} + set insert_symbol(dirs) {} + + foreach f $files { + lassign $f ff fff + lappend insert_symbol(dirtails) $ff + lappend insert_symbol(dirs) $fff + } +} + #### fill list of files matching pattern proc insert_symbol_filelist {paths {maxdepth -1}} { global insert_symbol new_symbol_browser_ext + set sel [.ins.center.leftdir.l curselection] if {![info exists insert_symbol(dirs)]} {return} if {$sel eq {}} { @@ -5012,7 +5037,10 @@ proc insert_symbol {{paths {}} {maxdepth -1} {ext {.*}}} { -readonlybackground [option get . background {}] -takefocus 0 label .ins.top.ext_l -text Ext: entry .ins.top.ext_e -width 15 -takefocus 0 -state normal -textvariable new_symbol_browser_ext - + button .ins.top.upd -takefocus 0 -text Update -command " + insert_symbol_update_dirs [list $paths] [list $maxdepth] + insert_symbol_filelist [list $paths] [list $maxdepth] + " bind .ins {.ins.bottom.dismiss invoke} bind .ins " if {{%K} eq {Tab} && {%W} eq {.ins.center.left.l}} { @@ -5048,33 +5076,12 @@ proc insert_symbol {{paths {}} {maxdepth -1} {ext {.*}}} { pack .ins.top.pat_e -side left pack .ins.top.dir_l -side left pack .ins.top.dir_e -side left + pack .ins.top.upd -side left pack .ins.top.ext_l -side left pack .ins.top.ext_e -side left - set insert_symbol(dirs) [get_list_of_dirs_with_symbols $paths $maxdepth $new_symbol_browser_ext] - set insert_symbol(dirtails) {} - foreach i $insert_symbol(dirs) { - lappend insert_symbol(dirtails) [file tail $i] - } + insert_symbol_update_dirs $paths $maxdepth - # sort dirs using dirtails as key - set files {} - foreach f $insert_symbol(dirtails) ff $insert_symbol(dirs) { - lappend files [list $f $ff] - } - set files [lsort -dictionary -index 0 $files] - set insert_symbol(dirtails) {} - set insert_symbol(dirs) {} - - foreach f $files { - lassign $f ff fff - lappend insert_symbol(dirtails) $ff - lappend insert_symbol(dirs) $fff - } - - # insert_symbol_filelist $paths $maxdepth - # tkwait window .ins - # xschem set semaphore [expr {[xschem get semaphore] -1}] if {[info exists insert_symbol(dirindex)]} {.ins.center.leftdir.l selection set $insert_symbol(dirindex)} if {[info exists insert_symbol(fileindex)]} {.ins.center.left.l selection set $insert_symbol(fileindex)} return {} From 4584c260bad24063e448a240641e1d9cc7b47a6c Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 01:58:55 +0100 Subject: [PATCH 02/11] new insert symbol: low-pass filter (200ms) on preview rendering to speed up quick listbox select events (arrow key autorepeat) --- src/xschem.tcl | 52 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/src/xschem.tcl b/src/xschem.tcl index 5303e18d..99dc612d 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -4133,7 +4133,7 @@ namespace eval c_toolbar { set c_t($i,file) $f set c_t($i,command) " set file_dialog_retval {} - xschem abort_operation + if { \[xschem get ui_state\] & 8192 } { xschem abort_operation } file_dialog_display_preview {$f} xschem place_symbol {$f} " set c_t($i,text) [file tail [file rootname $f]] @@ -4357,7 +4357,9 @@ proc file_dialog_place_symbol {} { set file_dialog_retval $entry set sym [file_dialog_getresult 2 0] # puts "sym=$sym" - xschem abort_operation + if { [xschem get ui_state] & 8192 } { + xschem abort_operation + } if {$sym ne {}} { xschem place_symbol "$sym" } @@ -4836,11 +4838,25 @@ proc get_list_of_dirs_with_symbols {{paths {}} {levels -1} {ext {\.(sch|sym)$}} ####################################################################### #### Display preview of selected symbol and start sym placement -proc insert_symbol_preview {} { - # puts "insert_symbol_preview" +proc insert_symbol_draw_preview {f} { + # puts "insert_symbol_draw_preview" + .ins.center.right configure -bg {} + xschem preview_window create .ins.center.right {} + xschem preview_window draw .ins.center.right [list $f] + bind .ins.center.right "xschem preview_window draw .ins.center.right [list $f]" + bind .ins.center.right "xschem preview_window draw .ins.center.right [list $f]" + insert_symbol_place +} + + +proc insert_symbol_select_preview {} { + # puts "insert_symbol_select_preview" global insert_symbol + if {[info exists insert_symbol(f)]} { + after cancel "insert_symbol_draw_preview $insert_symbol(f)" + unset insert_symbol(f) + } xschem preview_window close .ins.center.right {} - .ins.center.right configure -bg white bind .ins.center.right {} bind .ins.center.right {} set sel [.ins.center.left.l curselection] @@ -4866,14 +4882,12 @@ proc insert_symbol_preview {} { .ins.top2.dir_e delete 0 end .ins.top2.dir_e insert 0 $f .ins.top2.dir_e configure -state readonly - - .ins.center.right configure -bg {} - xschem preview_window create .ins.center.right {} - xschem preview_window draw .ins.center.right [list $f] - bind .ins.center.right "xschem preview_window draw .ins.center.right [list $f]" - bind .ins.center.right "xschem preview_window draw .ins.center.right [list $f]" + # global used to cancel delayed script + set insert_symbol(f) $f + after 200 "insert_symbol_draw_preview $f" + } else { + .ins.center.right configure -bg white } - insert_symbol_place } } } @@ -4972,7 +4986,9 @@ proc insert_symbol_place {} { if {$f ne {}} { set type [is_xschem_file $f] if {$type ne {0}} { - xschem abort_operation + if { [xschem get ui_state] & 8192 } { + xschem abort_operation + } xschem place_symbol $f } } @@ -5045,18 +5061,22 @@ proc insert_symbol {{paths {}} {maxdepth -1} {ext {.*}}} { bind .ins " if {{%K} eq {Tab} && {%W} eq {.ins.center.left.l}} { insert_symbol_filelist [list $paths] [list $maxdepth] - insert_symbol_preview + insert_symbol_select_preview } elseif {{%K} eq {Tab} && {%W} eq {.ins.center.leftdir.l}} { insert_symbol_filelist [list $paths] [list $maxdepth] } " bind .ins.center.leftdir.l <> "insert_symbol_filelist [list $paths] [list $maxdepth]" - bind .ins.center.left.l <> "insert_symbol_preview" + bind .ins.center.left.l <> "insert_symbol_select_preview" bind .ins.center.left.l " xschem preview_window close .ins.center.right {} destroy .ins " - bind .ins.center.left.l "xschem abort_operation" + bind .ins.center.left.l " + if { \[xschem get ui_state\] & 8192 } { + xschem abort_operation + } + " label .ins.bottom.n -text { N. of items:} label .ins.bottom.nitems -textvariable insert_symbol(nitems) button .ins.bottom.dismiss -takefocus 0 -text Dismiss -command { From 172a0014256cbf8ca72d28f1dc52bf91863f88b3 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 03:07:48 +0100 Subject: [PATCH 03/11] insert symbol preview. Fixed some race conditions --- src/actions.c | 4 +++- src/xschem.tcl | 24 +++++++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/actions.c b/src/actions.c index 7860c430..19becdd2 100644 --- a/src/actions.c +++ b/src/actions.c @@ -1599,7 +1599,8 @@ int place_symbol(int pos, const char *symbol_name, double x, double y, short rot } else { const char msg[]="scope_ammeter is being inserted but no selected ammeter device/vsource to link to\n"; dbg(0, "%s", msg); - if(has_x) tclvareval("alert_ {", msg, "} {}", NULL); + if(has_x) tclvareval("alert_ {", msg, "} {} 0", NULL); + #if 1 if(xctx->inst[n].instname) my_free(_ALLOC_ID_, &xctx->inst[n].instname); if(xctx->inst[n].name) my_free(_ALLOC_ID_, &xctx->inst[n].name); if(xctx->inst[n].prop_ptr) my_free(_ALLOC_ID_, &xctx->inst[n].prop_ptr); @@ -1607,6 +1608,7 @@ int place_symbol(int pos, const char *symbol_name, double x, double y, short rot if(prop) my_free(_ALLOC_ID_, &prop); xctx->instances--; return 0; + #endif } } else if(xctx->sym[i].rects[PINLAYER] == 1) { my_mstrcat(_ALLOC_ID_, &prop, diff --git a/src/xschem.tcl b/src/xschem.tcl index 99dc612d..17f6ed8e 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -4840,12 +4840,14 @@ proc get_list_of_dirs_with_symbols {{paths {}} {levels -1} {ext {\.(sch|sym)$}} #### Display preview of selected symbol and start sym placement proc insert_symbol_draw_preview {f} { # puts "insert_symbol_draw_preview" - .ins.center.right configure -bg {} - xschem preview_window create .ins.center.right {} - xschem preview_window draw .ins.center.right [list $f] - bind .ins.center.right "xschem preview_window draw .ins.center.right [list $f]" - bind .ins.center.right "xschem preview_window draw .ins.center.right [list $f]" - insert_symbol_place + if {[winfo exists .ins]} { + .ins.center.right configure -bg {} + xschem preview_window create .ins.center.right {} + xschem preview_window draw .ins.center.right [list $f] + bind .ins.center.right "xschem preview_window draw .ins.center.right [list $f]" + bind .ins.center.right "xschem preview_window draw .ins.center.right [list $f]" + insert_symbol_place + } } @@ -4853,6 +4855,7 @@ proc insert_symbol_select_preview {} { # puts "insert_symbol_select_preview" global insert_symbol if {[info exists insert_symbol(f)]} { + after cancel ".ins.center.right configure -bg white" after cancel "insert_symbol_draw_preview $insert_symbol(f)" unset insert_symbol(f) } @@ -4870,6 +4873,7 @@ proc insert_symbol_select_preview {} { .ins.center.left.l see $sel set f [lindex $insert_symbol(fullpathlist) $sel] if {$f ne {}} { + set insert_symbol(f) $f set type [is_xschem_file $f] if {$type ne {0}} { set dir [rel_sym_path $f] @@ -4883,10 +4887,9 @@ proc insert_symbol_select_preview {} { .ins.top2.dir_e insert 0 $f .ins.top2.dir_e configure -state readonly # global used to cancel delayed script - set insert_symbol(f) $f after 200 "insert_symbol_draw_preview $f" } else { - .ins.center.right configure -bg white + after 200 {.ins.center.right configure -bg white} } } } @@ -5103,7 +5106,10 @@ proc insert_symbol {{paths {}} {maxdepth -1} {ext {.*}}} { insert_symbol_update_dirs $paths $maxdepth if {[info exists insert_symbol(dirindex)]} {.ins.center.leftdir.l selection set $insert_symbol(dirindex)} - if {[info exists insert_symbol(fileindex)]} {.ins.center.left.l selection set $insert_symbol(fileindex)} + if {[info exists insert_symbol(fileindex)]} { + .ins.center.left.l selection set $insert_symbol(fileindex) + .ins.center.left.l see $insert_symbol(fileindex) + } return {} } ####################################################################### From 0f9d201f0aa5a4d9584aa0d8ca1b4718ed07da73 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 03:31:37 +0100 Subject: [PATCH 04/11] (2) insert symbol preview. Fixed some race conditions --- src/actions.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/actions.c b/src/actions.c index 19becdd2..9d5b67d9 100644 --- a/src/actions.c +++ b/src/actions.c @@ -1599,7 +1599,7 @@ int place_symbol(int pos, const char *symbol_name, double x, double y, short rot } else { const char msg[]="scope_ammeter is being inserted but no selected ammeter device/vsource to link to\n"; dbg(0, "%s", msg); - if(has_x) tclvareval("alert_ {", msg, "} {} 0", NULL); + if(has_x) tclvareval("alert_ {", msg, "} {} 1", NULL); #if 1 if(xctx->inst[n].instname) my_free(_ALLOC_ID_, &xctx->inst[n].instname); if(xctx->inst[n].name) my_free(_ALLOC_ID_, &xctx->inst[n].name); From 2ea1294fb1e3a0a4e05911a24cd7db99909f4649 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 10:51:34 +0100 Subject: [PATCH 05/11] add toolbar_icon_zoom and ctxmenu_icon_zoom xschemrc (integer) variables to enlarge icons on XUHD displays --- src/resources.tcl | 575 +++++++++++++++++++++++++++++----------------- src/xschem.tcl | 17 +- src/xschemrc | 9 + 3 files changed, 391 insertions(+), 210 deletions(-) diff --git a/src/resources.tcl b/src/resources.tcl index 802c4ecb..3df46aa7 100644 --- a/src/resources.tcl +++ b/src/resources.tcl @@ -90,8 +90,8 @@ if { $dark_gui_colorscheme == 0 } { -image create photo imgFileOpen -imgFileOpen put " +image create photo ximgFileOpen +ximgFileOpen put " R0lGODlhGAAYAPYAAAAAAAEBAQMDAwQEBAUFBQcHBwgICAkJCQsLCw0NDRISEhMTExcXFxkZGRwc HB0dHR4eHiEhISYmJisrKywsLDAwMDExMTIyMjY2Njc3Nzk5OUREREVFRUZGRk5OTlRUVFlZWVpa Wl1dXV5eXmBgYGhoaGlpaW1tbW5ubm9vb3BwcHl5eXp6en19fYGBgYKCgouLi5OTk5SUlJWVlZ2d @@ -105,8 +105,8 @@ KuHi4+Ti3ysLubbr7LoLEOrt8gAIEBcJ8/MIFx0L+fILOoBg8K8dAxAoIBRkBwFFiwgL10V4IUNC RFsSZNigcJEUBRs6OHbEdEEHEQwjMWEgkqRDSgAdkjihgcKRzZs4b6Kg4WSSz58+AwEAOw== " -image create photo imgFileSave -imgFileSave put " +image create photo ximgFileSave +ximgFileSave put " R0lGODlhGAAYAPUAAAAAAAEBAQICAgMDAwQEBAUFBQcHBzExMT4+Pj8/P0FBQUNDQ0REREVFRUdH R0hISElJSV9fX2BgYGFhYWJiYmVlZWdnZ2hoaGlpaW1tbW5ubm9vb3BwcHNzc3R0dJOTk6Ghoaam pqqqqq2trbGxsbKysrOzs7a2trq6usHBwcLCwsPDw8TExMbGxsfHx8rKytXV1ebm5urq6uzs7O3t @@ -117,8 +117,8 @@ GrCdkwbCwp6lprLGycqxQrPKz8fN0NDMOs7TxtXX2Gza3Mne36XVa+JskUMkZeIGDSdETE5P8/T0 HiRpSvr7/ENBADs= " -image create photo imgFileReload -imgFileReload put " +image create photo ximgFileReload +ximgFileReload put " R0lGODlhGAAYAPYAAAAAAAEBAQICAgQEBAUFBQcHBwgICAsLCw0NDQ4ODg8PDxMTExQUFBoaGhsb GxwcHB8fHyAgICEhIScnJysrKywsLDg4OD4+Pj8/P0BAQEFBQUJCQkZGRk9PT1VVVVZWVmFhYWdn Z2hoaGlpaWtra2xsbHNzc4yMjJaWlpqamqSkpKWlpaqqqq2trbOzs7a2tri4uL6+vsHBwcPDw8TE @@ -134,8 +134,8 @@ xIvPKqhYRqCjx48gPRrQsELIjhsyUqpcyXLljiL+YsqcSXNRIAA7 ## EDIT -image create photo imgEditUndo -imgEditUndo put " +image create photo ximgEditUndo +ximgEditUndo put " R0lGODlhGAAYAPYAAAAAAAEBAQICAgMDAwUFBQcHBw0NDQ4ODg8PDxAQEBERERMTExQUFBUVFRcX FxgYGBkZGRsbGxwcHB0dHR4eHiAgICIiIioqKiwsLENDQ0REREtLS1NTU1RUVFxcXGFhYWdnZ2ho aGlpaWpqamxsbHJycnR0dHV1dXd3d3h4eHx8fICAgISEhIWFhYaGhoqKipCQkJGRkZSUlJWVlZqa @@ -149,8 +149,8 @@ mEIox7oFBgXJCShFhkIpra4ZODc0MyskGxUFEjTWhEYlILgaNWiKER4wPEDg0OMQlBIVREl60iJD C3/XoqTYhChLlhsrhAjDFEXFC0VTfOwYaUiJkkVRgpEilAXjzJs4GQUCADs= " -image create photo imgEditRedo -imgEditRedo put " +image create photo ximgEditRedo +ximgEditRedo put " R0lGODlhGAAYAPYAAAAAAAEBAQICAgUFBQcHBw0NDQ4ODhAQEBERERISEhUVFRcXFxgYGBoaGhwc HB0dHR4eHiAgICEhISMjIyoqKkNDQ0REREtLS1NTU1ZWVl1dXWBgYGdnZ2hoaGlpaWpqamtra2xs bG1tbXJycnNzc3R0dHV1dXZ2dnd3d3h4eHt7e3x8fH9/f4KCgoODg4SEhIWFhYeHh4qKipCQkJGR @@ -164,8 +164,8 @@ BhxIpUYlBs0EBr+z6SNEpU83vhMXITE2Nzg5FsCaRIU9MkDQQIOHkieETjUooYqQlBYVYpA6xAHA hBFOClkREgOHFWMJF5TgpHGHD4SJZLAgqRFJRkVKlCSSAtKTzZs4bwYCADs= " -image create photo imgEditCopy -imgEditCopy put " +image create photo ximgEditCopy +ximgEditCopy put " R0lGODlhGAAYAPYAAAAAAAcHBwoKCg4ODhAQEBERESUlJSsrKywsLC0tLS4uLi8vLzAwMDExMTMz Mzg4ODk5OTo6OkBAQEFBQURERFJSUlNTU1RUVFVVVVpaWmFhYWRkZGVlZXd3d35+foGBgYODg4SE hIWFhYaGhoiIiJWVlZaWlpmZmZ+fn6urq66urq+vr7S0tLW1tbm5ubu7u76+vr+/v8DAwMTExMzM @@ -180,8 +180,8 @@ Ax+oUPWg0WORDRugaOTIGIQCgAiKZBBKVBIABZLjygVhoS0myRYdWCjq4eEDxiA4W5AcSrQoo0AA Ow== " -image create photo imgEditCut -imgEditCut put " +image create photo ximgEditCut +ximgEditCut put " R0lGODlhGAAYAPcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQsLCwwMDA0NDQ4ODhAQ EBERERISEhMTExUVFRYWFhcXFxoaGhsbGx0dHR4eHh8fHyIiIiMjIyQkJCUlJScnJysrKywsLC0t LS8vLzExMTMzMzU1NTY2Njg4ODk5OTo6Ojs7Ozw8PD4+Pj8/P0JCQkNDQ0REREVFRUhISExMTE5O @@ -205,8 +205,8 @@ gWFhFgALMz0ZRURSS7HwBmWUSNWBBTSkFVMMczRiE046iUTJIXnkEchQI5WkQwwLqESZSE9dlBFH AIDwUUgNmeHED+VRxGJtI85oI0MBAQA7 " -image create photo imgEditPaste -imgEditPaste put " +image create photo ximgEditPaste +ximgEditPaste put " R0lGODlhGAAYAPYAAAAAAAEBAQUFBQoKCgsLCw4ODg8PDxAQEBkZGRsbGx0dHR8fHyAgICEhISMj IyYmJicnJy0tLS4uLi8vLzAwMDIyMjMzMzU1NTg4ODk5OUFBQUJCQkREREVFRUZGRkxMTE1NTVBQ UFFRUVRUVFdXV1paWl1dXWpqanR0dHd3d3h4eHx8fH19fX5+foODg4iIiI2NjY+Pj5ycnJ6enqCg @@ -221,8 +221,8 @@ J3szKJwwlIRDAYcFxYF0J7ATBwAZgqhcuXLXuVTUjPm64C2mTF7IVPkI0eKFz58/VZAQ4q2o0aOp AgEAOw== " -image create photo imgEditDelete -imgEditDelete put " +image create photo ximgEditDelete +ximgEditDelete put " R0lGODlhGAAYAPUAAAAAAAEBAQICAgMDAwYGBgcHBw0NDRAQEBQUFBUVFRkZGRoaGi4uLjAwMDEx MTw8PD09PUBAQEZGRklJSVNTU1RUVFhYWICAgIGBgYuLi4+Pj5KSkpOTk5ubm6ioqKmpqaqqqra2 tre3t8PDw8bGxsfHx8zMzM3Nzdra2vHx8fLy8vPz8/T09Pb29vn5+fr6+vz8/P39/f7+/gAAAAAA @@ -232,8 +232,8 @@ FQYFEiRUSjIfDwMHFBYJAw8eYEsyHQwDnAMMHZdMYgecBhl7TiwaBqWnTjOZDZ2eoE2MjgkVFqQP H6FHfX8GFIMUhoiKSG4Kh3N1d3moR2JkZkNoDGuLV1lbXV9Pv7DJr+Xm5+ivQQA7 " -image create photo imgEditDuplicate -imgEditDuplicate put " +image create photo ximgEditDuplicate +ximgEditDuplicate put " R0lGODlhGAAYAPcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQsLCwwMDA0NDRERERIS EhMTExQUFBkZGRoaGhwcHB0dHR4eHh8fHyIiIiQkJCcnJygoKCkpKSsrKywsLC4uLi8vLzMzMzQ0 NDY2Njk5OTs7Oz09PT4+Pj8/P0BAQEFBQUREREdHR0lJSUpKSktLS09PT1JSUlRUVFVVVVdXV1pa @@ -257,8 +257,8 @@ GMRjA77OJPUJhJxSHO03iGMDPRFgI+jlNFAiCA5UxYID6tcRQQoCcJ5MMADBw4cghsgDECUsqIYD v6W4AEF13LBCCTDCiAIKMs5IYwku6EAQZIz16GOPhfwYEAA7 " -image create photo imgEditMove -imgEditMove put " +image create photo ximgEditMove +ximgEditMove put " R0lGODlhGAAYAPYAAAAAAAEBAQICAgYGBgcHBwkJCQsLCxQUFBkZGRoaGhsbGx8fHyEhISIiIiMj IyUlJTc3Nzs7Oz4+Pj8/P0VFRUdHR0lJSUtLS05OTlJSUmRkZGdnZ2lpaWpqanNzc3h4eH19fYqK io2NjZCQkJiYmJmZmZycnJ+fn6GhoaampqqqqrS0tLi4uMLCwsPDw9TU1NbW1uDg4OPj4+Tk5OXl @@ -272,8 +272,8 @@ kUElLtbEGBUriEEiyczMGgoFFSk7xBLBwAMSJvb4wA4dDAXJcKCVQQUDADjwIEOgjVAQZ8iA4CDE qHKCgnwgkQPjoCCePIoc6TEQADs= " -image create photo imgEditPushSch -imgEditPushSch put " +image create photo ximgEditPushSch +ximgEditPushSch put " R0lGODlhGAAYAPUAAAAAAAEBAQICAgYGBhAQEBMTExUVFRYWFhgYGBoaGhsbGxwcHB0dHSAgIC4u LjExMTc3Nz4+PnR0dHh4eHx8fIODg4SEhIeHh4iIiIuLi5KSkpOTk5aWlpycnKCgoLCwsNzc3N7e 3t/f3+Dg4OLi4uTk5OXl5ebm5ufn5+np6ezs7PPz8/T09Pb29vr6+vz8/P39/f7+/gAAAAAAAAAA @@ -283,8 +283,8 @@ fStWQy0eDwsJA4EDCQsOHS1EMCEYBYFcBRUhh0QkGAubAAkXIUgwKBQNgQsTJKBGMCoTrmILEimz R7UUCVwJu72qKRcHWgcVKMVKogkHGKlMRiEbG9TVeiuG29/g1UEAOw== " -image create photo imgEditPushSym -imgEditPushSym put " +image create photo ximgEditPushSym +ximgEditPushSym put " R0lGODlhGAAYAPUAAAAAAAUFBQoKCgwMDBISEhcXFxsbGx8fHyAgICcnJygoKCwsLDIyMjQ0NDg4 OD09PUNDQ01NTVJSUlVVVVtbW15eXmVlZWpqam1tbXJycoaGho+Pj5mZmZ2dnaqqqq+vr7e3t7i4 uLy8vMLCwsrKys/Pz9PT09jY2N3d3eLi4ujo6O7u7vLy8vf39/v7+wAAAAAAAAAAAAAAAAAAAAAA @@ -295,8 +295,8 @@ CAlvE18oAQAhTRQAGXS5DRYWF0PIGHQKZtEA01+GzRYYvghvEl8nxLMvZg9aK6ELRB8eHw8Aq6yS JiMbBgABa00LolgIgKgyASAABBkwMQkCADs= " -image create photo imgEditPop -imgEditPop put " +image create photo ximgEditPop +ximgEditPop put " R0lGODlhGAAYAPUAAAAAAAEBAQICAgYGBhAQEBMTExUVFRYWFhgYGBoaGhsbGxwcHB0dHSAgIC4u LjExMTc3Nz4+PnR0dHh4eHx8fIODg4SEhIeHh4iIiIuLi5KSkpOTk5aWlpycnKCgoLCwsNzc3N7e 3t/f3+Dg4OLi4uTk5OXl5ebm5ufn5+np6ezs7PPz8/T09Pb29vr6+vz8/P39/f7+/gAAAAAAAAAA @@ -311,8 +311,8 @@ uVEuvIy+S8C4usTBg8NKxb3HzMl6y3YfGxzX2BsftV/d3t9LQQA7 ## VIEW -image create photo imgViewZoomIn -imgViewZoomIn put " +image create photo ximgViewZoomIn +ximgViewZoomIn put " R0lGODlhGAAYAPUAAAAAAAEBAQYGBggICBERERISEhMTExQUFBoaGjc3Nzg4OD4+PkFBQUJCQklJ SUpKSktLS0xMTF5eXl9fX2BgYGxsbHd3d3l5eXp6enx8fIODg4SEhIWFhZGRkZKSkpOTk5SUlLu7 u7y8vL29vcDAwMHBwcLCws/Pz9DQ0NHR0dbW1tfX19ra2tvb29zc3N3d3eDg4O7u7u/v7/X19fb2 @@ -324,8 +324,8 @@ mqepeBMzfKT3sfnWHFg1RAQuUwBBiRqyqJSaBDBgJJhUqQ8GQGsEETKE4YUSHSsw2HmlhkAGFmKU 3GDRIcLIOwcivOFDxcqGCRG2dPnSaUwOkiYlSqCw5JPKESNjggAAOw== " -image create photo imgViewZoomOut -imgViewZoomOut put " +image create photo ximgViewZoomOut +ximgViewZoomOut put " R0lGODlhGAAYAPUAAAAAAAEBAQYGBggICBERERISEhMTExQUFBoaGjc3Nz4+PkFBQUJCQklJSUpK SktLS0xMTF5eXl9fX2BgYHd3d3l5eXp6enx8fIODg4SEhIWFhZGRkZKSkpOTk5SUlLu7u7y8vL29 vcDAwMHBwcLCws/Pz9DQ0NHR0dbW1tfX19ra2tvb29zc3N3d3eDg4O7u7u/v7/X19fb29vf39/r6 @@ -336,8 +336,8 @@ vTU2LghqDCO1twC5Nr6+wMIAxKWnqa3UCrBqDbRVEqGCE2FCGYrdagecQyCn5AAQIESImd0EHjF9 FoChhC1KcxbxggQuqOCTpIaKDRDGrTkAwUOLR1SsZJAAYUuDCV/AjXnnBEq9jVSOGBkTBAA7 " -image create photo imgViewZoomBox -imgViewZoomBox put " +image create photo ximgViewZoomBox +ximgViewZoomBox put " R0lGODlhGAAYAPYAAAAAAAEBAQICAgQEBAUFBQYGBgcHBwgICAoKCgsLCwwMDBYWFhcXFxoaGhsb Gx0dHSMjIysrKzQ0NDY2NkBAQEFBQUJCQkNDQ0lJSUpKSk1NTVFRUVJSUlZWVldXV1tbW1xcXF5e XmJiYmNjY2RkZGlpaWpqamtra3t7e4aGho+Pj5aWlpeXl5ubm6ampqurq66urq+vr7i4uLq6uru7 @@ -352,8 +352,8 @@ DwcBWlA0SO6ixEFL3nG05HFivn0OeWA06a+hxZUbHZaM+fJjPpfxZubD4K2Ez59Af4bgpTFfCgi3 ktoaQKEGSB0pMFCgMOHC1KlVr1L4AEMgSESKwIZVlAjUoEAAOw== " -image create photo imgViewToggleColors -imgViewToggleColors put " +image create photo ximgViewToggleColors +ximgViewToggleColors put " R0lGODlhGAAYAPYAAAAAAAEBAQICAg8PDxERERISEhMTExQUFBUVFRYWFhkZGRsbGx4eHiUlJSYm JicnJykpKSoqKj4+PkJCQkNDQ0RERE5OTk9PT1FRUVJSUlRUVFdXV1hYWFlZWVpaWltbW2JiYmNj Y2RkZGdnZ2hoaGpqamtra2xsbG9vb3BwcHFxcXJycnNzc3R0dICAgIGBgYKCgo6Ojo+Pj5CQkJGR @@ -370,8 +370,8 @@ m5ak2bMkybpUuzZoVq2xuXb1EgQsQilCQ0oMQ5eqR9IxXmaVKEKIEkRMFjJwGhQmSREq9wY5ohAp 9T1DJaCkDgQAOw== " -image create photo imgViewRedraw -imgViewRedraw put " +image create photo ximgViewRedraw +ximgViewRedraw put " R0lGODlhGAAYAPYAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgkJCQoKCgsLCwwMDA8PDxAQEBERERMT ExQUFBUVFRsbGxwcHB8fHyQkJCkpKSsrKy0tLS4uLjExMTQ0NDg4ODo6Ojs7Ozw8PD09PUREREVF RUZGRkdHR0lJSUpKSkxMTE5OTk9PT1JSUlNTU1VVVVdXV1hYWF5eXl9fX2BgYGFhYWJiYmNjY2Rk @@ -394,8 +394,8 @@ pKSo8MHFjzEzTXVhwgQdnaimAgEAOw== ## TOOLS -image create photo imgToolInsertSymbol -imgToolInsertSymbol put " +image create photo ximgToolInsertSymbol +ximgToolInsertSymbol put " R0lGODlhGAAYAPUAAAAAAAYGBgkJCRcXFxoaGh0dHSAgICYmJiwsLDMzMzg4OEdHR0hISFFRUWtr a2xsbHd3d3l5eYKCgoWFhYiIiJGRkZmZmZ6enqOjo6enp6qqqqysrLu7u7+/v8vLy83Nzdra2t3d 3enp6fPz8/f39wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -405,8 +405,8 @@ EFsQShdbDkYhWxFLBgADGhobQ40Aj0oJXpeOS3RdIRYWE59KkZOVBXmIWw9DnF0Ne31/QyQdHBhb CnFwc1wVRx9oZwFqR1nGXGBKUFRUVk7U1dbX2EVBADs= " -image create photo imgToolInsertText -imgToolInsertText put " +image create photo ximgToolInsertText +ximgToolInsertText put " R0lGODlhGAAYAPUAAAAAAAMDAwQEBAgICBERERMTExUVFRYWFh8fHyAgICIiIjQ0NERERFVVVVZW VlhYWGZmZnd3d3h4eH19fY2NjZSUlKCgoKqqqqurq7u7u729vcvLy83NzdDQ0NHR0dLS0t3d3eHh 4eLi4u3t7e7u7vLy8vX19fb29vz8/P39/f7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -416,8 +416,8 @@ GoUkaIiJZhQQjY6NEiVmHHxTZiULBJqbmgofiqChomQmDJynnAYSVZSVdQRVKhMNtLW2thejurtc QQA7 " -image create photo imgToolInsertWire -imgToolInsertWire put " +image create photo ximgToolInsertWire +ximgToolInsertWire put " R0lGODlhGAAYAPUAAAQEBA8PDzs7Ozw8PD09PUREREVFRU5OTk9PT1BQUGJiYmNjY2RkZGVlZWho aGlpaXd3d3h4eHx8fH19fX5+foaGhoeHh5OTk5SUlJubm6WlpaampsHBwcnJycrKysvLy8/Pz9DQ 0NTU1NXV1dnZ2dra2ujo6O7u7u/v7/Hx8fLy8vz8/P39/f7+/gAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -427,15 +427,15 @@ GWN/QhwAAByHRImLjUOPjJEuk5WWipSRl5WdnJqVgYOFjXcCCQl8fnUlEQpxc4dmD0cMa4cpGF5g Yo0hVVdZkU0ghpFHWkEAOw== " -image create photo imgToolInsertLine -imgToolInsertLine put " +image create photo ximgToolInsertLine +ximgToolInsertLine put " R0lGODlhGAAYAPMAAAQEBAcHByAgICEhIcHBwcLCwsjIyMnJyfLy8gAAAAAAAAAAAAAAAAAAAAAA AAAAACH5BAEAAAkALAAAAAAYABgAAAQ1MMlJq7046827/2AojmTZIQahrmxRGAhmDAFg33gwGDKN /wAd74JiGVWvmGnJbDqf0Kg0EwEAOw== " -image create photo imgToolInsertRect -imgToolInsertRect put " +image create photo ximgToolInsertRect +ximgToolInsertRect put " R0lGODlhGAAYAPQAAAAAAAgICAkJCQsLCxsbG0BAQEFBQV5eXl9fX2BgYGFhYWlpaWpqapaWlp6e np+fn8TExMXFxeTk5Pn5+fr6+v39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA ABYALAAAAAAYABgAAAWPoCVWVFlO56SaVCW+FnQUdG3bBwSLzgD8wGBw4NhZGoDBgcFsOg++hhFJ @@ -443,8 +443,8 @@ kBhhEgJAuqNar6LsdgqogsNaLsx7tojVL/b5TTbP0/UvmN4t6698a35tgXGDd2N9dnt4in9GhSJy jImCi4CNlo87kUeHlHCSSUtOpVCVLz1Cq0BERjI3sTUKOjskJiorLCYuIiEAOw== " -image create photo imgToolInsertPolygon -imgToolInsertPolygon put " +image create photo ximgToolInsertPolygon +ximgToolInsertPolygon put " R0lGODlhGAAYAPUAAAEBAQUFBQoKCg8PDxMTExcXFxoaGh4eHiYmJiwsLDExMTY2Njk5OUBAQEpK SlRUVFdXV1lZWV5eXmRkZGdnZ3d3d39/f4KCgoqKio6OjpCQkJmZmaampqqqqq6urrCwsLu7u76+ vsTExMnJyc7OztPT09nZ2eHh4ebm5ujo6Ozs7PPz8/j4+Pv7+wAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -455,8 +455,8 @@ vVmILhcAB0YHvr6tQyNRJS4dURgb0tPTyUQFABguhQ1rRBIADSRRHt5DnwJlxOZCKWDa7EKFAAOd 8cFRuvcu4wDN+8HgeQsCADs= " -image create photo imgToolInsertArc -imgToolInsertArc put " +image create photo ximgToolInsertArc +ximgToolInsertArc put " R0lGODlhGAAYAPUAAAMDAwQEBAwMDA8PDxYWFh8fHyEhISwsLDExMTk5OUREREVFRU9PT1dXV15e XmBgYGZmZm5ubnR0dHd3d4GBgYSEhIqKio+Pj5ycnKKioqenp6qqqrm5ucnJydbW1tjY2Nzc3OHh 4ebm5ujo6Orq6vLy8vX19fn5+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -466,8 +466,8 @@ Jk4ACWyDSyYJTxOKVyFxAR6QTBlPDZZMgAAgm0obTxWgQyd5CKVDDE9WqhNPHaooogAbsxxPGLi6 sxpPt6oUsbMPTyWzGwEOs0tBADs= " -image create photo imgToolInsertCircle -imgToolInsertCircle put " +image create photo ximgToolInsertCircle +ximgToolInsertCircle put " R0lGODlhGAAYAPYAAAAAAAEBAQICAgYGBgcHBwgICAkJCQoKCgsLCwwMDBMTExQUFBUVFRkZGRoa GhsbGxwcHB0dHR4eHh8fHykpKSoqKjQ0NDU1NTY2Njc3Nzw8PD09PT4+Pj8/P0pKSktLS0xMTFBQ UFFRUVJSUlNTU2BgYGFhYWNjY2dnZ2hoaGlpaWpqam1tbW9vb3BwcHFxcXJycn19fX5+fn9/f4CA @@ -483,8 +483,8 @@ H+nLUISoPDI/jK2AZAQViUcT6YEgoCFJJG4LFIBzSqjcuX5QXBB49kPaJGo7IHa50CYp1wICvXIU UaKkSI5ix5KNM6UhgSoNHz68iqWhRjh/XZKs0FBBEydPK5L0K3qox41FjR45DQQAOw== " -image create photo imgToolSearch -imgToolSearch put " +image create photo ximgToolSearch +ximgToolSearch put " R0lGODlhGAAYAPUAAAAAAAoKChISEhYWFhkZGSIiIicnJysrKy0tLTMzMzc3Nzg4OEBAQFFRUVdX V1tbW11dXWNjY2RkZGpqamxsbHFxcXR0dLm5ub+/v8HBwcbGxsnJyc7Ozs/Pz+/v7/Hx8fj4+AAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -494,8 +494,8 @@ UQIADFFtCVFeB1ELg4WHeVUYR34AgEhxAAd0Ql1VeFEOVQeWQmxVBlshHghfYVcBE60fpVerAQAB Eq0hGxQLBgsVUBK7ARG/SBHJvsxGEM/R0tTVRNO80NhC2gkg3UMPCR7iROHnR0EAOw== " -image create photo imgToolJoinTrim -imgToolJoinTrim put " +image create photo ximgToolJoinTrim +ximgToolJoinTrim put " R0lGODlhGAAYAPUAAAAAAAEBAQMDAwQEBAUFBQsLCw0NDQ4ODhAQEBERERMTExQUFBkZGRoaGh8f HycnJykpKSoqKi4uLlRUVFdXV1hYWF9fX2NjY2RkZGVlZWhoaGlpaW9vb3BwcHJycnNzc3l5eXx8 fIqKio2NjZCQkJiYmJubm5+fn6amprm5ub6+vr+/v8TExMbGxsjIyMnJycvLy87Ozs/Pz9HR0dLS @@ -505,8 +505,8 @@ dX6AgRkzfn+BgQweiotCKBcblhkikZKbnJ2enjckFhmWFyicOCEPjQAbnTgceoGumzwzHqy0kjAX BXizkjwsFAhxHh4OGZI6JxIACBczOCAjwbwQFTI6PTeaizAnK4W1POOLQQA7 " -image create photo imgToolBreak -imgToolBreak put " +image create photo ximgToolBreak +ximgToolBreak put " R0lGODlhGAAYAPUAAAAAAAEBAQICAgMDAwoKCgsLCw8PDxAQEBERERMTExUVFRYWFicnJywsLDEx MVFRUVJSUlNTU1RUVFZWVldXV1hYWFpaWlxcXF1dXWFhYWJiYmNjY2VlZWZmZmlpaXR0dHZ2dnl5 eZqamqKioqamprS0tLa2tre3t7q6uru7u7+/v8DAwMTExMXFxcbGxsfHx8jIyMnJycrKysvLy8zM @@ -526,8 +526,8 @@ F3G8KrlKHmMFFy2RxFsDHTOYZcpbFKXJYwoVKM9VJBlRHSAn2pHj5EZBADs= ## ACTION BUTTONS -image create photo imgSimulate -imgSimulate put " +image create photo ximgSimulate +ximgSimulate put " R0lGODlhGAAYAPUAAAAAAAEBAQQEBAkJCQ8PDxoaGhsbGx4eHi8vLzY2Njw8PD09PUVFRUxMTE1N TVVVVV5eXnZ2dnp6ep2dnaCgoKGhoaioqL6+vsHBwcLCwtDQ0NHR0dbW1tfX19ra2tzc3OPj4+Tk 5OXl5ejo6Onp6e/v7/Hx8fj4+Pn5+fr6+vv7+/7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -537,8 +537,8 @@ FG1KgIFyBhF+SIiJAIslh3mBgxQfbo4HiQgSGJNLIJUAB3V3TWdpa4ZvXwdiZGZXWZpUUB6NXLu8 vb68QQA7 " -image create photo imgNetlist -imgNetlist put " +image create photo ximgNetlist +ximgNetlist put " R0lGODlhGAAYAPUAAAAAAAUFBQcHBxERERISEiIiIiUlJSsrKzMzMzo6Oj8/P0tLS1JSUl5eXmBg YHNzc3d3d3x8fIKCgoaGhoiIiI6OjpGRkZaWlpmZmZ6enqOjo6enp6ioqK6urrGxsbq6usHBwcXF xcvLy9TU1NnZ2d3d3eXl5enp6e/v7/b29vn5+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -549,8 +549,8 @@ ZBWcEZOXkH6UCXlEfAANjytiJldWIshufX+AskZ6KykHcnMAIRDj5B6fYQAaCOvsEudLkWRZW3Zf TCkZF4T6hBlN/wCNBAEAOw== " -image create photo imgWaves -imgWaves put " +image create photo ximgWaves +ximgWaves put " R0lGODlhGAAYAPUAAAEBAQUFBQsLCwwMDBISEhcXFxwcHCUlJTIyMj4+PktLS1FRUV1dXWNjY2Vl ZXV1dXp6eoeHh4uLi5OTk5iYmJmZmaOjo6ioqKqqqru7u729vcPDw8fHx8nJyc/Pz9DQ0NXV1dvb 29zc3OLi4uXl5enp6e3t7fHx8fX19QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -565,8 +565,8 @@ Hh33+fj6/PghygCTiRiASp3Bg+pIpHjwQZ5DJUEAADs= } else { -image create photo imgWaves -imgWaves put " +image create photo ximgWaves +ximgWaves put " R0lGODlhGAAYAPUAAAAAAAoKCg4ODhISEhYWFhoaGh0dHSMjIyQkJCoqKi8vLzAwMDY2Njg4ODw8 PEJCQkRERFVVVVxcXGZmZmxsbHR0dHh4eIWFhYqKipqampycnKKioq6urrS0tMHBwc3Nzdra2uPj 4+jo6O3t7fPz8/T09Pr6+v7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -577,8 +577,8 @@ Jm0OcGoXQyMWB6kHCgQABQsHCQgAAQwHCAtEUUUYYSO/I2JiwGNyRB+dyWnGQxonHRDR0tPRgiOE hYUbJ5tPAJmUHt7fyhzjpwiqqQzjzO26Zu9DCyQXCwz3+fj6/PgIygCTHSCBSp3Bg+oKAMCgQJ5D JUEAADs= " -image create photo imgViewZoomIn -imgViewZoomIn put " +image create photo ximgViewZoomIn +ximgViewZoomIn put " R0lGODlhGAAYAPUAAAAAAAEBAQQEBAoKChERER8fHyIiIiUlJSgoKC8vLzAwMD4+PkNDQ0RERGtr a25ubnt7e3x8fIODg4WFhYiIiJOTk5+fn6CgoLOzs7a2tr29vcHBwcfHx8jIyOXl5evr6+7u7vf3 9/n5+f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -589,8 +589,8 @@ cpcCmY4QQwMWlZYCoqkXTwAKlCMiHRsbHRVfFRy2HYAjGAlCDBplHgVCq0PKBR5lGgtCC8Ujx1/K 12zNzwtssWW0thy5ABW1Gxy/wUIEqJWho3MXA3ee76vxZh+lQwyyoPg0cTJ1aE6HAgU6OIKEZ8Ie M33+BJpg4AiCCXFSlQEhgVCbAw8wZJTzAYOaO0ikQLiA4UqWLSi9sFuyIEEkmTiRBAEAOw== " -image create photo imgToolInsertArc -imgToolInsertArc put " +image create photo ximgToolInsertArc +ximgToolInsertArc put " R0lGODlhGAAYAPUAAAAAAAYGBgoKCg0NDRcXFxkZGR4eHiMjIykpKTY2NkZGRlVVVVhYWF1dXWNj Y3BwcHV1dXt7e35+foiIiJGRkZmZmZ+fn6GhoaioqLCwsLq6uru7u8bGxs7OztPT097e3uDg4Onp 6fDw8Pv7+/z8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -599,16 +599,16 @@ Z2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAaHQIAQQDAcCoGhcsnUkJ6kkceyEDCvA6j2KZoQrktG ZTKhZEBa0SMJBh8kIaim0G4HIKLnx1BvIzp6dH1XAk4kHGyDSwIcTxOKVwZxIwiQTA1PGJZMgCQH m0oLTxGgQwF5HaVDGU9WqhNPCaoAoiQLswpPDri6swxPt6oSsbMWTwOzCyMXs0tBADs= " -image create photo imgSimulate -imgSimulate put " +image create photo ximgSimulate +ximgSimulate put " R0lGODlhGAAYAPQAAAAAAAEBAQUFBQ4ODhAQEBcXFxsbGxwcHCMjIyUlJSkpKS8vLz4+PkFBQVdX V19fX2JiYoWFhYmJiaGhoaqqqrOzs7q6usPDw8nJydDQ0OHh4eTk5PDw8Pb29vv7+////yH5BAAA AAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAVxICCOZGmeaKqubKsK izK4ZnFVTiHQo6F5m0ljx/N9PhxMJEFsGTbHD5ACObie0aiSMVths8eO5cFUfcHHjaSLOqPVBDMU LX4gmicjOBNhxFcHc0caVFZOGkdJS3hePxpCjCwGNzmRLDAJbDybnJ2enCEAOw== " -image create photo imgToolSearch -imgToolSearch put " +image create photo ximgToolSearch +ximgToolSearch put " R0lGODlhGAAYAPUAAAAAAAcHBw4ODhAQEDExMTY2Njk5OT4+PkBAQEZGRouLi46OjpOTk5WVlZub m5ycnKKioqSkpKioqK6urr+/v8fHx8jIyMzMzNLS0tTU1NjY2N3d3ebm5unp6e3t7fX19f///wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -618,8 +618,8 @@ Z2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAakQIBwSCwajwBDo7KpMArI42ACqlpBEkF0OMhYO5eO Ql1VeFESVRmWQmxVGlsAAxhfYVcfDa0CpVerHyAfDq0ABQwVGhULUA67Hw+/SA/JvsxGEM/R0tTV RNO80NhC2hcB3UMRFwPiROHnR0EAOw== " -image create photo imgEditUndo -imgEditUndo put " +image create photo ximgEditUndo +ximgEditUndo put " R0lGODlhGAAYAPUAAAAAAAICAgUFBQoKChISEhUVFRgYGB8fHyMjIyUlJSsrKy4uLjMzMzk5OT09 PUJCQklJSVFRUVpaWmFhYWVlZWpqam9vb3V1dXp6en9/f4ODg4eHh4iIiI2NjZOTk5eXl5iYmJ6e nqOjo6ysrLS0tLu7u7y8vNXV1d/f3+Pj4+bm5urq6u/v7/Ly8vj4+Pz8/AAAAAAAAAAAAAAAAAAA @@ -629,8 +629,8 @@ Z2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAaoQIBwSCwaj8ikcskUIhBNZAFTiRoLGdXHSjR0Ui8Q eC4tLoUsHAmcG2xtJhITFBUZHiQoLikUkkQIHSptYkMDCA8WIiojDkcFHShhSAYYJhi4RAQbWkoT GZtHBBoXSgMNEEkHf0oE5WNE0uns7UxBADs= " -image create photo imgEditPop -imgEditPop put " +image create photo ximgEditPop +ximgEditPop put " R0lGODlhGAAYAPUAAAAAAAICAgUFBQkJCQwMDBMTExYWFhsbGx8fHyEhIU9PT19fX2NjY2lpaWxs bHR0dHd3d3h4eHx8fIODg4eHh4uLi8HBwcjIyM7Ozt/f3+Li4ufn5+rq6uzs7O/v7/n5+f///wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -639,8 +639,8 @@ Z2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAaNQIBwSCwaj8ikkkggLJUIhyPxPCIeG06EWh0asCBQ R3LoAgqTTTi8oRiqBUpmvdZU3krDZE5fZyhlSFcafX0bW0cJDxyFhR2IRAMLGBobH40gHxsbGAxO kQcHCBeYFwihA0oWmBYCVauNrU8CsIWyS7Ssrri1fbdKubG7wL10v0oKDg3LzA4KZtDR0lVBADs= " -image create photo imgFileSave -imgFileSave put " +image create photo ximgFileSave +ximgFileSave put " R0lGODlhGAAYAPUAAAAAAAEBAQUFBQoKChMTExUVFRkZGSoqKjU1NTk5OT4+PkVFRUlJSU5OTlJS UlVVVVlZWV5eXmxsbIuLi4yMjJGRkZaWlpiYmJ2dnaCgoLa2trq6ury8vMHBwc7Ozvj4+P///wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -650,8 +650,8 @@ Zbz5eCCE4sTrVRQPCoOi23EMiBb2xz0UcEAUCGwaC3h6fEICHYAIXV4Thl57RIogFQmOIBaRIJNE ixQJbJqcHw2UEhcPDJmbQ3mSFQ0KCgsKCQgMFa2ckh+/v52jpK/DxseuQrDHzMTKzc3JAMvQw9LU 1WzX2cbb3KPSa99skEMNZd8fGwxETE5P8PHxEw1pSvf4+UNBADs= " -image create photo imgEditCopy -imgEditCopy put " +image create photo ximgEditCopy +ximgEditCopy put " R0lGODlhGAAYAPUAAAAAAAEBAQQEBAgICA0NDRMTExgYGCgoKDMzMzs7Oz8/P0FBQUZGRkpKSktL S1RUVGZmZmlpaXd3d3l5eX5+foGBgYiIiJqamp6enqWlpaurq6ysrLu7u8XFxcfHx8zMzM7OztDQ 0NTU1Nra2u7u7u/v7/Hx8fX19fj4+P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -661,8 +661,8 @@ Z2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAa+QAEqRSwaiwuAcqk0HJ/FCZNZIGYg2CyWQnxMl9VU gpoAISkhiRCLeUsaKRuSqJZpYICvaJ+UoRclF4knJb6/viahIqSJUEdSShMgyQAYIxrR0tMgHQNo aAQIBEsHB2AIBdgAHIdKCkRJ5Ckc46OlAA6a7+MOFg5KBBUU1/H34wADCmQSBAA7 " -image create photo imgEditDelete -imgEditDelete put " +image create photo ximgEditDelete +ximgEditDelete put " R0lGODlhGAAYAPQAAAAAAAEBAQUFBQsLCw4ODiUlJTMzMzk5OTw8PEhISFZWVldXV2RkZGxsbHBw cHR0dH5+fqenp6urq6ysrLa2trm5ub+/v8PDw8/Pz9HR0ebm5urq6u/v7/Ly8vj4+Pz8/CH5BAAA AAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAWPICCOZGmeaKqubMsK @@ -670,8 +670,8 @@ KMwSRjGQQ2EQK9FkFgVJYcE0eCkCRPOhJEQJykcDQcYOFE9HgjhIOp7KQaZSXD6cSWTzuQhdjMxn /skwXCIfZ955WFsDDh18fngADBh0dXcuZh8bEhF7bi9YWhNdE2BiZCdKGmFPAFFTVSo+QG8iRBlH PTU3Izk7LZ0ktoa5uru8KCEAOw== " -image create photo imgToolInsertPolygon -imgToolInsertPolygon put " +image create photo ximgToolInsertPolygon +ximgToolInsertPolygon put " R0lGODlhGAAYAPUAAAAAAAQEBAcHBwwMDBMTExcXFxkZGR4eHiYmJiwsLDExMTY2Njs7O0FBQURE RE9PT1FRUVVVVVlZWWZmZm9vb3FxcXV1dX19fYCAgIiIiJubm6GhoaampqioqLW1tb+/v8bGxsnJ yc7OztPT09nZ2eHh4eXl5ejo6Ozs7PDw8PX19fr6+v7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -681,8 +681,8 @@ cdCJribRrRiAGEVLC0B6/UhFPQThvBrIZDNEe00GIFEoakOCTBxRIQdLUSBxTRosJEpLIlkaBkwS LCsDTAV+USkVmEMEUQ9EDA6wDhQoWSQORYUaQxVgvVmIABcsJUYlvr6tQwtRCQARURYT0tPTyUQn LBYAhR9rRBssHwpREN5DnyplxOZCBWDa7EKFLCmd8cFRuvcA4yzN+8HgeQsCADs= " -image create photo imgViewRedraw -imgViewRedraw put " +image create photo ximgViewRedraw +ximgViewRedraw put " R0lGODlhGAAYAPUAAAAAAAICAgUFBQoKCg0NDRISEhcXFxsbGx4eHiUlJSgoKC0tLTAwMDc3Nz8/ P0JCQkZGRktLS0xMTFFRUVZWVlpaWl9fX2FhYWdnZ25ubnd3d3h4eH5+foCAgISEhI+Pj5ubm5+f n6Ghoaenp6qqqq2trbOzs7a2trm5ubu7u8LCwsfHx8vLy9LS0tbW1tvb2+Tk5Orq6u/v7/Dw8Pb2 @@ -693,8 +693,8 @@ NjQlCmRbAhZznycPbwIUqH0pE6wNKTWfKxQDrAkkajY1LBWSUwILFRcQFCMzNCoXBWWDzCkREiIp uW8dvjYqEQkMpFsDIZ82GeJlCybmGXhCFWB9Jg7vCGm/LSEQiW8OJS5UiMBw4J0QBRIkjDI4JAgA Ow== " -image create photo imgFileOpen -imgFileOpen put " +image create photo ximgFileOpen +ximgFileOpen put " R0lGODlhGAAYAPUAAAAAAAEBAQcHBwgICA8PDxMTExcXFx8fHyYmJi4uLjY2Njk5OT8/P0NDQ0VF RUpKSldXV2JiYmtra3R0dH19fYKCgoaGho+Pj5GRkZaWlp+fn6Kioqampqurq7Gxsbm5ucbGxsnJ yc3NzdPT09nZ2d7e3uHh4ebm5ujo6Ozs7PLy8vT09Pr6+v///wAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -704,8 +704,8 @@ dgWSOBgLhlq9QAyEh45YzGK16njWSoMQJjx3eXV3V4OEIRBCAwgLCwqNjY8Kko6TCwldFhgYF52e n6CemxYpdnOnqHcpJqapri0rJiIqr68rIh8pta4pHxwou6koHBgmwagmGBUlx6clFBIkzXMkEhAj 02IjEA3Y2VciDQkh31chCQYf5S0fBgIRGE7y8/TzGBECXvr7SUEAOw== " -image create photo imgToolJoinTrim -imgToolJoinTrim put " +image create photo ximgToolJoinTrim +ximgToolJoinTrim put " R0lGODlhGAAYAPUAAAAAAAICAgUFBScnJykpKS4uLjAwMDQ0NDs7O0BAQEZGRllZWWBgYGdnZ29v b3JycnV1dYODg4aGho2NjZCQkJaWlpqampycnKCgoKenp6ioqNHR0dbW1tjY2ODg4Obm5uvr6+/v 7/Ly8vT09Pr6+v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -715,8 +715,8 @@ idPYEi0fy0RUEmkU5mGlRCK1L4e4vMQnUQp6e3wlFoCBAHODHxOGegsXFZEWEI2HlpeYmUkEDhgW kRcLhwMRHYMlFZYDFHZ8qYcFE6evegcXI3SugQgaIW0TEx4WegIMGyUhFwUDEg+BthwZBkgElWYH DAma20EAOw== " -image create photo imgViewToggleColors -imgViewToggleColors put " +image create photo ximgViewToggleColors +ximgViewToggleColors put " R0lGODlhGAAYAPUAAAAAAAICAgYGBg0NDQ4ODhERERQUFBsbGx0dHSEhISUlJSsrKy4uLjMzMzU1 NT09PUFBQUVFRUtLS09PT1JSUmNjY21tbXFxcX19fYuLi42NjZCQkJWVlZiYmJ2dnaSkpKenp6io qK2trbGxsbu7u7y8vMHBwdXV1dnZ2eTk5Obm5urq6uzs7PDw8P7+/gAAAAAAAAAAAAAAAAAAAAAA @@ -728,8 +728,8 @@ FQUFCwwJHCUjaRgsEkPWrL1nIiRH4OLk5rq7LRgGEyElHAkMC9rRF7/Otcq2rRuXEyTeVJPHKpmo JbNUgLh1rledWABKnboQDR0IBQ+JULKUIdMKTp4WjAwJwAGhOgQaJFrUACYkZULizLl4J88eLSF+ TowhAoFDIFFnJvwCICAOhwdEqODMOEIErCENHiDAKMRJiShcpRjhoABjEAA7 " -image create photo imgEditDuplicate -imgEditDuplicate put " +image create photo ximgEditDuplicate +ximgEditDuplicate put " R0lGODlhGAAYAPUAAAAAAAEBAQQEBAkJCQ0NDRERERQUFBsbGx8fHyAgICUlJSoqKi8vLzIyMjU1 NTk5OT8/P0FBQUdHR0lJSVFRUVZWVl1dXWJiYmVlZWtra25ubnJycnd3d319fYCAgISEhIuLi42N jZKSkpaWlpubm5+fn6KioqWlpaioqK2trbS0tLi4uL+/v8LCwsTExMvLy9HR0dfX19vb293d3eLi @@ -742,8 +742,8 @@ AAMA4BuTggIGGm9qkICAQEiGGWOIDNRxY8OAA6psiGhA5AGKkEPc6VgBAZWJlXc6wBQy8FAWQlQE nGTYCWCknV1aMBDtWVPZkKE6RL5JIWKE1atYR4hoQfSBDX1gbxBRUGJFi7NnWbBIq3ZtCxUkiiCb S5fugLpBAAA7 " -image create photo imgToolBreak -imgToolBreak put " +image create photo ximgToolBreak +ximgToolBreak put " R0lGODlhGAAYAPQAAAAAAAMDAwQEBDMzMzQ0NDo6Oj8/P0BAQEVFRUhISEtLS1lZWWVlZYaGhomJ iYuLi5aWlpmZmZ6enqOjo6enp6ioqKysrM7OztPT09jY2Onp6erq6u/v7/T09Pz8/P///yH5BAAA AAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAWGICCOZGmeaKqaAtJA @@ -751,8 +751,8 @@ MBQta4lM26d/UF0SlB3PRxpEhD0igCDpIJWHCufToVQ2EeXiQqUUgA+lMWMxCAAKhXLJQIwE53V8 LZ8jGIR1GiAoWDISBUoPFV8TUxgMShEcFRNOjQdKEEIdE4KTQhEEcz6UOxV5a586GxQInSsLEjER DwqpdLKzIiEAOw== " -image create photo imgNetlist -imgNetlist put " +image create photo ximgNetlist +ximgNetlist put " R0lGODlhGAAYAPUAAAAAAAYGBgkJCRAQEBYWFhoaGiIiIiYmJisrKzQ0NDo6Oj4+PkVFRU5OTlFR UVdXV1xcXGFhYWZmZmlpaW5ubnFxcXd3d3l5eX19fYODg4iIiIyMjJ+fn6Ghoa2trbS0tMDAwMXF xczMzNTU1Nra2t3d3e3t7fj4+Pr6+v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -762,8 +762,8 @@ GIkiBjyKojhZHhJSqAdRS/GaPsK28J1KXYZiBxKDgwx5DVAPEX19HAEAWmyMk30oIANiCBabnAsA KJSUKCQQKRMlqKkbn6GTKCYTY0egKLW1jKMGa2QVnBmTl5B+lCF5RHwpHY8AYgVXVgnGbn1/gLJG egACI3JzKQoa4eINn2EpECLp6hjlS5FkWVt2X0wCEROE+IQRTf3+RkEAADs= " -image create photo imgFileReload -imgFileReload put " +image create photo ximgFileReload +ximgFileReload put " R0lGODlhGAAYAPUAAAAAAAICAgYGBggICA0NDRISEhQUFBsbGyEhISQkJCoqKiwsLDExMTMzMzg4 OD4+PkFBQUdHR0lJSUxMTFJSUlVVVVpaWltbW2VlZWlpaXNzc4yMjJOTk5SUlJ6enqqqqrCwsLm5 ub6+vsDAwMfHx9PT09TU1NjY2N/f3+Pj4+Xl5evr6+zs7PHx8ff39/r6+v///wAAAAAAAAAAAAAA @@ -773,8 +773,8 @@ Z2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAavQIBwSCwaj8ikcskkEhiCJnLhcQyUA8Nhyz0YKK0Q DAAJHJgmjR1GDicbCEYdpkYIGgVHroKnRQIESLWBt1K8gL5NwH8jGBnIycrKGCOAiI7RjS8mLdLX jyUXiy/d3t/g3i4iFwULDg/p6uvs6wu6UvHy8/TxQQA7 " -image create photo imgEditRedo -imgEditRedo put " +image create photo ximgEditRedo +ximgEditRedo put " R0lGODlhGAAYAPUAAAAAAAEBAQUFBQoKChISEhoaGh8fHyIiIiQkJCkpKSwsLDQ0NDk5OT4+PkJC QkpKSlNTU1paWmFhYWVlZWtra25ubnV1dXh4eH19fYCAgIeHh4uLi42NjZOTk5eXl5iYmKKioqmp qbS0tLu7u7y8vNXV1dzc3OHh4eXl5ejo6O/v7/Hx8fj4+P///wAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -784,16 +784,16 @@ d+j9eg7NwqOy6ZRacFRHoTxANqQTC85vqTwLRwIJGG99hy0rIHREAgohKoiSJhgCRAmQkogrH2hD CBsriCwre3CkHAlEAxN6JiIdFxQTEhEjfFmqRA0hJyAVDgYDRGUoG55DAhgkF2JXLSYcW0UKFxJK Hikb00UPDMNJFhncRQfkRwZVSJZj7e7v7kEAOw== " -image create photo imgToolInsertText -imgToolInsertText put " +image create photo ximgToolInsertText +ximgToolInsertText put " R0lGODlhGAAYAPQAAAAAAAEBAQoKCg0NDRERER0dHSIiIi0tLTIyMkJCQkRERFVVVV9fX2tra3Jy coKCgoeHh4iIiJmZmaenp6qqqru7u8vLy93d3eDg4Orq6u7u7vv7+////wAAAAAAAAAAACH5BAAA AAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAVrICCOREkMwqiuKnFx cNywtHjE+FTXTOT7j8JuSCwad4eFcslcCmmGDW6Ky9QKUioVsysovuBwYkw4ms9Fh2TNXkMGRYRW VhxYNPg8/nJA+/+AQwIVeoV6GRA0cnNUGjUPFJGSk5MLgZeYOyEAOw== " -image create photo imgEditCut -imgEditCut put " +image create photo ximgEditCut +ximgEditCut put " R0lGODlhGAAYAPUAAAAAAAEBAQQEBAsLCw8PDxAQEBUVFRkZGR8fHyIiIiUlJSoqKi4uLjMzMzU1 NTo6Ojw8PERERElJSUxMTFRUVFVVVVpaWl1dXWJiYmRkZGpqamxsbHJycnV1dXp6en5+foeHh4uL i46OjpKSkpaWlpubm56enqKioqampqioqK2trbGxsbe3t7q6ury8vMHBwcTExMnJyc7OztPT09TU @@ -805,8 +805,8 @@ IiwZk0YDCRAKfA5yWTEaCAhoRwIID+EAD+Q+PTgnDerLITDP0Sc5Pjtw7EjlYluRBSJy8OBVxpiM DhZK3Jg3Ixk+UTZGYPgwI9WqAgAYfJAhi9aBRz0kUbKEaYiBCy86+XgxoY8PEoEGvXhQRECiNBo4 VoBi08LBgDhz6vQ0wIABAj4AwPAQ02KHmTRCqsDI4mMGF6xCmIQwodEW2CH4zqo1EgQAOw== " -image create photo imgEditMove -imgEditMove put " +image create photo ximgEditMove +ximgEditMove put " R0lGODlhGAAYAPUAAAAAAAICAgYGBgoKCgwMDBERERcXFxsbGxwcHCkpKTw8PEdHR0tLS1VVVVlZ WV5eXmNjY2ZmZmdnZ29vb3JycnV1dYKCgoeHh4yMjJWVlZubm62trbGxsbS0tLi4uMHBwcTExMjI yNra2tzc3OTk5Ovr6/b29vn5+f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -816,8 +816,8 @@ ZYQykc7odGlzzJBR8Lg8/hEYHx/TfA+vGwUNHWYaGYWGhhoUSQsdHHZVRgoRVQSPRAIEVREKkH8c HgxJFISHhxokJh4OA38ffHsnHxCtr3sjGUcbJWm8JCcoIxgIYV7FBwghIxVgnUMXEQXNRFvS1dbS QQA7 " -image create photo imgViewZoomBox -imgViewZoomBox put " +image create photo ximgViewZoomBox +ximgViewZoomBox put " R0lGODlhGAAYAPUAAAAAAAEBAQYGBgsLCwwMDBISEhUVFRsbGx0dHSMjIyoqKjExMTc3Nzg4OEFB QUVFRUdHR1FRUVRUVFlZWWRkZGlpaXBwcHl5eYSEhJaWlpubm5ycnKGhoaSkpKmpqa6urrKysra2 try8vL+/v8nJycvLy9TU1Nzc3OLi4uTk5Onp6fPz8/X19fv7+/7+/gAAAAAAAAAAAAAAAAAAAAAA @@ -828,8 +828,8 @@ LhlUQgMPHyosJBYHQo6hogAEDBITDwhHaa6vAgoLl0etr0IFGyEPQwLAwQcoLhXHya8HKS4Uz6DB ANLNRNCi2s6318EI0+B83VTf1rne5evY6r/i0e5HIZwZ+fr7+hx51UcunKBDcE6LEQ6IJLgQYsQI Eg4jQow4okMEX0SSKNG4UWORIAA7 " -image create photo imgToolInsertSymbol -imgToolInsertSymbol put " +image create photo ximgToolInsertSymbol +ximgToolInsertSymbol put " R0lGODlhGAAYAPUAAAAAAAgICAwMDBYWFiIiIiUlJTIyMjQ0NEBAQERERFNTU1VVVVhYWFxcXGFh YWZmZm5ubnd3d3p6en19fYaGhoiIiJOTk5SUlK6urre3t7i4uMfHx8zMzNPT09nZ2d/f3+Li4uXl 5ejo6Pb29vn5+f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -839,16 +839,16 @@ wGBgeM/cSXHj9VTe8Eqmw40QQ15NUjEqjQpDBRERFVsVSg5bF0YEWxRLHyUiCwsKQ40lj0ocXpeO S3RdBA8PEp9KkZOVIHmIWxZDnF0Ye31/QwEICQ1bG3Fwc1wQRwZoZyRqR1nGXGBKUFRUVk7U1dbX 2EVBADs= " -image create photo imgToolInsertWire -imgToolInsertWire put " +image create photo ximgToolInsertWire +ximgToolInsertWire put " R0lGODlhGAAYAPQAAAAAAAEBAQ4ODhERERcXFyUlJSoqKi8vLzAwMDY2Nj4+PllZWWRkZGtra2xs bHh4eIODg4eHh5aWlpubm52dna+vr7Gxsbu7u8PDw8TExPDw8Pv7+wAAAAAAAAAAAAAAACH5BAAA AAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAV0ICCOZGmeppAkAuqK CDRN0PGegnM9z9W0N5IhMhFJIoYgqSAjEGgFJWmBsVgwCylpwNBoGECtSLHZKMQkshk9Up/ZADc8 Xn6z5XD8vQ7nesFsCxkVFVhoBREUTlBiQxIiE0hiAg07PT9oBzI0NmwqCGFzNyEAOw== " -image create photo imgEditPushSch -imgEditPushSch put " +image create photo ximgEditPushSch +ximgEditPushSch put " R0lGODlhGAAYAPQAAAAAAAICAgUFBQkJCQwMDBMTExYWFhgYGB0dHSEhIU9PT19fX2NjY2lpaWxs bHd3d3h4eHx8fIODg4eHh4uLi8HBwcjIyM7OztHR0d/f3+Pj4+Xl5enp6ezs7Pn5+f///yH5BAAA AAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAWLICCOZGmeaKquLKA4 @@ -856,16 +856,16 @@ TSw7SitUX67nlcDeu13vhwvyfCug8TNMFo1NlRKKlD6DURPhcEBYlh9LgksoDRYXzcYD9mw0GMag lHh0wLtOJHFCPDR4HxsQfCgHEhlgGhMIKwUTiUEaFAYtBRIbOxuULSIGEBw5HBEHnSN+GxwPhaYi CQ4OrK0iBGWzt7gkIQA7 " -image create photo imgToolInsertRect -imgToolInsertRect put " +image create photo ximgToolInsertRect +ximgToolInsertRect put " R0lGODlhGAAYAPMAAAAAAAICAgUFBQYGBhsbGzs7O2FhYWlpaZWVlZ6enqGhob+/v+Tk5PT09P// /wAAACH5BAAAAAAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAASAEEgg qr1YzF3U+mAYKsUmGY2jrizbGCZwOI2C3HiupEc8M4TYhsBw9Ey/oFBCNPocwCWzeNwkpYBmdXKV ap9RLxWsXH6R0LLwbE1j2Vy32IkOm8d1dQwu6d7pbXZreIF6Jnwycn9bfTQ2OZA7gBMoLZYrLzEd IpwgCSUxGaIWGxEAOw== " -image create photo imgEditPaste -imgEditPaste put " +image create photo ximgEditPaste +ximgEditPaste put " R0lGODlhGAAYAPUAAAAAAAICAgoKCg8PDxERERQUFB8fHyIiIiQkJCwsLDExMTQ0NEREREpKSlNT U1VVVVxcXF9fX2FhYXJycnd3d3x8fIGBgYeHh4uLi5WVlaKioqWlpaioqK+vr7Kysru7u729vcbG xsrKys/Pz9HR0dnZ2d/f3+Li4uTk5O/v7/Hx8fT09Pr6+v///wAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -875,14 +875,14 @@ xFKwgrtoKOECebjfb4hFYExQGtBScs/nh7RUUCd9hEkkRhtEUCAtIwyPkJAmLRxGBAwHiy0gaQAk lJ2MnGmflQAOHxaao2ilRh6BT6KdrgAYjau0oEYDUbOku2i/rbsVKR9GBSYsm7qmsCtGC3usXbUS IxlGAh8qzcCmwt/E4V0fLSEH6uvreuVRk4V9Ip3x8nuHaQkdFhT+//8ucDDQqaDBg2iCAAA7 " -image create photo imgToolInsertLine -imgToolInsertLine put " +image create photo ximgToolInsertLine +ximgToolInsertLine put " R0lGODlhGAAYAPIAAAAAAA0NDTc3Nz09PT4+Pt7e3vj4+Pv7+yH5BAAAAAAAIf8LSW1hZ2VNYWdp Y2sOZ2FtbWE9MC40NTQ1NDUALAAAAAAYABgAAAMtCLrc/jDKSau9OOvNew0CIY6kKASQUBxs67KF kK5vHUNgqROn5//AoHBILEoSADs= " -image create photo imgToolInsertCircle -imgToolInsertCircle put " +image create photo ximgToolInsertCircle +ximgToolInsertCircle put " R0lGODlhGAAYAPUAAAAAAAEBAQUFBQkJCQ4ODhISEiEhISYmJi8vLz4+PkBAQEdHR0tLS0xMTFJS UlZWVlhYWGtra2xsbHx8fH5+foKCgo+Pj5KSkpWVlZiYmJycnKysrLOzs7S0tMPDw8jIyNXV1dbW 1uLi4uTk5Ovr6+zs7PPz8/b29vj4+P7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -894,8 +894,8 @@ SSMcCdVECh0jFhba3N1CCR0iS9IN5qQe2BBXEu4Azc+8vsDdBRnFTrI+tOvmIBCGJwzKbHASjBUH FB4WWKpAosSmYJ9CqTpgAYUiB42gPOJgx0KlIXRIoMAjoYECBQ0kABJEKMwYDybOeOjQgY0bGQ8U OHUasACDFSxauGBYUGvVsSRLmjQVEgQAOw== " -image create photo imgEditPushSym -imgEditPushSym put " +image create photo ximgEditPushSym +ximgEditPushSym put " R0lGODlhGAAYAPUAAAAAAAQEBAgICA0NDRERERcXFx0dHSIiIicnJywsLDAwMDU1NT09PUNDQ0dH R0hISFBQUFVVVWJiYmZmZnBwcHl5eY2NjZKSkpWVlZqamqGhoaSkpKqqqq2trbKysry8vMLCwsfH x8vLy83NzdPT09fX19jY2N/f3+Dg4OTk5Ojo6O3t7fPz8/X19fr6+v///wAAAAAAAAAAAAAAAAAA @@ -905,8 +905,8 @@ KHTCvsQh08Iq6LDM2NPkC6io4OcEXegwYV0fBHtDBiJRKxmDTAIeKBKKCAeSkwsHCAV0HnhYKhgH ViObZi1eQxITE4Yak6wIChJ+LktDZiFaAyFnAUMmJyZvHF8HLi8OTRsvFnS5IhkZGEPIF3QlZtEv 01+GzRkXvidvHV8IxLMAZiBaBKEkRBARECAvq6ySCQwUKS8ua00kolhWPKjCAeCLExYwMQkCADs= " -image create photo imgViewZoomOut -imgViewZoomOut put " +image create photo ximgViewZoomOut +ximgViewZoomOut put " R0lGODlhGAAYAPUAAAAAAAICAgQEBAoKChAQEB8fHyIiIiUlJSgoKC8vLz4+PkNDQ0RERGtra25u bnt7e3x8fIODg4WFhYiIiJ+fn6CgoLOzs7a2tr29vcHBwcjIyOXl5evr6+7u7vf39/n5+f///wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -917,82 +917,160 @@ IB8aGaOkpBgaH2QWCUIKGGQbBUICtLVrBRtkGAqtryCxALa2ALi6vJ2foaXLGahkF6wAAxWZexRd Qg+D1WQclUMLn9wgFgtEgZLVHQ3YQwcSeZl9BkZtEul7HRF/bAcOFtvKcLDQwAAiJFIeVLBw5QKF Le28CBmwpElEiRiNBAEAOw== " - - - - - - - - - - } +image create photo imgFileOpen +image create photo imgFileSave +image create photo imgFileReload +image create photo imgEditUndo +image create photo imgEditRedo +image create photo imgEditCopy +image create photo imgEditCut +image create photo imgEditPaste +image create photo imgEditDelete +image create photo imgEditDuplicate +image create photo imgEditMove +image create photo imgEditPushSch +image create photo imgEditPushSym +image create photo imgEditPop +image create photo imgViewZoomIn +image create photo imgViewZoomOut +image create photo imgViewZoomBox +image create photo imgViewToggleColors +image create photo imgViewRedraw +image create photo imgToolInsertSymbol +image create photo imgToolInsertText +image create photo imgToolInsertWire +image create photo imgToolInsertLine +image create photo imgToolInsertRect +image create photo imgToolInsertPolygon +image create photo imgToolInsertArc +image create photo imgToolInsertCircle +image create photo imgToolSearch +image create photo imgToolJoinTrim +image create photo imgToolBreak +image create photo imgSimulate +image create photo imgNetlist +image create photo imgWaves +imgFileOpen copy ximgFileOpen -zoom $toolbar_icon_zoom +imgFileSave copy ximgFileSave -zoom $toolbar_icon_zoom +imgFileReload copy ximgFileReload -zoom $toolbar_icon_zoom +imgEditUndo copy ximgEditUndo -zoom $toolbar_icon_zoom +imgEditRedo copy ximgEditRedo -zoom $toolbar_icon_zoom +imgEditCopy copy ximgEditCopy -zoom $toolbar_icon_zoom +imgEditCut copy ximgEditCut -zoom $toolbar_icon_zoom +imgEditPaste copy ximgEditPaste -zoom $toolbar_icon_zoom +imgEditDelete copy ximgEditDelete -zoom $toolbar_icon_zoom +imgEditDuplicate copy ximgEditDuplicate -zoom $toolbar_icon_zoom +imgEditMove copy ximgEditMove -zoom $toolbar_icon_zoom +imgEditPushSch copy ximgEditPushSch -zoom $toolbar_icon_zoom +imgEditPushSym copy ximgEditPushSym -zoom $toolbar_icon_zoom +imgEditPop copy ximgEditPop -zoom $toolbar_icon_zoom +imgViewZoomIn copy ximgViewZoomIn -zoom $toolbar_icon_zoom +imgViewZoomOut copy ximgViewZoomOut -zoom $toolbar_icon_zoom +imgViewZoomBox copy ximgViewZoomBox -zoom $toolbar_icon_zoom +imgViewToggleColors copy ximgViewToggleColors -zoom $toolbar_icon_zoom +imgViewRedraw copy ximgViewRedraw -zoom $toolbar_icon_zoom +imgToolInsertSymbol copy ximgToolInsertSymbol -zoom $toolbar_icon_zoom +imgToolInsertText copy ximgToolInsertText -zoom $toolbar_icon_zoom +imgToolInsertWire copy ximgToolInsertWire -zoom $toolbar_icon_zoom +imgToolInsertLine copy ximgToolInsertLine -zoom $toolbar_icon_zoom +imgToolInsertRect copy ximgToolInsertRect -zoom $toolbar_icon_zoom +imgToolInsertPolygon copy ximgToolInsertPolygon -zoom $toolbar_icon_zoom +imgToolInsertArc copy ximgToolInsertArc -zoom $toolbar_icon_zoom +imgToolInsertCircle copy ximgToolInsertCircle -zoom $toolbar_icon_zoom +imgToolSearch copy ximgToolSearch -zoom $toolbar_icon_zoom +imgToolJoinTrim copy ximgToolJoinTrim -zoom $toolbar_icon_zoom +imgToolBreak copy ximgToolBreak -zoom $toolbar_icon_zoom +imgSimulate copy ximgSimulate -zoom $toolbar_icon_zoom +imgNetlist copy ximgNetlist -zoom $toolbar_icon_zoom +imgWaves copy ximgWaves -zoom $toolbar_icon_zoom +image delete ximgFileOpen +image delete ximgFileSave +image delete ximgFileReload +image delete ximgEditUndo +image delete ximgEditRedo +image delete ximgEditCopy +image delete ximgEditCut +image delete ximgEditPaste +image delete ximgEditDelete +image delete ximgEditDuplicate +image delete ximgEditMove +image delete ximgEditPushSch +image delete ximgEditPushSym +image delete ximgEditPop +image delete ximgViewZoomIn +image delete ximgViewZoomOut +image delete ximgViewZoomBox +image delete ximgViewToggleColors +image delete ximgViewRedraw +image delete ximgToolInsertSymbol +image delete ximgToolInsertText +image delete ximgToolInsertWire +image delete ximgToolInsertLine +image delete ximgToolInsertRect +image delete ximgToolInsertPolygon +image delete ximgToolInsertArc +image delete ximgToolInsertCircle +image delete ximgToolSearch +image delete ximgToolJoinTrim +image delete ximgToolBreak +image delete ximgSimulate +image delete ximgNetlist +image delete ximgWaves ## Context menu -image create photo CtxmenuBlank -CtxmenuBlank put " +image create photo xCtxmenuBlank +xCtxmenuBlank put " R0lGODlhEAAQAPAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAIOhI+py+0Po5y02ouzPgUAOw== " -image create photo CtxmenuRotate -CtxmenuRotate put " +image create photo xCtxmenuRotate +xCtxmenuRotate put " R0lGODlhEAAQAPQAAAAAACoqKisrKzo6Oj8/P15eXmBgYHZ2doKCgq+vr9fX19jY2OLi4uTk5Ofn 5+/v7/7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA ABIALAAAAAAQABAAAAVCoCSOZGmeqBg5ixOlUgLMc4Iec2AE83ESAMVIUYMNZy+jhOdQSgyAhZMJ eziIgKTpgaABbKeu14fyfmGMAs2ZHpRCADs= " -image create photo CtxmenuSave -CtxmenuSave put " +image create photo xCtxmenuSave +xCtxmenuSave put " R0lGODlhEAAQAPEAAAAAAI2Njejo6AAAACH5BAEAAAMALAAAAAAQABAAAAImhI8nM+naDJv0RECv tlVaPn2eRAXm9jxXiqzs+IoxPLuvzeLpUAAAOw== " -image create photo CtxmenuTerm -CtxmenuTerm put " +image create photo xCtxmenuTerm +xCtxmenuTerm put " R0lGODlhEAAQAPMAAAAAACIiIjAwMHR0dHh4eHx8fOXl5ejo6O/v7/f39wAAAAAAAAAAAAAAAAAA AAAAACH5BAEAAAoALAAAAAAQABAAAAQ+UMlJq731mM07PwcgjmRpAEWqriqgoNhUAOcwItd8EkIg JDkaLKbQDWPGArEoVBKTrOgsVKqOFBqP1nBYViIAOw== " -image create photo CtxmenuSymbol -CtxmenuSymbol put " -R0lGODlhEAAQAPUAAAAAACgoKCkpKTQ0NDc3N1FRUVxcXGZmZnR0dHp6eouLi4yMjJSUlJubm6Ki -oqioqKqqqrW1tba2tre3t7+/v8DAwMbGxsfHx8jIyMnJycrKyszMzM3Nzc/Pz9DQ0NHR0dPT09TU -1NXV1dbW1tfX19jY2OXl5fPz8/r6+v39/f7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACsALAAAAAAQABAAAAaDQIhw -SCwKJZhQEsPBMJehCYSzqlqvVgwEs0o1LuCK43T1bFcNgHoNUKSq2sRAAFiEGQMAolqCFNYQVykG -ACUrWiGHABdYJgAHGBVnF4tYKWsCEImUjFeOkBJ+gIKEhnFzdXcEenBnaWxqC28rZlxeGGFjV1pU -WL60EBJKThgexcdOEkEAOw== -" - -image create photo CtxmenuSchematic -CtxmenuSchematic put " +image create photo xCtxmenuSchematic +xCtxmenuSchematic put " R0lGODlhEAAQAPQAAAAAAAQEBBwcHB4eHkJCQkxMTGpqanNzc319fZGRkaioqKqqqq+vr7m5ucLC wsrKytjY2Nra2t/f3+Li4ubm5u7u7vDw8PPz8/n5+fz8/P///wAAAAAAAAAAAAAAAAAAACH5BAEA ABsALAAAAAAQABAAAAVO4CaOZGmKDqACyTkuK2C4Y6VK2tkU16apFRcB8IgIVBMh4KAKMEyOROKo QmBOMdWCFp2urLTNkAlw0oZFalLH8wHDo1ulF85GwlQVZRMCADs= " -image create photo CtxmenuOpendir -CtxmenuOpendir put " +image create photo xCtxmenuOpendir +xCtxmenuOpendir put " R0lGODlhEAAQAPMAAAAAAAICAg0NDTMzMzc3N0dHR3R0dHp6eoGBgY6Ojrm5ucjIyObm5vDw8Pr6 +gAAACH5BAEAAA8ALAAAAAAQABAAAARB8MlJ6zQgi2Zv/sIijuLznej3DGzrvg8iz3Rtpjhw5+hD 8CfC4wD8HB6KYkbxYCgBjIfj6ZAIioJJoViYJIqJRwQAOw== " -image create photo CtxmenuFlip -CtxmenuFlip put " +image create photo xCtxmenuFlip +xCtxmenuFlip put " R0lGODlhEAAQAPMAAAAAAAQEBDc3N42NjaamptDQ0NHR0eTk5AAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAACH5BAEAAAgALAAAAAAQABAAAAQvEMlJq7046807NgJwTAcgGBMIrAPhDquJBnFtAwGisi4B r6dUaCQpBT3IpHKJiAAAOw== " -image create photo CtxmenuAbort -CtxmenuAbort put " +image create photo xCtxmenuAbort +xCtxmenuAbort put " R0lGODlhEAAQAPUAAAAAAAQEBAkJCQ0NDRISEhcXFx4eHicnJygoKC4uLjIyMjg4ODw8PE5OTlFR UVdXV1paWl1dXWZmZnBwcHt7e35+foKCgoODg4iIiI2NjZeXl56enqKioqioqLW1tcPDw8XFxcfH x9DQ0Onp6e3t7fDw8PX19fj4+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1002,8 +1080,8 @@ EhiGh4YUUBENUQGPkJFRCxCOkZdRChkBAhGIiBNQDSFrC31ClQEaKAVaaHQfdyMoGmYTJUInFmAW QxBZA0oIAmAJY0JPUlMMJn1FR0kHr0JBADs= " -image create photo CtxmenuRecent -CtxmenuRecent put " +image create photo xCtxmenuRecent +xCtxmenuRecent put " R0lGODlhEAAQAPUAAAAAAA4ODikpKS8vLzg4OENDQ0dHR0xMTFZWVm9vb3Z2dnp6enx8fIKCgoeH h4mJiYyMjJmZmaGhoaampqmpqbCwsLe3t7q6ur+/v8XFxcjIyM7OztHR0dXV1dvb2+Dg4OXl5efn 5+3t7fPz8/T09Pr6+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1012,8 +1090,8 @@ aNJQiMTShDhZmEgl0wU0LDyGoI6poKgIRMORA3kBZCIfpJpwULsrgI1bPUCoR5QMsQF4cKIdFCAg ChJECQEAAAEgFgoccyYiGBNRkZeYbhdzGCRECnZCJGBCEAaWJAmWJhQMex5zFxBuQQA7 " -image create photo CtxmenuSymbol -CtxmenuSymbol put " +image create photo xCtxmenuSymbol +xCtxmenuSymbol put " R0lGODlhEAAQAPUAAAAAAAYGBgkJCRsbGxwcHCQkJCsrKy0tLTAwMDY2Nj09PUREREtLS1BQUFhY WGhoaG1tbXFxcXp6en5+foKCgoeHh4qKio+Pj5mZmaGhoaysrLW1tbq6ur29vcPDw9PT09nZ2d3d 3eLi4uTk5O7u7vPz8/n5+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1022,24 +1100,24 @@ SCwaj8fRILFYIAiRUFEkaQCuWICAQ6xgFaHw5xIomIYlDQUgKUoAGRLRA5gUNVjGkG4n4gkIdiAP DAAQRVYdQxZYBhgYFxGFCkQmHW9ZVwciRiYOEhUVEQ4bZ0inqKmqq0RBADs= " -image create photo CtxmenuUp -CtxmenuUp put " +image create photo xCtxmenuUp +xCtxmenuUp put " R0lGODlhEAAQAPQAAAAAAAUFBQoKCgwMDBMTExYWFhsbGyAgICcnJy4uLjAwMDw8PE9PT1JSUm9v b4WFhZKSkpOTk7y8vMLCwsPDw83NzdXV1eHh4evr6/Pz8/j4+AAAAAAAAAAAAAAAAAAAACH5BAEA ABsALAAAAAAQABAAAAVI4CaOG0WepzMsF0pqTAAAR+Ru2DLvQ5OdFsVuCEhIRpWCwSAgLgm2E4Jo uk2HVdd1l0VtZ10p9bb5AsIkM3oUebjdGLJ8jgoBADs= " -image create photo CtxmenuDown -CtxmenuDown put " +image create photo xCtxmenuDown +xCtxmenuDown put " R0lGODlhEAAQAPQAAAAAAAsLCxISEhYWFiAgICcnJygoKC0tLTc3Nz8/P0dHR1NTU1paWnFxcXZ2 dpCQkJeXl7u7u8LCwtHR0d3d3eLi4vHx8fr6+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA ABgALAAAAAAQABAAAAVOICaOZGlWVJpe5kgEMCy1YgHc90zbOKC3PNzPFMzRMEXfMTnETBAKxaAH SCgSj1HkQMUFGKyRZRGgCho0CAFHgBwxlATA0GxdHJW3HhMCADs= " -image create photo CtxmenuDownSym -CtxmenuDownSym put " +image create photo xCtxmenuDownSym +xCtxmenuDownSym put " R0lGODlhEAAQAPUAAAAAAAcHBwoKCg0NDRAQEBQUFBoaGiMjIyYmJi4uLjQ0NDs7Oz4+PkREREtL S1NTU1ZWVlpaWmJiYmZmZmtra3p6en5+foGBgYmJiZGRkZiYmJ2dnaampqmpqa2trbm5uby8vMHB wcTExMnJydPT093d3eHh4erq6u7u7vPz8/n5+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1048,8 +1126,8 @@ SCwaKYqkQmMkQgBQgKW5ylQUUQCj4jFiCFmoAdS8DLKGDnVFCUALzPVKEiBg5MPHBa86MBoJDB9N JxgWWhALBwBqRSIFYI1zCB8hRigAlkIVUSNDIFEceQolJkQpGxgACAoGBAJkVAsSEw4RJEVBADs= " -image create photo CtxmenuPaste -CtxmenuPaste put " +image create photo xCtxmenuPaste +xCtxmenuPaste put " R0lGODlhEAAQAPUAAAAAAAEBAQUFBQkJCQ0NDScnJy0tLTQ0NEBAQEZGRk1NTU9PT1BQUFNTU1lZ WWBgYGFhYWNjY2VlZWlpaWxsbG5ubnNzc3R0dHZ2dnd3d3h4eICAgIGBgYmJiYqKio6OjpCQkJGR kZmZmaKioqenp6qqqq6urrm5ubq6usHBwcXFxcnJydXV1dvb293d3d7e3uDg4OPj4+Tk5Onp6erq @@ -1059,8 +1137,8 @@ AX1ZGHk0Alg8fH55e4WPMTgRJjwrBpKHeTFDPB9qhk2Ieiw2PDgTAS2TWhoBGiKzswmQWQpsulVZ Nh0lwMEjI1rFxUEAOw== " -image create photo CtxmenuDelete -CtxmenuDelete put " +image create photo xCtxmenuDelete +xCtxmenuDelete put " R0lGODlhEAAQAPUAAAAAAAMDAwgICA0NDRYWFh8fHyEhISkpKS8vLzMzMzU1NT8/P0BAQEVFRUxM TGlpaXp6eoaGhomJiZCQkJSUlJeXl5ycnK2tra6urrGxsbW1tbu7u729vc3NzdfX19vb2+Pj4+Xl 5evr6+7u7vHx8fb29vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1069,16 +1147,16 @@ SCwOTSbjyVQiggiFT1GUGHSGGgCgABqSElrKkaE9iE6lRXlEJCm0CJFDyzWKDlpCXqoMGbQAVkpD D4ANg0ITgFoPgxaAEQNaEEYZgBYnHAJaEkQegBNDF4AbQxyTRCajAJhDFRdKGRJJR7SIJ0EAOw== " -image create photo CtxmenuDuplicate -CtxmenuDuplicate put " +image create photo xCtxmenuDuplicate +xCtxmenuDuplicate put " R0lGODlhEAAQAPQAAAAAAAcHBwgICA8PDxAQEBUVFSsrKzMzMzU1NT4+PlRUVFdXV2JiYn9/f4iI iJqamqGhoaampqqqqq2trba2tsPDw8TExO7u7vb29gAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA ABkALAAAAAAQABAAAAVTYJZhk2SekiWuWQS88CuwIjRceA7NNERklIaj0VAAHA+WL2OMvQ7KX9OJ iDKdr+pqOY1pa1Is4Jvhisk7B+LMqhQIAjbtiiWvGIa83pCY+/+ALCEAOw== " -image create photo CtxmenuCut -CtxmenuCut put " +image create photo xCtxmenuCut +xCtxmenuCut put " R0lGODlhEAAQAPUAAAEBAQUFBQkJCQwMDBAQEB4eHiIiIiYmJicnJzc3Nzw8PEJCQkVFRUtLS0xM TFZWVllZWV1dXWNjY2lpaXFxcX5+foSEhImJiZGRkZWVlZqamp2dnaGhoaampqmpqa6urrKysri4 uL29vcHBwcbGxsrKys/Pz9HR0dbW1tnZ2d/f3+Li4ufn5+jo6O3t7fPz8/b29vn5+QAAAAAAAAAA @@ -1088,8 +1166,8 @@ TgBiTQkkSSUTFSl+ThNKHoSHh15kMit3hAASLCUKThEtGgAGW02BQh0FTQMWAAwyMWImSTAWeSJN Egt4MFEsHzIOhRlRZRYKDcTJz9AyQQA7 " -image create photo CtxmenuMove -CtxmenuMove put " +image create photo xCtxmenuMove +xCtxmenuMove put " R0lGODlhEAAQAPUAAAMDAwQEBAkJCQ4ODhISEhsbGx0dHSMjIyUlJSgoKC8vLzMzMzk5OUZGRkxM TFBQUGdnZ29vb3BwcHl5eX9/f5GRkZOTk5WVlZiYmJ+fn6SkpLCwsLy8vMHBwcXFxdHR0dXV1djY 2Ovr6+/v7/Ly8vT09Pz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1098,8 +1176,8 @@ SCwaj8iOUWncJIyNSTGEWBgdBM2QtAAMDIXQCWEgAAwfoQPABgRA4zZAMaLIAQI44v4QKeR5cW0F HCceBW2BB4kWQxgDCBYXJScZFgwAEEUST0UODSZFJhFGEyNIqKmqqydBADs= " -image create photo CtxmenuCopy -CtxmenuCopy put " +image create photo xCtxmenuCopy +xCtxmenuCopy put " R0lGODlhEAAQAPUAAAAAAAICAgUFBQoKCgwMDBERERMTExcXFxkZGRoaGiIiIiQkJCkpKS4uLjAw MDMzMzk5OTw8PEpKSlxcXGZmZnV1dXh4eHx8fIWFhYaGhoqKio2NjY6Ojo+Pj52dnaCgoKGhoaOj o6urq6ysrLOzs7e3t7m5uby8vL29vcHBwcfHx8nJycrKys7OztHR0dPT09fX19ra2t/f3+Dg4OHh @@ -1109,8 +1187,8 @@ eHVUXn95PDYTJzwXAAQGk5MDACQ8LQAWPCUGDQ8ODqEMCDRILjdZPC4cOTwjIzw5HC6rFQBcCAg8 KwAVqzIgOzwnjjsgp6vLSUEAOw== " -image create photo CtxmenuEdit -CtxmenuEdit put " +image create photo xCtxmenuEdit +xCtxmenuEdit put " R0lGODlhEAAQAPQAAAAAACMjIzMzMzQ0NEREREVFRUtLS1VVVVlZWWRkZGpqamxsbHNzc4iIiIyM jJaWlpiYmJ+fn6Ghoampqbm5ub+/v9XV1d3d3eDg4Ojo6O/v7/j4+AAAAAAAAAAAAAAAACH5BAEA ABwALAAAAAAQABAAAAVqIMdtEWSeZpSJ4gS8cMywnAQcTa4zwELbD12DwrH0fgCIQ1cpHlm2CE1k @@ -1118,32 +1196,32 @@ ABwALAAAAAAQABAAAAVqIMdtEWSeZpSJ4gS8cMywnAQcTa4zwELbD12DwrH0fgCIQ1cpHlm2CE1k k5RNYZc0IQA7 " -image create photo CtxmenuWire -CtxmenuWire put " +image create photo xCtxmenuWire +xCtxmenuWire put " R0lGODlhEAAQAPQAAAAAACAgICUlJTMzMzk5OUBAQEZGRlVVVVpaWmZmZnh4eIiIiI2NjZubm6Cg oLu7u729vdXV1djY2PPz8/b29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA ABUALAAAAAAQABAAAAU3YCWOZGmeaKqurBgtCzOdDQwhQK48fO/kAMEBSCzmAsNcIcFsJgEBx2BA kJgohqmixe16v+BRCAA7 " -image create photo CtxmenuLine -CtxmenuLine put " +image create photo xCtxmenuLine +xCtxmenuLine put " R0lGODlhEAAQAPQAAAICAgcHBwsLCw8PD1RUVGFhYZmZmZ2dnaCgoKSkpKqqqq6urrKysra2trq6 ur29vcLCwsXFxczMzNra2vb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA ABUALAAAAAAQABAAAAVBYCWO5OhMZSoaAKGWBzBI74gAAlSLCq7vC9xjV1kEAsNd48ggOpjOAKC5 cwgACiJkAEgQI1fvjsJFEEUF8XktCgEAOw== " -image create photo CtxmenuBox -CtxmenuBox put " +image create photo xCtxmenuBox +xCtxmenuBox put " R0lGODlhEAAQAPQAAAAAAA0NDRERERcXF0ZGRklJSWZmZmtra3t7e35+foiIiJGRkbW1tbu7u8LC wsbGxt3d3fv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA ABIALAAAAAAQABAAAAVCoCSOZGmeJXQYbOsajpgAdG3ThYgAS+P/PwBBB3igIkKi8YQcSnZLU1N5 TD6LVSc0SwwIvmCwlTEIm78KlHrNZocAADs= " -image create photo CtxmenuPoly -CtxmenuPoly put " +image create photo xCtxmenuPoly +xCtxmenuPoly put " R0lGODlhEAAQAPUAAAAAAAUFBQsLCw0NDRERERUVFRsbGxwcHCMjIyUlJSgoKCwsLD09PUdHR09P T1JSUlRUVF1dXWhoaG1tbXV1dXl5eX5+foCAgIiIiJWVlZ2dnaioqKysrLW1tbi4uMLCwsfHx8rK ytPT09fX19ra2uDg4Orq6uzs7PLy8vb29vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1153,8 +1231,8 @@ FmtkQhNXAhYqEABqK4MjQh0ADF4oAndCDwAnKkZeQhuEQwwBKQwCKEedkCsJBQ5XIEMmAgpHBFeB GiYZDQGlX1cLlQV1BhMnQyh2JifCCBS1SR98Kx+vSUEAOw== " -image create photo CtxmenuArc -CtxmenuArc put " +image create photo xCtxmenuArc +xCtxmenuArc put " R0lGODlhEAAQAPUAAAAAAAQEBAsLCwwMDBAQECsrKywsLDAwMDw8PEFBQUdHR0tLS1lZWW1tbX5+ foWFhYmJiZGRkZ6enqOjo6ysrLe3t76+vsrKytDQ0NTU1NnZ2ejo6Ovr6+3t7fPz8/T09Pv7+wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1163,8 +1241,8 @@ sTAcFA5MaMlcQgDQKGChaS45EszHk4kUAAKKdbyMCABistUiGFTVTQlAAbcmAJc6swJo6JcgBAV/ SwgAIIQMAByJi4QIAYQhAgaSDROSTEEAOw== " -image create photo CtxmenuCircle -CtxmenuCircle put " +image create photo xCtxmenuCircle +xCtxmenuCircle put " R0lGODlhEAAQAPUAAAAAAAQEBA4ODhERERUVFRsbGykpKS4uLjQ0NDo6Oj4+Pk9PT1BQUFpaWl9f X2NjY2lpaW5ubnBwcH5+foGBgYeHh46OjpCQkJeXl5mZmZ+fn6KiorCwsLm5ucHBwdLS0tXV1djY 2OHh4eTk5O/v7/T09Pr6+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -1174,11 +1252,94 @@ fiVzQhYAHH4jAA1CHQASfhsAFUImBAIjUyZNIUMXAAlwQyYOAA5KCwAFFx8gG00GpaYRW09ztUog EwsLEmt+w0JBADs= " -image create photo CtxmenuText -CtxmenuText put " +image create photo xCtxmenuText +xCtxmenuText put " R0lGODlhEAAQAPQAAAAAAB4eHjMzMzU1NURERElJSVRUVFVVVXt7e4aGhoqKipOTk5mZmZ6enqCg oLKyssLCwszMzM/Pz9LS0tjY2N3d3eDg4Obm5unp6e7u7vLy8gAAAAAAAAAAAAAAAAAAACH5BAEA ABsALAAAAAAQABAAAAVN4CaOZDlGaIqZ4gK8cMBu02HfyqyzmKIkwJ8wYRkpYEgkYqRxMJ5QaCOz 00EGgqwgoXMkDztNZkzdWSroNHpFYiSTD1KEQK/XC5TqLAQAOw== " +image create photo CtxmenuBlank +image create photo CtxmenuRotate +image create photo CtxmenuSave +image create photo CtxmenuTerm +image create photo CtxmenuSchematic +image create photo CtxmenuOpendir +image create photo CtxmenuFlip +image create photo CtxmenuAbort +image create photo CtxmenuRecent +image create photo CtxmenuSymbol +image create photo CtxmenuUp +image create photo CtxmenuDown +image create photo CtxmenuDownSym +image create photo CtxmenuPaste +image create photo CtxmenuDelete +image create photo CtxmenuDuplicate +image create photo CtxmenuCut +image create photo CtxmenuMove +image create photo CtxmenuCopy +image create photo CtxmenuEdit +image create photo CtxmenuWire +image create photo CtxmenuLine +image create photo CtxmenuBox +image create photo CtxmenuPoly +image create photo CtxmenuArc +image create photo CtxmenuCircle +image create photo CtxmenuText + +CtxmenuBlank copy xCtxmenuBlank -zoom $ctxmenu_icon_zoom +CtxmenuRotate copy xCtxmenuRotate -zoom $ctxmenu_icon_zoom +CtxmenuSave copy xCtxmenuSave -zoom $ctxmenu_icon_zoom +CtxmenuTerm copy xCtxmenuTerm -zoom $ctxmenu_icon_zoom +CtxmenuSchematic copy xCtxmenuSchematic -zoom $ctxmenu_icon_zoom +CtxmenuOpendir copy xCtxmenuOpendir -zoom $ctxmenu_icon_zoom +CtxmenuFlip copy xCtxmenuFlip -zoom $ctxmenu_icon_zoom +CtxmenuAbort copy xCtxmenuAbort -zoom $ctxmenu_icon_zoom +CtxmenuRecent copy xCtxmenuRecent -zoom $ctxmenu_icon_zoom +CtxmenuSymbol copy xCtxmenuSymbol -zoom $ctxmenu_icon_zoom +CtxmenuUp copy xCtxmenuUp -zoom $ctxmenu_icon_zoom +CtxmenuDown copy xCtxmenuDown -zoom $ctxmenu_icon_zoom +CtxmenuDownSym copy xCtxmenuDownSym -zoom $ctxmenu_icon_zoom +CtxmenuPaste copy xCtxmenuPaste -zoom $ctxmenu_icon_zoom +CtxmenuDelete copy xCtxmenuDelete -zoom $ctxmenu_icon_zoom +CtxmenuDuplicate copy xCtxmenuDuplicate -zoom $ctxmenu_icon_zoom +CtxmenuCut copy xCtxmenuCut -zoom $ctxmenu_icon_zoom +CtxmenuMove copy xCtxmenuMove -zoom $ctxmenu_icon_zoom +CtxmenuCopy copy xCtxmenuCopy -zoom $ctxmenu_icon_zoom +CtxmenuEdit copy xCtxmenuEdit -zoom $ctxmenu_icon_zoom +CtxmenuWire copy xCtxmenuWire -zoom $ctxmenu_icon_zoom +CtxmenuLine copy xCtxmenuLine -zoom $ctxmenu_icon_zoom +CtxmenuBox copy xCtxmenuBox -zoom $ctxmenu_icon_zoom +CtxmenuPoly copy xCtxmenuPoly -zoom $ctxmenu_icon_zoom +CtxmenuArc copy xCtxmenuArc -zoom $ctxmenu_icon_zoom +CtxmenuCircle copy xCtxmenuCircle -zoom $ctxmenu_icon_zoom +CtxmenuText copy xCtxmenuText -zoom $ctxmenu_icon_zoom + +image delete xCtxmenuBlank +image delete xCtxmenuRotate +image delete xCtxmenuSave +image delete xCtxmenuTerm +image delete xCtxmenuSchematic +image delete xCtxmenuOpendir +image delete xCtxmenuFlip +image delete xCtxmenuAbort +image delete xCtxmenuRecent +image delete xCtxmenuSymbol +image delete xCtxmenuUp +image delete xCtxmenuDown +image delete xCtxmenuDownSym +image delete xCtxmenuPaste +image delete xCtxmenuDelete +image delete xCtxmenuDuplicate +image delete xCtxmenuCut +image delete xCtxmenuMove +image delete xCtxmenuCopy +image delete xCtxmenuEdit +image delete xCtxmenuWire +image delete xCtxmenuLine +image delete xCtxmenuBox +image delete xCtxmenuPoly +image delete xCtxmenuArc +image delete xCtxmenuCircle +image delete xCtxmenuText diff --git a/src/xschem.tcl b/src/xschem.tcl index 17f6ed8e..09c27154 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -7806,6 +7806,7 @@ proc tab_context_menu {tab_but} { # proc setup_toolbar {} { global toolbar_visible toolbar_horiz toolbar_list XSCHEM_SHAREDIR dark_gui_colorscheme + global toolbar_icon_zoom ctxmenu_icon_zoom set_ne toolbar_visible 1 set_ne toolbar_horiz 1 set_ne toolbar_list { @@ -7857,8 +7858,9 @@ proc setup_toolbar {} { # Create a tool button which may be displayed # proc toolbar_add {name cmd { help "" } {topwin {} } } { - global dark_gui_colorscheme + global dark_gui_colorscheme toolbar_icon_zoom + set toolbar_icon_size [expr {$toolbar_icon_zoom * 24}] if { $dark_gui_colorscheme ==1} { set bg black } else { @@ -7868,8 +7870,8 @@ proc toolbar_add {name cmd { help "" } {topwin {} } } { frame $topwin.toolbar -relief raised -bd 0 -background $bg } if { ![winfo exists $topwin.toolbar.b$name]} { - button $topwin.toolbar.b$name -image img$name -relief flat -bd 0 -background $bg -fg $bg -height 24 \ - -padx 0 -pady 0 -command $cmd + button $topwin.toolbar.b$name -image img$name -relief flat -bd 0 \ + -background $bg -fg $bg -height $toolbar_icon_size -padx 0 -pady 0 -command $cmd if { $help == "" } { balloon $topwin.toolbar.b$name $name } else { balloon $topwin.toolbar.b$name $help } } } @@ -9831,6 +9833,15 @@ set_ne new_symbol_browser_ext {\.(sch|sym|tcl)$} ;# file extensions (a regex) to set_ne file_dialog_ext {*} +#### toolbar icons are bitmaps. Their size is 24x24. This can be changed to +#### accommodate UHD displays. +#### the zoom factor is an integer that can be used to enlarge these icons +#### Default value: 1 +set_ne toolbar_icon_zoom 1 +#### context menu icons are 16 x 16. they can be enlarged by the following integer +#### default value: 1 +set_ne ctxmenu_icon_zoom 1 + ## remember edit_prop widget size set_ne edit_prop_size 80x12 set_ne text_line_default_geometry {} diff --git a/src/xschemrc b/src/xschemrc index 840af2f9..0d2bc491 100644 --- a/src/xschemrc +++ b/src/xschemrc @@ -245,6 +245,15 @@ #### default: unset (tk uses its default) > 1.0 ==> bigger # set tk_scaling 1.7 +#### toolbar icons are bitmaps. Their size is 24x24. This can be changed to +#### accommodate UHD displays. +#### the zoom factor is an integer that can be used to enlarge these icons +#### Default value: 1 +# set toolbar_icon_zoom 2 +#### context menu icons are 16 x 16. they can be enlarged by the following +#### integer. default value: 1 +# set ctxmenu_icon_zoom 2 + #### use the tclreadline package if available , Default: 1 (enabled). # set use_tclreadline 1 From c4b3e204a00ec24f5ca30ffcfa917182cd535f7c Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 12:36:46 +0100 Subject: [PATCH 06/11] place_moved_wire(): in manhattan mode don`t store new wires if not needed (single point) --- src/move.c | 36 ++++++++++++++++++++---------------- src/xschem.tcl | 6 ++++-- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/move.c b/src/move.c index d07ffe5c..9d02b400 100644 --- a/src/move.c +++ b/src/move.c @@ -1058,10 +1058,11 @@ static void place_moved_wire(int n, int orthogonal_wiring) wire[n].x2 = xctx->rx1; wire[n].y2 = xctx->ry2; order_wire_points(n); - storeobject(-1, xctx->rx1,xctx->ry2,xctx->rx2,xctx->ry2,WIRE,0,0,NULL); - last = xctx->wires-1; - order_wire_points(last); - /* drawline(WIRELAYER,NOW, wire[last].x1, wire[last].y1, wire[last].x2, wire[last].y2, 0, NULL); */ + if( xctx->rx1 != xctx->rx2) { + storeobject(-1, xctx->rx1,xctx->ry2,xctx->rx2,xctx->ry2,WIRE,0,0,NULL); + last = xctx->wires-1; + order_wire_points(last); + } } /* wire x2,y2 point was moved @@ -1082,10 +1083,11 @@ static void place_moved_wire(int n, int orthogonal_wiring) wire[n].x2 = xctx->rx2; wire[n].y2 = xctx->ry2; order_wire_points(n); - storeobject(-1, xctx->rx1,xctx->ry1,xctx->rx2,xctx->ry1,WIRE,0,0,NULL); - last = xctx->wires-1; - order_wire_points(last); - /* drawline(WIRELAYER,NOW, wire[last].x1, wire[last].y1, wire[last].x2, wire[last].y2, 0, NULL); */ + if( xctx->rx1 != xctx->rx2) { + storeobject(-1, xctx->rx1,xctx->ry1,xctx->rx2,xctx->ry1,WIRE,0,0,NULL); + last = xctx->wires-1; + order_wire_points(last); + } } /* wire x1,y1 point was moved @@ -1106,10 +1108,11 @@ static void place_moved_wire(int n, int orthogonal_wiring) wire[n].x2 = xctx->rx2; wire[n].y2 = xctx->ry1; order_wire_points(n); - storeobject(-1, xctx->rx2,xctx->ry1,xctx->rx2,xctx->ry2,WIRE,0,0,NULL); - last = xctx->wires-1; - order_wire_points(last); - /* drawline(WIRELAYER,NOW, wire[last].x1, wire[last].y1, wire[last].x2, wire[last].y2, 0, NULL); */ + if( xctx->ry1 != xctx->ry2) { + storeobject(-1, xctx->rx2,xctx->ry1,xctx->rx2,xctx->ry2,WIRE,0,0,NULL); + last = xctx->wires-1; + order_wire_points(last); + } } /* wire x2,y2 point was moved @@ -1130,10 +1133,11 @@ static void place_moved_wire(int n, int orthogonal_wiring) wire[n].x2 = xctx->rx2; wire[n].y2 = xctx->ry2; order_wire_points(n); - storeobject(-1, xctx->rx1,xctx->ry1,xctx->rx1,xctx->ry2,WIRE,0,0,NULL); - last = xctx->wires-1; - order_wire_points(last); - /* drawline(WIRELAYER,NOW, wire[last].x1, wire[last].y1, wire[last].x2, wire[last].y2, 0, NULL); */ + if( xctx->ry1 != xctx->ry2) { + storeobject(-1, xctx->rx1,xctx->ry1,xctx->rx1,xctx->ry2,WIRE,0,0,NULL); + last = xctx->wires-1; + order_wire_points(last); + } } else /* no manhattan or traslation since both line points moved */ diff --git a/src/xschem.tcl b/src/xschem.tcl index 09c27154..fd04603c 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -4806,6 +4806,7 @@ proc load_file_dialog {{msg {}} {ext {}} {global_initdir {INITIALINSTDIR}} # 'levels' is set to the number of levels to descend into. # 'level' is used internally by the function and should not be set. proc get_list_of_dirs_with_symbols {{paths {}} {levels -1} {ext {\.(sch|sym)$}} {level -1}} { + # puts "get_list_of_dirs_with_symbols paths=$paths" global pathlist set dir_with_symbols {} if {$level == -1} { set level 0} @@ -4896,6 +4897,7 @@ proc insert_symbol_select_preview {} { } proc insert_symbol_update_dirs {paths {maxdepth -1}} { + # puts insert_symbol_update_dirs global insert_symbol new_symbol_browser_ext # regenerate list of dirs set insert_symbol(dirs) [get_list_of_dirs_with_symbols $paths $maxdepth $new_symbol_browser_ext] @@ -4930,14 +4932,13 @@ proc insert_symbol_filelist {paths {maxdepth -1}} { .ins.center.leftdir.l selection set active } set insert_symbol(dirindex) $sel - # puts "set dirindex=$paths" set paths [lindex $insert_symbol(dirs) $sel] # puts "insert_symbol_filelist: paths=$paths" .ins.top2.dir_e configure -state normal .ins.top2.dir_e delete 0 end .ins.top2.dir_e insert 0 $paths .ins.top2.dir_e configure -state readonly - #check if regex is valid + # check if regex is valid set err [catch {regexp $insert_symbol(regex) {12345}} res] if {$err} {return} set f [match_file $insert_symbol(regex) $paths 0] @@ -5110,6 +5111,7 @@ proc insert_symbol {{paths {}} {maxdepth -1} {ext {.*}}} { .ins.center.left.l selection set $insert_symbol(fileindex) .ins.center.left.l see $insert_symbol(fileindex) } + insert_symbol_filelist $paths $maxdepth return {} } ####################################################################### From 0d2b57bfa5893daa78af6c3b0dd40d0b91369d33 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 13:30:40 +0100 Subject: [PATCH 07/11] use TkDefaultFont in right click context menu instead of a custom menu. This makes scaling with tk_scaling more consistent --- src/xschem.tcl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/xschem.tcl b/src/xschem.tcl index fd04603c..f8bff106 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -7441,7 +7441,8 @@ proc context_menu { } { set retval 0 if {[info tclversion] >= 8.5} { - set font {Sans 8 bold} + set font TkDefaultFont + # set font {Sans 8 bold} } else { set font fixed } From 53b90ee689abe532e27e976540cbcf316a72b8da Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 15:53:47 +0100 Subject: [PATCH 08/11] conversions from eng notation: add x in addition to meg as suffix for 1e6 (Xyce extension) --- src/editprop.c | 12 ++++++++---- src/xschem.tcl | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/editprop.c b/src/editprop.c index dbe65604..ad7b0482 100644 --- a/src/editprop.c +++ b/src/editprop.c @@ -473,10 +473,11 @@ double atof_spice(const char *s) } else if(n == 1) { mul = 1.0; } else { - p = strpbrk(suffix, "tgmkunpfa"); + p = strpbrk(suffix, "tgmxkunpfa"); if(p != suffix ) mul = 1.0; else if(*p == 't') mul=1e12; else if(*p == 'g') mul=1e9; + else if(*p == 'x') mul=1e6; /* Xyce extension */ else if(*p == 'm') { if(strstr(p, "meg") == p) mul=1e6; else if(strstr(p, "mil") == p) mul=25.4e-6; @@ -495,12 +496,13 @@ double atof_spice(const char *s) } -/* same as atof_spice, but recognizes 'M' ae Mega, and 'm' as Milli */ +/* same as atof_spice, but recognizes 'M' as Mega, and 'm' as Milli + * as long as not 'MEG' or 'meg' which is always Mega */ double atof_eng(const char *s) { int n; double a = 0.0, mul=1.0; - char suffix[100]={0}; + char suffix[100]={0, 0, 0, 0, 0}; const char *p; if(!s) return 0.0; @@ -510,10 +512,12 @@ double atof_eng(const char *s) } else if(n == 1) { mul = 1.0; } else { - p = strpbrk(suffix, "TGMKUNPFAtgmkunpfa"); + p = strpbrk(suffix, "TGMXKUNPFAtgmxkunpfa"); if(p != suffix ) mul = 1.0; else if(tolower(*p) == 't') mul=1e12; else if(tolower(*p) == 'g') mul=1e9; + else if(tolower(*p) == 'x') mul=1e6; /* Xyce extension */ + else if(tolower(p[0]) == 'm' && tolower(p[1]) == 'e' && tolower(p[2]) == 'g') mul=1e6; else if(*p == 'M') mul=1e6; else if(*p == 'm') mul=1e-3; else if(tolower(*p) == 'k') mul=1e3; diff --git a/src/xschem.tcl b/src/xschem.tcl index f8bff106..8b4f57b8 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -617,6 +617,7 @@ proc from_eng {i} { u { expr {1e-6}} m { expr {1e-3}} k { expr {1e3}} + x { expr {1e6}} ;# Xyce extension meg { expr {1e6}} g { expr {1e9}} t { expr {1e12}} From b4344360a9ff50d1dfd488e9785f37c69174c6d9 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 16:31:07 +0100 Subject: [PATCH 09/11] better process list title --- src/xschem.tcl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/xschem.tcl b/src/xschem.tcl index 8b4f57b8..6b24588d 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -506,6 +506,7 @@ proc list_running_cmds {} { if {![info exists has_x]} {return} if {[winfo exists $top]} {return} toplevel $top -class Dialog + wm title $top "List of running commands - started from [xschem get current_name]" # wm transient $top [xschem get topwindow] set frame1 $top.f1 set frame2 $top.f2 From 7cf84e9049a0ccb0e4eca81a974a889144363dd1 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 17:17:20 +0100 Subject: [PATCH 10/11] .processlist: update title based on current schematic --- src/xschem.tcl | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/xschem.tcl b/src/xschem.tcl index 6b24588d..9ad3f394 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -499,14 +499,21 @@ proc view_process_status {lb} { after 1000 "update_process_status $lb" } +proc list_running_cmds_title {} { + if {[winfo exists .processlist]} { + wm title .processlist "List of running commands - [xschem get current_name]" + after 1000 "list_running_cmds_title" + } +} + # top level dialog displaying running sub-processes proc list_running_cmds {} { global has_x set top .processlist if {![info exists has_x]} {return} - if {[winfo exists $top]} {return} + if {[winfo exists $top]} {raise $top; return} toplevel $top -class Dialog - wm title $top "List of running commands - started from [xschem get current_name]" + list_running_cmds_title # wm transient $top [xschem get topwindow] set frame1 $top.f1 set frame2 $top.f2 From e4d4c18b4c4b7902a8087d0ec53c556a7c28868b Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Tue, 18 Mar 2025 18:38:13 +0100 Subject: [PATCH 11/11] cleanups in insert_symbol procedures --- src/xschem.tcl | 51 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/src/xschem.tcl b/src/xschem.tcl index 9ad3f394..cb2ec680 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -4905,11 +4905,13 @@ proc insert_symbol_select_preview {} { } } -proc insert_symbol_update_dirs {paths {maxdepth -1}} { +proc insert_symbol_update_dirs {} { # puts insert_symbol_update_dirs global insert_symbol new_symbol_browser_ext # regenerate list of dirs - set insert_symbol(dirs) [get_list_of_dirs_with_symbols $paths $maxdepth $new_symbol_browser_ext] + set insert_symbol(dirs) [ + get_list_of_dirs_with_symbols $insert_symbol(paths) $insert_symbol(maxdepth) $new_symbol_browser_ext + ] set insert_symbol(dirtails) {} foreach i $insert_symbol(dirs) { lappend insert_symbol(dirtails) [file tail $i] @@ -4931,7 +4933,7 @@ proc insert_symbol_update_dirs {paths {maxdepth -1}} { } #### fill list of files matching pattern -proc insert_symbol_filelist {paths {maxdepth -1}} { +proc insert_symbol_filelist {} { global insert_symbol new_symbol_browser_ext set sel [.ins.center.leftdir.l curselection] @@ -4941,16 +4943,18 @@ proc insert_symbol_filelist {paths {maxdepth -1}} { .ins.center.leftdir.l selection set active } set insert_symbol(dirindex) $sel - set paths [lindex $insert_symbol(dirs) $sel] - # puts "insert_symbol_filelist: paths=$paths" + set insert_symbol(paths) [lindex $insert_symbol(dirs) $sel] .ins.top2.dir_e configure -state normal .ins.top2.dir_e delete 0 end - .ins.top2.dir_e insert 0 $paths + .ins.top2.dir_e insert 0 $insert_symbol(paths) .ins.top2.dir_e configure -state readonly # check if regex is valid set err [catch {regexp $insert_symbol(regex) {12345}} res] if {$err} {return} - set f [match_file $insert_symbol(regex) $paths 0] + set f {} + if {$insert_symbol(paths) ne {} } { + set f [match_file $insert_symbol(regex) $insert_symbol(paths) 0] + } set filelist {} set insert_symbol(fullpathlist) {} set sel [.ins.center.left.l curselection] @@ -5002,17 +5006,23 @@ proc insert_symbol_place {} { if { [xschem get ui_state] & 8192 } { xschem abort_operation } - xschem place_symbol $f + if {$insert_symbol(action) eq {symbol}} { + xschem place_symbol $f + } elseif {$insert_symbol(action) eq {load}} { + xschem load -gui $f + } } } } } -#### paths: list of paths to use for listing symbols #### maxdepth: how many levels to descend for each $paths directory (-1: no limit) -proc insert_symbol {{paths {}} {maxdepth -1} {ext {.*}}} { +proc insert_symbol {{paths {}} {maxdepth -1} {ext {.*}} {action {symbol}}} { global insert_symbol new_symbol_browser_ext - set paths [cleanup_paths $paths] ;# remove ~ and other strange path combinations + set insert_symbol(action) $action + + set insert_symbol(maxdepth) $maxdepth + set insert_symbol(paths) [cleanup_paths $paths] ;# remove ~ and other strange path combinations # xschem set semaphore [expr {[xschem get semaphore] +1}] set new_symbol_browser_ext $ext if {[winfo exists .ins]} { @@ -5066,20 +5076,21 @@ proc insert_symbol {{paths {}} {maxdepth -1} {ext {.*}}} { -readonlybackground [option get . background {}] -takefocus 0 label .ins.top.ext_l -text Ext: entry .ins.top.ext_e -width 15 -takefocus 0 -state normal -textvariable new_symbol_browser_ext - button .ins.top.upd -takefocus 0 -text Update -command " - insert_symbol_update_dirs [list $paths] [list $maxdepth] - insert_symbol_filelist [list $paths] [list $maxdepth] - " + button .ins.top.upd -takefocus 0 -text Update -command { + set insert_symbol(paths) $new_symbol_browser_paths + insert_symbol_update_dirs + insert_symbol_filelist + } bind .ins {.ins.bottom.dismiss invoke} bind .ins " if {{%K} eq {Tab} && {%W} eq {.ins.center.left.l}} { - insert_symbol_filelist [list $paths] [list $maxdepth] + insert_symbol_filelist insert_symbol_select_preview } elseif {{%K} eq {Tab} && {%W} eq {.ins.center.leftdir.l}} { - insert_symbol_filelist [list $paths] [list $maxdepth] + insert_symbol_filelist } " - bind .ins.center.leftdir.l <> "insert_symbol_filelist [list $paths] [list $maxdepth]" + bind .ins.center.leftdir.l <> "insert_symbol_filelist" bind .ins.center.left.l <> "insert_symbol_select_preview" bind .ins.center.left.l " xschem preview_window close .ins.center.right {} @@ -5113,14 +5124,14 @@ proc insert_symbol {{paths {}} {maxdepth -1} {ext {.*}}} { pack .ins.top.ext_l -side left pack .ins.top.ext_e -side left - insert_symbol_update_dirs $paths $maxdepth + insert_symbol_update_dirs if {[info exists insert_symbol(dirindex)]} {.ins.center.leftdir.l selection set $insert_symbol(dirindex)} if {[info exists insert_symbol(fileindex)]} { .ins.center.left.l selection set $insert_symbol(fileindex) .ins.center.left.l see $insert_symbol(fileindex) } - insert_symbol_filelist $paths $maxdepth + insert_symbol_filelist return {} } #######################################################################