Updating to version 0.20.2
[wmaker-crm.git] / WPrefs.app / Text.c
blob7c48752f596d0c37146309f11cadeb88c45c3e65
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 CallbackRec callbacks;
32 WMWindow *win;
34 WMPopUpButton *secP;
35 WMButton *setB;
37 WMTextField *nameT;
39 WMLabel *sampleL;
41 WMFrame *alignF;
42 WMButton *leftB;
43 WMButton *centerB;
44 WMButton *rightB;
47 /**/
48 WMFont *windowF;
49 char *windowFont;
50 WMFont *menuF;
51 char *menuFont;
52 WMFont *itemF;
53 char *itemFont;
54 WMFont *clipF;
55 char *clipFont;
56 WMFont *iconF;
57 char *iconFont;
58 WMFont *geoF;
59 char *geoFont;
60 } _Panel;
64 #define ICON_FILE "fonts"
69 static void
70 changePage(WMWidget *w, void *data)
72 _Panel *panel = (_Panel*)data;
73 int sect;
75 sect = WMGetPopUpButtonSelectedItem(w);
77 if (sect == 0) {
78 WMMapWidget(panel->alignF);
79 } else {
80 WMUnmapWidget(panel->alignF);
83 switch (sect) {
84 case 0:
85 WMSetTextFieldText(panel->nameT, panel->windowFont);
86 WMSetLabelFont(panel->sampleL, panel->windowF);
87 break;
88 case 1:
89 WMSetTextFieldText(panel->nameT, panel->menuFont);
90 WMSetLabelFont(panel->sampleL, panel->menuF);
91 break;
92 case 2:
93 WMSetTextFieldText(panel->nameT, panel->itemFont);
94 WMSetLabelFont(panel->sampleL, panel->itemF);
95 break;
96 case 3:
97 WMSetTextFieldText(panel->nameT, panel->iconFont);
98 WMSetLabelFont(panel->sampleL, panel->iconF);
99 break;
100 case 4:
101 WMSetTextFieldText(panel->nameT, panel->clipFont);
102 WMSetLabelFont(panel->sampleL, panel->clipF);
103 break;
104 case 5:
105 WMSetTextFieldText(panel->nameT, panel->geoFont);
106 WMSetLabelFont(panel->sampleL, panel->geoF);
107 break;
112 static void
113 showData(_Panel *panel)
115 WMScreen *scr = WMWidgetScreen(panel->win);
116 char *str;
118 str = GetStringForKey("WindowTitleFont");
119 if (!str)
120 str = "-*-helvetica-bold-r-normal-*-12-*";
121 panel->windowF = WMCreateFont(scr, str);
122 panel->windowFont = wstrdup(str);
124 str = GetStringForKey("MenuTitleFont");
125 if (!str)
126 str = "-*-helvetica-bold-r-normal-*-12-*";
127 panel->menuF = WMCreateFont(scr, str);
128 panel->menuFont = wstrdup(str);
130 str = GetStringForKey("MenuTextFont");
131 if (!str)
132 str = "-*-helvetica-medium-r-normal-*-12-*";
133 panel->itemF = WMCreateFont(scr, str);
134 panel->itemFont = wstrdup(str);
136 str = GetStringForKey("IconTitleFont");
137 if (!str)
138 str = "-*-helvetica-medium-r-normal-*-8-*";
139 panel->iconF = WMCreateFont(scr, str);
140 panel->iconFont = wstrdup(str);
142 str = GetStringForKey("ClipTitleFont");
143 if (!str)
144 str = "-*-helvetica-medium-r-normal-*-10-*";
145 panel->clipF = WMCreateFont(scr, str);
146 panel->clipFont = wstrdup(str);
148 str = GetStringForKey("DisplayFont");
149 if (!str)
150 str = "-*-helvetica-medium-r-normal-*-12-*";
151 panel->geoF = WMCreateFont(scr, str);
152 panel->geoFont = wstrdup(str);
154 str = GetStringForKey("TitleJustify");
155 if (strcasecmp(str,"left")==0)
156 WMPerformButtonClick(panel->leftB);
157 else if (strcasecmp(str,"center")==0)
158 WMPerformButtonClick(panel->centerB);
159 else if (strcasecmp(str,"right")==0)
160 WMPerformButtonClick(panel->rightB);
162 changePage(panel->secP, panel);
166 static void
167 editedName(void *data, WMNotification *notification)
169 _Panel *panel = (_Panel*)data;
171 if ((int)WMGetNotificationClientData(notification)==WMReturnTextMovement) {
172 char *name;
173 WMFont *font;
174 char buffer[256];
176 name = WMGetTextFieldText(panel->nameT);
177 font = WMCreateFont(WMWidgetScreen(panel->win), name);
178 if (!font) {
179 sprintf(buffer, _("Invalid font %s."), name);
180 WMRunAlertPanel(WMWidgetScreen(panel->win), panel->win,
181 _("Error"), buffer, _("OK"), NULL, NULL);
182 free(name);
183 } else {
184 int sect;
186 sect = WMGetPopUpButtonSelectedItem(panel->secP);
188 switch (sect) {
189 case 0:
190 if (panel->windowFont)
191 free(panel->windowFont);
192 panel->windowFont = name;
193 if (panel->windowF)
194 WMReleaseFont(panel->windowF);
195 panel->windowF = font;
196 break;
197 case 1:
198 if (panel->menuFont)
199 free(panel->menuFont);
200 panel->menuFont = name;
201 if (panel->menuF)
202 WMReleaseFont(panel->menuF);
203 panel->menuF = font;
204 break;
205 case 2:
206 if (panel->itemFont)
207 free(panel->itemFont);
208 panel->itemFont = name;
209 if (panel->itemF)
210 WMReleaseFont(panel->itemF);
211 panel->itemF = font;
212 break;
213 case 3:
214 if (panel->iconFont)
215 free(panel->iconFont);
216 panel->iconFont = name;
217 if (panel->iconF)
218 WMReleaseFont(panel->iconF);
219 panel->iconF = font;
220 break;
221 case 4:
222 if (panel->clipFont)
223 free(panel->clipFont);
224 panel->clipFont = name;
225 if (panel->clipF)
226 WMReleaseFont(panel->clipF);
227 panel->clipF = font;
228 break;
229 case 5:
230 if (panel->geoFont)
231 free(panel->geoFont);
232 panel->geoFont = name;
233 if (panel->geoF)
234 WMReleaseFont(panel->geoF);
235 panel->geoF = font;
236 break;
238 changePage(panel->secP, panel);
244 static void
245 createPanel(Panel *p)
247 _Panel *panel = (_Panel*)p;
249 panel->frame = WMCreateFrame(panel->win);
250 WMResizeWidget(panel->frame, FRAME_WIDTH, FRAME_HEIGHT);
251 WMMoveWidget(panel->frame, FRAME_LEFT, FRAME_TOP);
253 panel->setB = WMCreateCommandButton(panel->frame);
254 WMResizeWidget(panel->setB, 145, 20);
255 WMMoveWidget(panel->setB, 50, 25);
256 WMSetButtonText(panel->setB, _("Set Font..."));
258 panel->secP = WMCreatePopUpButton(panel->frame);
259 WMResizeWidget(panel->secP, 260, 20);
260 WMMoveWidget(panel->secP, 205, 25);
261 WMSetPopUpButtonAction(panel->secP, changePage, panel);
262 WMAddPopUpButtonItem(panel->secP, _("Window Title Font"));
263 WMAddPopUpButtonItem(panel->secP, _("Menu Title Font"));
264 WMAddPopUpButtonItem(panel->secP, _("Menu Item Font"));
265 WMAddPopUpButtonItem(panel->secP, _("Icon Title Font"));
266 WMAddPopUpButtonItem(panel->secP, _("Clip Title Font"));
267 WMAddPopUpButtonItem(panel->secP, _("Geometry Display Font"));
268 WMSetPopUpButtonSelectedItem(panel->secP, 0);
270 panel->nameT = WMCreateTextField(panel->frame);
271 WMResizeWidget(panel->nameT, 285, 24);
272 WMMoveWidget(panel->nameT, 50, 80);
273 WMAddNotificationObserver(editedName, panel,
274 WMTextDidEndEditingNotification, panel->nameT);
276 panel->sampleL = WMCreateLabel(panel->frame);
277 WMResizeWidget(panel->sampleL, 285, 85);
278 WMMoveWidget(panel->sampleL, 50, 135);
279 WMSetLabelRelief(panel->sampleL, WRSunken);
280 WMSetLabelText(panel->sampleL, _("Sample Text\nabcdefghijklmnopqrstuvxywz\nABCDEFGHIJKLMNOPQRSTUVXYWZ\n0123456789"));
282 panel->alignF = WMCreateFrame(panel->frame);
283 WMResizeWidget(panel->alignF, 120, 160);
284 WMMoveWidget(panel->alignF, 345, 60);
285 WMSetFrameTitle(panel->alignF, _("Alignment"));
287 panel->leftB = WMCreateButton(panel->alignF, WBTOnOff);
288 WMResizeWidget(panel->leftB, 100, 24);
289 WMMoveWidget(panel->leftB, 10, 25);
290 WMSetButtonText(panel->leftB, _("Left"));
291 WMSetButtonTextAlignment(panel->leftB, WALeft);
293 panel->centerB = WMCreateButton(panel->alignF, WBTOnOff);
294 WMResizeWidget(panel->centerB, 100, 24);
295 WMMoveWidget(panel->centerB, 10, 70);
296 WMSetButtonText(panel->centerB, _("Center"));
297 WMSetButtonTextAlignment(panel->centerB, WACenter);
298 WMGroupButtons(panel->leftB, panel->centerB);
300 panel->rightB = WMCreateButton(panel->alignF, WBTOnOff);
301 WMResizeWidget(panel->rightB, 100, 24);
302 WMMoveWidget(panel->rightB, 10, 115);
303 WMSetButtonText(panel->rightB, _("Right"));
304 WMSetButtonTextAlignment(panel->rightB, WARight);
305 WMGroupButtons(panel->leftB, panel->rightB);
307 WMMapSubwidgets(panel->alignF);
309 WMRealizeWidget(panel->frame);
310 WMMapSubwidgets(panel->frame);
312 showData(panel);
317 Panel*
318 InitText(WMScreen *scr, WMWindow *win)
320 _Panel *panel;
322 panel = wmalloc(sizeof(_Panel));
323 memset(panel, 0, sizeof(_Panel));
325 panel->sectionName = _("Text Preferences");
327 panel->win = win;
329 panel->callbacks.createWidgets = createPanel;
331 AddSection(panel, ICON_FILE);
333 return panel;