| /* |
| * Notepad (dialog.c) |
| * |
| * Copyright 1998 Marcel Baur <mbaur@g26.ethz.ch> |
| * To be distributed under the Wine License |
| */ |
| |
| #include <stdio.h> |
| #include <windows.h> |
| #include <commdlg.h> |
| #include <winerror.h> |
| |
| #ifdef WINELIB |
| #include "shell.h" |
| #include "options.h" |
| #endif |
| |
| #include "main.h" |
| #include "license.h" |
| #include "language.h" |
| #include "dialog.h" |
| |
| #include "version.h" |
| #include "winnls.h" |
| #include "debug.h" |
| |
| |
| static LRESULT DIALOG_PAGESETUP_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); |
| |
| |
| int AlertIDS(UINT ids_message, UINT ids_caption, WORD type) { |
| /* |
| * Given some ids strings, this acts as a language-aware wrapper for |
| * "MessageBox" |
| */ |
| CHAR szMessage[MAX_STRING_LEN]; |
| CHAR szCaption[MAX_STRING_LEN]; |
| |
| LoadString(Globals.hInstance, ids_message, szMessage, sizeof(szMessage)); |
| LoadString(Globals.hInstance, ids_caption, szCaption, sizeof(szCaption)); |
| |
| return (MessageBox(Globals.hMainWnd, szMessage, szCaption, type)); |
| } |
| |
| void AlertFileNotFound(LPCSTR szFilename) { |
| |
| int nResult; |
| |
| nResult = AlertIDS(IDS_NOTFOUND, IDS_ERROR, MB_ICONEXCLAMATION); |
| } |
| |
| |
| VOID AlertOutOfMemory(void) { |
| |
| int nResult; |
| |
| nResult = AlertIDS(IDS_OUT_OF_MEMORY, IDS_ERROR, MB_ICONEXCLAMATION); |
| PostQuitMessage(1); |
| } |
| |
| |
| BOOL ExistFile(LPCSTR szFilename) { |
| /* |
| * Returns: TRUE - if "szFileName" exists |
| * FALSE - if it does not |
| */ |
| WIN32_FIND_DATA entry; |
| HANDLE32 handle; |
| |
| handle = FindFirstFile(szFilename, &entry); |
| |
| return (handle!=INVALID_HANDLE_VALUE32); |
| } |
| |
| VOID DoSaveFile(VOID) { |
| // Really Save the file |
| |
| // ... (Globals.szFileName); |
| } |
| |
| |
| BOOL DoCloseFile(void) { |
| // Return value: TRUE - User agreed to close (both save/don't save) |
| // FALSE - User cancelled close by selecting "Cancel" |
| |
| CHAR szMessage[MAX_STRING_LEN]; |
| CHAR szCaption[MAX_STRING_LEN]; |
| |
| INT nResult; |
| |
| if (strlen(Globals.szFileName)>0) { |
| |
| // prompt user to save changes |
| |
| // FIXME: The following resources are not yet in the .rc files |
| // szMessage, szCaption show up random values. Please keep these lines! |
| |
| strcpy(szMessage, "Save changes ?"); |
| strcpy(szCaption, "Save changes"); |
| |
| // LoadString(Globals.hInstance, ids_savechanges, szMessage, sizeof(szMessage)); |
| // LoadString(Globals.hInstance, ids_savetitle, szCaption, sizeof(szCaption)); |
| |
| nResult = MessageBox(Globals.hMainWnd, szMessage, szCaption, MB_YESNOCANCEL); |
| |
| switch (nResult) { |
| case IDYES: DoSaveFile(); |
| break; |
| |
| case IDNO: break; |
| |
| case IDCANCEL: return(FALSE); |
| break; |
| |
| default: return(FALSE); |
| break; |
| } |
| |
| |
| } |
| |
| // Forget file name |
| lstrcpy(Globals.szFileName, ""); |
| LANGUAGE_UpdateWindowCaption(); |
| |
| return(TRUE); |
| |
| } |
| |
| |
| void DoOpenFile(LPCSTR szFileName) { |
| |
| // Close any files and prompt to save changes |
| if (DoCloseFile) { |
| |
| // Open file |
| lstrcpy(Globals.szFileName, szFileName); |
| LANGUAGE_UpdateWindowCaption(); |
| |
| } |
| } |
| |
| |
| VOID DIALOG_FileNew(VOID) |
| { |
| // Close any files and promt to save changes |
| if (DoCloseFile()) { |
| |
| // do nothing yet |
| |
| } |
| } |
| |
| |
| VOID DIALOG_FileOpen(VOID) |
| { |
| |
| OPENFILENAME openfilename; |
| CHAR szPath[MAX_PATHNAME_LEN]; |
| CHAR szDir[MAX_PATHNAME_LEN]; |
| CHAR szzFilter[2 * MAX_STRING_LEN + 100]; |
| CHAR szDefaultExt[4]; |
| LPSTR p = szzFilter; |
| |
| lstrcpy(szDefaultExt, "txt"); |
| |
| LoadString(Globals.hInstance, IDS_TEXT_FILES_TXT, p, MAX_STRING_LEN); |
| p += strlen(p) + 1; |
| lstrcpy(p, "*.txt"); |
| p += strlen(p) + 1; |
| LoadString(Globals.hInstance, IDS_ALL_FILES, p, MAX_STRING_LEN); |
| p += strlen(p) + 1; |
| lstrcpy(p, "*.*"); |
| p += strlen(p) + 1; |
| *p = '\0'; |
| |
| GetCurrentDirectory(sizeof(szDir), szDir); |
| lstrcpy(szPath,"*.txt"); |
| |
| openfilename.lStructSize = sizeof(OPENFILENAME); |
| openfilename.hwndOwner = Globals.hMainWnd; |
| openfilename.hInstance = Globals.hInstance; |
| openfilename.lpstrFilter = szzFilter; |
| openfilename.lpstrCustomFilter = 0; |
| openfilename.nMaxCustFilter = 0; |
| openfilename.nFilterIndex = 0; |
| openfilename.lpstrFile = szPath; |
| openfilename.nMaxFile = sizeof(szPath); |
| openfilename.lpstrFileTitle = 0; |
| openfilename.nMaxFileTitle = 0; |
| openfilename.lpstrInitialDir = szDir; |
| openfilename.lpstrTitle = 0; |
| openfilename.Flags = OFN_FILEMUSTEXIST + OFN_PATHMUSTEXIST; |
| openfilename.nFileOffset = 0; |
| openfilename.nFileExtension = 0; |
| openfilename.lpstrDefExt = szDefaultExt; |
| openfilename.lCustData = 0; |
| openfilename.lpfnHook = 0; |
| openfilename.lpTemplateName = 0; |
| |
| if (GetOpenFileName(&openfilename)) { |
| |
| if (ExistFile(openfilename.lpstrFile)) |
| DoOpenFile(openfilename.lpstrFile); |
| else |
| AlertFileNotFound(openfilename.lpstrFile); |
| |
| } |
| } |
| |
| VOID DIALOG_FileSave(VOID) |
| { |
| fprintf(stderr, "FileSave()\n"); |
| } |
| |
| VOID DIALOG_FileSaveAs(VOID) |
| { |
| OPENFILENAME saveas; |
| CHAR szPath[MAX_PATHNAME_LEN]; |
| CHAR szDir[MAX_PATHNAME_LEN]; |
| CHAR szDefaultExt[4]; |
| CHAR szzFilter[2 * MAX_STRING_LEN + 100]; |
| |
| LPSTR p = szzFilter; |
| |
| lstrcpy(szDefaultExt, "txt"); |
| |
| LoadString(Globals.hInstance, IDS_TEXT_FILES_TXT, p, MAX_STRING_LEN); |
| p += strlen(p) + 1; |
| lstrcpy(p, "*.txt"); |
| p += strlen(p) + 1; |
| LoadString(Globals.hInstance, IDS_ALL_FILES, p, MAX_STRING_LEN); |
| p += strlen(p) + 1; |
| lstrcpy(p, "*.*"); |
| p += strlen(p) + 1; |
| *p = '\0'; |
| |
| lstrcpy(szPath,"*.*"); |
| |
| GetCurrentDirectory(sizeof(szDir), szDir); |
| |
| saveas.lStructSize = sizeof(OPENFILENAME); |
| saveas.hwndOwner = Globals.hMainWnd; |
| saveas.hInstance = Globals.hInstance; |
| saveas.lpstrFilter = szzFilter; |
| saveas.lpstrCustomFilter = 0; |
| saveas.nMaxCustFilter = 0; |
| saveas.nFilterIndex = 0; |
| saveas.lpstrFile = szPath; |
| saveas.nMaxFile = sizeof(szPath); |
| saveas.lpstrFileTitle = 0; |
| saveas.nMaxFileTitle = 0; |
| saveas.lpstrInitialDir = szDir; |
| saveas.lpstrTitle = 0; |
| saveas.Flags = OFN_PATHMUSTEXIST + OFN_OVERWRITEPROMPT + OFN_HIDEREADONLY; |
| saveas.nFileOffset = 0; |
| saveas.nFileExtension = 0; |
| saveas.lpstrDefExt = szDefaultExt; |
| saveas.lCustData = 0; |
| saveas.lpfnHook = 0; |
| saveas.lpTemplateName = 0; |
| |
| if (GetSaveFileName(&saveas)) { |
| lstrcpy(Globals.szFileName, saveas.lpstrFile); |
| LANGUAGE_UpdateWindowCaption(); |
| DIALOG_FileSave(); |
| } |
| } |
| |
| VOID DIALOG_FilePrint(VOID) |
| { |
| PRINTDLG printer; |
| printer.lStructSize = sizeof(PRINTDLG); |
| printer.hwndOwner = Globals.hMainWnd; |
| printer.hInstance = Globals.hInstance; |
| printer.hDevMode = 0; |
| printer.hDevNames = 0; |
| printer.hDC = 0; |
| printer.Flags = 0; |
| printer.nFromPage = 0; |
| printer.nToPage = 0; |
| printer.nMinPage = 0; |
| printer.nMaxPage = 0; |
| printer.nCopies = 1; |
| printer.lCustData = 0; |
| printer.lpfnPrintHook = 0; |
| printer.lpfnSetupHook = 0; |
| printer.lpPrintTemplateName = 0; |
| printer.lpSetupTemplateName = 0; |
| printer.hPrintTemplate = 0; |
| printer.hSetupTemplate = 0; |
| |
| if (PrintDlg(&printer)) { |
| // do nothing |
| }; |
| } |
| |
| VOID DIALOG_FilePageSetup(VOID) |
| { |
| DIALOG_PageSetup(); |
| } |
| |
| VOID DIALOG_FilePrinterSetup(VOID) |
| { |
| PRINTDLG printer; |
| printer.lStructSize = sizeof(PRINTDLG); |
| printer.hwndOwner = Globals.hMainWnd; |
| printer.hInstance = Globals.hInstance; |
| printer.hDevMode = 0; |
| printer.hDevNames = 0; |
| printer.hDC = 0; |
| printer.Flags = PD_PRINTSETUP; |
| printer.nFromPage = 0; |
| printer.nToPage = 0; |
| printer.nMinPage = 0; |
| printer.nMaxPage = 0; |
| printer.nCopies = 1; |
| printer.lCustData = 0; |
| printer.lpfnPrintHook = 0; |
| printer.lpfnSetupHook = 0; |
| printer.lpPrintTemplateName = 0; |
| printer.lpSetupTemplateName = 0; |
| printer.hPrintTemplate = 0; |
| printer.hSetupTemplate = 0; |
| |
| if (PrintDlg(&printer)) { |
| // do nothing |
| }; |
| |
| } |
| |
| VOID DIALOG_FileExit(VOID) |
| { |
| if (DoCloseFile()) { |
| PostQuitMessage(0); |
| } |
| } |
| |
| VOID DIALOG_EditUndo(VOID) |
| { |
| fprintf(stderr, "EditUndo()\n"); |
| } |
| |
| VOID DIALOG_EditCut(VOID) |
| { |
| fprintf(stderr, "EditCut()\n"); |
| } |
| |
| VOID DIALOG_EditCopy(VOID) |
| { |
| fprintf(stderr, "EditCopy()\n"); |
| } |
| |
| VOID DIALOG_EditPaste(VOID) |
| { |
| fprintf(stderr, "EditPaste()\n"); |
| } |
| |
| VOID DIALOG_EditDelete(VOID) |
| { |
| fprintf(stderr, "EditDelete()\n"); |
| } |
| |
| VOID DIALOG_EditSelectAll(VOID) |
| { |
| fprintf(stderr, "EditSelectAll()\n"); |
| } |
| |
| VOID DIALOG_EditTimeDate(VOID) |
| { |
| DIALOG_TimeDate(); |
| } |
| |
| VOID DIALOG_EditWrap(VOID) |
| { |
| Globals.bWrapLongLines = !Globals.bWrapLongLines; |
| CheckMenuItem(Globals.hEditMenu, NP_EDIT_WRAP, MF_BYCOMMAND | |
| (Globals.bWrapLongLines ? MF_CHECKED : MF_UNCHECKED)); |
| } |
| |
| VOID DIALOG_Search(VOID) |
| { |
| FINDREPLACE find; |
| CHAR szFind[MAX_PATHNAME_LEN+10]; |
| CHAR szReplace[MAX_PATHNAME_LEN+10]; |
| |
| HWND hResult; |
| |
| lstrcpy(szReplace, ""); |
| lstrcpy(szFind, Globals.szFindText); |
| |
| find.lStructSize = sizeof(FINDREPLACE); |
| find.hwndOwner = Globals.hMainWnd; |
| find.hInstance = 0; |
| find.lpstrFindWhat = szFind; |
| find.wFindWhatLen = MAX_PATHNAME_LEN; |
| find.lpstrReplaceWith = szReplace; |
| find.wReplaceWithLen = MAX_PATHNAME_LEN; |
| find.Flags = FR_DOWN; |
| find.lCustData = 0; |
| find.lpfnHook = 0; |
| find.lpTemplateName = 0; |
| |
| hResult = FindText(&find); |
| |
| if (hResult) { |
| lstrcpy(Globals.szFindText, szFind); |
| } |
| else |
| { |
| // do nothing yet |
| }; |
| |
| } |
| |
| VOID DIALOG_SearchNext(VOID) |
| { |
| fprintf(stderr, "SearchNext()\n"); |
| } |
| |
| VOID DIALOG_HelpContents(VOID) |
| { |
| WinHelp(Globals.hMainWnd, HELPFILE, HELP_INDEX, 0); |
| } |
| |
| VOID DIALOG_HelpSearch(VOID) |
| { |
| fprintf(stderr, "HelpSearch()\n"); |
| } |
| |
| VOID DIALOG_HelpHelp(VOID) |
| { |
| WinHelp(Globals.hMainWnd, HELPFILE, HELP_HELPONHELP, 0); |
| } |
| |
| VOID DIALOG_HelpLicense(VOID) |
| { |
| WineLicense(Globals.hMainWnd, Globals.lpszLanguage); |
| } |
| |
| VOID DIALOG_HelpNoWarranty(VOID) |
| { |
| WineWarranty(Globals.hMainWnd, Globals.lpszLanguage); |
| } |
| |
| VOID DIALOG_HelpAboutWine(VOID) |
| { |
| ShellAbout(Globals.hMainWnd, "Notepad", "Notepad\n" WINE_RELEASE_INFO, 0); |
| } |
| |
| /*********************************************************************** |
| * |
| * DIALOG_PageSetup |
| */ |
| |
| VOID DIALOG_PageSetup(VOID) |
| { |
| WNDPROC lpfnDlg; |
| |
| lpfnDlg = MakeProcInstance(DIALOG_PAGESETUP_DlgProc, Globals.hInstance); |
| DialogBox(Globals.hInstance, STRING_PAGESETUP_Xx, Globals.hMainWnd, lpfnDlg); |
| FreeProcInstance(lpfnDlg); |
| } |
| |
| /*********************************************************************** |
| * |
| * DIALOG_TimeDate |
| */ |
| |
| VOID DIALOG_TimeDate(VOID) |
| { |
| // uses [KERNEL32.310] (ole2nls.c) |
| |
| SYSTEMTIME st; |
| LPSYSTEMTIME lpst = &st; |
| CHAR szDate[MAX_STRING_LEN]; |
| LPSTR date = szDate; |
| |
| GetLocalTime(&st); |
| GetDateFormat(LOCALE_USER_DEFAULT, LOCALE_SLONGDATE, lpst, NULL, date, MAX_STRING_LEN); |
| |
| printf("Date: %s\n", date); |
| |
| GetTimeFormat(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, lpst, NULL, date, MAX_STRING_LEN); |
| |
| printf("Time: %s\n", date); |
| |
| } |
| |
| /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
| * |
| * DIALOG_PAGESETUP_DlgProc |
| */ |
| |
| static LRESULT DIALOG_PAGESETUP_DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) |
| { |
| switch (msg) |
| { |
| case WM_COMMAND: |
| switch (wParam) |
| { |
| case IDOK: |
| EndDialog(hDlg, IDOK); |
| return TRUE; |
| |
| case IDCANCEL: |
| EndDialog(hDlg, IDCANCEL); |
| return TRUE; |
| } |
| break; |
| |
| case WM_INITDIALOG: |
| SetDlgItemText(hDlg, NP_PAGESETUP_HEAD, Globals.szHeader); |
| SetDlgItemText(hDlg, NP_PAGESETUP_TAIL, Globals.szFooter); |
| SetDlgItemText(hDlg, NP_PAGESETUP_TOP, Globals.szMarginTop); |
| SetDlgItemText(hDlg, NP_PAGESETUP_BOTTOM, Globals.szMarginBottom); |
| SetDlgItemText(hDlg, NP_PAGESETUP_LEFT, Globals.szMarginLeft); |
| SetDlgItemText(hDlg, NP_PAGESETUP_RIGHT, Globals.szMarginRight); |
| break; |
| |
| case WM_CLOSE: |
| break; |
| } |
| return FALSE; |
| } |
| |
| /* Local Variables: */ |
| /* c-file-style: "GNU" */ |
| /* End: */ |