Merge pull request #16 from TheSUPERCD/upstream-clone

Resolve merge conflicts
This commit is contained in:
Chayan Deb 2025-03-14 15:06:59 +00:00 committed by GitHub
commit ab00028935
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 141 additions and 130 deletions

View File

@ -2089,7 +2089,7 @@ static void context_menu_action(double mx, double my)
break; break;
case 7: /* cut selection into clipboard */ case 7: /* cut selection into clipboard */
rebuild_selected_array(); rebuild_selected_array();
if(xctx->lastsel) { /* 20071203 check if something selected */ if(xctx->lastsel) { /* 20071203 check if something selected */
save_selection(2); save_selection(2);
delete(1/* to_push_undo */); delete(1/* to_push_undo */);
} }
@ -2477,7 +2477,8 @@ static void handle_enter_notify(int draw_xhair, int crosshair_size)
} }
static void handle_motion_notify(int event, KeySym key, int state, int rstate, int button, static void handle_motion_notify(int event, KeySym key, int state, int rstate, int button,
int mx, int my, int aux, int draw_xhair, int enable_stretch, int snap_cursor, int wire_draw_active) int mx, int my, int aux, int draw_xhair, int enable_stretch,
int snap_cursor, int wire_draw_active)
{ {
char str[PATH_MAX + 100]; char str[PATH_MAX + 100];
if( waves_selected(event, key, state, button)) { if( waves_selected(event, key, state, button)) {
@ -2584,7 +2585,7 @@ static void handle_motion_notify(int event, KeySym key, int state, int rstate, i
select_rect(enable_stretch, START,1); select_rect(enable_stretch, START,1);
} }
if(abs(mx-xctx->mx_save) > 8 || if(abs(mx-xctx->mx_save) > 8 ||
abs(my-xctx->my_save) > 8 ) { /* set reasonable threshold before unsel */ abs(my-xctx->my_save) > 8 ) { /* set reasonable threshold before unsel */
if(!xctx->already_selected) { if(!xctx->already_selected) {
select_object(X_TO_XSCHEM(xctx->mx_save), select_object(X_TO_XSCHEM(xctx->mx_save),
Y_TO_XSCHEM(xctx->my_save), 0, 0, NULL); /* remove near obj if dragging */ Y_TO_XSCHEM(xctx->my_save), 0, 0, NULL); /* remove near obj if dragging */
@ -2602,22 +2603,24 @@ static void handle_motion_notify(int event, KeySym key, int state, int rstate, i
} }
static void handle_key_press(int event, KeySym key, int state, int rstate, int mx, int my, static void handle_key_press(int event, KeySym key, int state, int rstate, int mx, int my,
int button, int aux, int infix_interface, int enable_stretch, const char *win_path, double c_snap, int button, int aux, int infix_interface, int enable_stretch,
const char *win_path, double c_snap,
int cadence_compat, int wire_draw_active, int snap_cursor) int cadence_compat, int wire_draw_active, int snap_cursor)
{ {
char str[PATH_MAX + 100]; char str[PATH_MAX + 100];
int dr_gr;
switch (key) { switch (key) {
case '0': case '0':
case '1': case '1':
case '2': case '2':
case '3': case '3':
case '4': case '4':
if(state == 0) { /* toggle pin logic level */ if(state == 0) { /* toggle pin logic level */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(key == '4') logic_set(-1, 1, NULL); if(key == '4') logic_set(-1, 1, NULL);
else logic_set((int)key - '0', 1, NULL); else logic_set((int)key - '0', 1, NULL);
} }
else if(state==ControlMask) { /* choose layer */ else if(state==ControlMask) { /* choose layer */
char n[30]; char n[30];
xctx->rectcolor = (int)key - '0'+4; xctx->rectcolor = (int)key - '0'+4;
my_snprintf(n, S(n), "%d", xctx->rectcolor); my_snprintf(n, S(n), "%d", xctx->rectcolor);
@ -2635,7 +2638,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case '5': case '5':
if(rstate == 0) { /* 20110112 display only probes */ if(rstate == 0) { /* 20110112 display only probes */
xctx->only_probes = !xctx->only_probes; xctx->only_probes = !xctx->only_probes;
tclsetboolvar("only_probes", xctx->only_probes); tclsetboolvar("only_probes", xctx->only_probes);
toggle_only_probes(); toggle_only_probes();
@ -2646,7 +2649,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
case '7': case '7':
case '8': case '8':
case '9': case '9':
if(state==ControlMask) { /* choose layer */ if(state==ControlMask) { /* choose layer */
char n[30]; char n[30];
xctx->rectcolor = (int)key - '0'+4; xctx->rectcolor = (int)key - '0'+4;
my_snprintf(n, S(n), "%d", xctx->rectcolor); my_snprintf(n, S(n), "%d", xctx->rectcolor);
@ -2664,7 +2667,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'a': case 'a':
if(rstate == 0) { /* make symbol */ if(rstate == 0) { /* make symbol */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
@ -2678,7 +2681,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
make_symbol(); make_symbol();
} }
} }
else if(rstate == ControlMask) { /* select all */ else if(rstate == ControlMask) { /* select all */
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
break; break;
@ -2688,7 +2691,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'A': case 'A':
if(rstate == 0) { /* toggle show netlist */ if(rstate == 0) { /* toggle show netlist */
int net_s; int net_s;
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
@ -2705,7 +2708,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
tclsetvar("netlist_show","0"); tclsetvar("netlist_show","0");
} }
} }
else if(rstate == ControlMask) { /* only for graph (toggle hcursor1 if graph_use_ctrl_key set) */ else if(rstate == ControlMask) { /* only for graph (toggle hcursor1 if graph_use_ctrl_key set) */
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
break; break;
@ -2714,7 +2717,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'b': case 'b':
if(rstate==0) { /* merge schematic */ if(rstate==0) { /* merge schematic */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
@ -2722,7 +2725,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
} }
merge_file(0, ""); /* 2nd parameter not used any more for merge 25122002 */ merge_file(0, ""); /* 2nd parameter not used any more for merge 25122002 */
} }
else if(rstate==ControlMask) { /* toggle show text in symbol */ else if(rstate==ControlMask) { /* toggle show text in symbol */
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
break; break;
@ -2739,7 +2742,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
draw(); draw();
} }
} }
else if(EQUAL_MODMASK) { /* hide/show instance details */ else if(EQUAL_MODMASK) { /* hide/show instance details */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
xctx->hide_symbols++; xctx->hide_symbols++;
if(xctx->hide_symbols >= 3) xctx->hide_symbols = 0; if(xctx->hide_symbols >= 3) xctx->hide_symbols = 0;
@ -2749,14 +2752,14 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'B': case 'B':
if(rstate == 0) { /* edit schematic header/license */ if(rstate == 0) { /* edit schematic header/license */
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
break; break;
} }
tcleval("update_schematic_header"); tcleval("update_schematic_header");
} }
else if(rstate == ControlMask) { /* only for graph (toggle hcursor2 if graph_use_ctrl_key set) */ else if(rstate == ControlMask) { /* only for graph (toggle hcursor2 if graph_use_ctrl_key set) */
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
break; break;
@ -2781,7 +2784,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
else if(rstate == ControlMask) { else if(rstate == ControlMask) {
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
rebuild_selected_array(); rebuild_selected_array();
if(xctx->lastsel) { /* 20071203 check if something selected */ if(xctx->lastsel) { /* 20071203 check if something selected */
save_selection(2); save_selection(2);
} }
} }
@ -2801,7 +2804,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'C': case 'C':
if(/* !xctx->ui_state && */ rstate == 0) { /* place arc */ if(/* !xctx->ui_state && */ rstate == 0) { /* place arc */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(infix_interface) { if(infix_interface) {
xctx->mx_double_save=xctx->mousex_snap; xctx->mx_double_save=xctx->mousex_snap;
@ -2813,7 +2816,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
xctx->ui_state2 = MENUSTARTARC; xctx->ui_state2 = MENUSTARTARC;
} }
} }
else if(/* !xctx->ui_state && */ rstate == ControlMask) { /* place circle */ else if(/* !xctx->ui_state && */ rstate == ControlMask) { /* place circle */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(infix_interface) { if(infix_interface) {
xctx->mx_double_save=xctx->mousex_snap; xctx->mx_double_save=xctx->mousex_snap;
@ -2828,7 +2831,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'd': case 'd':
if(rstate == 0) { /* unselect object under the mouse */ if(rstate == 0) { /* unselect object under the mouse */
if(infix_interface) { if(infix_interface) {
unselect_at_mouse_pos(mx, my); unselect_at_mouse_pos(mx, my);
} else { } else {
@ -2836,14 +2839,14 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
xctx->ui_state2 = MENUSTARTDESEL; xctx->ui_state2 = MENUSTARTDESEL;
} }
} }
else if(rstate == ControlMask) { /* delete files */ else if(rstate == ControlMask) { /* delete files */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
delete_files(); delete_files();
} }
break; break;
case 'D': case 'D':
if(rstate == 0) { /* unselect by area */ if(rstate == 0) { /* unselect by area */
if( !(xctx->ui_state & STARTPAN) && !xctx->shape_point_selected && if( !(xctx->ui_state & STARTPAN) && !xctx->shape_point_selected &&
!(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT)) && !(xctx->ui_state & STARTSELECT)) { !(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT)) && !(xctx->ui_state & STARTSELECT)) {
if(infix_interface) { if(infix_interface) {
@ -2860,7 +2863,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'e': case 'e':
if(rstate == 0) { /* descend to schematic */ if(rstate == 0) { /* descend to schematic */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
descend_schematic(0, 1, 1, 1); descend_schematic(0, 1, 1, 1);
} }
@ -2868,7 +2871,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
go_back(1); go_back(1);
} }
else if(EQUAL_MODMASK) { /* edit schematic in new window */ else if(EQUAL_MODMASK) { /* edit schematic in new window */
int save = xctx->semaphore; int save = xctx->semaphore;
xctx->semaphore--; /* so semaphore for current context wll be saved correctly */ xctx->semaphore--; /* so semaphore for current context wll be saved correctly */
/* schematic_in_new_window(0, 1, 0); */ /* schematic_in_new_window(0, 1, 0); */
@ -2878,7 +2881,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'E': case 'E':
if(EQUAL_MODMASK) { /* edit schematic in new window - new xschem process */ if(EQUAL_MODMASK) { /* edit schematic in new window - new xschem process */
int save = xctx->semaphore; int save = xctx->semaphore;
xctx->semaphore--; /* so semaphore for current context wll be saved correctly */ xctx->semaphore--; /* so semaphore for current context wll be saved correctly */
schematic_in_new_window(1, 1, 0); schematic_in_new_window(1, 1, 0);
@ -2887,7 +2890,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'f': case 'f':
if(rstate == 0) { /* full zoom */ if(rstate == 0) { /* full zoom */
int flags = 1; int flags = 1;
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
@ -2896,7 +2899,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
if(tclgetboolvar("zoom_full_center")) flags |= 2; if(tclgetboolvar("zoom_full_center")) flags |= 2;
zoom_full(1, 0, flags, 0.97); zoom_full(1, 0, flags, 0.97);
} }
else if(rstate == ControlMask) { /* search */ else if(rstate == ControlMask) { /* search */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
@ -2904,7 +2907,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
} }
tcleval("property_search"); tcleval("property_search");
} }
else if(EQUAL_MODMASK) { /* flip objects around their anchor points 20171208 */ else if(EQUAL_MODMASK) { /* flip objects around their anchor points 20171208 */
if(xctx->ui_state & STARTMOVE) move_objects(FLIP|ROTATELOCAL,0,0,0); if(xctx->ui_state & STARTMOVE) move_objects(FLIP|ROTATELOCAL,0,0,0);
else if(xctx->ui_state & STARTCOPY) copy_objects(FLIP|ROTATELOCAL); else if(xctx->ui_state & STARTCOPY) copy_objects(FLIP|ROTATELOCAL);
else { else {
@ -2919,7 +2922,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'F': case 'F':
if(rstate == 0) { /* flip */ if(rstate == 0) { /* flip */
if(xctx->ui_state & STARTMOVE) move_objects(FLIP,0,0,0); if(xctx->ui_state & STARTMOVE) move_objects(FLIP,0,0,0);
else if(xctx->ui_state & STARTCOPY) copy_objects(FLIP); else if(xctx->ui_state & STARTCOPY) copy_objects(FLIP);
else { else {
@ -2931,7 +2934,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
move_objects(END,0,0,0); move_objects(END,0,0,0);
} }
} }
else if(rstate == ControlMask ) { /* full zoom selection */ else if(rstate == ControlMask ) { /* full zoom selection */
if(xctx->ui_state == SELECTION) { if(xctx->ui_state == SELECTION) {
zoom_full(1, 1, 3, 0.97); zoom_full(1, 1, 3, 0.97);
} }
@ -2939,18 +2942,18 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'g': case 'g':
if(rstate==0) { /* half snap factor */ if(rstate==0) { /* half snap factor */
set_snap(c_snap / 2.0); set_snap(c_snap / 2.0);
change_linewidth(-1.); change_linewidth(-1.);
draw(); draw();
} }
else if(rstate==ControlMask) { /* set snap factor 20161212 */ else if(rstate==ControlMask) { /* set snap factor 20161212 */
my_snprintf(str, S(str), my_snprintf(str, S(str),
"input_line {Enter snap value (default: %.16g current: %.16g)} {xschem set cadsnap} {%g} 10", "input_line {Enter snap value (default: %.16g current: %.16g)} {xschem set cadsnap} {%g} 10",
CADSNAP, c_snap, c_snap); CADSNAP, c_snap, c_snap);
tcleval(str); tcleval(str);
} }
else if(EQUAL_MODMASK) { /* highlight net and send to viewer */ else if(EQUAL_MODMASK) { /* highlight net and send to viewer */
int tool = 0; int tool = 0;
int exists = 0; int exists = 0;
char *tool_name = NULL; char *tool_name = NULL;
@ -2986,7 +2989,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'G': case 'G':
if(rstate == 0) { /* double snap factor */ if(rstate == 0) { /* double snap factor */
set_snap(c_snap * 2.0); set_snap(c_snap * 2.0);
change_linewidth(-1.); change_linewidth(-1.);
draw(); draw();
@ -2994,13 +2997,13 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'h': case 'h':
if(rstate==ControlMask ) { /* go to http link */ if(rstate==ControlMask ) { /* go to http link */
int savesem = xctx->semaphore; int savesem = xctx->semaphore;
xctx->semaphore = 0; xctx->semaphore = 0;
launcher(); launcher();
xctx->semaphore = savesem; xctx->semaphore = savesem;
} }
else if (rstate == 0) { /* horizontally constrained drag 20171023 */ else if (rstate == 0) { /* horizontally constrained drag 20171023 */
if ( xctx->constr_mv == 1 ) { if ( xctx->constr_mv == 1 ) {
tcleval("set constr_mv 0" ); tcleval("set constr_mv 0" );
xctx->constr_mv = 0; xctx->constr_mv = 0;
@ -3025,27 +3028,27 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'H': case 'H':
if(rstate == 0) { /* attach labels to selected instances */ if(rstate == 0) { /* attach labels to selected instances */
attach_labels_to_inst(1); attach_labels_to_inst(1);
} }
else if (rstate == ControlMask) { /* create schematic and symbol from selected components */ else if (rstate == ControlMask) { /* create schematic and symbol from selected components */
make_schematic_symbol_from_sel(); make_schematic_symbol_from_sel();
} }
break; break;
case 'i': case 'i':
if(rstate==0) { /* descend to symbol */ if(rstate==0) { /* descend to symbol */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
descend_symbol(); descend_symbol();
} }
else if(rstate == ControlMask) { /* insert sym */ else if(rstate == ControlMask) { /* insert sym */
if(tclgetboolvar("new_symbol_browser")) { if(tclgetboolvar("new_symbol_browser")) {
tcleval("insert_symbol $new_symbol_browser_paths $new_symbol_browser_depth $new_symbol_browser_ext"); tcleval("insert_symbol $new_symbol_browser_paths $new_symbol_browser_depth $new_symbol_browser_ext");
} else { } else {
tcleval("load_file_dialog {Insert symbol} *.\\{sym,tcl\\} INITIALINSTDIR 2"); tcleval("load_file_dialog {Insert symbol} *.\\{sym,tcl\\} INITIALINSTDIR 2");
} }
} }
else if(EQUAL_MODMASK) { /* edit symbol in new window */ else if(EQUAL_MODMASK) { /* edit symbol in new window */
int save = xctx->semaphore; int save = xctx->semaphore;
xctx->semaphore--; /* so semaphore for current context wll be saved correctly */ xctx->semaphore--; /* so semaphore for current context wll be saved correctly */
symbol_in_new_window(0); symbol_in_new_window(0);
@ -3054,7 +3057,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'I': case 'I':
if(rstate == 0) { /* insert sym */ if(rstate == 0) { /* insert sym */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(tclgetboolvar("new_symbol_browser")) { if(tclgetboolvar("new_symbol_browser")) {
tcleval("insert_symbol $new_symbol_browser_paths $new_symbol_browser_depth $new_symbol_browser_ext"); tcleval("insert_symbol $new_symbol_browser_paths $new_symbol_browser_depth $new_symbol_browser_ext");
@ -3062,7 +3065,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
start_place_symbol(); start_place_symbol();
} }
} }
else if(EQUAL_MODMASK) { /* edit symbol in new window - new xschem process */ else if(EQUAL_MODMASK) { /* edit symbol in new window - new xschem process */
int save = xctx->semaphore; int save = xctx->semaphore;
xctx->semaphore--; /* so semaphore for current context wll be saved correctly */ xctx->semaphore--; /* so semaphore for current context wll be saved correctly */
symbol_in_new_window(1); symbol_in_new_window(1);
@ -3071,19 +3074,19 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'j': case 'j':
if(rstate==0 ) { /* print list of highlight nets */ if(rstate==0 ) { /* print list of highlight nets */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
print_hilight_net(1); print_hilight_net(1);
} }
else if(rstate==ControlMask) { /* create ipins from highlight nets */ else if(rstate==ControlMask) { /* create ipins from highlight nets */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
print_hilight_net(0); print_hilight_net(0);
} }
else if(EQUAL_MODMASK) { /* create labels without i prefix from hilight nets */ else if(EQUAL_MODMASK) { /* create labels without i prefix from hilight nets */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
print_hilight_net(4); print_hilight_net(4);
} }
else if( SET_MODMASK && (state & ControlMask) ) { /* print list of highlight net with label expansion */ else if( SET_MODMASK && (state & ControlMask) ) { /* print list of highlight net with label expansion */
print_hilight_net(3); print_hilight_net(3);
} }
break; break;
@ -3092,38 +3095,38 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
if(rstate == 0) { if(rstate == 0) {
create_plot_cmd(); create_plot_cmd();
} }
else if(SET_MODMASK ) { /* create labels with i prefix from hilight nets */ else if(SET_MODMASK ) { /* create labels with i prefix from hilight nets */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
print_hilight_net(2); print_hilight_net(2);
} }
break; break;
case 'k': case 'k':
if(rstate==0) { /* hilight net */ if(rstate==0) { /* hilight net */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
xctx->enable_drill=0; xctx->enable_drill=0;
hilight_net(0); hilight_net(0);
redraw_hilights(0); redraw_hilights(0);
/* draw_hilight_net(1); */ /* draw_hilight_net(1); */
} }
else if(EQUAL_MODMASK) { /* select whole net (all attached wires/labels/pins) */ else if(EQUAL_MODMASK) { /* select whole net (all attached wires/labels/pins) */
select_hilight_net(); select_hilight_net();
} }
else if(rstate==ControlMask) { /* unhilight net */ else if(rstate==ControlMask) { /* unhilight net */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
unhilight_net(); unhilight_net();
} }
break; break;
case 'K': case 'K':
if(rstate == 0) { /* delete hilighted nets */ if(rstate == 0) { /* delete hilighted nets */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
xctx->enable_drill=0; xctx->enable_drill=0;
clear_all_hilights(); clear_all_hilights();
/* undraw_hilight_net(1); */ /* undraw_hilight_net(1); */
draw(); draw();
} }
else if(rstate == ControlMask) { /* hilight net drilling thru elements with 'propag=' prop set on pins */ else if(rstate == ControlMask) { /* hilight net drilling thru elements with 'propag=' prop set on pins */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
xctx->enable_drill=1; xctx->enable_drill=1;
hilight_net(0); hilight_net(0);
@ -3133,7 +3136,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'l': case 'l':
if(/* !xctx->ui_state && */ rstate == 0) { /* start line */ if(/* !xctx->ui_state && */ rstate == 0) { /* start line */
int prev_state = xctx->ui_state; int prev_state = xctx->ui_state;
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(infix_interface) { if(infix_interface) {
@ -3148,17 +3151,17 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
xctx->ui_state2 = MENUSTARTLINE; xctx->ui_state2 = MENUSTARTLINE;
} }
} }
else if(rstate == ControlMask) { /* create schematic from selected symbol 20171004 */ else if(rstate == ControlMask) { /* create schematic from selected symbol 20171004 */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
create_sch_from_sym(); create_sch_from_sym();
} }
else if(EQUAL_MODMASK) { /* add pin label*/ else if(EQUAL_MODMASK) { /* add pin label*/
place_net_label(1); place_net_label(1);
} }
break; break;
case 'L': case 'L':
if(rstate == 0) { /* toggle orthogonal routing */ if(rstate == 0) { /* toggle orthogonal routing */
if(tclgetboolvar("orthogonal_wiring")){ if(tclgetboolvar("orthogonal_wiring")){
tclsetboolvar("orthogonal_wiring", 0); tclsetboolvar("orthogonal_wiring", 0);
xctx->manhattan_lines = 0; xctx->manhattan_lines = 0;
@ -3167,7 +3170,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
} }
redraw_w_a_l_r_p_z_rubbers(1); redraw_w_a_l_r_p_z_rubbers(1);
} }
else if(EQUAL_MODMASK ) { /* add pin label*/ else if(EQUAL_MODMASK ) { /* add pin label*/
place_net_label(0); place_net_label(0);
} }
break; break;
@ -3250,18 +3253,18 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'n': case 'n':
if(rstate==0) { /* hierarchical netlist */ if(rstate==0) { /* hierarchical netlist */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
tcleval("xschem netlist -erc"); tcleval("xschem netlist -erc");
} }
else if(rstate == ControlMask) { /* clear schematic */ else if(rstate == ControlMask) { /* clear schematic */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
tcleval("xschem clear SCHEMATIC"); tcleval("xschem clear SCHEMATIC");
} }
break; break;
case 'N': case 'N':
if(rstate == 0) { /* current level only netlist */ if(rstate == 0) { /* current level only netlist */
int err = 0; int err = 0;
yyparse_error = 0; yyparse_error = 0;
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
@ -3299,14 +3302,14 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
} }
} }
else if(rstate == ControlMask ) { /* clear symbol */ else if(rstate == ControlMask ) { /* clear symbol */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
tcleval("xschem clear SYMBOL"); tcleval("xschem clear SYMBOL");
} }
break; break;
case 'o': case 'o':
if(rstate == ControlMask) { /* load */ if(rstate == ControlMask) { /* load */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
ask_new_file(); ask_new_file();
xctx->semaphore--; xctx->semaphore--;
@ -3316,10 +3319,10 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'O': case 'O':
if(rstate == ControlMask ) { /* load most recent tile */ if(rstate == ControlMask ) { /* load most recent tile */
tclvareval("xschem load -gui [lindex $recentfile 0]", NULL); tclvareval("xschem load -gui [lindex $recentfile 0]", NULL);
} }
else if(rstate == 0) { /* toggle light/dark colorscheme 20171113 */ else if(rstate == 0) { /* toggle light/dark colorscheme 20171113 */
int d_c; int d_c;
d_c = tclgetboolvar("dark_colorscheme"); d_c = tclgetboolvar("dark_colorscheme");
d_c = !d_c; d_c = !d_c;
@ -3332,7 +3335,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'p': case 'p':
if(EQUAL_MODMASK) { /* add symbol pin */ if(EQUAL_MODMASK) { /* add symbol pin */
xctx->push_undo(); xctx->push_undo();
unselect_all(1); unselect_all(1);
storeobject(-1, xctx->mousex_snap-2.5, xctx->mousey_snap-2.5, xctx->mousex_snap+2.5, xctx->mousey_snap+2.5, storeobject(-1, xctx->mousex_snap-2.5, xctx->mousey_snap-2.5, xctx->mousex_snap+2.5, xctx->mousey_snap+2.5,
@ -3342,7 +3345,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
move_objects(START,0,0,0); move_objects(START,0,0,0);
xctx->ui_state |= START_SYMPIN; xctx->ui_state |= START_SYMPIN;
} }
else if( !(xctx->ui_state & STARTPOLYGON) && rstate==0) { /* start polygon */ else if( !(xctx->ui_state & STARTPOLYGON) && rstate==0) { /* start polygon */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
dbg(1, "callback(): start polygon\n"); dbg(1, "callback(): start polygon\n");
if(infix_interface) { if(infix_interface) {
@ -3358,7 +3361,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'P': case 'P':
if(rstate == 0) { /* pan, other way to. */ if(rstate == 0) { /* pan, other way to. */
xctx->xorigin=-xctx->mousex_snap+xctx->areaw*xctx->zoom/2.0; xctx->xorigin=-xctx->mousex_snap+xctx->areaw*xctx->zoom/2.0;
xctx->yorigin=-xctx->mousey_snap+xctx->areah*xctx->zoom/2.0; xctx->yorigin=-xctx->mousey_snap+xctx->areah*xctx->zoom/2.0;
draw(); draw();
@ -3367,18 +3370,18 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'q': case 'q':
if(rstate==ControlMask) { /* quit xschem */ if(rstate==ControlMask) { /* quit xschem */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
/* must be set to zero, otherwise switch_tab/switch_win does not proceed /* must be set to zero, otherwise switch_tab/switch_win does not proceed
* and these are necessary when closing tabs/windows */ * and these are necessary when closing tabs/windows */
xctx->semaphore = 0; xctx->semaphore = 0;
tcleval("quit_xschem"); tcleval("quit_xschem");
} }
else if(rstate==0) { /* edit attributes */ else if(rstate==0) { /* edit attributes */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
edit_property(0); edit_property(0);
} }
else if(EQUAL_MODMASK) { /* edit .sch file (DANGER!!) */ else if(EQUAL_MODMASK) { /* edit .sch file (DANGER!!) */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
rebuild_selected_array(); rebuild_selected_array();
if(xctx->lastsel==0 ) { if(xctx->lastsel==0 ) {
@ -3395,17 +3398,17 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'Q': case 'Q':
if(rstate == 0) { /* edit attributes in editor */ if(rstate == 0) { /* edit attributes in editor */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
edit_property(1); edit_property(1);
} }
else if(rstate == ControlMask) { /* view attributes */ else if(rstate == ControlMask) { /* view attributes */
edit_property(2); edit_property(2);
} }
break; break;
case 'r': case 'r':
if(/* !xctx->ui_state && */ rstate==0) { /* start rect */ if(/* !xctx->ui_state && */ rstate==0) { /* start rect */
dbg(1, "callback(): start rect\n"); dbg(1, "callback(): start rect\n");
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(infix_interface) { if(infix_interface) {
@ -3418,7 +3421,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
xctx->ui_state2 = MENUSTARTRECT; xctx->ui_state2 = MENUSTARTRECT;
} }
} }
else if((rstate == ControlMask) && cadence_compat) { /* simulate (for cadence users) */ else if((rstate == ControlMask) && cadence_compat) { /* simulate (for cadence users) */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
@ -3430,7 +3433,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
tcleval("[xschem get top_path].menubar invoke Simulate"); tcleval("[xschem get top_path].menubar invoke Simulate");
} }
} }
else if(SET_MODMASK) { /* reload */ else if(SET_MODMASK) { /* reload */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
tcleval("tk_messageBox -type okcancel -parent [xschem get topwindow] " tcleval("tk_messageBox -type okcancel -parent [xschem get topwindow] "
"-message {Are you sure you want to reload from disk?}"); "-message {Are you sure you want to reload from disk?}");
@ -3443,7 +3446,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
draw(); draw();
} }
} }
else if(EQUAL_MODMASK) { /* rotate objects around their anchor points 20171208 */ else if(EQUAL_MODMASK) { /* rotate objects around their anchor points 20171208 */
if(xctx->ui_state & STARTMOVE) move_objects(ROTATE|ROTATELOCAL,0,0,0); if(xctx->ui_state & STARTMOVE) move_objects(ROTATE|ROTATELOCAL,0,0,0);
else if(xctx->ui_state & STARTCOPY) copy_objects(ROTATE|ROTATELOCAL); else if(xctx->ui_state & STARTCOPY) copy_objects(ROTATE|ROTATELOCAL);
else { else {
@ -3458,7 +3461,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'R': case 'R':
if(rstate == 0) { /* rotate */ if(rstate == 0) { /* rotate */
if(xctx->ui_state & STARTMOVE) move_objects(ROTATE,0,0,0); if(xctx->ui_state & STARTMOVE) move_objects(ROTATE,0,0,0);
else if(xctx->ui_state & STARTCOPY) copy_objects(ROTATE); else if(xctx->ui_state & STARTCOPY) copy_objects(ROTATE);
else { else {
@ -3474,7 +3477,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 's': case 's':
if((rstate == 0) && !cadence_compat) { /* simulate (original keybind) */ if((rstate == 0) && !cadence_compat) { /* simulate (original keybind) */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
@ -3486,11 +3489,11 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
tcleval("[xschem get top_path].menubar invoke Simulate"); 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) */ else if(/* !xctx->ui_state && */ (rstate == 0) && cadence_compat) { /* create wire snapping to closest instance pin (cadence keybind) */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
snapped_wire(c_snap); snapped_wire(c_snap);
} }
else if(rstate == ControlMask ){ /* save 20121201 */ else if(rstate == ControlMask ){ /* save 20121201 */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
@ -3503,25 +3506,25 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
save(1, 0); save(1, 0);
} }
} }
else if(SET_MODMASK && (state & ControlMask) ) { /* save as symbol */ else if(SET_MODMASK && (state & ControlMask) ) { /* save as symbol */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
saveas(NULL, SYMBOL); saveas(NULL, SYMBOL);
} }
break; break;
case 'S': case 'S':
if(rstate == 0) { /* change element order */ if(rstate == 0) { /* change element order */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
change_elem_order(-1); change_elem_order(-1);
} }
else if(rstate == ControlMask) { /* save as schematic */ else if(rstate == ControlMask) { /* save as schematic */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
saveas(NULL, SCHEMATIC); saveas(NULL, SCHEMATIC);
} }
break; break;
case 't': case 't':
if(rstate == 0) { /* place text */ if(rstate == 0) { /* place text */
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
break; break;
@ -3530,7 +3533,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
xctx->last_command = 0; xctx->last_command = 0;
xctx->mx_double_save = xctx->mousex_snap; xctx->mx_double_save = xctx->mousex_snap;
xctx->my_double_save = xctx->mousey_snap; xctx->my_double_save = xctx->mousey_snap;
if(place_text(0, xctx->mousex_snap, xctx->mousey_snap)) { /* 1 = draw text 24122002 */ if(place_text(0, xctx->mousex_snap, xctx->mousey_snap)) { /* 1 = draw text 24122002 */
xctx->mousey_snap = xctx->my_double_save; xctx->mousey_snap = xctx->my_double_save;
xctx->mousex_snap = xctx->mx_double_save; xctx->mousex_snap = xctx->mx_double_save;
move_objects(START,0,0,0); move_objects(START,0,0,0);
@ -3546,18 +3549,18 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'T': case 'T':
if(rstate == 0) { /* toggle spice_ignore, verilog_ignore, ... flag on selected instances. */ if(rstate == 0) { /* toggle spice_ignore, verilog_ignore, ... flag on selected instances. */
toggle_ignore(); toggle_ignore();
} }
break; break;
case 'u': case 'u':
if(rstate==0) { /* undo */ if(rstate==0) { /* undo */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
xctx->pop_undo(0, 1); /* 2nd parameter: set_modify_status */ xctx->pop_undo(0, 1); /* 2nd parameter: set_modify_status */
draw(); draw();
} }
else if(EQUAL_MODMASK) { /* align to grid */ else if(EQUAL_MODMASK) { /* align to grid */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
xctx->push_undo(); xctx->push_undo();
round_schematic_to_grid(c_snap); round_schematic_to_grid(c_snap);
@ -3577,7 +3580,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'U': case 'U':
if(rstate == 0) { /* redo */ if(rstate == 0) { /* redo */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
xctx->pop_undo(1, 1); /* 2nd parameter: set_modify_status */ xctx->pop_undo(1, 1); /* 2nd parameter: set_modify_status */
draw(); draw();
@ -3585,7 +3588,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'v': case 'v':
if(rstate==0) { /* vertically constrained drag 20171023 */ if(rstate==0) { /* vertically constrained drag 20171023 */
if ( xctx->constr_mv == 2 ) { if ( xctx->constr_mv == 2 ) {
tcleval("set constr_mv 0" ); tcleval("set constr_mv 0" );
xctx->constr_mv = 0; xctx->constr_mv = 0;
@ -3604,11 +3607,11 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
new_line(RUBBER, xctx->mousex_snap, xctx->mousey_snap); new_line(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
} }
} }
else if(rstate == ControlMask) { /* paste from clipboard */ else if(rstate == ControlMask) { /* paste from clipboard */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
merge_file(2,".sch"); merge_file(2,".sch");
} }
else if(EQUAL_MODMASK) { /* vertical flip objects around their anchor points */ else if(EQUAL_MODMASK) { /* vertical flip objects around their anchor points */
if(xctx->ui_state & STARTMOVE) { if(xctx->ui_state & STARTMOVE) {
move_objects(ROTATE|ROTATELOCAL,0,0,0); move_objects(ROTATE|ROTATELOCAL,0,0,0);
move_objects(ROTATE|ROTATELOCAL,0,0,0); move_objects(ROTATE|ROTATELOCAL,0,0,0);
@ -3633,7 +3636,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'V': case 'V':
if(rstate == 0) { /* vertical flip */ if(rstate == 0) { /* vertical flip */
if(xctx->ui_state & STARTMOVE) { if(xctx->ui_state & STARTMOVE) {
move_objects(ROTATE,0,0,0); move_objects(ROTATE,0,0,0);
move_objects(ROTATE,0,0,0); move_objects(ROTATE,0,0,0);
@ -3655,7 +3658,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
move_objects(END,0,0,0); move_objects(END,0,0,0);
} }
} }
else if(rstate == ControlMask) { /* toggle spice/vhdl netlist */ else if(rstate == ControlMask) { /* toggle spice/vhdl netlist */
xctx->netlist_type++; xctx->netlist_type++;
if(xctx->netlist_type==6) xctx->netlist_type=1; if(xctx->netlist_type==6) xctx->netlist_type=1;
set_tcl_netlist_type(); set_tcl_netlist_type();
@ -3664,7 +3667,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'w': case 'w':
if(/* !xctx->ui_state && */ rstate==0) { /* place wire. */ if(/* !xctx->ui_state && */ rstate==0) { /* place wire. */
int prev_state = xctx->ui_state; int prev_state = xctx->ui_state;
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
@ -3681,7 +3684,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
if(prev_state & STARTWIRE) start_wire(xctx->mousex_snap, xctx->mousey_snap); if(prev_state & STARTWIRE) start_wire(xctx->mousex_snap, xctx->mousey_snap);
} }
} }
else if(rstate == ControlMask) { /* close current schematic */ else if(rstate == ControlMask) { /* close current schematic */
int save_sem; int save_sem;
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
save_sem = xctx->semaphore; save_sem = xctx->semaphore;
@ -3691,17 +3694,17 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'W': case 'W':
if(/* !xctx->ui_state && */ (rstate == 0) && !cadence_compat) { /* create wire snapping to closest instance pin (original keybind) */ if(/* !xctx->ui_state && */ (rstate == 0) && !cadence_compat) { /* create wire snapping to closest instance pin (original keybind) */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
snapped_wire(c_snap); snapped_wire(c_snap);
} }
break; break;
case 'x': case 'x':
if(rstate == 0) { /* new cad session */ if(rstate == 0) { /* new cad session */
new_xschem_process(NULL ,0); new_xschem_process(NULL ,0);
} }
else if(EQUAL_MODMASK) { /* toggle draw crosshair at mouse pos */ else if(EQUAL_MODMASK) { /* toggle draw crosshair at mouse pos */
if(tclgetboolvar("draw_crosshair")) { if(tclgetboolvar("draw_crosshair")) {
tclsetvar("draw_crosshair", "0"); tclsetvar("draw_crosshair", "0");
} else { } else {
@ -3709,10 +3712,10 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
} }
draw(); draw();
} }
else if(rstate == ControlMask) { /* cut selection into clipboard */ else if(rstate == ControlMask) { /* cut selection into clipboard */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
rebuild_selected_array(); rebuild_selected_array();
if(xctx->lastsel) { /* 20071203 check if something selected */ if(xctx->lastsel) { /* 20071203 check if something selected */
save_selection(2); save_selection(2);
delete(1/* to_push_undo */); delete(1/* to_push_undo */);
} }
@ -3720,13 +3723,13 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'X': case 'X':
if(rstate == 0) { /* highlight discrepanciens between selected instance pin and net names */ if(rstate == 0) { /* highlight discrepanciens between selected instance pin and net names */
hilight_net_pin_mismatches(); hilight_net_pin_mismatches();
} }
break; break;
case 'y': case 'y':
if(rstate == 0) { /* toggle stretching */ if(rstate == 0) { /* toggle stretching */
enable_stretch = !enable_stretch; enable_stretch = !enable_stretch;
tclsetboolvar("enable_stretch", enable_stretch); tclsetboolvar("enable_stretch", enable_stretch);
} }
@ -3737,10 +3740,10 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
dbg(1, "callback(): zoom_rectangle call\n"); dbg(1, "callback(): zoom_rectangle call\n");
zoom_rectangle(START); zoom_rectangle(START);
} }
else if(rstate==ControlMask) { /* zoom out */ else if(rstate==ControlMask) { /* zoom out */
view_unzoom(0.0); view_unzoom(0.0);
} }
else if(EQUAL_MODMASK && cadence_compat) { /* toggle snap-cursor option */ else if(EQUAL_MODMASK && cadence_compat) { /* toggle snap-cursor option */
if(tclgetboolvar("snap_cursor")) { if(tclgetboolvar("snap_cursor")) {
tclsetvar("snap_cursor", "0"); tclsetvar("snap_cursor", "0");
draw_snap_cursor(1); draw_snap_cursor(1);
@ -3755,18 +3758,22 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case 'Z': case 'Z':
if(rstate == 0) { /* zoom in */ if(rstate == 0) { /* zoom in */
view_zoom(0.0); view_zoom(0.0);
} }
break; break;
case ' ': case ' ':
if(xctx->ui_state & STARTWIRE) { /* & instead of == 20190409 */ if(xctx->ui_state & STARTMOVE) {
draw_selection(xctx->gctiled,0);
xctx->manhattan_lines++;
xctx->manhattan_lines %=3;
draw_selection(xctx->gc[SELLAYER], 0);
} else if(xctx->ui_state & STARTWIRE) { /* & instead of == 20190409 */
new_wire(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap); new_wire(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap);
xctx->manhattan_lines++; xctx->manhattan_lines++;
xctx->manhattan_lines %=3; xctx->manhattan_lines %=3;
new_wire(RUBBER, xctx->mousex_snap, xctx->mousey_snap); new_wire(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
} else if(xctx->ui_state & STARTLINE) { } else if(xctx->ui_state & STARTLINE) {
new_line(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap); new_line(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap);
xctx->manhattan_lines++; xctx->manhattan_lines++;
@ -3809,12 +3816,12 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case '$': case '$':
if( rstate == 0 ) { /* toggle pixmap saving */ if( rstate == 0 ) { /* toggle pixmap saving */
xctx->draw_pixmap =!xctx->draw_pixmap; xctx->draw_pixmap =!xctx->draw_pixmap;
if(xctx->draw_pixmap) tcleval("alert_ { enabling draw pixmap} {}"); if(xctx->draw_pixmap) tcleval("alert_ { enabling draw pixmap} {}");
else tcleval("alert_ { disabling draw pixmap} {}"); else tcleval("alert_ { disabling draw pixmap} {}");
} }
else if(state & ControlMask) { /* toggle window drawing */ else if(state & ControlMask) { /* toggle window drawing */
xctx->draw_window =!xctx->draw_window; xctx->draw_window =!xctx->draw_window;
if(xctx->draw_window) { if(xctx->draw_window) {
tcleval("alert_ { enabling draw window} {}"); tcleval("alert_ { enabling draw window} {}");
@ -3827,7 +3834,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case '=': case '=':
if(state & ControlMask) { /* toggle fill rectangles */ if(state & ControlMask) { /* toggle fill rectangles */
int x; int x;
xctx->fill_pattern++; xctx->fill_pattern++;
if(xctx->fill_pattern==2) xctx->fill_pattern=0; if(xctx->fill_pattern==2) xctx->fill_pattern=0;
@ -3855,7 +3862,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case '+': case '+':
if(state & ControlMask) { /* change line width */ if(state & ControlMask) { /* change line width */
xctx->lw = round_to_n_digits(xctx->lw + 0.5, 2); xctx->lw = round_to_n_digits(xctx->lw + 0.5, 2);
change_linewidth(xctx->lw); change_linewidth(xctx->lw);
tclsetboolvar("change_lw", 0); tclsetboolvar("change_lw", 0);
@ -3864,7 +3871,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case '-': case '-':
if(state & ControlMask) { /* change line width */ if(state & ControlMask) { /* change line width */
xctx->lw = round_to_n_digits(xctx->lw - 0.5, 2); xctx->lw = round_to_n_digits(xctx->lw - 0.5, 2);
if(xctx->lw < 0.0) xctx->lw = 0.0; if(xctx->lw < 0.0) xctx->lw = 0.0;
change_linewidth(xctx->lw); change_linewidth(xctx->lw);
@ -3874,7 +3881,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case XK_Return: case XK_Return:
if((state == 0 ) && xctx->ui_state & STARTPOLYGON) { /* close polygon */ if((state == 0 ) && xctx->ui_state & STARTPOLYGON) { /* close polygon */
new_polygon(ADD|END, xctx->mousex_snap, xctx->mousey_snap); new_polygon(ADD|END, xctx->mousex_snap, xctx->mousey_snap);
} }
break; break;
@ -3895,7 +3902,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case XK_Delete: case XK_Delete:
if(xctx->ui_state & SELECTION) { /* delete selection */ if(xctx->ui_state & SELECTION) { /* delete selection */
if(xctx->semaphore >= 2) break; if(xctx->semaphore >= 2) break;
delete(1/* to_push_undo */); delete(1/* to_push_undo */);
} }
@ -3913,7 +3920,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
tcleval("next_tab"); tcleval("next_tab");
xctx->semaphore = save; xctx->semaphore = save;
} }
else { /* left */ else { /* left */
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
break; break;
@ -3936,7 +3943,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
tcleval("prev_tab"); tcleval("prev_tab");
xctx->semaphore = save; xctx->semaphore = save;
} }
else { /* right */ else { /* right */
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
waves_callback(event, mx, my, key, button, aux, state); waves_callback(event, mx, my, key, button, aux, state);
break; break;
@ -4021,7 +4028,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case '\\': case '\\':
if(state==0) { /* fullscreen */ if(state==0) { /* fullscreen */
dbg(1, "callback(): toggle fullscreen, win_path=%s\n", win_path); dbg(1, "callback(): toggle fullscreen, win_path=%s\n", win_path);
toggle_fullscreen(win_path); toggle_fullscreen(win_path);
} }
@ -4061,17 +4068,17 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m
break; break;
case ';': case ';':
if(0 && (state & ControlMask)) { /* testmode */ if(0 && (state & ControlMask)) { /* testmode */
} }
break; break;
case '~': case '~':
if(0 && (state & ControlMask)) { /* testmode */ if(0 && (state & ControlMask)) { /* testmode */
} }
break; break;
case '|': case '|':
if(0 && (state & ControlMask)) { /* testmode */ if(0 && (state & ControlMask)) { /* testmode */
static int x = 0; static int x = 0;
if(x == 0) { if(x == 0) {
@ -4373,7 +4380,8 @@ static void handle_button_press(int event, int state, int rstate, KeySym key, in
} }
static void handle_button_release(int event, KeySym key, int state, int button, int mx, int my, static void handle_button_release(int event, KeySym key, int state, int button, int mx, int my,
int aux, double c_snap, int enable_stretch, int draw_xhair, int snap_cursor, int wire_draw_active) int aux, double c_snap, int enable_stretch, int draw_xhair,
int snap_cursor, int wire_draw_active)
{ {
char str[PATH_MAX + 100]; char str[PATH_MAX + 100];
if(waves_selected(event, key, state, button)) { if(waves_selected(event, key, state, button)) {
@ -4602,7 +4610,8 @@ int wire_draw_active = (xctx->ui_state & STARTWIRE) ||
redraw_only = 1; redraw_only = 1;
new_schematic("switch_no_tcl_ctx", win_path, "", 1); new_schematic("switch_no_tcl_ctx", win_path, "", 1);
} else { } else {
dbg(1, "callback(): switching window context: %s --> %s, semaphore=%d\n", old_win_path, win_path, xctx->semaphore); dbg(1, "callback(): switching window context: %s --> %s, semaphore=%d\n",
old_win_path, win_path, xctx->semaphore);
new_schematic("switch", win_path, "", 1); new_schematic("switch", win_path, "", 1);
} }
tclvareval("housekeeping_ctx", NULL); tclvareval("housekeeping_ctx", NULL);

View File

@ -1136,11 +1136,13 @@ void move_objects(int what, int merge, double dx, double dy)
else if(wire[n].sel == SELECTED2) wire[n].sel = SELECTED1; else if(wire[n].sel == SELECTED2) wire[n].sel = SELECTED1;
} }
#if 0
if(wire[n].sel & (SELECTED|SELECTED1)) if(wire[n].sel & (SELECTED|SELECTED1))
{ {
if(xctx->manhattan_lines & 1) xctx->manhattan_lines=2; if(xctx->manhattan_lines & 1) xctx->manhattan_lines=2;
else if(xctx->manhattan_lines & 2) xctx->manhattan_lines=1; else if(xctx->manhattan_lines & 2) xctx->manhattan_lines=1;
} }
#endif
wire[n].x1 = xctx->rx1; wire[n].x1 = xctx->rx1;
wire[n].y1 = xctx->ry1; wire[n].y1 = xctx->ry1;
if(xctx->manhattan_lines&1) if(xctx->manhattan_lines&1)