fixing parse error in execcommand
[bbkeys.git] / src / resource.cc
blob15a226a5020fb9aeb9292a10a8f439306d95c0fb
1 // resource.cc for bbkeys - an tool for displaying and changing Blackbox
2 // workspaces.
3 //
4 // Copyright (c) 1998-1999 John Kennis, j.m.b.m.kennis@tue.nl
5 // Copyright (c) 2000-2001 Jason Kasper (vanRijn) <vr at movingparts dot net>
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., 675 Mass Ave, Cambridge, MA 02139, USA.
21 // (See the included file COPYING / GPL-2.0)
23 // $Id$
25 #ifdef HAVE_CONFIG_H
26 # include "config.h"
27 #endif // HAVE_CONFIG_H
29 #ifdef STDC_HEADERS
30 # include <string.h>
31 #endif // STDC_HEADERS
33 #if HAVE_STRINGS_H
34 # include <strings.h>
35 #endif
37 #ifdef HAVE_STDIO_H
38 # include <stdio.h>
39 #endif // HAVE_STDIO_H
41 #include "resource.hh"
42 #include "blackboxstyle.hh"
43 #include "bbkeys.hh"
45 Resource::Resource(ToolWindow * toolwindow):BaseResource(toolwindow)
47 label.font = frame.font = menu.font=0;
48 Load();
51 Resource::~Resource()
53 Clean();
56 void Resource::Clean()
58 if (label.font)
59 XFreeFont(bbtool->getXDisplay(), label.font);
60 if (frame.font)
61 XFreeFont(bbtool->getXDisplay(), frame.font);
62 if (menu.font)
63 XFreeFont(bbtool->getXDisplay(), menu.font);
64 frame.font=label.font=menu.font=0;
68 void Resource::LoadBBToolResource(void)
70 XrmValue value;
71 char *value_type;
73 if (XrmGetResource(resource_db, "bbkeys.autoConfig",
74 "Bbkeys.Autoconfig", &value_type, &value)) {
75 if (!strncasecmp("true", value.addr, value.size)) {
76 style.auto_config = True;
77 } else {
78 style.auto_config = False;
80 } else {
81 style.auto_config = False;
84 if (XrmGetResource(resource_db, "bbkeys.honorModifiers",
85 "Bbkeys.Honormodifiers", &value_type, &value)) {
86 if (!strncasecmp("true", value.addr, value.size)) {
87 style.honor_modifiers = True;
88 } else {
89 style.honor_modifiers = False;
91 } else {
92 style.honor_modifiers = False;
95 if (XrmGetResource(resource_db, "bbkeys.menu.stackedCycling",
96 "Bbkeys.Menu.StackedCycling", &value_type, &value)) {
97 if (!strncasecmp("true", value.addr, value.size))
98 menu.stackedCycling = True;
99 else
100 menu.stackedCycling = False;
101 } else
102 menu.stackedCycling = True;
104 if (XrmGetResource(resource_db, "bbkeys.menu.showCycleMenu",
105 "Bbkeys.Menu.ShowCycleMenu", &value_type, &value)) {
106 if (!strncasecmp("true", value.addr, value.size))
107 menu.showCycleMenu = True;
108 else
109 menu.showCycleMenu = False;
110 } else
111 menu.showCycleMenu = True;
113 Frame();
115 Menu();
117 SizeAndPosition();
119 Label();
121 Button();
126 void Resource::Frame()
128 XrmValue value;
129 char *value_type;
130 char *color;
131 char *gradient;
133 if (XrmGetResource
134 (resource_db, "toolbar.color", "Toolbar.Color", &value_type,
135 &value)) {
136 color = strdup(value.addr);
137 } else {
138 color = strdup("black");
141 if (XrmGetResource
142 (resource_db, "toolbar", "Toolbar", &value_type, &value)) {
143 gradient = strdup(value.addr);
144 } else {
145 gradient = strdup("Raised Gradient Vertical Bevel1");
149 readTexture("bbkeys.frame", "Bbkeys.Frame", BB_FRAME,
150 BB_FRAME2, color, color, gradient, &frame.texture);
152 if (XrmGetResource
153 (resource_db, "bbkeys.bevelWidth", "Bbkeys.BevelWidth",
154 &value_type, &value)) {
155 if (sscanf(value.addr, "%u", &frame.bevelWidth) != 1)
156 frame.bevelWidth = 4;
157 else if (frame.bevelWidth == 0)
158 frame.bevelWidth = 4;
159 } else
160 if (XrmGetResource
161 (resource_db, BB_BEVELWIDTH, BB_BEVELWIDTH2, &value_type, &value)) {
162 if (sscanf(value.addr, "%u", &frame.bevelWidth) != 1)
163 frame.bevelWidth = 4;
164 else if (frame.bevelWidth == 0)
165 frame.bevelWidth = 4;
166 } else
167 frame.bevelWidth = 4;
169 // strdup does a malloc to achieve its results, so make sure we free()
170 // afterwards
171 free(color);
172 free(gradient);
177 void Resource::SizeAndPosition()
179 XrmValue value;
180 char *value_type;
181 unsigned int w, h;
182 char positionstring[11];
184 if (!(bbtool->position)) {
185 if (!
186 (XrmGetResource
187 (resource_db, "bbkeys.position", "Bbkeys.Position",
188 &value_type, &value)))
189 strncpy(positionstring, "-0-0", 5);
190 else
191 strncpy(positionstring, value.addr, strlen(value.addr) + 1);
192 } else
193 strncpy(positionstring, bbtool->position,
194 strlen(bbtool->position) + 1);
197 position.mask =
198 XParseGeometry(positionstring, &position.x, &position.y, &w, &h);
200 if (!(position.mask & XValue))
201 position.x = 0;
202 if (!(position.mask & YValue))
203 position.y = 0;
206 if (XrmGetResource(resource_db, "bbkeys.columns",
207 "Bbkeys.Columns", &value_type, &value)) {
208 if (sscanf(value.addr, "%u", &columns) != 1)
209 columns = 1;
210 else {
211 position.vertical = True;
212 if (columns == 0)
213 columns = 1;
215 } else
216 columns = 1;
218 if (XrmGetResource(resource_db, "bbkeys.rows", "Bbkeys.Rows",
219 &value_type, &value)) {
220 if (sscanf(value.addr, "%u", &rows) != 1)
221 rows = 1;
222 else {
223 position.horizontal = True;
224 if (rows == 0)
225 rows = 1;
227 } else
228 rows = 1;
230 if (!position.horizontal && !position.vertical) {
231 if (bbtool->withdrawn)
232 position.vertical = True;
233 else
234 position.horizontal = True;
237 if (!(XrmGetResource(resource_db, "bbkeys.desktop.width",
238 "Bbkeys.Desktop.Width", &value_type, &value))) {
239 if (!bbtool->withdrawn)
240 desktopSize.width = 40;
241 else
242 desktopSize.width =
243 64 / columns - ((columns - 1)) * frame.bevelWidth;
244 } else if (sscanf(value.addr, "%u", &desktopSize.width) != 1) {
245 if (!bbtool->withdrawn)
246 desktopSize.width = 40;
247 else
248 desktopSize.width =
249 64 / columns - ((columns - 1)) * frame.bevelWidth;
253 if (!(XrmGetResource(resource_db, "bbkeys.desktop.height",
254 "Bbkeys.Desktop.Height", &value_type, &value))) {
255 if (!bbtool->withdrawn)
256 desktopSize.height = 30;
257 else
258 desktopSize.height = 48 / columns;
259 } else if (sscanf(value.addr, "%u", &desktopSize.height) != 1) {
260 if (!bbtool->withdrawn)
261 desktopSize.width = 30;
262 else
263 desktopSize.height = 48 / columns;
266 /* need this to compute the height */
267 const char *defaultFont =
268 /* "-*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*"; */
269 "-*-helvetica-medium-r-*-*-*-100-*-*-*-*-*-*";
271 if (frame.font) {
272 XFreeFont(bbtool->getXDisplay(), frame.font);
273 frame.font = 0;
276 if (XrmGetResource // try to load TitleFont, which will pick up *Font
277 (resource_db, BB_FONT, BB_FONT2, &value_type, &value)) {
278 if ((frame.font =
279 XLoadQueryFont(bbtool->getXDisplay(), value.addr)) == NULL) {
280 fprintf(stderr,
281 " bbkeys: couldn't load font '%s'\n"
282 " ... reverting to default font.", value.addr);
283 if ((frame.font =
284 XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL) {
285 fprintf(stderr,
286 "bbkeys: couldn't load default font. please check to\n"
287 "make sure the necessary font is installed '%s'\n",
288 defaultFont);
289 exit(2);
292 } else if (XrmGetResource // try to load toolbar.font
293 (resource_db, "toolbar.font", "Toolbar.Font", &value_type, &value)) {
294 if ((frame.font =
295 XLoadQueryFont(bbtool->getXDisplay(), value.addr)) == NULL) {
296 fprintf(stderr,
297 " bbkeys: couldn't load font '%s'\n"
298 " ... reverting to default font.", value.addr);
299 if ((frame.font =
300 XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL) {
301 fprintf(stderr,
302 "bbkeys: couldn't load default font. please check to\n"
303 "make sure the necessary font is installed '%s'\n",
304 defaultFont);
305 exit(2);
308 } else if (XrmGetResource
309 (resource_db, "bbkeys.heightBy.font", "Bbkeys.heightBy.Font",
310 &value_type, &value)) {
311 if ((frame.font =
312 XLoadQueryFont(bbtool->getXDisplay(), value.addr)) == NULL) {
313 fprintf(stderr,
314 " bbkeys: couldn't load font '%s'\n"
315 " ... reverting to default font.", value.addr);
316 if ((frame.font =
317 XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL) {
318 fprintf(stderr,
319 "bbkeys: couldn't load default font. please check to\n"
320 "make sure the necessary font is installed '%s'\n",
321 defaultFont);
322 exit(2);
325 } else {
326 if ((frame.font =
327 XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL) {
328 fprintf(stderr,
329 "bbkeys: couldn't load default font. please check to\n"
330 "make sure the necessary font is installed '%s'\n",
331 defaultFont);
332 exit(2);
337 void Resource::Label(void)
340 XrmValue value;
341 char *value_type;
343 /* text-label resources */
344 if (XrmGetResource(resource_db, "bbkeys.label.transparent",
345 "Bbkeys.label.Transparent", &value_type, &value)) {
346 if (!strncasecmp("true", value.addr, value.size))
347 label.transparent = True;
348 else
349 label.transparent = False;
350 } else
351 label.transparent = False;
353 readTexture("bbkeys.label", "Bbkeys.Label", BB_LABEL,
354 BB_LABEL2, "slategrey", "darkslategrey",
355 "Sunken Gradient Diagonal Bevel1", &label.texture);
357 readColor("bbkeys.textColor", "Bbkeys.TextColor",
358 BB_LABEL_TEXTCOLOR, BB_LABEL_TEXTCOLOR2,
359 "LightGrey", &label.textColor);
362 const char *defaultFont = "-*-helvetica-medium-r-*-*-*-100-*-*-*-*-*-*";
364 if (label.font) {
365 XFreeFont(bbtool->getXDisplay(), label.font);
366 label.font = 0;
369 if (XrmGetResource
370 (resource_db, BB_FONT, BB_FONT2, &value_type, &value)) {
371 if ((label.font =
372 XLoadQueryFont(bbtool->getXDisplay(), value.addr)) == NULL) {
373 fprintf(stderr,
374 " bbkeys: couldn't load font '%s'\n"
375 " ... reverting to default font.", value.addr);
376 if ((label.font =
377 XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL) {
378 fprintf(stderr,
379 "bbkeys: couldn't load default font. please check to\n"
380 "make sure the necessary font is installed '%s'\n",
381 defaultFont);
382 exit(2);
385 } else if (XrmGetResource // try to load toolbar.font
386 (resource_db, "toolbar.font", "Toolbar.Font", &value_type, &value)) {
387 if ((label.font =
388 XLoadQueryFont(bbtool->getXDisplay(), value.addr)) == NULL) {
389 fprintf(stderr,
390 " bbkeys: couldn't load font '%s'\n"
391 " ... reverting to default font.", value.addr);
392 if ((label.font =
393 XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL) {
394 fprintf(stderr,
395 "bbkeys: couldn't load default font. please check to\n"
396 "make sure the necessary font is installed '%s'\n",
397 defaultFont);
398 exit(2);
401 } else if (XrmGetResource
402 (resource_db, "bbkeys.label.font", "Bbkeys.Label.Font",
403 &value_type, &value)) {
404 if ((label.font =
405 XLoadQueryFont(bbtool->getXDisplay(), value.addr)) == NULL) {
406 fprintf(stderr,
407 " bbkeys: couldn't load font '%s'\n"
408 " ... reverting to default font.", value.addr);
409 if ((label.font =
410 XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL) {
411 fprintf(stderr,
412 "bbkeys: couldn't load default font. please check to\n"
413 "make sure the necessary font is installed '%s'\n",
414 defaultFont);
415 exit(2);
418 } else {
419 if ((label.font =
420 XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL) {
421 fprintf(stderr,
422 "bbkeys: couldn't load default font. please check to\n"
423 "make sure the necessary font is installed '%s'\n",
424 defaultFont);
425 exit(2);
430 void Resource::Button()
432 readTexture("bbkeys.button", "Bbkeys.Button",
433 BB_BUTTON, BB_BUTTON2,
434 "rgb:4/7/8", "rgb:2/2/2",
435 "Raised Gradient Diagonal Bevel1", &button.texture);
437 readTexture("bbkeys.button.pressed", "Bbkeys.Button.Pressed",
438 BB_BUTTON_PRESSED, BB_BUTTON_PRESSED2,
439 "rgb:4/4/4", "rgb:c/c/c",
440 "Sunken Gradient Diagonal Bevel1", &button.texture_pressed);
444 void Resource::Menu()
446 XrmValue value;
447 char *value_type;
449 readTexture("bbkeys.menu.frame","Bbkeys.Menu.Frame",BB_MENU_TEXTURE,BB_MENU_TEXTURE2,
450 "slategrey","darkslategrey",
451 "Raised Diagonal Gradient Bevel1",&menu.texture);
453 readTexture("bbkeys.menu.hilight","Bbkeys.Menu.Hilight",
454 BB_MENU_HILITE_TEXTURE,BB_MENU_HILITE_TEXTURE2,
455 "darkslategrey","slategrey",
456 "Raised Elliptic Gradient Bevel2",&menu.hiTexture);
458 readColor("bbkeys.menu.highlight.color",
459 "Bbkeys.Menu.Highlight.Color",
460 BB_MENU_HIGHLIGHT_COLOR,BB_MENU_HIGHLIGHT_COLOR2,
461 "rgb:c/9/6",&menu.highlightColor);
463 readColor(
464 BB_MENU_TEXTCOLOR,BB_MENU_TEXTCOLOR2,
465 "bbkeys.menu.textColor","Bbkeys.Menu.TextColor",
466 "LightGrey",&menu.textColor);
468 readColor(
469 BB_MENU_HITEXTCOLOR,BB_MENU_HITEXTCOLOR2,
470 "bbkeys.menu.highlight.textColor", "Bbkeys.Menu.Highlight.TextColor",
471 "white",&menu.hiTextColor);
473 if (XrmGetResource(resource_db,"bbkeys.menu.justify","Bbkeys.Menu.Justify",
474 &value_type, &value))
476 if (! strncasecmp("left", value.addr, value.size))
477 menu.justify = LeftJustify;
478 else if (! strncasecmp("right", value.addr, value.size))
479 menu.justify = RightJustify;
480 else if (! strncasecmp("center", value.addr, value.size))
481 menu.justify = CenterJustify;
482 else
483 menu.justify = LeftJustify;
485 else if (XrmGetResource(resource_db,BB_MENU_JUSTIFY,BB_MENU_JUSTIFY2,
486 &value_type, &value))
488 if (! strncasecmp("left", value.addr, value.size))
489 menu.justify = LeftJustify;
490 else if (! strncasecmp("right", value.addr, value.size))
491 menu.justify = RightJustify;
492 else if (! strncasecmp("center", value.addr, value.size))
493 menu.justify = CenterJustify;
494 else
495 menu.justify = LeftJustify;
497 else
498 menu.justify = LeftJustify;
500 if (XrmGetResource(resource_db, "bbkeys.menu.bulletStyle",
501 "Bbkeys.Menu.BulletStyle", &value_type, &value)) {
502 if (! strncasecmp(value.addr, "empty", value.size))
503 menu.bullet_style = Empty;
504 else if (! strncasecmp(value.addr, "square", value.size))
505 menu.bullet_style = Square;
506 else if (! strncasecmp(value.addr, "triangle", value.size))
507 menu.bullet_style = Triangle;
508 else if (! strncasecmp(value.addr, "diamond", value.size))
509 menu.bullet_style = Diamond;
510 else
511 menu.bullet_style = Round;
512 } else {
513 if (XrmGetResource(resource_db, BB_MENU_BULLETSTYLE,
514 BB_MENU_BULLETSTYLE2, &value_type, &value)) {
515 if (! strncasecmp(value.addr, "empty", value.size))
516 menu.bullet_style = Empty;
517 else if (! strncasecmp(value.addr, "square", value.size))
518 menu.bullet_style = Square;
519 else if (! strncasecmp(value.addr, "triangle", value.size))
520 menu.bullet_style = Triangle;
521 else if (! strncasecmp(value.addr, "diamond", value.size))
522 menu.bullet_style = Diamond;
523 else
524 menu.bullet_style = Round;
525 } else
526 menu.bullet_style = Round;
529 if (XrmGetResource(resource_db, "bbkeys.menu.bulletPosition",
530 "Bbkeys.Menu.BulletPosition", &value_type, &value)) {
531 if (! strncasecmp(value.addr, "right", value.size))
532 menu.bullet_pos = Right;
533 else
534 menu.bullet_pos = Left;
535 } else {
536 if (XrmGetResource(resource_db, BB_MENU_BULLETPOSITION,
537 BB_MENU_BULLETPOSITION2, &value_type, &value)) {
538 if (! strncasecmp(value.addr, "right", value.size))
539 menu.bullet_pos = Right;
540 else
541 menu.bullet_pos = Left;
542 } else
543 menu.bullet_pos = Left;
546 const char *defaultFont = "-*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*";
548 if (menu.font)
550 XFreeFont(bbtool->getXDisplay(), menu.font);
551 menu.font = 0;
554 if (XrmGetResource(resource_db, BB_MENU_FONT, BB_MENU_FONT2, &value_type, &value))
556 if ((menu.font = XLoadQueryFont(bbtool->getXDisplay(), value.addr)) == NULL)
558 fprintf(stderr, " blackbox: couldn't load font '%s'\n"
559 " ... reverting to default font.", value.addr);
560 if ((menu.font = XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL)
562 fprintf(stderr,
563 "blackbox: couldn't load default font. please check to\n"
564 "make sure the necessary font is installed '%s'\n",
565 defaultFont);
566 exit(2);
569 } else if (XrmGetResource(resource_db, "bbkeys.menu.font", "Bbkeys.Menu.Font",
570 &value_type, &value))
572 if ((menu.font = XLoadQueryFont(bbtool->getXDisplay(), value.addr)) == NULL)
574 fprintf(stderr, " blackbox: couldn't load font '%s'\n"
575 " ... reverting to default font.", value.addr);
576 if ((menu.font = XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL)
578 fprintf(stderr,
579 "blackbox: couldn't load default font. please check to\n"
580 "make sure the necessary font is installed '%s'\n",
581 defaultFont);
582 exit(2);
585 } else {
586 if ((menu.font = XLoadQueryFont(bbtool->getXDisplay(), defaultFont)) == NULL)
588 fprintf(stderr,"blackbox: couldn't load default font. please check to\n"
589 "make sure the necessary font is installed '%s'\n", defaultFont);
590 exit(2);