fixed many bugs, removed linked list
[wmaker-crm.git] / WPrefs.app / Text.c
blob2e61669bf6a0d236a49c6c179a9615fa563d4f22
1 /* Text.c- text/font settings
2 *
3 * WPrefs - Window Maker Preferences Program
4 *
5 * Copyright (c) 1998 Alfredo K. Kojima
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
20 * USA.
24 #include "WPrefs.h"
26 typedef struct _Panel {
27 WMFrame *frame;
28 char *sectionName;
30 char *description;
32 CallbackRec callbacks;
34 WMWindow *win;
36 WMPopUpButton *secP;
37 WMButton *setB;
39 WMTextField *nameT;
41 WMLabel *sampleL;
43 WMFrame *alignF;
44 WMButton *leftB;
45 WMButton *centerB;
46 WMButton *rightB;
49 /**/
50 WMFont *windowF;
51 char *windowFont;
52 WMFont *menuF;
53 char *menuFont;
54 WMFont *itemF;
55 char *itemFont;
56 WMFont *clipF;
57 char *clipFont;
58 WMFont *iconF;
59 char *iconFont;
60 WMFont *geoF;
61 char *geoFont;
62 } _Panel;
66 #define ICON_FILE "fonts"
71 static void
72 changePage(WMWidget *w, void *data)
74 _Panel *panel = (_Panel*)data;
75 int sect;
77 sect = WMGetPopUpButtonSelectedItem(w);
79 if (sect == 0) {
80 WMMapWidget(panel->alignF);
81 } else {
82 WMUnmapWidget(panel->alignF);
85 switch (sect) {
86 case 0:
87 WMSetTextFieldText(panel->nameT, panel->windowFont);
88 WMSetLabelFont(panel->sampleL, panel->windowF);
89 break;
90 case 1:
91 WMSetTextFieldText(panel->nameT, panel->menuFont);
92 WMSetLabelFont(panel->sampleL, panel->menuF);
93 break;
94 case 2:
95 WMSetTextFieldText(panel->nameT, panel->itemFont);
96 WMSetLabelFont(panel->sampleL, panel->itemF);
97 break;
98 case 3:
99 WMSetTextFieldText(panel->nameT, panel->iconFont);
100 WMSetLabelFont(panel->sampleL, panel->iconF);
101 break;
102 case 4:
103 WMSetTextFieldText(panel->nameT, panel->clipFont);
104 WMSetLabelFont(panel->sampleL, panel->clipF);
105 break;
106 case 5:
107 WMSetTextFieldText(panel->nameT, panel->geoFont);
108 WMSetLabelFont(panel->sampleL, panel->geoF);
109 break;
114 static void
115 showData(_Panel *panel)
117 WMScreen *scr = WMWidgetScreen(panel->win);
118 char *str;
120 str = GetStringForKey("WindowTitleFont");
121 if (!str)
122 str = "-*-helvetica-bold-r-normal-*-12-*";
123 panel->windowF = WMCreateFont(scr, str);
124 panel->windowFont = wstrdup(str);
126 str = GetStringForKey("MenuTitleFont");
127 if (!str)
128 str = "-*-helvetica-bold-r-normal-*-12-*";
129 panel->menuF = WMCreateFont(scr, str);
130 panel->menuFont = wstrdup(str);
132 str = GetStringForKey("MenuTextFont");
133 if (!str)
134 str = "-*-helvetica-medium-r-normal-*-12-*";
135 panel->itemF = WMCreateFont(scr, str);
136 panel->itemFont = wstrdup(str);
138 str = GetStringForKey("IconTitleFont");
139 if (!str)
140 str = "-*-helvetica-medium-r-normal-*-8-*";
141 panel->iconF = WMCreateFont(scr, str);
142 panel->iconFont = wstrdup(str);
144 str = GetStringForKey("ClipTitleFont");
145 if (!str)
146 str = "-*-helvetica-medium-r-normal-*-10-*";
147 panel->clipF = WMCreateFont(scr, str);
148 panel->clipFont = wstrdup(str);
150 str = GetStringForKey("DisplayFont");
151 if (!str)
152 str = "-*-helvetica-medium-r-normal-*-12-*";
153 panel->geoF = WMCreateFont(scr, str);
154 panel->geoFont = wstrdup(str);
156 str = GetStringForKey("TitleJustify");
157 if (strcasecmp(str,"left")==0)
158 WMPerformButtonClick(panel->leftB);
159 else if (strcasecmp(str,"center")==0)
160 WMPerformButtonClick(panel->centerB);
161 else if (strcasecmp(str,"right")==0)
162 WMPerformButtonClick(panel->rightB);
164 changePage(panel->secP, panel);
168 static void
169 editedName(void *data, WMNotification *notification)
171 _Panel *panel = (_Panel*)data;
173 if ((int)WMGetNotificationClientData(notification)==WMReturnTextMovement) {
174 char *name;
175 WMFont *font;
176 char buffer[256];
178 name = WMGetTextFieldText(panel->nameT);
179 font = WMCreateFont(WMWidgetScreen(panel->win), name);
180 if (!font) {
181 sprintf(buffer, _("Invalid font %s."), name);
182 WMRunAlertPanel(WMWidgetScreen(panel->win), panel->win,
183 _("Error"), buffer, _("OK"), NULL, NULL);
184 free(name);
185 } else {
186 int sect;
188 sect = WMGetPopUpButtonSelectedItem(panel->secP);
190 switch (sect) {
191 case 0:
192 if (panel->windowFont)
193 free(panel->windowFont);
194 panel->windowFont = name;
195 if (panel->windowF)
196 WMReleaseFont(panel->windowF);
197 panel->windowF = font;
198 break;
199 case 1:
200 if (panel->menuFont)
201 free(panel->menuFont);
202 panel->menuFont = name;
203 if (panel->menuF)
204 WMReleaseFont(panel->menuF);
205 panel->menuF = font;
206 break;
207 case 2:
208 if (panel->itemFont)
209 free(panel->itemFont);
210 panel->itemFont = name;
211 if (panel->itemF)
212 WMReleaseFont(panel->itemF);
213 panel->itemF = font;
214 break;
215 case 3:
216 if (panel->iconFont)
217 free(panel->iconFont);
218 panel->iconFont = name;
219 if (panel->iconF)
220 WMReleaseFont(panel->iconF);
221 panel->iconF = font;
222 break;
223 case 4:
224 if (panel->clipFont)
225 free(panel->clipFont);
226 panel->clipFont = name;
227 if (panel->clipF)
228 WMReleaseFont(panel->clipF);
229 panel->clipF = font;
230 break;
231 case 5:
232 if (panel->geoFont)
233 free(panel->geoFont);
234 panel->geoFont = name;
235 if (panel->geoF)
236 WMReleaseFont(panel->geoF);
237 panel->geoF = font;
238 break;
240 changePage(panel->secP, panel);
246 static void
247 createPanel(Panel *p)
249 _Panel *panel = (_Panel*)p;
251 panel->frame = WMCreateFrame(panel->win);
252 WMResizeWidget(panel->frame, FRAME_WIDTH, FRAME_HEIGHT);
253 WMMoveWidget(panel->frame, FRAME_LEFT, FRAME_TOP);
255 panel->setB = WMCreateCommandButton(panel->frame);
256 WMResizeWidget(panel->setB, 145, 20);
257 WMMoveWidget(panel->setB, 50, 25);
258 WMSetButtonText(panel->setB, _("Set Font..."));
260 panel->secP = WMCreatePopUpButton(panel->frame);
261 WMResizeWidget(panel->secP, 260, 20);
262 WMMoveWidget(panel->secP, 205, 25);
263 WMSetPopUpButtonAction(panel->secP, changePage, panel);
264 WMAddPopUpButtonItem(panel->secP, _("Window Title Font"));
265 WMAddPopUpButtonItem(panel->secP, _("Menu Title Font"));
266 WMAddPopUpButtonItem(panel->secP, _("Menu Item Font"));
267 WMAddPopUpButtonItem(panel->secP, _("Icon Title Font"));
268 WMAddPopUpButtonItem(panel->secP, _("Clip Title Font"));
269 WMAddPopUpButtonItem(panel->secP, _("Geometry Display Font"));
270 WMSetPopUpButtonSelectedItem(panel->secP, 0);
272 panel->nameT = WMCreateTextField(panel->frame);
273 WMResizeWidget(panel->nameT, 285, 24);
274 WMMoveWidget(panel->nameT, 50, 80);
275 WMAddNotificationObserver(editedName, panel,
276 WMTextDidEndEditingNotification, panel->nameT);
278 panel->sampleL = WMCreateLabel(panel->frame);
279 WMResizeWidget(panel->sampleL, 285, 85);
280 WMMoveWidget(panel->sampleL, 50, 135);
281 WMSetLabelRelief(panel->sampleL, WRSunken);
282 WMSetLabelText(panel->sampleL, _("Sample Text\nabcdefghijklmnopqrstuvxywz\nABCDEFGHIJKLMNOPQRSTUVXYWZ\n0123456789"));
284 panel->alignF = WMCreateFrame(panel->frame);
285 WMResizeWidget(panel->alignF, 120, 160);
286 WMMoveWidget(panel->alignF, 345, 60);
287 WMSetFrameTitle(panel->alignF, _("Alignment"));
289 panel->leftB = WMCreateButton(panel->alignF, WBTOnOff);
290 WMResizeWidget(panel->leftB, 100, 24);
291 WMMoveWidget(panel->leftB, 10, 25);
292 WMSetButtonText(panel->leftB, _("Left"));
293 WMSetButtonTextAlignment(panel->leftB, WALeft);
295 panel->centerB = WMCreateButton(panel->alignF, WBTOnOff);
296 WMResizeWidget(panel->centerB, 100, 24);
297 WMMoveWidget(panel->centerB, 10, 70);
298 WMSetButtonText(panel->centerB, _("Center"));
299 WMSetButtonTextAlignment(panel->centerB, WACenter);
300 WMGroupButtons(panel->leftB, panel->centerB);
302 panel->rightB = WMCreateButton(panel->alignF, WBTOnOff);
303 WMResizeWidget(panel->rightB, 100, 24);
304 WMMoveWidget(panel->rightB, 10, 115);
305 WMSetButtonText(panel->rightB, _("Right"));
306 WMSetButtonTextAlignment(panel->rightB, WARight);
307 WMGroupButtons(panel->leftB, panel->rightB);
309 WMMapSubwidgets(panel->alignF);
311 WMRealizeWidget(panel->frame);
312 WMMapSubwidgets(panel->frame);
314 showData(panel);
319 Panel*
320 InitText(WMScreen *scr, WMWindow *win)
322 _Panel *panel;
324 panel = wmalloc(sizeof(_Panel));
325 memset(panel, 0, sizeof(_Panel));
327 panel->sectionName = _("Text Preferences");
328 /* panel->description =*/
330 panel->win = win;
332 panel->callbacks.createWidgets = createPanel;
334 AddSection(panel, ICON_FILE);
336 return panel;