Do not free the not owned error string.
[wine.git] / programs / clock / main.c
blobfc4c3014ab069d9ca22337e98ff2a0377bf3e847
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 CLOCK_GLOBALS Globals;
23 /***********************************************************************
25 * CLOCK_MenuCommand
27 * All handling of main menu events
30 int CLOCK_MenuCommand (WPARAM wParam)
32 switch (wParam) {
33 case CL_ANALOG: {
34 Globals.bAnalog = TRUE;
35 LANGUAGE_UpdateMenuCheckmarks();
36 SendMessage(Globals.hMainWnd, WM_PAINT, 0, 0);
37 break;
39 case CL_DIGITAL: {
40 Globals.bAnalog = FALSE;
41 LANGUAGE_UpdateMenuCheckmarks();
42 SendMessage(Globals.hMainWnd, WM_PAINT, 0, 0);
43 break;
45 case CL_FONT: {
46 MAIN_FileChooseFont();
47 break;
49 case CL_WITHOUT_TITLE: {
50 Globals.bWithoutTitle = !Globals.bWithoutTitle;
51 LANGUAGE_UpdateWindowCaption();
52 LANGUAGE_UpdateMenuCheckmarks();
53 break;
55 case CL_ON_TOP: {
56 Globals.bAlwaysOnTop = !Globals.bAlwaysOnTop;
57 LANGUAGE_UpdateMenuCheckmarks();
58 break;
60 case CL_SECONDS: {
61 Globals.bSeconds = !Globals.bSeconds;
62 LANGUAGE_UpdateMenuCheckmarks();
63 SendMessage(Globals.hMainWnd, WM_PAINT, 0, 0);
64 break;
66 case CL_DATE: {
67 Globals.bDate = !Globals.bDate;
68 LANGUAGE_UpdateMenuCheckmarks();
69 LANGUAGE_UpdateWindowCaption();
70 break;
72 case CL_INFO_LICENSE: {
73 WineLicense(Globals.hMainWnd);
74 break;
76 case CL_INFO_NO_WARRANTY: {
77 WineWarranty(Globals.hMainWnd);
78 break;
80 case CL_INFO_ABOUT_WINE: {
81 ShellAbout(Globals.hMainWnd, "Clock", "Clock\n" WINE_RELEASE_INFO, 0);
82 break;
84 /* Handle languages */
85 default:
86 LANGUAGE_DefaultHandle(wParam);
88 return 0;
91 VOID MAIN_FileChooseFont(VOID) {
93 CHOOSEFONT font;
94 LOGFONT lf;
96 font.lStructSize = sizeof(font);
97 font.hwndOwner = Globals.hMainWnd;
98 font.hDC = NULL;
99 font.lpLogFont = &lf;
100 font.iPointSize = 0;
101 font.Flags = 0;
102 font.rgbColors = 0;
103 font.lCustData = 0;
104 font.lpfnHook = 0;
105 font.lpTemplateName = 0;
106 font.hInstance = Globals.hInstance;
107 /* font.lpszStyle = LF_FACESIZE; */
108 font.nFontType = 0;
109 font.nSizeMin = 0;
110 font.nSizeMax = 144;
112 if (ChooseFont(&font)) {
113 /* do nothing yet */
118 /***********************************************************************
120 * CLOCK_WndProc
123 LRESULT WINAPI CLOCK_WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
125 PAINTSTRUCT ps;
126 HDC context;
128 switch (msg) {
130 case WM_CREATE: {
131 printf("WM_CREATE\n");
132 break;
135 case WM_RBUTTONUP: {
136 printf("WM_RBUTTONUP\n");
137 Globals.bWithoutTitle = !Globals.bWithoutTitle;
138 LANGUAGE_UpdateMenuCheckmarks();
139 LANGUAGE_UpdateWindowCaption();
140 UpdateWindow (Globals.hMainWnd);
141 break;
144 case WM_PAINT: {
145 printf("WM_PAINT\n");
146 context = BeginPaint(hWnd, &ps);
147 if(Globals.bAnalog) {
148 DrawFace(context);
149 Idle(context);
151 else
153 /* do nothing */
155 EndPaint(hWnd, &ps);
156 break;
159 case WM_SIZE: {
160 printf("WM_SIZE\n");
161 Globals.MaxX = LOWORD(lParam);
162 Globals.MaxY = HIWORD(lParam);
163 OldHour.DontRedraw = TRUE;
164 OldMinute.DontRedraw = TRUE;
165 OldSecond.DontRedraw = TRUE;
166 break;
169 case WM_COMMAND: {
170 CLOCK_MenuCommand(wParam);
171 break;
174 case WM_DESTROY: {
175 printf("WM_DESTROY\n");
176 PostQuitMessage (0);
177 break;
180 default:
181 return DefWindowProc (hWnd, msg, wParam, lParam);
183 return 0l;
188 /***********************************************************************
190 * WinMain
193 int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show)
195 MSG msg;
196 WNDCLASS class;
198 char szClassName[] = "CLClass"; /* To make sure className >= 0x10000 */
199 char szWinName[] = "Clock";
201 /* Setup Globals */
202 Globals.bAnalog = TRUE;
203 Globals.bSeconds = TRUE;
204 Globals.lpszIniFile = "clock.ini";
205 Globals.lpszIcoFile = "clock.ico";
207 Globals.hInstance = hInstance;
208 Globals.hMainIcon = ExtractIcon(Globals.hInstance,
209 Globals.lpszIcoFile, 0);
211 if (!Globals.hMainIcon) Globals.hMainIcon =
212 LoadIcon(0, MAKEINTRESOURCE(DEFAULTICON));
214 if (!prev){
215 class.style = CS_HREDRAW | CS_VREDRAW;
216 class.lpfnWndProc = CLOCK_WndProc;
217 class.cbClsExtra = 0;
218 class.cbWndExtra = 0;
219 class.hInstance = Globals.hInstance;
220 class.hIcon = LoadIcon (0, IDI_APPLICATION);
221 class.hCursor = LoadCursor (0, IDC_ARROW);
222 class.hbrBackground = GetStockObject (GRAY_BRUSH);
223 class.lpszMenuName = 0;
224 class.lpszClassName = szClassName;
227 if (!RegisterClass (&class)) return FALSE;
229 Globals.hMainWnd = CreateWindow (szClassName, szWinName, WS_OVERLAPPEDWINDOW,
230 CW_USEDEFAULT, CW_USEDEFAULT, Globals.MaxX, Globals.MaxY, 0,
231 LoadMenu(Globals.hInstance, STRING_MENU_Xx), Globals.hInstance, 0);
233 LANGUAGE_SelectByName("En");
234 SetMenu(Globals.hMainWnd, Globals.hMainMenu);
236 LANGUAGE_UpdateMenuCheckmarks();
238 ShowWindow (Globals.hMainWnd, show);
239 UpdateWindow (Globals.hMainWnd);
241 while (TRUE) {
242 Sleep(1);
243 if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
244 if (msg.message == WM_QUIT) return msg.wParam;
245 TranslateMessage(&msg);
246 DispatchMessage(&msg);
247 Idle(NULL);
249 else Idle(NULL);
252 /* We will never reach the following statement ! */
253 return 0;