diff options
Diffstat (limited to 'ldmicro')
-rw-r--r-- | ldmicro/ldmicro.cpp | 140 | ||||
-rw-r--r-- | ldmicro/lib/linuxUI/linuxUI.h | 30 | ||||
-rw-r--r-- | ldmicro/maincontrols.cpp | 3 | ||||
-rw-r--r-- | ldmicro/schematic.cpp | 447 |
4 files changed, 354 insertions, 266 deletions
diff --git a/ldmicro/ldmicro.cpp b/ldmicro/ldmicro.cpp index d2b54b5..be02fd5 100644 --- a/ldmicro/ldmicro.cpp +++ b/ldmicro/ldmicro.cpp @@ -595,51 +595,109 @@ cmp: } //----------------------------------------------------------------------------- -// WndProc for MainWindow. +// WndProc functions for MainWindow. //----------------------------------------------------------------------------- -// LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -// { -// // switch (msg) { -// // case WM_ERASEBKGND: -// // break; +gboolean LD_WM_KeyDown_call(GtkWidget *widget, GdkEventKey *event, gpointer user_data) +{ + /* Handles: + * WM_KEYDOWN + */ -// // case WM_SETFOCUS: + UINT wParam = event->keyval; + + if(wParam == VK_TAB) { + // SetFocus(IoList); + gtk_window_set_focus (GTK_WINDOW(MainWindow), view); + // BlinkCursor(0, 0, 0, 0); + + } + + if(InSimulationMode) + { + switch(wParam) + { + case VK_DOWN: + if(ScrollYOffset < ScrollYOffsetMax) + ScrollYOffset++; + RefreshScrollbars(); + gtk_widget_queue_draw(DrawWindow); + break; -// // case WM_PAINT: { -// // } + case VK_UP: + if(ScrollYOffset > 0) + ScrollYOffset--; + RefreshScrollbars(); + gtk_widget_queue_draw(DrawWindow); + break; -// // case WM_KEYDOWN: { -// // } + case VK_LEFT: + ScrollXOffset -= FONT_WIDTH; + if(ScrollXOffset < 0) + ScrollXOffset = 0; + RefreshScrollbars(); + gtk_widget_queue_draw(DrawWindow); + break; -// // case WM_LBUTTONDBLCLK: { -// // } + case VK_RIGHT: + ScrollXOffset += FONT_WIDTH; + if(ScrollXOffset >= ScrollXOffsetMax) + ScrollXOffset = ScrollXOffsetMax; + RefreshScrollbars(); + gtk_widget_queue_draw(DrawWindow); + break; -// // case WM_LBUTTONDOWN: { -// // } -// // case WM_MOUSEMOVE: { -// // } -// // case WM_MOUSEWHEEL: { -// // } + case VK_RETURN: + case VK_ESCAPE: + ToggleSimulationMode(); + break; + } + } -// // case WM_SIZE: + switch(wParam) + { + case VK_UP: + if(event->state & GDK_SHIFT_MASK) + { + CHANGING_PROGRAM(PushRungUp()); + } + else + { + MoveCursorKeyboard(wParam); + } -// // case WM_NOTIFY: { + gtk_widget_queue_draw(DrawWindow); + break; -// // case WM_VSCROLL: + case VK_DOWN: + if(event->state & GDK_SHIFT_MASK) + { + CHANGING_PROGRAM(PushRungDown()); + } + else + { + MoveCursorKeyboard(wParam); + } -// // case WM_HSCROLL: + gtk_widget_queue_draw(DrawWindow); + break; -// // case WM_COMMAND: + case VK_RIGHT: + case VK_LEFT: + MoveCursorKeyboard(wParam); + gtk_widget_queue_draw(DrawWindow); + break; -// // case WM_CLOSE: -// // case WM_DESTROY: + case VK_RETURN: + CHANGING_PROGRAM(EditSelectedElement()); + gtk_widget_queue_draw(DrawWindow); + break; -// // default: -// // return DefWindowProc(hwnd, msg, wParam, lParam); -// // } + default: + break; + } -// return 1; -// } + return FALSE; +} void LD_WM_Close_call(GtkWidget *widget, GdkEvent *event, gpointer user_data) { @@ -674,17 +732,8 @@ gboolean LD_GTK_mouse_click_hook(GtkWidget *widget, GdkEvent *event, gpointer us int x = event->button.x; int y = event->button.y - 30 + gtk_adjustment_get_value(adjustment); - // if((y > (IoListTop - 9)) && (y < (IoListTop + 3))) { - // // POINT pt; - // // pt.x = x; pt.y = y; - // // ClientToScreen(MainWindow, &pt); - // MouseY = y; //pt.y; - // // MouseHookHandle = SetWindowsHookEx(WH_MOUSE_LL, - // // (HOOKPROC)MouseHook, Instance, 0); - // } if(!InSimulationMode) MoveCursorMouseClick(x, y); - // SetFocus(MainWindow); gtk_widget_queue_draw(DrawWindow); } break; @@ -769,7 +818,15 @@ gboolean LD_WM_MouseMove_call(GtkWidget *widget, GdkEvent *event, gpointer user_ // SetCursor(LoadCursor(NULL, IDC_ARROW)); // } - // break; + // int dy = MouseY - mhs->pt.y; + + // int dy = MouseY - mhs->pt.y; + + // IoListHeight += dy; + // if(IoListHeight < 50) IoListHeight = 50; + // MouseY = mhs->pt.y; + // MainWindowResized(); + return FALSE; } @@ -1188,6 +1245,7 @@ int main(int argc, char** argv) /// Keyboard and mouse hooks equivalent to MainWndProc g_signal_connect (MainWindow, "delete_event", G_CALLBACK (LD_WM_Close_call), NULL); + g_signal_connect (MainWindow, "key_press_event", G_CALLBACK (LD_WM_KeyDown_call), NULL); g_signal_connect (MainWindow, "button_press_event", G_CALLBACK (LD_GTK_mouse_click_hook), NULL); g_signal_connect (MainWindow, "scroll_event", G_CALLBACK (LD_GTK_mouse_scroll_hook), NULL); g_signal_connect (MainWindow, "motion_notify_event", G_CALLBACK (LD_WM_MouseMove_call), NULL); diff --git a/ldmicro/lib/linuxUI/linuxUI.h b/ldmicro/lib/linuxUI/linuxUI.h index b1a3d48..53040ec 100644 --- a/ldmicro/lib/linuxUI/linuxUI.h +++ b/ldmicro/lib/linuxUI/linuxUI.h @@ -60,6 +60,36 @@ /// PatBlt paint flags #define PATINVERT 0x00000100L +/// Key masks +#define VK_TAB GDK_KEY_Tab + +#define VK_DOWN 65364 +#define VK_UP 65362 +#define VK_LEFT 65361 +#define VK_RIGHT 65363 + +#define VK_NP_DOWN 65433 +#define VK_NP_UP 65431 +#define VK_NP_LEFT 65430 +#define VK_NP_RIGHT 65432 + +#define VK_RETURN GDK_KEY_Return +#define VK_ESCAPE GDK_KEY_Escape +#define VK_F5 GDK_KEY_F5 +#define VK_F1 GDK_KEY_F1 + +#define VK_OEM_PLUS GDK_KEY_plus +#define VK_OEM_MINUS GDK_KEY_minus +#define VK_OEM_PERIOD GDK_KEY_period +#define VK_OEM_COMMA GDK_KEY_comma + +#define VK_DELETE GDK_KEY_Delete +#define VK_NP_DELETE GDK_KEY_KP_Delete + +// #define VK_OEM_1 GDK_KEY_colon // GDK_KEY_semicolon +// #define VK_OEM_2 GDK_KEY_question // GDK_KEY_slash +// #define VK_OEM_5 GDK_KEY_backslash // GDK_KEY_bar + /// Window brushes #define BS_SOLID 0x00000001L #define BS_HOLLOW 0x00000002L diff --git a/ldmicro/maincontrols.cpp b/ldmicro/maincontrols.cpp index 0deaf73..14aa308 100644 --- a/ldmicro/maincontrols.cpp +++ b/ldmicro/maincontrols.cpp @@ -541,6 +541,7 @@ void MakeMainWindowControls(void) /// Creating a list view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(IoList)); gtk_tree_view_set_model (GTK_TREE_VIEW (view), GTK_TREE_MODEL (IoList)); + gtk_tree_view_set_enable_search (GTK_TREE_VIEW (view), FALSE); column = gtk_tree_view_column_new_with_attributes("Name", gtk_cell_renderer_text_new(), @@ -908,7 +909,7 @@ void ToggleSimulationMode(void) EnableMenuItem(TopMenu, Settings, MF_GRAYED); EnableMenuItem(TopMenu, InstructionMenu, MF_GRAYED); EnableMenuItem(TopMenu, Compile, MF_GRAYED); - + CheckMenuItem(SimulateMenu, SimulationModeMenu, MF_CHECKED); ClearSimulationData(); // simulation.cpp, ldmicro.h diff --git a/ldmicro/schematic.cpp b/ldmicro/schematic.cpp index a53c9c2..f47a568 100644 --- a/ldmicro/schematic.cpp +++ b/ldmicro/schematic.cpp @@ -290,108 +290,108 @@ BOOL MoveCursorTopLeft(void) //----------------------------------------------------------------------------- void MoveCursorKeyboard(int keyCode) { - // if(!Selected || Selected->selectedState == SELECTED_NONE) { - // MoveCursorTopLeft(); - // return; - // } - - // switch(keyCode) { - // case VK_LEFT: { - // if(!Selected || Selected->selectedState == SELECTED_NONE) { - // break; - // } - // if(Selected->selectedState != SELECTED_LEFT) { - // SelectElement(-1, -1, SELECTED_LEFT); - // break; - // } - // if(SelectedWhich == ELEM_COMMENT) break; - // int i, j; - // if(FindSelected(&i, &j)) { - // i--; - // while(i >= 0 && (!VALID_LEAF(DisplayMatrix[i][j]) || - // (DisplayMatrix[i][j] == Selected))) - // { - // i--; - // } - // if(i >= 0) { - // SelectElement(i, j, SELECTED_RIGHT); - // } - // } - // break; - // } - // case VK_RIGHT: { - // if(!Selected || Selected->selectedState == SELECTED_NONE) { - // break; - // } - // if(Selected->selectedState != SELECTED_RIGHT) { - // SelectElement(-1, -1, SELECTED_RIGHT); - // break; - // } - // if(SelectedWhich == ELEM_COMMENT) break; - // int i, j; - // if(FindSelected(&i, &j)) { - // i++; - // while(i < DISPLAY_MATRIX_X_SIZE && - // !VALID_LEAF(DisplayMatrix[i][j])) - // { - // i++; - // } - // if(i != DISPLAY_MATRIX_X_SIZE) { - // SelectElement(i, j, SELECTED_LEFT); - // } - // } - // break; - // } - // case VK_UP: { - // if(!Selected || Selected->selectedState == SELECTED_NONE) { - // break; - // } - // if(Selected->selectedState != SELECTED_ABOVE && - // SelectedWhich != ELEM_PLACEHOLDER) - // { - // SelectElement(-1, -1, SELECTED_ABOVE); - // break; - // } - // int i, j; - // if(FindSelected(&i, &j)) { - // j--; - // while(j >= 0 && !VALID_LEAF(DisplayMatrix[i][j])) - // j--; - // if(j >= 0) { - // SelectElement(i, j, SELECTED_BELOW); - // } - // } - // break; - // } - // case VK_DOWN: { - // if(!Selected || Selected->selectedState == SELECTED_NONE) { - // break; - // } - // if(Selected->selectedState != SELECTED_BELOW && - // SelectedWhich != ELEM_PLACEHOLDER) - // { - // SelectElement(-1, -1, SELECTED_BELOW); - // break; - // } - // int i, j; - // if(FindSelected(&i, &j)) { - // j++; - // while(j < DISPLAY_MATRIX_Y_SIZE && - // !VALID_LEAF(DisplayMatrix[i][j])) - // { - // j++; - // } - // if(j != DISPLAY_MATRIX_Y_SIZE) { - // SelectElement(i, j, SELECTED_ABOVE); - // } else if(ScrollYOffsetMax - ScrollYOffset < 3) { - // // special case: scroll the end marker into view - // ScrollYOffset = ScrollYOffsetMax; - // RefreshScrollbars(); - // } - // } - // break; - // } - // } + if(!Selected || Selected->selectedState == SELECTED_NONE) { + MoveCursorTopLeft(); + return; + } + + switch(keyCode) { + case VK_LEFT: { + if(!Selected || Selected->selectedState == SELECTED_NONE) { + break; + } + if(Selected->selectedState != SELECTED_LEFT) { + SelectElement(-1, -1, SELECTED_LEFT); + break; + } + if(SelectedWhich == ELEM_COMMENT) break; + int i, j; + if(FindSelected(&i, &j)) { + i--; + while(i >= 0 && (!VALID_LEAF(DisplayMatrix[i][j]) || + (DisplayMatrix[i][j] == Selected))) + { + i--; + } + if(i >= 0) { + SelectElement(i, j, SELECTED_RIGHT); + } + } + break; + } + case VK_RIGHT: { + if(!Selected || Selected->selectedState == SELECTED_NONE) { + break; + } + if(Selected->selectedState != SELECTED_RIGHT) { + SelectElement(-1, -1, SELECTED_RIGHT); + break; + } + if(SelectedWhich == ELEM_COMMENT) break; + int i, j; + if(FindSelected(&i, &j)) { + i++; + while(i < DISPLAY_MATRIX_X_SIZE && + !VALID_LEAF(DisplayMatrix[i][j])) + { + i++; + } + if(i != DISPLAY_MATRIX_X_SIZE) { + SelectElement(i, j, SELECTED_LEFT); + } + } + break; + } + case VK_UP: { + if(!Selected || Selected->selectedState == SELECTED_NONE) { + break; + } + if(Selected->selectedState != SELECTED_ABOVE && + SelectedWhich != ELEM_PLACEHOLDER) + { + SelectElement(-1, -1, SELECTED_ABOVE); + break; + } + int i, j; + if(FindSelected(&i, &j)) { + j--; + while(j >= 0 && !VALID_LEAF(DisplayMatrix[i][j])) + j--; + if(j >= 0) { + SelectElement(i, j, SELECTED_BELOW); + } + } + break; + } + case VK_DOWN: { + if(!Selected || Selected->selectedState == SELECTED_NONE) { + break; + } + if(Selected->selectedState != SELECTED_BELOW && + SelectedWhich != ELEM_PLACEHOLDER) + { + SelectElement(-1, -1, SELECTED_BELOW); + break; + } + int i, j; + if(FindSelected(&i, &j)) { + j++; + while(j < DISPLAY_MATRIX_Y_SIZE && + !VALID_LEAF(DisplayMatrix[i][j])) + { + j++; + } + if(j != DISPLAY_MATRIX_Y_SIZE) { + SelectElement(i, j, SELECTED_ABOVE); + } else if(ScrollYOffsetMax - ScrollYOffset < 3) { + // special case: scroll the end marker into view + ScrollYOffset = ScrollYOffsetMax; + RefreshScrollbars(); + } + } + break; + } + } } //----------------------------------------------------------------------------- @@ -401,103 +401,103 @@ void MoveCursorKeyboard(int keyCode) void EditSelectedElement(void) { - ShowLookUpTableDialog(Selected); - // ShowContactsDialog(&(Selected->d.contacts.negated),Selected->d.contacts.name); - -// if(!Selected || Selected->selectedState == SELECTED_NONE) return; - -// switch(SelectedWhich) { -// case ELEM_COMMENT: -// ShowCommentDialog(Selected->d.comment.str); -// break; - -// case ELEM_CONTACTS: -// ShowContactsDialog(&(Selected->d.contacts.negated), -// Selected->d.contacts.name); -// break; - -// case ELEM_COIL: -// ShowCoilDialog(&(Selected->d.coil.negated), -// &(Selected->d.coil.setOnly), &(Selected->d.coil.resetOnly), -// Selected->d.coil.name); -// break; - -// case ELEM_TON: -// case ELEM_TOF: -// case ELEM_RTO: -// ShowTimerDialog(SelectedWhich, &(Selected->d.timer.delay), -// Selected->d.timer.name); -// break; - -// case ELEM_CTU: -// case ELEM_CTD: -// case ELEM_CTC: -// ShowCounterDialog(SelectedWhich, &(Selected->d.counter.max), -// Selected->d.counter.name); -// break; - -// case ELEM_EQU: -// case ELEM_NEQ: -// case ELEM_GRT: -// case ELEM_GEQ: -// case ELEM_LES: -// case ELEM_LEQ: -// ShowCmpDialog(SelectedWhich, Selected->d.cmp.op1, -// Selected->d.cmp.op2); -// break; - -// case ELEM_ADD: -// case ELEM_SUB: -// case ELEM_MUL: -// case ELEM_DIV: -// ShowMathDialog(SelectedWhich, Selected->d.math.dest, -// Selected->d.math.op1, Selected->d.math.op2); -// break; - -// case ELEM_RES: -// ShowResetDialog(Selected->d.reset.name); -// break; - -// case ELEM_MOVE: -// ShowMoveDialog(Selected->d.move.dest, Selected->d.move.src); -// break; - -// case ELEM_SET_PWM: -// ShowSetPwmDialog(Selected->d.setPwm.name, -// &(Selected->d.setPwm.targetFreq)); -// break; - -// case ELEM_READ_ADC: -// ShowReadAdcDialog(Selected->d.readAdc.name+1); -// break; - -// case ELEM_UART_RECV: -// case ELEM_UART_SEND: -// ShowUartDialog(SelectedWhich, Selected->d.uart.name); -// break; - -// case ELEM_PERSIST: -// ShowPersistDialog(Selected->d.persist.var); -// break; - -// case ELEM_SHIFT_REGISTER: -// ShowShiftRegisterDialog(Selected->d.shiftRegister.name, -// &(Selected->d.shiftRegister.stages)); -// break; - -// case ELEM_FORMATTED_STRING: -// ShowFormattedStringDialog(Selected->d.fmtdStr.var, -// Selected->d.fmtdStr.string); -// break; - -// case ELEM_PIECEWISE_LINEAR: -// ShowPiecewiseLinearDialog(Selected); -// break; - -// case ELEM_LOOK_UP_TABLE: -// ShowLookUpTableDialog(Selected); -// break; -// } + + ShowContactsDialog(&(Selected->d.contacts.negated),Selected->d.contacts.name); + + if(!Selected || Selected->selectedState == SELECTED_NONE) return; + + switch(SelectedWhich) { + case ELEM_COMMENT: + // ShowCommentDialog(Selected->d.comment.str); + break; + + case ELEM_CONTACTS: + // ShowContactsDialog(&(Selected->d.contacts.negated), + // Selected->d.contacts.name); + break; + + case ELEM_COIL: + // ShowCoilDialog(&(Selected->d.coil.negated), + // &(Selected->d.coil.setOnly), &(Selected->d.coil.resetOnly), + // Selected->d.coil.name); + break; + + case ELEM_TON: + case ELEM_TOF: + case ELEM_RTO: + // ShowTimerDialog(SelectedWhich, &(Selected->d.timer.delay), + // Selected->d.timer.name); + break; + + case ELEM_CTU: + case ELEM_CTD: + case ELEM_CTC: + // ShowCounterDialog(SelectedWhich, &(Selected->d.counter.max), + // Selected->d.counter.name); + break; + + case ELEM_EQU: + case ELEM_NEQ: + case ELEM_GRT: + case ELEM_GEQ: + case ELEM_LES: + case ELEM_LEQ: + // ShowCmpDialog(SelectedWhich, Selected->d.cmp.op1, + // Selected->d.cmp.op2); + break; + + case ELEM_ADD: + case ELEM_SUB: + case ELEM_MUL: + case ELEM_DIV: + // ShowMathDialog(SelectedWhich, Selected->d.math.dest, + // Selected->d.math.op1, Selected->d.math.op2); + break; + + case ELEM_RES: + // ShowResetDialog(Selected->d.reset.name); + break; + + case ELEM_MOVE: + // ShowMoveDialog(Selected->d.move.dest, Selected->d.move.src); + break; + + case ELEM_SET_PWM: + // ShowSetPwmDialog(Selected->d.setPwm.name, + // &(Selected->d.setPwm.targetFreq)); + break; + + case ELEM_READ_ADC: + // ShowReadAdcDialog(Selected->d.readAdc.name+1); + break; + + case ELEM_UART_RECV: + case ELEM_UART_SEND: + // ShowUartDialog(SelectedWhich, Selected->d.uart.name); + break; + + case ELEM_PERSIST: + // ShowPersistDialog(Selected->d.persist.var); + break; + + case ELEM_SHIFT_REGISTER: + // ShowShiftRegisterDialog(Selected->d.shiftRegister.name, + // &(Selected->d.shiftRegister.stages)); + break; + + case ELEM_FORMATTED_STRING: + // ShowFormattedStringDialog(Selected->d.fmtdStr.var, + // Selected->d.fmtdStr.string); + break; + + case ELEM_PIECEWISE_LINEAR: + // ShowPiecewiseLinearDialog(Selected); + break; + + case ELEM_LOOK_UP_TABLE: + ShowLookUpTableDialog(Selected); + break; + } } //----------------------------------------------------------------------------- @@ -509,31 +509,30 @@ void EditSelectedElement(void) //----------------------------------------------------------------------------- void EditElementMouseDoubleclick(int x, int y) { -// x += ScrollXOffset; - -// y += FONT_HEIGHT/2; - -// int gx = (x - X_PADDING)/(POS_WIDTH*FONT_WIDTH); -// int gy = (y - Y_PADDING)/(POS_HEIGHT*FONT_HEIGHT); - -// gy += ScrollYOffset; - -// if(InSimulationMode) { -// ElemLeaf *l = DisplayMatrix[gx][gy]; -// if(l && DisplayMatrixWhich[gx][gy] == ELEM_CONTACTS) { -// char *name = l->d.contacts.name; -// if(name[0] == 'X') { -// SimulationToggleContact(name); -// } -// } else if(l && DisplayMatrixWhich[gx][gy] == ELEM_READ_ADC) { -// ShowAnalogSliderPopup(l->d.readAdc.name); -// } -// } else { -// if(DisplayMatrix[gx][gy] == Selected) { -// EditSelectedElement(); -// } -// } - EditSelectedElement(); + x += ScrollXOffset; + + y += FONT_HEIGHT/2; + + int gx = (x - X_PADDING)/(POS_WIDTH*FONT_WIDTH); + int gy = (y - Y_PADDING)/(POS_HEIGHT*FONT_HEIGHT); + + gy += ScrollYOffset; + + if(InSimulationMode) { + ElemLeaf *l = DisplayMatrix[gx][gy]; + if(l && DisplayMatrixWhich[gx][gy] == ELEM_CONTACTS) { + char *name = l->d.contacts.name; + if(name[0] == 'X') { + SimulationToggleContact(name); + } + } else if(l && DisplayMatrixWhich[gx][gy] == ELEM_READ_ADC) { + ShowAnalogSliderPopup(l->d.readAdc.name); + } + } else { + if(DisplayMatrix[gx][gy] == Selected) { + EditSelectedElement(); + } + } } //----------------------------------------------------------------------------- |