changed indentation to use spaces only
[wmaker-crm.git] / WINGs / Tests / wtest.c
bloba8db4f3c02782574cfff4e2d3ef4fe4a454b58e3
1 /*
2 * WINGs test application
3 */
5 #include <WINGs/WINGs.h>
7 #include <stdio.h>
8 #include <stdlib.h>
12 * You need to define this function to link any program to WINGs.
13 * (this is no longer required as there is a default abort handler in WINGs)
14 * This will be called when the application will be terminated because
15 * of a fatal error (only for memory allocation failures ATM).
17 void
18 wAbort()
20 exit(1);
26 Display *dpy;
28 int windowCount = 0;
30 void
31 closeAction(WMWidget *self, void *data)
33 WMDestroyWidget(self);
34 windowCount--;
35 printf("window closed, window count = %d\n", windowCount);
36 if (windowCount < 1)
37 exit(0);
41 void
42 testOpenFilePanel(WMScreen *scr)
44 WMOpenPanel *panel;
46 /* windowCount++; */
48 /* get the shared Open File panel */
49 panel = WMGetOpenPanel(scr);
51 WMRunModalFilePanelForDirectory(panel, NULL, "/usr/local", NULL, NULL);
53 /* free the panel to save some memory. Not needed otherwise. */
54 WMFreeFilePanel(WMGetOpenPanel(scr));
58 void
59 testFontPanel(WMScreen *scr)
61 WMFontPanel *panel;
63 /*windowCount++;*/
65 panel = WMGetFontPanel(scr);
67 WMShowFontPanel(panel);
69 /*WMFreeFontPanel(panel);*/
74 void
75 testFrame(WMScreen *scr)
77 WMWindow *win;
78 WMFrame *frame;
79 int i;
80 static char* titles[] = {
81 "AboveTop",
82 "AtTop",
83 "BelowTop",
84 "AboveBottom",
85 "AtBottom",
86 "BelowBottom"
88 static WMTitlePosition pos[] = {
89 WTPAboveTop,
90 WTPAtTop,
91 WTPBelowTop,
92 WTPAboveBottom,
93 WTPAtBottom,
94 WTPBelowBottom
97 windowCount++;
99 win = WMCreateWindow(scr, "testFrame");
100 WMSetWindowTitle(win, "Frame");
101 WMSetWindowCloseAction(win, closeAction, NULL);
102 WMResizeWidget(win, 400, 300);
104 for (i = 0; i < 6; i++) {
105 frame = WMCreateFrame(win);
106 WMMoveWidget(frame, 8+(i%3)*130, 8+(i/3)*130);
107 WMResizeWidget(frame, 120, 120);
108 WMSetFrameTitle(frame, titles[i]);
109 WMSetFrameTitlePosition(frame, pos[i]);
112 WMRealizeWidget(win);
113 WMMapSubwidgets(win);
114 WMMapWidget(win);
119 /*static void
120 resizedWindow(void *self, WMNotification *notif)
122 WMView *view = (WMView*)WMGetNotificationObject(notif);
123 WMSize size = WMGetViewSize(view);
125 WMResizeWidget((WMWidget*)self, size.width, size.height);
128 void
129 testBox(WMScreen *scr)
131 WMWindow *win;
132 WMBox *box, *hbox;
133 WMButton *btn;
134 WMPopUpButton *pop;
135 int i;
137 windowCount++;
139 win = WMCreateWindow(scr, "testBox");
140 WMSetWindowTitle(win, "Box");
141 WMSetWindowCloseAction(win, closeAction, NULL);
142 WMResizeWidget(win, 400, 300);
144 box = WMCreateBox(win);
145 WMSetBoxBorderWidth(box, 5);
146 WMSetViewExpandsToParent(WMWidgetView(box), 0, 0, 0, 0);
148 /*WMSetBoxHorizontal(box, True);*/
149 for (i = 0; i < 4; i++) {
150 btn = WMCreateCommandButton(box);
151 WMSetButtonText(btn, "bla");
152 WMMapWidget(btn);
153 WMAddBoxSubview(box, WMWidgetView(btn), i&1, True, 20, 0, 5);
156 pop = WMCreatePopUpButton(box);
157 WMAddPopUpButtonItem(pop, "ewqeq");
158 WMAddPopUpButtonItem(pop, "ewqeqrewrw");
159 WMAddBoxSubview(box, WMWidgetView(pop), False, True, 20, 0, 5);
160 WMMapWidget(pop);
162 hbox = WMCreateBox(box);
163 WMSetBoxHorizontal(hbox, True);
164 WMAddBoxSubview(box, WMWidgetView(hbox), False, True, 24, 0, 0);
165 WMMapWidget(hbox);
167 for (i = 0; i < 4; i++) {
168 btn = WMCreateCommandButton(hbox);
169 WMSetButtonText(btn, "bla");
170 WMMapWidget(btn);
171 WMAddBoxSubview(hbox, WMWidgetView(btn), 1, True, 60, 0, i<3?5:0);
175 WMRealizeWidget(win);
176 WMMapSubwidgets(win);
177 WMMapWidget(win);
183 static void
184 singleClick(WMWidget *self, void *data)
189 static void
190 doubleClick(WMWidget *self, void *data)
192 WMSelectAllListItems((WMList*)self);
196 static void
197 listSelectionObserver(void *observer, WMNotification *notification)
199 WMLabel *label = (WMLabel*)observer;
200 WMList *lPtr = (WMList*)WMGetNotificationObject(notification);
201 char buf[255];
203 sprintf(buf, "Selected items: %d",
204 WMGetArrayItemCount(WMGetListSelectedItems(lPtr)));
205 WMSetLabelText(label, buf);
209 void
210 testList(WMScreen *scr)
212 WMWindow *win;
213 WMList *list;
214 WMList *mlist;
215 WMLabel *label;
216 WMLabel *mlabel;
217 WMLabel *title;
218 WMLabel *mtitle;
219 char text[100];
220 int i;
222 windowCount++;
224 win = WMCreateWindow(scr, "testList");
225 WMResizeWidget(win, 370, 250);
226 WMSetWindowTitle(win, "List");
227 WMSetWindowCloseAction(win, closeAction, NULL);
229 title = WMCreateLabel(win);
230 WMResizeWidget(title, 150, 20);
231 WMMoveWidget(title, 10, 10);
232 WMSetLabelRelief(title, WRRidge);
233 WMSetLabelText(title, "Single selection list");
235 mtitle = WMCreateLabel(win);
236 WMResizeWidget(mtitle, 150, 20);
237 WMMoveWidget(mtitle, 210, 10);
238 WMSetLabelRelief(mtitle, WRRidge);
239 WMSetLabelText(mtitle, "Multiple selection list");
241 list = WMCreateList(win);
242 /*WMSetListAllowEmptySelection(list, True);*/
243 WMMoveWidget(list, 10, 40);
244 for (i=0; i<105; i++) {
245 sprintf(text, "Item %i", i);
246 WMAddListItem(list, text);
248 mlist = WMCreateList(win);
249 WMSetListAllowMultipleSelection(mlist, True);
250 /*WMSetListAllowEmptySelection(mlist, True);*/
251 WMMoveWidget(mlist, 210, 40);
252 for (i=0; i<135; i++) {
253 sprintf(text, "Item %i", i);
254 WMAddListItem(mlist, text);
257 label = WMCreateLabel(win);
258 WMResizeWidget(label, 150, 40);
259 WMMoveWidget(label, 10, 200);
260 WMSetLabelRelief(label, WRRidge);
261 WMSetLabelText(label, "Selected items: 0");
263 mlabel = WMCreateLabel(win);
264 WMResizeWidget(mlabel, 150, 40);
265 WMMoveWidget(mlabel, 210, 200);
266 WMSetLabelRelief(mlabel, WRRidge);
267 WMSetLabelText(mlabel, "Selected items: 0");
269 WMSetListAction(list, singleClick, label);
270 WMSetListDoubleAction(list, doubleClick, label);
271 WMSetListAction(mlist, singleClick, mlabel);
272 WMSetListDoubleAction(mlist, doubleClick, mlabel);
274 WMAddNotificationObserver(listSelectionObserver, label,
275 WMListSelectionDidChangeNotification, list);
276 WMAddNotificationObserver(listSelectionObserver, mlabel,
277 WMListSelectionDidChangeNotification, mlist);
280 WMRealizeWidget(win);
281 WMMapSubwidgets(win);
282 WMMapWidget(win);
286 void
287 testButton(WMScreen *scr)
289 WMWindow *win;
290 int i;
291 char *types[] = {
292 "MomentaryPush",
293 "PushOnPushOff",
294 "Toggle",
295 "Switch",
296 "Radio",
297 "MomentaryChange",
298 "OnOff",
299 "MomentaryLigh"
302 windowCount++;
304 win = WMCreateWindow(scr, "testButton");
305 WMResizeWidget(win, 300, 300);
306 WMSetWindowTitle(win, "Buttons");
308 WMSetWindowCloseAction(win, closeAction, NULL);
310 for (i = 1; i < 9; i++) {
311 WMButton *b;
312 b = WMCreateButton(win, i);
313 WMResizeWidget(b, 150, 24);
314 WMMoveWidget(b, 20, i*30);
315 WMSetButtonText(b, types[i-1]);
318 WMRealizeWidget(win);
319 WMMapSubwidgets(win);
320 WMMapWidget(win);
324 void
325 testGradientButtons(WMScreen *scr)
327 WMWindow *win;
328 WMButton *btn;
329 WMPixmap *pix1, *pix2;
330 RImage *back;
331 RColor light, dark;
332 WMColor *color, *altColor;
334 windowCount++;
336 /* creates the top-level window */
337 win = WMCreateWindow(scr, "testGradientButtons");
338 WMSetWindowTitle(win, "Gradiented Button Demo");
339 WMResizeWidget(win, 300, 200);
341 WMSetWindowCloseAction(win, closeAction, NULL);
344 light.red = 0x90;
345 light.green = 0x85;
346 light.blue = 0x90;
347 dark.red = 0x35;
348 dark.green = 0x30;
349 dark.blue = 0x35;
351 color = WMCreateRGBColor(scr, 0x5900, 0x5100, 0x5900, True);
352 WMSetWidgetBackgroundColor(win, color);
353 WMReleaseColor(color);
355 back = RRenderGradient(60, 24, &dark, &light, RGRD_DIAGONAL);
356 RBevelImage(back, RBEV_RAISED2);
357 pix1 = WMCreatePixmapFromRImage(scr, back, 0);
358 RReleaseImage(back);
360 back = RRenderGradient(60, 24, &dark, &light, RGRD_DIAGONAL);
361 RBevelImage(back, RBEV_SUNKEN);
362 pix2 = WMCreatePixmapFromRImage(scr, back, 0);
363 RReleaseImage(back);
365 color = WMWhiteColor(scr);
366 altColor = WMCreateNamedColor(scr, "red", True);
368 btn = WMCreateButton(win, WBTMomentaryChange);
369 WMResizeWidget(btn, 60, 24);
370 WMMoveWidget(btn, 20, 100);
371 WMSetButtonBordered(btn, False);
372 WMSetButtonImagePosition(btn, WIPOverlaps);
373 WMSetButtonImage(btn, pix1);
374 WMSetButtonAltImage(btn, pix2);
375 WMSetButtonText(btn, "Cool");
376 WMSetButtonTextColor(btn, color);
377 WMSetButtonAltTextColor(btn, altColor);
379 WMSetBalloonTextForView("This is a cool button", WMWidgetView(btn));
381 btn = WMCreateButton(win, WBTMomentaryChange);
382 WMResizeWidget(btn, 60, 24);
383 WMMoveWidget(btn, 90, 100);
384 WMSetButtonBordered(btn, False);
385 WMSetButtonImagePosition(btn, WIPOverlaps);
386 WMSetButtonImage(btn, pix1);
387 WMSetButtonAltImage(btn, pix2);
388 WMSetButtonText(btn, "Button");
389 WMSetButtonTextColor(btn, color);
391 WMSetBalloonTextForView("Este é outro balão.", WMWidgetView(btn));
393 WMReleaseColor(color);
394 color = WMCreateNamedColor(scr, "orange", True);
396 btn = WMCreateButton(win, WBTMomentaryChange);
397 WMResizeWidget(btn, 60, 24);
398 WMMoveWidget(btn, 160, 100);
399 WMSetButtonBordered(btn, False);
400 WMSetButtonImagePosition(btn, WIPOverlaps);
401 WMSetButtonImage(btn, pix1);
402 WMSetButtonAltImage(btn, pix2);
403 WMSetButtonText(btn, "Test");
404 WMSetButtonTextColor(btn, color);
406 WMSetBalloonTextForView("This is yet another button.\nBut the balloon has 3 lines.\nYay!",
407 WMWidgetView(btn));
409 WMReleaseColor(color);
410 WMReleaseColor(altColor);
412 WMRealizeWidget(win);
413 WMMapSubwidgets(win);
414 WMMapWidget(win);
418 void
419 testScrollView(WMScreen *scr)
421 WMWindow *win;
422 WMScrollView *sview;
423 WMFrame *f;
424 WMLabel *l;
425 char buffer[128];
426 int i;
428 windowCount++;
430 /* creates the top-level window */
431 win = WMCreateWindow(scr, "testScroll");
432 WMSetWindowTitle(win, "Scrollable View");
434 WMSetWindowCloseAction(win, closeAction, NULL);
436 /* set the window size */
437 WMResizeWidget(win, 300, 300);
439 /* creates a scrollable view inside the top-level window */
440 sview = WMCreateScrollView(win);
441 WMResizeWidget(sview, 200, 200);
442 WMMoveWidget(sview, 30, 30);
443 WMSetScrollViewRelief(sview, WRSunken);
444 WMSetScrollViewHasVerticalScroller(sview, True);
445 WMSetScrollViewHasHorizontalScroller(sview, True);
447 /* create a frame with a bunch of labels */
448 f = WMCreateFrame(win);
449 WMResizeWidget(f, 400, 400);
450 WMSetFrameRelief(f, WRFlat);
452 for (i=0; i<20; i++) {
453 l = WMCreateLabel(f);
454 WMResizeWidget(l, 50, 18);
455 WMMoveWidget(l, 10, 20*i);
456 sprintf(buffer, "Label %i", i);
457 WMSetLabelText(l, buffer);
458 WMSetLabelRelief(l, WRSimple);
460 WMMapSubwidgets(f);
461 WMMapWidget(f);
463 WMSetScrollViewContentView(sview, WMWidgetView(f));
465 /* make the windows of the widgets be actually created */
466 WMRealizeWidget(win);
468 /* Map all child widgets of the top-level be mapped.
469 * You must call this for each container widget (like frames),
470 * even if they are childs of the top-level window.
472 WMMapSubwidgets(win);
474 /* map the top-level window */
475 WMMapWidget(win);
479 void
480 testColorWell(WMScreen *scr)
482 WMWindow *win;
483 WMColorWell *well1, *well2;
485 windowCount++;
487 win = WMCreateWindow(scr, "testColor");
488 WMResizeWidget(win, 300, 300);
489 WMSetWindowCloseAction(win, closeAction, NULL);
491 well1 = WMCreateColorWell(win);
492 WMResizeWidget(well1, 60, 40);
493 WMMoveWidget(well1, 100, 100);
494 WMSetColorWellColor(well1, WMCreateRGBColor(scr, 0x8888, 0, 0x1111, True));
495 well2 = WMCreateColorWell(win);
496 WMResizeWidget(well2, 60, 40);
497 WMMoveWidget(well2, 200, 100);
498 WMSetColorWellColor(well2, WMCreateRGBColor(scr, 0, 0, 0x8888, True));
500 WMRealizeWidget(win);
501 WMMapSubwidgets(win);
502 WMMapWidget(win);
506 void
507 testColorPanel(WMScreen *scr)
509 WMColorPanel *panel = WMGetColorPanel(scr);
511 /*if (colorname) {
512 startcolor = WMCreateNamedColor(scr, colorname, False);
513 WMSetColorPanelColor(panel, startcolor);
514 WMReleaseColor(startcolor);
517 WMShowColorPanel(panel);
520 void
521 sliderCallback(WMWidget *w, void *data)
523 printf("SLIDER == %i\n", WMGetSliderValue(w));
527 void
528 testSlider(WMScreen *scr)
530 WMWindow *win;
531 WMSlider *s;
533 windowCount++;
535 win = WMCreateWindow(scr, "testSlider");
536 WMResizeWidget(win, 300, 300);
537 WMSetWindowTitle(win, "Sliders");
539 WMSetWindowCloseAction(win, closeAction, NULL);
541 s = WMCreateSlider(win);
542 WMResizeWidget(s, 16, 100);
543 WMMoveWidget(s, 100, 100);
544 WMSetSliderKnobThickness(s, 8);
545 WMSetSliderContinuous(s, False);
546 WMSetSliderAction(s, sliderCallback, s);
548 s = WMCreateSlider(win);
549 WMResizeWidget(s, 100, 16);
550 WMMoveWidget(s, 100, 10);
551 WMSetSliderKnobThickness(s, 8);
553 WMRealizeWidget(win);
554 WMMapSubwidgets(win);
555 WMMapWidget(win);
559 void
560 testTextField(WMScreen *scr)
562 WMWindow *win;
563 WMTextField *field, *field2;
565 windowCount++;
567 win = WMCreateWindow(scr, "testTextField");
568 WMResizeWidget(win, 400, 300);
570 WMSetWindowCloseAction(win, closeAction, NULL);
572 field = WMCreateTextField(win);
573 WMResizeWidget(field, 200, 20);
574 WMMoveWidget(field, 20, 20);
576 field2 = WMCreateTextField(win);
577 WMResizeWidget(field2, 200, 20);
578 WMMoveWidget(field2, 20, 50);
579 WMSetTextFieldAlignment(field2, WARight);
581 WMRealizeWidget(win);
582 WMMapSubwidgets(win);
583 WMMapWidget(win);
588 void
589 testText(WMScreen *scr)
591 WMWindow *win;
592 WMText *text;
593 FILE *file = fopen("wm.html", "rb");
595 windowCount++;
597 win = WMCreateWindow(scr, "testText");
598 WMResizeWidget(win, 500, 300);
600 WMSetWindowCloseAction(win, closeAction, NULL);
602 text = WMCreateText(win);
603 WMResizeWidget(text, 480, 280);
604 WMMoveWidget(text, 10, 10);
605 WMSetTextHasVerticalScroller(text, True);
606 WMSetTextEditable(text, False);
609 WMFont *font, *ifont;
611 font = WMDefaultSystemFont(scr);
612 //ifont = WMCopyFontWithStyle(scr, font, WFSEmphasized);
613 ifont = WMCreateFont(scr, "verdana,sans:pixelsize=12:italic");
614 if (ifont) {
615 WMSetTextDefaultFont(text, ifont);
616 WMReleaseFont(ifont);
617 } else {
618 WMSetTextDefaultFont(text, font);
620 WMReleaseFont(font);
623 if (file) {
624 char buf[1024];
626 WMFreezeText(text);
627 while(fgets(buf, 1023, file))
628 WMAppendTextStream(text, buf);
630 fclose(file);
631 WMThawText(text);
632 } else {
633 WMAppendTextStream(text,
634 "Window Maker is the GNU window manager for the "
635 "X Window System. It was designed to emulate the "
636 "look and feel of part of the NEXTSTEP(tm) GUI. Its "
637 "supposed to be relatively fast and small, feature "
638 "rich, easy to configure and easy to use, with a simple "
639 "and elegant appearance borrowed from NEXTSTEP(tm).");
642 WMRealizeWidget(win);
643 WMMapSubwidgets(win);
644 WMMapWidget(win);
648 void
649 testProgressIndicator(WMScreen *scr)
651 WMWindow *win;
652 WMProgressIndicator *pPtr;
654 windowCount++;
656 win = WMCreateWindow(scr, "testProgressIndicator");
657 WMResizeWidget(win, 292, 32);
659 WMSetWindowCloseAction(win, closeAction, NULL);
661 pPtr = WMCreateProgressIndicator(win);
662 WMMoveWidget(pPtr, 8, 8);
663 WMSetProgressIndicatorValue(pPtr, 75);
665 WMRealizeWidget(win);
666 WMMapSubwidgets(win);
667 WMMapWidget(win);
672 void
673 testPullDown(WMScreen *scr)
675 WMWindow *win;
676 WMPopUpButton *pop, *pop2;
678 windowCount++;
680 win = WMCreateWindow(scr, "pullDown");
681 WMResizeWidget(win, 400, 300);
683 WMSetWindowCloseAction(win, closeAction, NULL);
685 pop = WMCreatePopUpButton(win);
686 WMResizeWidget(pop, 100, 20);
687 WMMoveWidget(pop, 50, 60);
688 WMSetPopUpButtonPullsDown(pop, True);
689 WMSetPopUpButtonText(pop, "Commands");
690 WMAddPopUpButtonItem(pop, "Add");
691 WMAddPopUpButtonItem(pop, "Remove");
692 WMAddPopUpButtonItem(pop, "Check");
693 WMAddPopUpButtonItem(pop, "Eat");
695 pop2 = WMCreatePopUpButton(win);
696 WMResizeWidget(pop2, 100, 20);
697 WMMoveWidget(pop2, 200, 60);
698 WMSetPopUpButtonText(pop2, "Select");
699 WMAddPopUpButtonItem(pop2, "Apples");
700 WMAddPopUpButtonItem(pop2, "Bananas");
701 WMAddPopUpButtonItem(pop2, "Strawberries");
702 WMAddPopUpButtonItem(pop2, "Blueberries");
704 WMRealizeWidget(win);
705 WMMapSubwidgets(win);
706 WMMapWidget(win);
711 void
712 testTabView(WMScreen *scr)
714 WMWindow *win;
715 WMTabView *tabv;
716 WMTabViewItem *tab;
717 WMFrame *frame;
718 WMLabel *label;
720 windowCount++;
722 win = WMCreateWindow(scr, "testTabs");
723 WMResizeWidget(win, 400, 300);
725 WMSetWindowCloseAction(win, closeAction, NULL);
727 tabv = WMCreateTabView(win);
728 WMMoveWidget(tabv, 50, 50);
729 WMResizeWidget(tabv, 300, 200);
731 frame = WMCreateFrame(win);
732 WMSetFrameRelief(frame, WRFlat);
733 label = WMCreateLabel(frame);
734 WMResizeWidget(label, 100, 100);
735 WMSetLabelText(label, "Label 1");
736 WMMapWidget(label);
739 tab = WMCreateTabViewItemWithIdentifier(0);
740 WMSetTabViewItemView(tab, WMWidgetView(frame));
741 WMAddItemInTabView(tabv, tab);
742 WMSetTabViewItemLabel(tab, "Instances");
744 frame = WMCreateFrame(win);
745 WMSetFrameRelief(frame, WRFlat);
746 label = WMCreateLabel(frame);
747 WMResizeWidget(label, 40, 50);
748 WMSetLabelText(label, "Label 2");
749 WMMapWidget(label);
752 tab = WMCreateTabViewItemWithIdentifier(0);
753 WMSetTabViewItemView(tab, WMWidgetView(frame));
754 WMAddItemInTabView(tabv, tab);
755 WMSetTabViewItemLabel(tab, "Classes");
758 frame = WMCreateFrame(win);
759 WMSetFrameRelief(frame, WRFlat);
760 label = WMCreateLabel(frame);
761 WMResizeWidget(label, 100, 100);
762 WMMoveWidget(label, 60, 40);
763 WMSetLabelText(label, "Label 3");
764 WMMapWidget(label);
766 tab = WMCreateTabViewItemWithIdentifier(0);
767 WMSetTabViewItemView(tab, WMWidgetView(frame));
768 WMAddItemInTabView(tabv, tab);
769 WMSetTabViewItemLabel(tab, "Something");
772 frame = WMCreateFrame(win);
773 WMSetFrameRelief(frame, WRFlat);
774 label = WMCreateLabel(frame);
775 WMResizeWidget(label, 100, 100);
776 WMMoveWidget(label, 160, 40);
777 WMSetLabelText(label, "Label 4");
778 WMMapWidget(label);
780 tab = WMCreateTabViewItemWithIdentifier(0);
781 WMSetTabViewItemView(tab, WMWidgetView(frame));
782 WMAddItemInTabView(tabv, tab);
783 WMSetTabViewItemLabel(tab, "Bla!");
787 frame = WMCreateFrame(win);
788 WMSetFrameRelief(frame, WRFlat);
789 label = WMCreateLabel(frame);
790 WMResizeWidget(label, 100, 100);
791 WMMoveWidget(label, 160, 40);
792 WMSetLabelText(label, "Label fjweqklrj qwl");
793 WMMapWidget(label);
794 tab = WMCreateTabViewItemWithIdentifier(0);
795 WMSetTabViewItemView(tab, WMWidgetView(frame));
796 WMAddItemInTabView(tabv, tab);
797 WMSetTabViewItemLabel(tab, "Weee!");
800 WMRealizeWidget(win);
801 WMMapSubwidgets(win);
802 WMMapWidget(win);
806 void
807 splitViewConstrainProc(WMSplitView *sPtr, int indView,
808 int *minSize, int *maxSize)
810 switch (indView) {
811 case 0:
812 *minSize = 20;
813 break;
814 case 1:
815 *minSize = 40;
816 *maxSize = 80;
817 break;
818 case 2:
819 *maxSize = 60;
820 break;
821 default:
822 break;
827 static void
828 resizeSplitView(XEvent *event, void *data)
830 WMSplitView *sPtr = (WMSplitView*)data;
832 if (event->type == ConfigureNotify) {
833 int width = event->xconfigure.width - 10;
835 if (width < WMGetSplitViewDividerThickness(sPtr))
836 width = WMGetSplitViewDividerThickness(sPtr);
838 if (width != WMWidgetWidth(sPtr) ||
839 event->xconfigure.height != WMWidgetHeight(sPtr))
840 WMResizeWidget(sPtr, width, event->xconfigure.height - 55);
844 void
845 appendSubviewButtonAction(WMWidget *self, void *data)
847 WMSplitView *sPtr = (WMSplitView*)data;
848 char buf[64];
849 WMLabel *label = WMCreateLabel(sPtr);
851 sprintf(buf, "Subview %d", WMGetSplitViewSubviewsCount(sPtr) + 1);
852 WMSetLabelText(label, buf);
853 WMSetLabelRelief(label, WRSunken);
854 WMAddSplitViewSubview(sPtr, WMWidgetView(label));
855 WMRealizeWidget(label);
856 WMMapWidget(label);
859 void
860 removeSubviewButtonAction(WMWidget *self, void *data)
862 WMSplitView *sPtr = (WMSplitView*)data;
863 int count = WMGetSplitViewSubviewsCount(sPtr);
865 if (count > 2) {
866 WMView *view = WMGetSplitViewSubviewAt(sPtr, count-1);
867 WMDestroyWidget(WMWidgetOfView(view));
868 WMRemoveSplitViewSubviewAt(sPtr, count-1);
872 void
873 orientationButtonAction(WMWidget *self, void *data)
875 WMSplitView *sPtr = (WMSplitView*)data;
876 WMSetSplitViewVertical(sPtr, !WMGetSplitViewVertical(sPtr));
879 void
880 adjustSubviewsButtonAction(WMWidget *self, void *data)
882 WMAdjustSplitViewSubviews((WMSplitView*)data);
885 void
886 testSplitView(WMScreen *scr)
888 WMWindow *win;
889 WMSplitView *splitv1, *splitv2;
890 WMFrame *frame;
891 WMLabel *label;
892 WMButton *button;
894 windowCount++;
896 win = WMCreateWindow(scr, "testTabs");
897 WMResizeWidget(win, 300, 400);
898 WMSetWindowCloseAction(win, closeAction, NULL);
900 frame = WMCreateFrame(win);
901 WMSetFrameRelief(frame, WRSunken);
902 WMMoveWidget(frame, 5, 5);
903 WMResizeWidget(frame, 290, 40);
905 splitv1 = WMCreateSplitView(win);
906 WMMoveWidget(splitv1, 5, 50);
907 WMResizeWidget(splitv1, 290, 345);
908 WMSetSplitViewConstrainProc(splitv1, splitViewConstrainProc);
909 WMCreateEventHandler(WMWidgetView(win), StructureNotifyMask,
910 resizeSplitView, splitv1);
912 button = WMCreateCommandButton(frame);
913 WMSetButtonText(button, "+");
914 WMSetButtonAction(button, appendSubviewButtonAction, splitv1);
915 WMMoveWidget(button, 10, 8);
916 WMMapWidget(button);
918 button = WMCreateCommandButton(frame);
919 WMSetButtonText(button, "-");
920 WMSetButtonAction(button, removeSubviewButtonAction, splitv1);
921 WMMoveWidget(button, 80, 8);
922 WMMapWidget(button);
924 button = WMCreateCommandButton(frame);
925 WMSetButtonText(button, "=");
926 WMMoveWidget(button, 150, 8);
927 WMSetButtonAction(button, adjustSubviewsButtonAction, splitv1);
928 WMMapWidget(button);
930 button = WMCreateCommandButton(frame);
931 WMSetButtonText(button, "#");
932 WMMoveWidget(button, 220, 8);
933 WMSetButtonAction(button, orientationButtonAction, splitv1);
934 WMMapWidget(button);
936 label = WMCreateLabel(splitv1);
937 WMSetLabelText(label, "Subview 1");
938 WMSetLabelRelief(label, WRSunken);
939 WMMapWidget(label);
940 WMAddSplitViewSubview(splitv1, WMWidgetView(label));
942 splitv2 = WMCreateSplitView(splitv1);
943 WMResizeWidget(splitv2, 150, 150);
944 WMSetSplitViewVertical(splitv2, True);
946 label = WMCreateLabel(splitv2);
947 WMSetLabelText(label, "Subview 2.1");
948 WMSetLabelRelief(label, WRSunken);
949 WMMapWidget(label);
950 WMAddSplitViewSubview(splitv2, WMWidgetView(label));
952 label = WMCreateLabel(splitv2);
953 WMSetLabelText(label, "Subview 2.2");
954 WMSetLabelRelief(label, WRSunken);
955 WMMapWidget(label);
956 WMAddSplitViewSubview(splitv2, WMWidgetView(label));
958 label = WMCreateLabel(splitv2);
959 WMSetLabelText(label, "Subview 2.3");
960 WMSetLabelRelief(label, WRSunken);
961 WMMapWidget(label);
962 WMAddSplitViewSubview(splitv2, WMWidgetView(label));
964 WMMapWidget(splitv2);
965 WMAddSplitViewSubview(splitv1, WMWidgetView(splitv2));
967 WMRealizeWidget(win);
968 WMMapSubwidgets(win);
969 WMMapWidget(win);
973 void
974 testUD()
976 WMUserDefaults *defs;
977 char str[32];
979 defs = WMGetStandardUserDefaults();
981 sprintf(str, "TEST DATA");
982 puts(str);
983 WMSetUDStringForKey(defs, str, "testKey");
984 puts(str);
989 main(int argc, char **argv)
991 WMScreen *scr;
992 WMPixmap *pixmap;
995 /* Initialize the application */
996 WMInitializeApplication("Test@eqweq_ewq$eqw", &argc, argv);
998 testUD();
1001 * Open connection to the X display.
1003 dpy = XOpenDisplay("");
1005 if (!dpy) {
1006 puts("could not open display");
1007 exit(1);
1010 /* This is used to disable buffering of X protocol requests.
1011 * Do NOT use it unless when debugging. It will cause a major
1012 * slowdown in your application
1014 #if 0
1015 XSynchronize(dpy, True);
1016 #endif
1018 * Create screen descriptor.
1020 scr = WMCreateScreen(dpy, DefaultScreen(dpy));
1023 * Loads the logo of the application.
1025 pixmap = WMCreatePixmapFromFile(scr, "logo.xpm");
1028 * Makes the logo be used in standard dialog panels.
1030 if (pixmap) {
1031 WMSetApplicationIconPixmap(scr, pixmap);
1032 WMReleasePixmap(pixmap);
1036 * Do some test stuff.
1038 * Put the testSomething() function you want to test here.
1041 testText(scr);
1042 testFontPanel(scr);
1044 testColorPanel(scr);
1046 testFrame(scr);
1047 #if 0
1049 testBox(scr);
1050 testButton(scr);
1051 testColorPanel(scr);
1052 testColorWell(scr);
1053 testDragAndDrop(scr);
1054 testFrame(scr);
1055 testGradientButtons(scr);
1056 testList(scr);
1057 testOpenFilePanel(scr);
1058 testProgressIndicator(scr);
1059 testPullDown(scr);
1060 testScrollView(scr);
1061 testSlider(scr);
1062 testSplitView(scr);
1063 testTabView(scr);
1064 testTextField(scr);
1065 #endif
1067 * The main event loop.
1070 WMScreenMainLoop(scr);
1072 return 0;