summaryrefslogtreecommitdiff
path: root/ldmicro/helpdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ldmicro/helpdialog.cpp')
-rw-r--r--ldmicro/helpdialog.cpp308
1 files changed, 308 insertions, 0 deletions
diff --git a/ldmicro/helpdialog.cpp b/ldmicro/helpdialog.cpp
new file mode 100644
index 0000000..a800f61
--- /dev/null
+++ b/ldmicro/helpdialog.cpp
@@ -0,0 +1,308 @@
+//-----------------------------------------------------------------------------
+// Copyright 2007 Jonathan Westhues
+//
+// This file is part of LDmicro.
+//
+// LDmicro is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// LDmicro is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with LDmicro. If not, see <http://www.gnu.org/licenses/>.
+//------
+//
+// Window to show our internal help. Roll my own using a rich edit control so
+// that I don't have to distribute a separate Windows Help or HTML file; the
+// manual is compiled in to the exe. Do pretty syntax highlighting style
+// colours.
+// Jonathan Westhues, Dec 2004
+//-----------------------------------------------------------------------------
+#include "linuxUI.h"
+#include <stdio.h>
+#include <stdlib.h>
+//#include <commctrl.h>
+//#include <richedit.h>
+
+#include "ldmicro.h"
+
+extern char *HelpText[];
+extern char *HelpTextDe[];
+extern char *HelpTextFr[];
+extern char *HelpTextTr[];
+
+static char *AboutText[] = {
+"",
+"ABOUT LDMICRO",
+"=============",
+"",
+"LDmicro is a ladder logic editor, simulator and compiler for 8-bit",
+"microcontrollers. It can generate native code for Atmel AVR and Microchip",
+"PIC16 CPUs from a ladder diagram.",
+"",
+"This program is free software: you can redistribute it and/or modify it",
+"under the terms of the GNU General Public License as published by the",
+"Free Software Foundation, either version 3 of the License, or (at your",
+"option) any later version.",
+"",
+"This program is distributed in the hope that it will be useful, but",
+"WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY",
+"or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License",
+"for more details.",
+"",
+"You should have received a copy of the GNU General Public License along",
+"with this program. If not, see <http://www.gnu.org/licenses/>.",
+"",
+"The source code for LDmicro is available at",
+"",
+" http://cq.cx/ladder.pl",
+"",
+"Copyright 2005-2010 Jonathan Westhues",
+"Release 2.2, built " __TIME__ " " __DATE__ ".",
+"",
+"Email: user jwesthues, at host cq.cx",
+"",
+NULL
+};
+
+static char **Text[] = {
+#if defined(LDLANG_EN) || \
+ defined(LDLANG_ES) || \
+ defined(LDLANG_IT) || \
+ defined(LDLANG_PT)
+ HelpText,
+#elif defined(LDLANG_DE)
+ HelpTextDe,
+#elif defined(LDLANG_FR)
+ HelpTextFr,
+#elif defined(LDLANG_TR)
+ HelpTextTr,
+#else
+# error "Bad language"
+#endif
+
+ // Let's always keep the about text in English.
+ AboutText
+};
+
+static HWND HelpDialog[2];
+static HWND RichEdit[2];
+
+static BOOL HelpWindowOpen[2];
+
+static int TitleHeight;
+
+#define RICH_EDIT_HEIGHT(h) \
+ ((((h) - 3 + (FONT_HEIGHT/2)) / FONT_HEIGHT) * FONT_HEIGHT)
+
+// static void SizeRichEdit(int a)
+// {
+// RECT r;
+// GetClientRect(HelpDialog[a], &r);
+
+// SetWindowPos(RichEdit[a], HWND_TOP, 6, 3, r.right - 6,
+// RICH_EDIT_HEIGHT(r.bottom), 0);
+// }
+
+// static BOOL Resizing(RECT *r, int wParam)
+// {
+// BOOL touched = FALSE;
+// if(r->right - r->left < 650) {
+// int diff = 650 - (r->right - r->left);
+// if(wParam == WMSZ_RIGHT || wParam == WMSZ_TOPRIGHT ||
+// wParam == WMSZ_BOTTOMRIGHT)
+// {
+// r->right += diff;
+// } else {
+// r->left -= diff;
+// }
+// touched = TRUE;
+// }
+
+// if(!(wParam == WMSZ_LEFT || wParam == WMSZ_RIGHT)) {
+// int h = r->bottom - r->top - TitleHeight - 5;
+// if(RICH_EDIT_HEIGHT(h) != h) {
+// int diff = h - RICH_EDIT_HEIGHT(h);
+// if(wParam == WMSZ_TOP || wParam == WMSZ_TOPRIGHT ||
+// wParam == WMSZ_TOPLEFT)
+// {
+// r->top += diff;
+// } else {
+// r->bottom -= diff;
+// }
+// touched = TRUE;
+// }
+// }
+
+// return !touched;
+// }
+
+// static void MakeControls(int a)
+// {
+// HMODULE re = LoadLibrary("RichEd20.dll");
+// if(!re) oops();
+
+// RichEdit[a] = CreateWindowEx(0, RICHEDIT_CLASS,
+// "", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | ES_READONLY |
+// ES_MULTILINE | WS_VSCROLL,
+// 0, 0, 100, 100, HelpDialog[a], NULL, Instance, NULL);
+
+// SendMessage(RichEdit[a], WM_SETFONT, (WPARAM)FixedWidthFont, TRUE);
+// SendMessage(RichEdit[a], EM_SETBKGNDCOLOR, (WPARAM)0, RGB(0, 0, 0));
+
+// SizeRichEdit(a);
+
+// int i;
+// BOOL nextSubHead = FALSE;
+// for(i = 0; Text[a][i]; i++) {
+// char *s = Text[a][i];
+
+// CHARFORMAT cf;
+// cf.cbSize = sizeof(cf);
+// cf.dwMask = CFM_BOLD | CFM_COLOR;
+// cf.dwEffects = 0;
+// if((s[0] == '=') ||
+// (Text[a][i+1] && Text[a][i+1][0] == '='))
+// {
+// cf.crTextColor = RGB(255, 255, 110);
+// } else if(s[3] == '|' && s[4] == '|') {
+// cf.crTextColor = RGB(255, 110, 255);
+// } else if(s[0] == '>' || nextSubHead) {
+// // Need to make a copy because the strings we are passed aren't
+// // mutable.
+// char copy[1024];
+// if(strlen(s) >= sizeof(copy)) oops();
+// strcpy(copy, s);
+
+// int j;
+// for(j = 1; copy[j]; j++) {
+// if(copy[j] == ' ' && copy[j-1] == ' ')
+// break;
+// }
+// BOOL justHeading = (copy[j] == '\0');
+// copy[j] = '\0';
+// cf.crTextColor = RGB(110, 255, 110);
+// SendMessage(RichEdit[a], EM_SETCHARFORMAT, SCF_SELECTION,
+// (LPARAM)&cf);
+// SendMessage(RichEdit[a], EM_REPLACESEL, (WPARAM)FALSE,
+// (LPARAM)copy);
+// SendMessage(RichEdit[a], EM_SETSEL, (WPARAM)-1, (LPARAM)-1);
+
+// // Special case if there's nothing except title on the line
+// if(!justHeading) {
+// copy[j] = ' ';
+// }
+// s += j;
+// cf.crTextColor = RGB(255, 110, 255);
+// nextSubHead = !nextSubHead;
+// } else {
+// cf.crTextColor = RGB(255, 255, 255);
+// }
+
+// SendMessage(RichEdit[a], EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
+// SendMessage(RichEdit[a], EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)s);
+// SendMessage(RichEdit[a], EM_SETSEL, (WPARAM)-1, (LPARAM)-1);
+
+// if(Text[a][i+1]) {
+// SendMessage(RichEdit[a], EM_REPLACESEL, FALSE, (LPARAM)"\r\n");
+// SendMessage(RichEdit[a], EM_SETSEL, (WPARAM)-1, (LPARAM)-1);
+// }
+// }
+
+// SendMessage(RichEdit[a], EM_SETSEL, (WPARAM)0, (LPARAM)0);
+// }
+
+//-----------------------------------------------------------------------------
+// Window proc for the help dialog.
+//-----------------------------------------------------------------------------
+// static LRESULT CALLBACK HelpProc(HWND hwnd, UINT msg, WPARAM wParam,
+// LPARAM lParam)
+// {
+// int a = (hwnd == HelpDialog[0] ? 0 : 1);
+// switch (msg) {
+// case WM_SIZING: {
+// RECT *r = (RECT *)lParam;
+// return Resizing(r, wParam);
+// break;
+// }
+// case WM_SIZE:
+// SizeRichEdit(a);
+// break;
+
+// case WM_ACTIVATE:
+// case WM_KEYDOWN:
+// SetFocus(RichEdit[a]);
+// break;
+
+// case WM_DESTROY:
+// case WM_CLOSE:
+// HelpWindowOpen[a] = FALSE;
+// // fall through
+// default:
+// return DefWindowProc(hwnd, msg, wParam, lParam);
+// }
+
+// return 1;
+// }
+
+//-----------------------------------------------------------------------------
+// Create the class for the help window.
+//-----------------------------------------------------------------------------
+// static void MakeClass(void)
+// {
+// WNDCLASSEX wc;
+// memset(&wc, 0, sizeof(wc));
+// wc.cbSize = sizeof(wc);
+
+// wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW | CS_OWNDC |
+// CS_DBLCLKS;
+// wc.lpfnWndProc = (WNDPROC)HelpProc;
+// wc.hInstance = Instance;
+// wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+// wc.lpszClassName = "LDmicroHelp";
+// wc.lpszMenuName = NULL;
+// wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+// wc.hIcon = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000),
+// IMAGE_ICON, 32, 32, 0);
+// wc.hIconSm = (HICON)LoadImage(Instance, MAKEINTRESOURCE(4000),
+// IMAGE_ICON, 16, 16, 0);
+
+// RegisterClassEx(&wc);
+// }
+
+// void ShowHelpDialog(BOOL about)
+// {
+// int a = about ? 1 : 0;
+// if(HelpWindowOpen[a]) {
+// SetForegroundWindow(HelpDialog[a]);
+// return;
+// }
+
+// MakeClass();
+
+// char *s = about ? "About LDmicro" : "LDmicro Help";
+// HelpDialog[a] = CreateWindowEx(0, "LDmicroHelp", s,
+// WS_OVERLAPPED | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX |
+// WS_SIZEBOX,
+// 100, 100, 650, 300+10*FONT_HEIGHT, NULL, NULL, Instance, NULL);
+// MakeControls(a);
+
+// ShowWindow(HelpDialog[a], TRUE);
+// SetFocus(RichEdit[a]);
+
+// HelpWindowOpen[a] = TRUE;
+
+// RECT r;
+// GetClientRect(HelpDialog[a], &r);
+// TitleHeight = 300 - r.bottom;
+
+// GetWindowRect(HelpDialog[a], &r);
+// Resizing(&r, WMSZ_TOP);
+// SetWindowPos(HelpDialog[a], HWND_TOP, r.left, r.top, r.right - r.left,
+// r.bottom - r.top, 0);
+// }