Release 980301
[wine/hacks.git] / programs / clock / main.c
blob33ba6431af23dab3d5b331d90cb0fbd33434ba69
1 /*
2 * Clock
4 * Copyright 1998 Marcel Baur <mbaur@g26.ethz.ch>
6 * Clock is partially based on
7 * - Program Manager by Ulrich Schmied
8 * - rolex.c by Jim Peterson
12 #include <stdio.h>
13 #include "windows.h"
14 #include "main.h"
15 #include "license.h"
16 #include "version.h"
17 #include "language.h"
18 #include "winclock.h"
19 // #include "commdlg.h"
21 #ifdef WINELIB
22 #include "options.h"
23 #include "resource.h"
24 #include "shell.h"
25 void LIBWINE_Register_De();
26 void LIBWINE_Register_En();
27 void LIBWINE_Register_Sw();
28 #endif
30 CLOCK_GLOBALS Globals;
32 /***********************************************************************
34 * CLOCK_MenuCommand
36 * All handling of main menu events
39 int CLOCK_MenuCommand (WPARAM wParam)
41 switch (wParam) {
42 case CL_ANALOG: {
43 Globals.bAnalog = TRUE;
44 CheckMenuItem(Globals.hPropertiesMenu, CL_ANALOG, \
45 MF_BYCOMMAND | MF_CHECKED);
46 CheckMenuItem(Globals.hPropertiesMenu, CL_DIGITAL, \
47 MF_BYCOMMAND | MF_UNCHECKED);
48 break;
50 case CL_DIGITAL: {
51 Globals.bAnalog = FALSE;
52 CheckMenuItem(Globals.hPropertiesMenu, CL_ANALOG, \
53 MF_BYCOMMAND | MF_UNCHECKED);
54 CheckMenuItem(Globals.hPropertiesMenu, CL_DIGITAL, \
55 MF_BYCOMMAND | MF_CHECKED);
56 break;
58 case CL_FONT:
59 printf("FONT:");
60 /* CHOOSEFONT fontl;
61 fontl.lStructSize = 0;
62 fontl.hwndOwner = Globals.hMainWnd;
63 fontl.hDC = NULL;
64 fontl.lpLogFont = 0;
65 fontl.iPointSize = 0;
66 fontl.Flags = 0;
67 fontl.rgbColors = 0;
68 fontl.lCustData = 0;
69 fontl.lpfnHook = 0;
70 fontl.lpTemplateName = 0;
71 fontl.hInstance = Globals.hInstance;
72 fontl.lpszStyle = 0;
73 fontl.nFontType = 0;
74 fontl.nSizeMin = 0;
75 fontl.nSizeMax = 100;
77 if (ChooseFont(&font));
79 break;
80 case CL_WITHOUT_TITLE:
81 Globals.bWithoutTitle = !Globals.bWithoutTitle;
82 CheckMenuItem(Globals.hPropertiesMenu, CL_WITHOUT_TITLE, MF_BYCOMMAND | \
83 (Globals.bWithoutTitle ? MF_CHECKED : MF_UNCHECKED));
84 printf("NO TITLE:");
85 break;
86 case CL_ON_TOP:
87 Globals.bAlwaysOnTop = !Globals.bAlwaysOnTop;
88 CheckMenuItem(Globals.hPropertiesMenu, CL_ON_TOP, MF_BYCOMMAND | \
89 (Globals.bAlwaysOnTop ? MF_CHECKED : MF_UNCHECKED));
90 break;
91 case CL_SECONDS:
92 Globals.bSeconds = !Globals.bSeconds;
93 CheckMenuItem(Globals.hPropertiesMenu, CL_SECONDS, MF_BYCOMMAND | \
94 (Globals.bSeconds ? MF_CHECKED : MF_UNCHECKED));
95 break;
96 case CL_DATE:
97 Globals.bDate = !Globals.bDate;
98 CheckMenuItem(Globals.hPropertiesMenu, CL_DATE, MF_BYCOMMAND | \
99 (Globals.bDate ? MF_CHECKED : MF_UNCHECKED));
100 break;
101 case CL_INFO_LICENSE:
102 WineLicense(Globals.hMainWnd, Globals.lpszLanguage);
103 break;
104 case CL_INFO_NO_WARRANTY:
105 WineWarranty(Globals.hMainWnd, Globals.lpszLanguage);
106 break;
107 case CL_INFO_ABOUT_WINE:
108 ShellAbout(Globals.hMainWnd, "Clock", "Clock\n" WINE_RELEASE_INFO, 0);
109 break;
110 // Handle languages
111 default:
112 LANGUAGE_DefaultLanguageHandle(wParam);
114 return 0;
119 /***********************************************************************
121 * CLOCK_WndProc
124 LRESULT CLOCK_WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
126 PAINTSTRUCT ps;
127 HDC context;
129 switch (msg) {
131 case WM_CREATE:
132 printf("WM_CREATE\n");
133 break;
135 case WM_RBUTTONUP:
136 printf("WM_RBUTTONUP\n");
137 break;
139 case WM_PAINT:
140 printf("WM_PAINT\n");
141 context = BeginPaint(hWnd, &ps);
142 if(Globals.bAnalog) {
143 DrawFace(context);
144 Idle(context);
146 else {
149 EndPaint(hWnd, &ps);
150 break;
152 case WM_SIZE:
153 printf("WM_SIZE\n");
154 Globals.MaxX = LOWORD(lParam);
155 Globals.MaxY = HIWORD(lParam);
156 break;
158 case WM_COMMAND:
159 CLOCK_MenuCommand(wParam);
160 break;
162 case WM_DESTROY:
163 printf("WM_DESTROY\n");
164 PostQuitMessage (0);
165 break;
167 default:
168 return DefWindowProc (hWnd, msg, wParam, lParam);
170 return 0l;
175 /***********************************************************************
177 * WinMain
180 void DumpGlobals(void) {
182 printf("DumpGlobals()\n");
183 printf(" Globals.lpszIniFile: %s\n", Globals.lpszIniFile);
184 printf(" Globals.lpszIcoFile: %s\n", Globals.lpszIcoFile);
185 printf("Globals.lpszLanguage: %s\n", Globals.lpszLanguage);
186 printf(" Globals.hInstance: %i\n", Globals.hInstance);
187 printf(" Globals.hMainMenu: %i\n", Globals.hMainMenu);
191 int PASCAL WinMain (HANDLE hInstance, HANDLE prev, LPSTR cmdline, int show)
193 MSG msg;
194 WNDCLASS class;
195 char className[] = "CLClass"; /* To make sure className >= 0x10000 */
196 char winName[] = "Clock";
198 #if defined(WINELIB) && !defined(HAVE_WINE_CONSTRUCTOR)
199 /* Register resources */
200 LIBWINE_Register_De();
201 LIBWINE_Register_En();
202 LIBWINE_Register_Sw();
203 #endif
205 printf("WinMain()\n");
207 /* Setup Globals */
209 Globals.bAnalog = TRUE;
210 Globals.bSeconds = TRUE;
211 Globals.lpszIniFile = "clock.ini";
212 Globals.lpszIcoFile = "clock.ico";
214 /* Select Language */
215 LANGUAGE_InitLanguage();
217 Globals.hInstance = hInstance;
218 Globals.hMainIcon = ExtractIcon(Globals.hInstance,
219 Globals.lpszIcoFile, 0);
220 if (!Globals.hMainIcon) Globals.hMainIcon =
221 LoadIcon(0, MAKEINTRESOURCE(DEFAULTICON));
223 DumpGlobals();
225 if (!prev){
226 class.style = CS_HREDRAW | CS_VREDRAW;
227 class.lpfnWndProc = CLOCK_WndProc;
228 class.cbClsExtra = 0;
229 class.cbWndExtra = 0;
230 class.hInstance = Globals.hInstance;
231 class.hIcon = LoadIcon (0, IDI_APPLICATION);
232 class.hCursor = LoadCursor (0, IDC_ARROW);
233 class.hbrBackground = GetStockObject (GRAY_BRUSH);
234 class.lpszMenuName = "\0";
235 class.lpszClassName = (SEGPTR)className;
237 if (!RegisterClass (&class))
238 return FALSE;
240 Globals.hMainWnd = CreateWindow (className, winName, WS_OVERLAPPEDWINDOW,
241 CW_USEDEFAULT, 0, CW_USEDEFAULT, Globals.MaxX, Globals.MaxY,
242 LoadMenu(Globals.hInstance, STRING_MENU_Xx),
243 Globals.hInstance, 0);
245 LANGUAGE_SelectLanguageByName(Globals.lpszLanguage);
246 SetMenu(Globals.hMainWnd, Globals.hMainMenu);
247 ShowWindow (Globals.hMainWnd, show);
248 UpdateWindow (Globals.hMainWnd);
250 while (TRUE) {
251 Sleep(1);
252 if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
253 if (msg.message == WM_QUIT) return msg.wParam;
254 TranslateMessage(&msg);
255 DispatchMessage(&msg);
256 Idle(NULL);
258 else Idle(NULL);
261 // We will never reach the following statement !
262 return 0;