/* * Notepad (dialog.c) * * Copyright 1998 Marcel Baur * To be distributed under the Wine License */ #include #include #include #include #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: */