diff options
Diffstat (limited to 'ldmicro/helpdialog.cpp')
-rw-r--r-- | ldmicro/helpdialog.cpp | 308 |
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); +// } |