Changed imports of winspool to winspool.drv.
[wine] / programs / notepad / main.c
1 /*
2  *  Notepad
3  *
4  *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
5  *  To be distributed under the Wine License
6  */
7
8 #include <stdio.h>
9 #include "windows.h"
10
11 #ifdef LCC
12 #include "lcc.h"
13 #endif
14
15 #include "main.h"
16 #include "license.h"
17 #include "dialog.h"
18 #include "language.h"
19
20 extern BOOL DoCloseFile(void);
21 extern void DoOpenFile(LPCSTR szFileName);
22
23 NOTEPAD_GLOBALS Globals;
24
25 /***********************************************************************
26  *
27  *           NOTEPAD_MenuCommand
28  *
29  *  All handling of main menu events
30  */
31
32 int NOTEPAD_MenuCommand (WPARAM wParam)
33 {  
34    switch (wParam) {
35      case NP_FILE_NEW:          DIALOG_FileNew(); break;
36      case NP_FILE_OPEN:         DIALOG_FileOpen(); break;
37      case NP_FILE_SAVE:         DIALOG_FileSave(); break;
38      case NP_FILE_SAVEAS:       DIALOG_FileSaveAs(); break;
39      case NP_FILE_PRINT:        DIALOG_FilePrint(); break;
40      case NP_FILE_PAGESETUP:    DIALOG_FilePageSetup(); break;
41      case NP_FILE_PRINTSETUP:   DIALOG_FilePrinterSetup();break;
42      case NP_FILE_EXIT:         DIALOG_FileExit(); break;
43
44      case NP_EDIT_UNDO:         DIALOG_EditUndo(); break;
45      case NP_EDIT_CUT:          DIALOG_EditCut(); break;
46      case NP_EDIT_COPY:         DIALOG_EditCopy(); break;
47      case NP_EDIT_PASTE:        DIALOG_EditPaste(); break;
48      case NP_EDIT_DELETE:       DIALOG_EditDelete(); break;
49      case NP_EDIT_SELECTALL:    DIALOG_EditSelectAll(); break;
50      case NP_EDIT_TIMEDATE:     DIALOG_EditTimeDate();break;
51      case NP_EDIT_WRAP:         DIALOG_EditWrap(); break;
52
53      case NP_SEARCH_SEARCH:     DIALOG_Search(); break;
54      case NP_SEARCH_NEXT:       DIALOG_SearchNext(); break;
55
56      case NP_HELP_CONTENTS:     DIALOG_HelpContents(); break;
57      case NP_HELP_SEARCH:       DIALOG_HelpSearch(); break;
58      case NP_HELP_ON_HELP:      DIALOG_HelpHelp(); break;
59      case NP_HELP_LICENSE:      DIALOG_HelpLicense(); break;
60      case NP_HELP_NO_WARRANTY:  DIALOG_HelpNoWarranty(); break;
61      case NP_HELP_ABOUT_WINE:   DIALOG_HelpAboutWine(); break;
62      
63      /* Handle languages */
64      default:
65       LANGUAGE_DefaultHandle(wParam);
66    }
67    return 0;
68 }
69
70
71
72 /***********************************************************************
73  *
74  *           NOTEPAD_WndProc
75  */
76
77 LRESULT NOTEPAD_WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
78 {
79     PAINTSTRUCT ps;
80     HDC hContext;
81     HANDLE hDrop;                      /* drag & drop */
82     CHAR szFileName[MAX_STRING_LEN];
83     RECT Windowsize;
84
85     lstrcpy(szFileName, "");
86
87     switch (msg) {
88
89        case WM_CREATE:
90         break;
91
92        case WM_PAINT:
93           hContext = BeginPaint(hWnd, &ps);
94           TextOut(hContext, 1, 1, Globals.Buffer, strlen(Globals.Buffer));
95           EndPaint(hWnd, &ps);
96         break;
97
98        case WM_COMMAND:
99           NOTEPAD_MenuCommand(wParam);
100           break;
101
102        case WM_DESTROYCLIPBOARD:
103           MessageBox(Globals.hMainWnd, "Empty clipboard", "Debug", MB_ICONEXCLAMATION);
104           break;
105
106        case WM_CLOSE:
107           if (DoCloseFile()) {
108              PostQuitMessage(0);
109           }
110           break;
111
112        case WM_DESTROY:
113              PostQuitMessage (0);
114           break;
115
116        case WM_SIZE:
117           GetClientRect(Globals.hMainWnd, &Windowsize);
118           break;
119
120        case WM_DROPFILES:
121           /* User has dropped a file into main window */
122           hDrop = (HANDLE) wParam;
123           DragQueryFile(hDrop, 0, (CHAR *) &szFileName, sizeof(szFileName));
124           DragFinish(hDrop);
125           DoOpenFile(szFileName);
126           break;        
127
128        default:
129           return DefWindowProc (hWnd, msg, wParam, lParam);
130     }
131     return 0l;
132 }
133
134
135
136 /***********************************************************************
137  *
138  *           WinMain
139  */
140
141 int PASCAL WinMain (HANDLE hInstance, HANDLE prev, LPSTR cmdline, int show)
142 {
143     MSG      msg;
144     WNDCLASS class;
145     char className[] = "NPClass";  /* To make sure className >= 0x10000 */
146     char winName[]   = "Notepad";
147
148     /* Select Language */
149     LANGUAGE_Init();
150
151
152     /* Setup Globals */
153
154     Globals.lpszIniFile = "notepad.ini";
155     Globals.lpszIcoFile = "notepad.ico";
156
157     Globals.hInstance       = hInstance;
158
159 #ifndef LCC
160     Globals.hMainIcon       = ExtractIcon(Globals.hInstance, 
161                                         Globals.lpszIcoFile, 0);
162 #endif
163     if (!Globals.hMainIcon) {
164         Globals.hMainIcon = LoadIcon(0, MAKEINTRESOURCE(DEFAULTICON));
165     }
166
167     lstrcpy(Globals.szFindText,     "");
168     lstrcpy(Globals.szFileName,     "");
169     lstrcpy(Globals.szMarginTop,    "25 mm");
170     lstrcpy(Globals.szMarginBottom, "25 mm");
171     lstrcpy(Globals.szMarginLeft,   "20 mm");
172     lstrcpy(Globals.szMarginRight,  "20 mm");
173     lstrcpy(Globals.szHeader,       "&n");
174     lstrcpy(Globals.szFooter,       "Page &s");
175     lstrcpy(Globals.Buffer, "Hello World");
176
177     if (!prev){
178         class.style         = CS_HREDRAW | CS_VREDRAW;
179         class.lpfnWndProc   = NOTEPAD_WndProc;
180         class.cbClsExtra    = 0;
181         class.cbWndExtra    = 0;
182         class.hInstance     = Globals.hInstance;
183         class.hIcon         = LoadIcon (0, IDI_APPLICATION);
184         class.hCursor       = LoadCursor (0, IDC_ARROW);
185         class.hbrBackground = GetStockObject (WHITE_BRUSH);
186         class.lpszMenuName  = 0;
187         class.lpszClassName = className;
188     }
189
190     if (!RegisterClass (&class)) return FALSE;
191
192     /* Setup windows */
193
194
195     Globals.hMainWnd = CreateWindow (className, winName, 
196        WS_OVERLAPPEDWINDOW + WS_HSCROLL + WS_VSCROLL,
197        CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 
198        LoadMenu(Globals.hInstance, STRING_MENU_Xx),
199        Globals.hInstance, 0);
200
201     Globals.hFindReplaceDlg = 0;
202
203     LANGUAGE_SelectByName(Globals.lpszLanguage);
204
205     SetMenu(Globals.hMainWnd, Globals.hMainMenu);               
206                         
207     ShowWindow (Globals.hMainWnd, show);
208     UpdateWindow (Globals.hMainWnd);
209
210     /* Set up dialogs */
211
212     /* Identify Messages originating from FindReplace */
213
214     Globals.nCommdlgFindReplaceMsg = RegisterWindowMessage("commdlg_FindReplace");
215     if (Globals.nCommdlgFindReplaceMsg==0) {
216        MessageBox(Globals.hMainWnd, "Could not register commdlg_FindReplace window message", 
217                   "Error", MB_ICONEXCLAMATION);
218     }
219
220     /* now handle command line */
221     
222     while (*cmdline && (*cmdline == ' ' || *cmdline == '-')) 
223     
224     {
225         CHAR   option;
226 /*      LPCSTR topic_id; */
227
228         if (*cmdline++ == ' ') continue;
229
230         option = *cmdline;
231         if (option) cmdline++;
232         while (*cmdline && *cmdline == ' ') cmdline++;
233
234         switch(option)
235         {
236             case 'p':
237             case 'P': printf("Print file: ");
238                       /* Not yet able to print a file */
239                       break;
240         }
241     }
242
243     /* Set up Drag&Drop */
244
245     DragAcceptFiles(Globals.hMainWnd, TRUE);
246
247     MessageBox(Globals.hMainWnd, "BEWARE!\nThis is ALPHA software that may destroy your file system.\nPlease take care.", 
248     "A note from the developer...", MB_ICONEXCLAMATION);
249
250     /* now enter mesage loop     */
251     
252     while (GetMessage (&msg, 0, 0, 0)) {
253         if (IsDialogMessage(Globals.hFindReplaceDlg, &msg)!=0) {
254           /* Message belongs to FindReplace dialog */
255           /* We just let IsDialogMessage handle it */
256         } 
257           else
258         { 
259           /* Message belongs to the Notepad Main Window */
260           TranslateMessage (&msg);
261           DispatchMessage (&msg);
262         }
263     }
264     return 0;
265 }