/* * Notepad * * Copyright 1998 Marcel Baur */ #include #include "windows.h" #include "commdlg.h" #include "winnls.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 "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, 0); } VOID AlertOutOfMemory(void) { int nResult; nResult = AlertIDS(IDS_OUT_OF_MEMORY, IDS_ERROR, 0); PostQuitMessage(1); } BOOL ExistFile(LPCSTR szFilename) { /* * Returns: TRUE - if "szFileName" exists * FALSE - if it does not */ WIN32_FIND_DATA32A entry; HANDLE32 handle; handle = FindFirstFile32A(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! // 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 lstrcpyn(Globals.szFileName, "\0", 1); LANGUAGE_UpdateWindowCaption(); return(TRUE); } void DoOpenFile(LPCSTR szFileName) { // Close any files and prompt to save changes if (DoCloseFile) { // Open file lstrcpyn(Globals.szFileName, szFileName, strlen(szFileName)+1); 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]; LPSTR p = szzFilter; 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'; GetWindowsDirectory(szDir, sizeof(szDir)); 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 = 0; openfilename.nFileOffset = 0; openfilename.nFileExtension = 0; openfilename.lpstrDefExt = 0; 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 szzFilter[2 * MAX_STRING_LEN + 100]; LPSTR p = szzFilter; 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'; GetWindowsDirectory(szDir, sizeof(szDir)); saveas.lStructSize = 0; 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 = 0; saveas.nFileOffset = 0; saveas.nFileExtension = 0; saveas.lpstrDefExt = 0; saveas.lCustData = 0; saveas.lpfnHook = 0; saveas.lpTemplateName = 0; if (GetSaveFileName(&saveas)) { lstrcpyn(Globals.szFileName, saveas.lpstrFile, strlen(saveas.lpstrFile)+1); LANGUAGE_UpdateWindowCaption(); DIALOG_FileSave(); } } VOID DIALOG_FilePrint(VOID) { PRINTDLG printer; printer.lStructSize = sizeof(printer); 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 = 0; printer.lCustData = 0; printer.lpfnPrintHook = 0; printer.lpfnSetupHook = 0; printer.lpPrintTemplateName = 0; printer.lpSetupTemplateName = 0; printer.hPrintTemplate = 0; printer.hSetupTemplate = 0; if (PrintDlg16(&printer)) { // do nothing }; } VOID DIALOG_FilePageSetup(VOID) { DIALOG_PageSetup(); } VOID DIALOG_FilePrinterSetup(VOID) { fprintf(stderr, "FilePrinterSetup()\n"); } 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]; lstrcpyn(szFind, Globals.szFindText, strlen(Globals.szFindText)+1); find.lStructSize = sizeof(find); find.hwndOwner = Globals.hMainWnd; find.hInstance = Globals.hInstance; find.lpstrFindWhat = szFind; find.wFindWhatLen = sizeof(szFind); find.Flags = 0; find.lCustData = 0; find.lpfnHook = 0; find.lpTemplateName = 0; if (FindText(&find)) { lstrcpyn(Globals.szFindText, szFind, strlen(szFind)+1); } 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 = 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); GetDateFormat(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; } } return FALSE; } /* Local Variables: */ /* c-file-style: "GNU" */ /* End: */