gwenhywfar 5.14.1
fox16_gui_dialog.cpp
Go to the documentation of this file.
1/***************************************************************************
2 begin : Fri Jan 22 2010
3 copyright : (C) 2010 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10#ifdef HAVE_CONFIG_H
11# include <config.h>
12#endif
13
16#include "fox16_htmllabel.hpp"
17#include "fox16_htmltext.hpp"
18
19#include "theme.h"
20
21#include <gwenhywfar/dialog_be.h>
22#include <gwenhywfar/directory.h>
23#include <gwenhywfar/debug.h>
24
25#include <list>
26#include <string>
27#include <assert.h>
28
29#include <fxkeys.h>
30
31
32#define FOX16_DIALOG_WIDGET_REAL 0
33#define FOX16_DIALOG_WIDGET_CONTENT 1
34
35#define FOX16_DIALOG_STRING_TITLE 0
36#define FOX16_DIALOG_STRING_VALUE 1
37
38
39
40
41
48
49
50FXIMPLEMENT(FOX16_GuiDialog, FXObject, FOX16_GuiDialogMap, ARRAYNUMBER(FOX16_GuiDialogMap))
51
52
53
55 :FXObject()
56 ,CppDialog()
57 ,_gui(NULL)
58 ,_widgetCount(0)
61 ,m_sizeChanged(FALSE) {
62}
63
64
65
67 :FXObject()
68 ,CppDialog(dlg)
69 ,_gui(gui)
70 ,_widgetCount(0)
73 ,m_sizeChanged(FALSE) {
74}
75
76
77
79 if (_mainWidget)
80 delete _mainWidget;
81 if (!m_iconList.empty()) {
82 std::list<FXIcon*>::iterator it;
83
84 for (it=m_iconList.begin(); it!=m_iconList.end(); it++)
85 delete *it;
86 m_iconList.clear();
87 }
88 if (m_iconSource)
89 delete m_iconSource;
90
91 if (!m_radioGroups.empty()) {
92 std::list<RadioButtonGroup*>::iterator it;
93
94 for (it=m_radioGroups.begin(); it!=m_radioGroups.end(); it++)
95 delete *it;
96 }
97}
98
99
100
102 CppDialog *cppDlg;
103
104 cppDlg=CppDialog::getDialog(dlg);
105 if (cppDlg)
106 return dynamic_cast<FOX16_GuiDialog*>(cppDlg);
107 return NULL;
108}
109
110
111
112FXIcon *FOX16_GuiDialog::getIcon(const char *fileName) {
113 GWEN_STRINGLIST *sl;
114
116 if (sl) {
117 GWEN_BUFFER *tbuf;
118 int rv;
119 FXIcon *ic;
120
121 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
122 rv=GWEN_Directory_FindFileInPaths(sl, fileName, tbuf);
123 if (rv<0) {
124 DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv);
125 GWEN_Buffer_free(tbuf);
126 return NULL;
127 }
128
129 if (m_iconSource==NULL)
130 m_iconSource=new FXIconSource(FXApp::instance());
131
132 DBG_DEBUG(GWEN_LOGDOMAIN, "Loading [%s]", GWEN_Buffer_GetStart(tbuf));
133 ic=m_iconSource->loadIconFile(GWEN_Buffer_GetStart(tbuf));
134 if (ic==NULL) {
135 DBG_ERROR(GWEN_LOGDOMAIN, "Could not load icon [%s]", GWEN_Buffer_GetStart(tbuf));
136 GWEN_Buffer_free(tbuf);
137 return NULL;
138 }
139 m_iconList.push_back(ic);
140 GWEN_Buffer_free(tbuf);
141 return ic;
142 }
143 else {
144 DBG_ERROR(GWEN_LOGDOMAIN, "No media paths in dialog");
145 return NULL;
146 }
147}
148
149
150
152 FXDialogBox *dialogBox;
153 int rv;
154
155 dialogBox=_mainWidget;
156
157 /* execute dialog */
158 dialogBox->layout();
159 dialogBox->show(PLACEMENT_OWNER);
160 dialogBox->recalc(); /* set DIRTY flag */
161 dialogBox->resize(dialogBox->getWidth(), dialogBox->getHeight());
162 rv=dialogBox->execute();
164
165 if (rv==0) {
166 /* aborted */
167 return 0;
168 }
169 else
170 /* accepted */
171 return 1;
172}
173
174
177 int index,
178 int value,
179 int doSignal) {
180 DBG_DEBUG(GWEN_LOGDOMAIN, "SetIntProperty([%s], %d)", GWEN_Widget_GetName(w), value);
181
182 switch(GWEN_Widget_GetType(w)) {
184 return GWEN_ERROR_GENERIC;
185
187 return GWEN_ERROR_GENERIC;
188
190 THEMECOMBOBOX *f;
191
193 assert(f);
194
195 switch(prop) {
197 if (value<f->getNumItems()) {
198 f->setCurrentItem(value, doSignal?TRUE:FALSE);
199 return 0;
200 }
201 else {
202 DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range in widget [%s]", value, GWEN_Widget_GetName(w));
203 return GWEN_ERROR_INVALID;
204 }
205
207 f->clearItems();
208 return 0;
209
210 default:
211 break;
212 }
213 break;
214 }
215
217 FXRadioButton *f;
218
220 assert(f);
221
222 switch(prop) {
224 f->setCheck((value==0)?FALSE:TRUE, doSignal?TRUE:FALSE);
225 return 0;
226
227 default:
228 break;
229 }
230 break;
231 }
232
234 FXProgressBar *f;
235
237 assert(f);
238
239 switch(prop) {
241 f->setProgress(value);
242 return 0;
243
245 if (value!=0) {
246 DBG_ERROR(GWEN_LOGDOMAIN, "MinValue should be 0!");
247 return GWEN_ERROR_INVALID;
248 }
249 return 0;
250
252 f->setTotal(value);
253 return 0;
254
255 default:
256 break;
257 }
258 break;
259 }
260
262 FXSpinner *f;
263
265 assert(f);
266
267 switch(prop) {
269 f->setValue(value);
270 return 0;
271
273 FXint lo, hi;
274
275 f->getRange(lo, hi);
276 lo=value;
277 f->setRange(lo, hi);
278 return 0;
279 }
280
282 FXint lo, hi;
283
284 f->getRange(lo, hi);
285 hi=value;
286 if (hi<lo)
287 hi=lo;
288 f->setRange(lo, hi);
289 return 0;
290 }
291
292 default:
293 break;
294 }
295 break;
296 }
297
300 FXFoldingItem *fi;
301
303 assert(f);
304
305 switch(prop) {
307 fi=f->getItem(value);
308 if (fi) {
309 f->killSelection();
310 f->setCurrentItem(fi, doSignal?TRUE:FALSE);
311 f->selectItem(fi);
312 f->makeItemVisible(fi);
313 }
314 else {
315 DBG_ERROR(GWEN_LOGDOMAIN, "Value %d out of range", value);
316 return GWEN_ERROR_INVALID;
317 }
318 return 0;
319
321 f->setHeaderSize(index, value);
322 return 0;
323
325 switch(value) {
327 /* simply fall-through */
329 f->setListStyle(FOLDINGLIST_BROWSESELECT);
330 return 0;
332 f->setListStyle(FOLDINGLIST_EXTENDEDSELECT);
333 return 0;
334 ;
335 }
336 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", value);
337 return GWEN_ERROR_INVALID;
338
340 FXFoldingItem *ti;
341
342 ti=f->getItem(index);
343 if (ti==NULL) {
344 DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range", index);
345 return GWEN_ERROR_INVALID;
346 }
347 ti->setSelected((value==0)?FALSE:TRUE);
348 return 0;
349 }
350
352 f->clearItems();
353 return 0;
354
356 int i;
357
358 for (i=0; i<f->getNumHeaders(); i++) {
359 if (i==index) {
360 switch(value) {
362 f->setHeaderArrowDir(i, MAYBE);
363 break;
365 f->setHeaderArrowDir(i, TRUE);
366 break;
368 f->setHeaderArrowDir(i, FALSE);
369 break;
370 }
371 }
372 else
373 f->setHeaderArrowDir(i, MAYBE);
374 }
375
376 switch(value) {
378 break;
380 f->sortByColumn(i, true);
381 break;
383 f->sortByColumn(i, false);
384 break;
385 }
386 }
387 return 0;
388
390 int i;
391
392 for (i=0; i<f->getNumHeaders(); i++) {
393 FXbool b;
394
395 b=f->getHeaderArrowDir(i);
396 if (b!=MAYBE) {
397 if (b==TRUE)
398 f->sortByColumn(i, true);
399 else
400 f->sortByColumn(i, false);
401 break;
402 }
403 }
404 }
405 return 0;
406
407
408 default:
409 break;
410 }
411 break;
412 }
413
415 FXCheckButton *f;
416
418 assert(f);
419
420 switch(prop) {
422 f->setCheck((value==0)?FALSE:TRUE, doSignal?TRUE:FALSE);
423 return 0;
424
425 default:
426 break;
427 }
428 break;
429 }
430
432 FXTabBook *f;
433
435 assert(f);
436
437 switch(prop) {
439 f->setCurrent(value, doSignal?TRUE:FALSE);
440 return 0;
441
442 default:
443 break;
444 }
445 break;
446 }
447
449 FXSwitcher *f;
450
452 assert(f);
453
454 switch(prop) {
456 f->setCurrent(value, doSignal?TRUE:FALSE);
457 return 0;
458
459 default:
460 break;
461 }
462 break;
463 }
464
467 {
468 FXSplitter *f;
469
471 assert(f);
472
473 switch(prop) {
475 f->setSplit(0, value);
476 return 0;
477
478 default:
479 break;
480 }
481 break;
482 }
483
484
501 ;
502 }
503
504 {
505 FXWindow *f;
506
508 assert(f);
509
510 switch(prop) {
512 f->recalc();
513 f->resize(value, f->getHeight());
514 m_sizeChanged=TRUE;
515 return 0;
517 f->recalc();
518 f->resize(f->getWidth(), value);
519 m_sizeChanged=TRUE;
520 return 0;
522 if (value==0)
523 f->disable();
524 else
525 f->enable();
526 return 0;
527
529 f->setFocus();
530 return 0;
531
533 if (value==0) {
534 f->hide();
535 f->recalc();
536 }
537 else {
538 f->show();
539 f->recalc();
540 }
541 return 0;
542
559 ;
560 }
561 }
562
563 DBG_WARN(0, "Function is not appropriate for this type of widget (%s)",
565 return GWEN_ERROR_INVALID;
566}
567
568
569
572 int index,
573 int defaultValue) {
574 switch(GWEN_Widget_GetType(w)) {
577 return defaultValue;
578
580 THEMECOMBOBOX *f;
581
583 assert(f);
584
585 switch(prop) {
587 return f->getCurrentItem();
588
590 return f->getNumItems();
591
592 default:
593 break;
594 }
595 break;
596 }
597
599 FXRadioButton *f;
600
602 assert(f);
603
604 switch(prop) {
606 return (f->getCheck()==TRUE)?1:0;
607
608 default:
609 break;
610 }
611 break;
612 }
613
615 FXProgressBar *f;
616
618 assert(f);
619
620 switch(prop) {
622 return f->getProgress();
623
625 return 0;
626
628 return f->getTotal();
629
630 default:
631 break;
632 }
633
634 break;
635 }
636
638 FXSpinner *f;
639
641 assert(f);
642
643 switch(prop) {
645 return f->getValue();
646
648 FXint lo, hi;
649
650 f->getRange(lo, hi);
651 return lo;
652 }
653
655 FXint lo, hi;
656
657 f->getRange(lo, hi);
658 return hi;
659 }
660
661 default:
662 break;
663 }
664
665 break;
666 }
667
670 FXFoldingItem *fi;
671 int i=0;
672
674 assert(f);
675
676 switch(prop) {
678 fi=f->getCurrentItem();
679 if (fi==NULL)
680 return defaultValue;
681 else {
682 FXFoldingItem *ti;
683
684 ti=fi;
685 while( (ti=ti->getPrev()) )
686 i++;
687
688 return i;
689 }
690
692 return f->getNumItems();
693
695 return f->getHeaderSize(index);
696
698 switch(f->getListStyle()) {
699 case FOLDINGLIST_BROWSESELECT:
701 case FOLDINGLIST_EXTENDEDSELECT:
703 default:
705 }
706 break;
707 }
708
710 FXFoldingItem *ti;
711 int i=index;
712
713 ti=f->getFirstItem();
714 while(ti && i) {
715 ti=ti->getNext();
716 i--;
717 }
718
719 if (ti)
720 return (ti->isSelected()==TRUE)?1:0;
721 return defaultValue;
722 }
723
725 int i;
726
727 for (i=0; i<f->getNumHeaders(); i++) {
728 if (i==index) {
729 FXbool b;
730
731 b=f->getHeaderArrowDir(i);
732 if (b==MAYBE)
734 else if (b==TRUE)
736 else
738 }
739 }
740 DBG_ERROR(GWEN_LOGDOMAIN, "Column %d out of range", index);
741 }
742 return defaultValue;
743
744 default:
745 break;
746 }
747
748 break;
749 }
750
752 FXCheckButton *f;
753
755 assert(f);
756
757 switch(prop) {
759 return (f->getCheck()==TRUE)?1:0;
760
761 default:
762 break;
763 }
764
765 break;
766 }
767
769 FXTabBook *f;
770
772 assert(f);
773
774 switch(prop) {
776 return f->getCurrent();
777
778 default:
779 break;
780 }
781
782 break;
783 }
784
786 FXSwitcher *f;
787
789 assert(f);
790
791 switch(prop) {
793 return f->getCurrent();
794
795 default:
796 break;
797 }
798
799 break;
800 }
801
804 {
805 FXSplitter *f;
806
808 assert(f);
809 switch(prop) {
811 return f->getSplit(0);
812
813 default:
814 break;
815 }
816
817 break;
818 }
819
820
837 break;
838 }
839
840 /* generic properties every widget has */
841 {
842 FXWindow *f;
843
845 assert(f);
846
847 switch(prop) {
849 return f->getWidth();
850
852 return f->getHeight();
853
855 return (f->isEnabled()==TRUE)?1:0;
856
858 return (f->hasFocus())?1:0;
859
861 return f->id();
862
879 ;
880 }
881 }
882
883
884 DBG_WARN(0, "Function is not appropriate for this type of widget (%s)",
886 return defaultValue;
887}
888
889
890
893 int index,
894 const char *value,
895 int doSignal) {
896
897 FXString strValue;
898 FXString htmlValue;
899
900 if (value && *value) {
901 strValue=FOX16_Gui::getRawText(value);
902 htmlValue=FOX16_Gui::getHtmlText(value);
903 }
904
905 switch(GWEN_Widget_GetType(w)) {
907 return GWEN_ERROR_GENERIC;
909 return GWEN_ERROR_GENERIC;
910
913
915 assert(f);
916
917 switch(prop) {
919 f->setText(htmlValue);
920 return 0;
921
922 default:
923 break;
924 }
925 break;
926 }
927
930
932 assert(f);
933
934 switch(prop) {
936 f->setText(htmlValue);
937 f->makePositionVisible(strValue.length());
938 return 0;
939
941 f->setText(f->getText()+htmlValue);
942 return 0;
943
945 f->setText("");
946 return 0;
947
948 default:
949 break;
950 }
951 break;
952
953 }
954
956 THEMEBUTTON *f;
957
959 assert(f);
960
961 switch(prop) {
963 f->setText(value);
964 return 0;
965
967 f->setTipText(htmlValue);
968 return 0;
969
970 default:
971 break;
972 }
973 break;
974 }
975
977 FXTextField *f;
978
980 assert(f);
981
982 switch(prop) {
984 f->setText(value, doSignal?TRUE:FALSE);
985 return 0;
986
988 f->setTipText(htmlValue);
989 return 0;
990
991 default:
992 break;
993 }
994 break;
995 }
996
998 FXText *f;
999
1001 assert(f);
1002
1003 switch(prop) {
1005 f->setText(strValue);
1006 return 0;
1007
1009 f->setTipText(htmlValue);
1010 return 0;
1011
1012 default:
1013 break;
1014 }
1015 break;
1016 }
1017
1019 THEMECOMBOBOX *f;
1020
1022 assert(f);
1023
1024 switch(prop) {
1026 // undefined
1027 break;
1028
1030 f->setTipText(htmlValue);
1031 return 0;
1032
1034 int i;
1035
1036 f->appendItem(strValue);
1037 i=f->getNumItems();
1038 if (i>10)
1039 i=10;
1040 f->setNumVisible(i);
1041 return 0;
1042 }
1043
1045 f->clearItems();
1046 return 0;
1047
1048 default:
1049 break;
1050 }
1051 break;
1052 }
1053
1055 FXGroupBox *f;
1056
1058 assert(f);
1059
1060 switch(prop) {
1062 f->setText(strValue);
1063 return 0;
1064 default:
1065 break;
1066 }
1067 break;
1068 }
1069
1071 FXRadioButton *f;
1072
1074 assert(f);
1075
1076 switch(prop) {
1078 f->setText(strValue);
1079 return 0;
1080
1082 f->setTipText(htmlValue);
1083 return 0;
1084
1085 default:
1086 break;
1087 }
1088 break;
1089 }
1090
1092 FXCheckButton *f;
1093
1095 assert(f);
1096
1097 switch(prop) {
1099 f->setText(strValue);
1100 return 0;
1101
1103 f->setTipText(htmlValue);
1104 return 0;
1105
1106 default:
1107 break;
1108 }
1109 break;
1110 }
1111
1113 FXWindow *f1;
1114 THEMETABITEM *f2;
1115
1117 assert(f1);
1118 f2=(THEMETABITEM*) (f1->getPrev());
1119 assert(f2);
1120
1121 switch(prop) {
1123 f2->setText(strValue);
1124 return 0;
1125
1127 f2->setTipText(htmlValue);
1128 return 0;
1129
1130 default:
1131 break;
1132 }
1133 break;
1134 }
1135
1137 FXDialogBox *f;
1138
1140 assert(f);
1141
1142 switch(prop) {
1144 f->setTitle(strValue);
1145 return 0;
1146 default:
1147 break;
1148 }
1149 break;
1150 }
1151
1153 FXFoldingList *f;
1154 FXString str;
1155 FXString t;
1156 FXint n=0;
1157
1159 assert(f);
1160
1161 switch(prop) {
1163 f->getHeader()->clearItems();
1164 str=strValue;
1165 while(!(t=str.section('\t',n)).empty()) {
1166 f->appendHeader(t, NULL, 20);
1167 n++;
1168 }
1169 return 0;
1170
1172 f->appendItem(NULL, strValue);
1173 return 0;
1174
1176 f->clearItems();
1177 return 0;
1178
1179 default:
1180 break;
1181 }
1182 break;
1183 }
1184
1186 FXSpinner *f;
1187
1189 assert(f);
1190
1191 switch(prop) {
1193 f->setTipText(htmlValue);
1194 return 0;
1195
1196 default:
1197 break;
1198 }
1199 break;
1200 }
1201
1215 ;
1216 }
1217
1218 /* this block is just to make sure we get warnings when new
1219 * properties are available but not handled here
1220 */
1221 switch(prop) {
1243 break;
1244 }
1245
1246 DBG_WARN(0, "Function is not appropriate for this type of widget (%s)",
1248 return GWEN_ERROR_INVALID;
1249}
1250
1251
1252
1255 int index,
1256 const char *defaultValue) {
1257 FXString str;
1258
1259 switch(GWEN_Widget_GetType(w)) {
1261 return defaultValue;
1263 return defaultValue;
1264
1265 case GWEN_Widget_TypeLabel: {
1266 FOX16_HtmlLabel *f;
1267
1269 assert(f);
1270
1271 switch(prop) {
1273 str=f->getText();
1274 if (str.empty())
1275 return defaultValue;
1276 else {
1279 }
1280
1281 default:
1282 break;
1283 }
1284 break;
1285 }
1286
1288 THEMEBUTTON *f;
1289
1291 assert(f);
1292
1293 switch(prop) {
1295 str=f->getText();
1296 if (str.empty())
1297 return defaultValue;
1298 else {
1301 }
1302
1303 default:
1304 break;
1305 }
1306 break;
1307 }
1308
1310 FXTextField *f;
1311
1313 assert(f);
1314
1315 switch(prop) {
1317 str=f->getText();
1318 if (str.empty())
1319 return defaultValue;
1320 else {
1323 }
1324
1325 default:
1326 break;
1327 }
1328 break;
1329 }
1330
1332 FXText *f;
1333
1335 assert(f);
1336
1337 switch(prop) {
1339 str=f->getText();
1340 if (str.empty())
1341 return defaultValue;
1342 else {
1345 }
1346
1347 default:
1348 break;
1349 }
1350 break;
1351 }
1352
1354 FOX16_HtmlText *f;
1355
1357 assert(f);
1358
1359 switch(prop) {
1361 str=f->getText();
1362 if (str.empty())
1363 return defaultValue;
1364 else {
1367 }
1368
1369 default:
1370 break;
1371 }
1372 break;
1373 }
1374
1376 THEMECOMBOBOX *f;
1377
1379 assert(f);
1380
1381 switch(prop) {
1383 if (index<f->getNumItems()) {
1384 str=f->getItem(index);
1385 if (str.empty())
1386 return defaultValue;
1387 else {
1390 }
1391 }
1392 else {
1393 DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range", index);
1394 return defaultValue;
1395 }
1396
1397 default:
1398 break;
1399 }
1400 break;
1401 }
1402
1404 FXGroupBox *f;
1405
1407 assert(f);
1408
1409 switch(prop) {
1411 str=f->getText();
1412 if (str.empty())
1413 return defaultValue;
1414 else {
1417 }
1418
1419 default:
1420 break;
1421 }
1422 break;
1423 }
1424
1426 FXRadioButton *f;
1427
1429 assert(f);
1430
1431 switch(prop) {
1433 str=f->getText();
1434 if (str.empty())
1435 return defaultValue;
1436 else {
1439 }
1440
1441 default:
1442 break;
1443 }
1444 break;
1445 }
1446
1448 FXCheckButton *f;
1449
1451 assert(f);
1452
1453 switch(prop) {
1455 str=f->getText();
1456 if (str.empty())
1457 return defaultValue;
1458 else {
1461 }
1462
1463 default:
1464 break;
1465 }
1466 break;
1467 }
1468
1470 FXWindow *f1;
1471 THEMETABITEM *f2;
1472
1474 assert(f1);
1475 f2=(THEMETABITEM*) (f1->getPrev());
1476 assert(f2);
1477
1478 switch(prop) {
1480 str=f2->getText();
1481 if (str.empty())
1482 return defaultValue;
1483 else {
1486 }
1487
1488 default:
1489 break;
1490 }
1491
1492 break;
1493 }
1494
1496 FXDialogBox *f;
1497
1499 assert(f);
1500
1501 switch(prop) {
1503 str=f->getTitle();
1504 if (str.empty())
1505 return defaultValue;
1506 else {
1509 }
1510
1511 default:
1512 break;
1513 }
1514 break;
1515 }
1516
1518 FXFoldingList *f;
1519 FXHeader *fh;
1520 FXFoldingItem *fi;
1521
1523 assert(f);
1524
1525 switch(prop) {
1527 fh=f->getHeader();
1528 if (fh) {
1529 int i;
1530
1531 for (i=0; i<fh->getNumItems(); i++) {
1532 if (!str.empty())
1533 str+="\t";
1534 str+=fh->getItemText(i);
1535 }
1536 }
1537
1538 if (str.empty())
1539 return defaultValue;
1540 else {
1543 }
1544
1546 fi=f->getFirstItem();
1547 if (fi) {
1548 int i=index;
1549
1550 while(fi && i>0) {
1551 fi=fi->getNext();
1552 i--;
1553 }
1554 if (fi) {
1555 str=fi->getText();
1556 if (str.empty())
1557 return defaultValue;
1560 }
1561 else {
1562 DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range", index);
1563 return defaultValue;
1564 }
1565 }
1566 else {
1567 DBG_ERROR(GWEN_LOGDOMAIN, "Empty list");
1568 return defaultValue;
1569 }
1570
1571 default:
1572 break;
1573 }
1574 break;
1575 }
1576
1577
1592 break;
1593 }
1594
1595 /* this block is just to make sure we get warnings when new
1596 * properties are available but not handled here
1597 */
1598 switch(prop) {
1620 break;
1621 }
1622
1623
1624 DBG_WARN(0, "Function is not appropriate for this type of widget (%s)",
1626 return defaultValue;
1627}
1628
1629
1630
1631
1632
1633long FOX16_GuiDialog::onSelCommand(FXObject *sender, FXSelector sel, void *ptr) {
1634 GWEN_WIDGET *w;
1635 const char *wname;
1637 FXDialogBox *dialogBox;
1638
1640 if (w==NULL) {
1641 if (!m_radioGroups.empty()) {
1642 std::list<RadioButtonGroup*>::iterator it;
1644
1645 for (it=m_radioGroups.begin(); it!=m_radioGroups.end(); it++) {
1646 if ((*it)->getDataTarget()==sender) {
1647 grp=*it;
1648 break;
1649 }
1650 }
1651
1652 if (grp==NULL) {
1653 DBG_WARN(GWEN_LOGDOMAIN, "Widget or RadioButtonGroup not found");
1654 return 0;
1655 }
1656 else {
1657 DBG_INFO(0, "Found button group %d: %d", grp->getGroupId(), grp->getRadioValue());
1658 // no signal for now
1659 return 1;
1660 }
1661 }
1662 }
1663 wname=GWEN_Widget_GetName(w);
1664
1665 dialogBox=_mainWidget;
1666
1667 DBG_DEBUG(GWEN_LOGDOMAIN, "Command for [%s] (type: %s)",
1668 wname?wname:"(unnamed)",
1670
1671 switch(GWEN_Widget_GetType(w)) {
1673 return GWEN_ERROR_GENERIC;
1674
1676 return GWEN_ERROR_GENERIC;
1677
1688 break;
1693 break;
1694
1695 case GWEN_Widget_TypeRadioButton: /* use SEL_UPDATED for FXRadioButton */
1713 /* nothing to do for these types */
1714 ;
1715 }
1716
1718 dialogBox->getApp()->stopModal(dialogBox, 1);
1719 }
1720 else if (rv==GWEN_DialogEvent_ResultReject) {
1721 dialogBox->getApp()->stopModal(dialogBox, 0);
1722 }
1723
1724 return 1;
1725}
1726
1727
1728
1729long FOX16_GuiDialog::onSelChanged(FXObject *sender, FXSelector sel, void *ptr) {
1730 GWEN_WIDGET *w;
1732 FXDialogBox *dialogBox;
1733
1735 if (w==NULL) {
1736 DBG_INFO(0, "Widget not found");
1737 return 0;
1738 }
1739
1740 dialogBox=_mainWidget;
1741
1742 switch(GWEN_Widget_GetType(w)) {
1744 return GWEN_ERROR_GENERIC;
1746 return GWEN_ERROR_GENERIC;
1752 break;
1753
1778 ;
1779 }
1780
1783 dialogBox->getApp()->stopModal(dialogBox, 1);
1784 }
1785 else if (rv==GWEN_DialogEvent_ResultReject) {
1787 dialogBox->getApp()->stopModal(dialogBox, 0);
1788 }
1789
1790 return 1;
1791}
1792
1793
1794
1795long FOX16_GuiDialog::onSelKeyPress(FXObject *sender, FXSelector sel, void *ptr) {
1796 GWEN_WIDGET *w;
1797 FXEvent* event=(FXEvent*)ptr;
1798 int rv;
1799
1801 if (w==NULL) {
1802 DBG_INFO(0, "Widget not found");
1803 return 0;
1804 }
1805
1806 switch(GWEN_Widget_GetType(w)) {
1809 return 0;
1810
1812 /* catch ENTER key */
1813 if (event->code==KEY_Return || event->code==KEY_KP_Enter) {
1814 return 1;
1815 }
1816 return 0;
1817
1845 return 1;
1846 }
1847
1848 return 0;
1849}
1850
1851
1852
1853long FOX16_GuiDialog::onSelKeyRelease(FXObject *sender, FXSelector sel, void *ptr) {
1854 GWEN_WIDGET *w;
1855 FXEvent* event=(FXEvent*)ptr;
1856 int rv;
1857
1859 if (w==NULL) {
1860 DBG_INFO(0, "Widget not found");
1861 return 0;
1862 }
1863
1864 switch(GWEN_Widget_GetType(w)) {
1866 /* catch ENTER key */
1867 if (event->code==KEY_Return || event->code==KEY_KP_Enter) {
1868 return 1;
1869 }
1870 return 0;
1871
1901 return 1;
1902 }
1903
1904 return 0;
1905}
1906
1907
1908
1909bool FOX16_GuiDialog::setup(FXWindow *parentWindow) {
1910 FXWindow *xw;
1911 GWEN_WIDGET_TREE *wtree;
1912 GWEN_WIDGET *w;
1913 int rv;
1914
1916 if (wtree==NULL) {
1917 DBG_ERROR(GWEN_LOGDOMAIN, "No widget tree in dialog");
1918 return false;
1919 }
1920 w=GWEN_Widget_Tree_GetFirst(wtree);
1921 if (w==NULL) {
1922 DBG_ERROR(GWEN_LOGDOMAIN, "No widgets in dialog");
1923 return false;
1924 }
1925
1926 xw=setupTree(parentWindow, w);
1927 if (xw==NULL) {
1928 DBG_INFO(0, "here");
1929 return false;
1930 }
1931
1932 _mainWidget=dynamic_cast<FXDialogBox*>(xw);
1933 assert(_mainWidget);
1934
1935 /* create X11 server side resources */
1936 xw->create();
1937
1938 m_sizeChanged=FALSE;
1940 if (rv<0) {
1941 DBG_INFO(0, "Error initializing dialog: %d", rv);
1942 return false;
1943 }
1944 if (!m_sizeChanged) {
1945 DBG_ERROR(0, "Resizing dialog myself");
1946 xw->resize(xw->getDefaultWidth(), xw->getDefaultHeight());
1947 }
1948 xw->layout();
1949
1950 return true;
1951}
1952
1953
1954
1955
1956FXWindow *FOX16_GuiDialog::setupTree(FXWindow *parentWindow, GWEN_WIDGET *w) {
1957 const char *s;
1958 const char *name;
1959 FXuint opts=0;
1960 uint32_t flags;
1961 FXString text;
1962 FXString htmlText;
1963 FXComposite *parentComposite=NULL;
1964 FXWindow *wChild=NULL;
1965 FXWindow *wContent=NULL;
1966 GWEN_WIDGET *parentWidget;
1967 int cols;
1968 int rows;
1969
1970 /* sample data */
1971 flags=GWEN_Widget_GetFlags(w);
1972 s=GWEN_Widget_GetText(w, 0);
1973 if (s) {
1974 text=FXString(s);
1975 htmlText=FOX16_Gui::getHtmlText(s);
1976 }
1977 name=GWEN_Widget_GetName(w);
1978 cols=GWEN_Widget_GetColumns(w);
1979 rows=GWEN_Widget_GetRows(w);
1980
1981 parentWidget=GWEN_Widget_Tree_GetParent(w);
1982
1983 /* check for parent type */
1984 if (parentWindow)
1985 parentComposite=dynamic_cast<FXComposite*>(parentWindow);
1986 if (parentComposite==NULL) {
1987 switch(GWEN_Widget_GetType(w)) {
1989 /* these types don't need the parent to be a FXComposite */
1990 break;
1991 default:
1992 DBG_ERROR(GWEN_LOGDOMAIN, "Parent of widget [%s] (type %d) is not a composite",
1993 name?name:"(unnamed)", GWEN_Widget_GetType(w));
1994 return NULL;
1995 }
1996 }
1997
1998 /* setup info for new widget */
1999 if (flags & GWEN_WIDGET_FLAGS_FILLX)
2000 opts|=LAYOUT_FILL_X | LAYOUT_FILL_COLUMN;
2001 if (flags & GWEN_WIDGET_FLAGS_FILLY)
2002 opts|=LAYOUT_FILL_Y;
2004 opts|=DECOR_SHRINKABLE;
2006 opts|=DECOR_STRETCHABLE;
2008 opts|=DECOR_MINIMIZE;
2010 opts|=DECOR_MAXIMIZE;
2012 opts|=DECOR_CLOSE;
2013 if (flags & GWEN_WIDGET_FLAGS_DECOR_MENU)
2014 opts|=DECOR_MENU;
2016 opts|=PACK_UNIFORM_WIDTH;
2018 opts|=PACK_UNIFORM_HEIGHT;
2020 opts|=JUSTIFY_LEFT;
2022 opts|=JUSTIFY_RIGHT;
2024 opts|=JUSTIFY_TOP;
2026 opts|=JUSTIFY_BOTTOM;
2028 opts|=JUSTIFY_CENTER_X;
2030 opts|=JUSTIFY_CENTER_Y;
2032 opts|=FRAME_SUNKEN;
2034 opts|=FRAME_RAISED;
2036 opts|=FRAME_THICK;
2038 opts|=FRAME_GROOVE;
2039
2040 /* create THIS widget */
2041 switch(GWEN_Widget_GetType(w)) {
2042
2043 case GWEN_Widget_TypeLabel: {
2044 FOX16_HtmlLabel *label;
2045 int wi;
2046 const char *s;
2048
2051 label=new FOX16_HtmlLabel(parentComposite,
2052 htmlText,
2053 opts);
2055 if (s && *s) {
2056 FXIcon *ic;
2057
2058 ic=getIcon(s);
2059 if (ic)
2060 label->setIcon(ic);
2061 }
2062
2064 if (wi>0)
2065 label->setMaxDefaultWidth(wi);
2066
2067 /* copy media paths to label */
2069 while(se) {
2070 const char *s;
2071
2073 assert(s);
2074 label->addMediaPath(s);
2076 }
2077
2078 wChild=label;
2079 break;
2080 }
2081
2083 const char *s;
2084 FXIcon *ic=NULL;
2085
2087 opts|=BUTTON_DEFAULT | BUTTON_INITIAL | BUTTON_NORMAL;
2088 else
2089 opts|=BUTTON_NORMAL;
2091 if (s && *s)
2092 ic=getIcon(s);
2093
2094 wChild=new THEMEBUTTON(parentComposite,
2095 text,
2096 ic, /* icon */
2097 this,
2099 opts);
2100 break;
2101 }
2102
2104 if (flags & GWEN_WIDGET_FLAGS_PASSWORD)
2105 opts|=TEXTFIELD_PASSWD;
2106 if (flags & GWEN_WIDGET_FLAGS_READONLY)
2107 opts|=TEXTFIELD_READONLY;
2108 wChild=new FXTextField(parentComposite,
2109 cols?cols:16,
2110 this,
2112 opts | TEXTFIELD_NORMAL | TEXTFIELD_ENTER_ONLY);
2113 break;
2114
2116 FXText *f;
2117
2118 if (flags & GWEN_WIDGET_FLAGS_READONLY)
2119 opts|=TEXT_READONLY;
2120 f=new FXText(parentComposite,
2121 this,
2123 opts | HSCROLLING_OFF);
2124 if (cols)
2125 f->setVisibleColumns(cols);
2126 if (rows)
2127 f->setVisibleRows(rows);
2128 wChild=f;
2129 break;
2130 }
2131
2133 FOX16_HtmlText *f;
2134
2135 f=new FOX16_HtmlText(parentComposite, "",
2136 opts | HSCROLLING_OFF);
2137 wChild=f;
2138 break;
2139 }
2140
2142 if (flags & GWEN_WIDGET_FLAGS_READONLY)
2143 opts|=COMBOBOX_STATIC;
2144 wChild=new THEMECOMBOBOX(parentComposite,
2145 cols?cols:16,
2146 this,
2148 opts);
2149 break;
2150
2152 FXRadioButton *rb;
2153 int groupId;
2155 std::list<RadioButtonGroup*>::iterator it;
2156
2157 groupId=GWEN_Widget_GetGroupId(w);
2158
2159
2160 for (it=m_radioGroups.begin(); it!=m_radioGroups.end(); it++) {
2161 if ((*it)->getGroupId()==groupId) {
2162 grp=*it;
2163 }
2164 }
2165 if (grp==NULL) {
2166 grp=new RadioButtonGroup(groupId, this, ID_WIDGET_FIRST+_widgetCount);
2167 m_radioGroups.push_back(grp);
2168 }
2169
2170 rb=new FXRadioButton(parentComposite,
2171 text,
2172 grp->getDataTarget(),
2173 FXDataTarget::ID_OPTION+grp->getButtonCount(),
2174 opts | RADIOBUTTON_NORMAL);
2175 grp->addButton(rb);
2176 wChild=rb;
2177 break;
2178 }
2179
2181 wChild=new FXProgressBar(parentComposite,
2182 this,
2184 opts | PROGRESSBAR_NORMAL | PROGRESSBAR_PERCENTAGE);
2185 break;
2186
2188 wChild=new FXGroupBox(parentComposite,
2189 text,
2190 opts | GROUPBOX_NORMAL | FRAME_LINE);
2191 break;
2192
2194 wChild=new FXSpring(parentComposite, opts | LAYOUT_FILL_X);
2195 break;
2196
2198 wChild=new FXSpring(parentComposite, opts | LAYOUT_FILL_Y);
2199 break;
2200
2202 wChild=new FXHorizontalFrame(parentComposite, opts,
2203 0, 0, 0, 0, 0, 0, 0, 0);
2204 break;
2205
2207 wChild=new FXVerticalFrame(parentComposite, opts,
2208 0, 0, 0, 0, 0, 0, 0, 0);
2209 break;
2210
2212 if (cols & rows) {
2213 DBG_ERROR(GWEN_LOGDOMAIN, "State columns *or* rows, not both in widget [%s]",
2214 name?name:"(unnamed)");
2215 return NULL;
2216 }
2217 if (cols)
2218 wChild=new FXMatrix(parentComposite, cols,
2219 opts | MATRIX_BY_COLUMNS,
2220 0, 0, 0, 0, 0, 0, 0, 0);
2221 else
2222 wChild=new FXMatrix(parentComposite, rows,
2223 opts | MATRIX_BY_ROWS,
2224 0, 0, 0, 0, 0, 0, 0, 0);
2225 break;
2226
2228 wChild=new FOX16_GuiSortingList(parentComposite,
2229 this,
2231 opts | FRAME_SUNKEN|FRAME_THICK | LISTBOX_NORMAL);
2232 break;
2233
2235 if (parentWindow)
2236 wChild=new FXDialogBox(parentWindow,
2237 name?FXString(name):FXString(""),
2238 opts | DECOR_TITLE | DECOR_BORDER);
2239 else
2240 wChild=new FXDialogBox(FXApp::instance(),
2241 name?FXString(name):FXString(""),
2242 opts | DECOR_TITLE | DECOR_BORDER);
2243 break;
2244
2246 wChild=new FXTabBook(parentComposite,
2247 this,
2249 opts | TABBOOK_NORMAL);
2250 break;
2251
2253 if (parentWidget==NULL) {
2254 DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] has no parent", name?name:"(unnamed)");
2255 return NULL;
2256 }
2257 else {
2258 FXTabBook *tbook=dynamic_cast<FXTabBook*>(parentWindow);
2259 if (tbook==NULL) {
2260 DBG_ERROR(GWEN_LOGDOMAIN, "Parent of widget [%s] needs to be of type TabBook", name?name:"(unnamed)");
2261 return NULL;
2262 }
2263
2264 new THEMETABITEM(tbook, text, NULL, opts | TAB_TOP_NORMAL);
2265 wChild=new FXVerticalFrame(tbook, opts);
2266 }
2267 break;
2268
2270 wChild=new FXCheckButton(parentComposite,
2271 text,
2272 this,
2274 opts | CHECKBUTTON_NORMAL);
2275 break;
2276
2278 FXScrollWindow *f;
2279
2280 f=new FXScrollWindow(parentComposite, opts);
2281 wChild=f;
2282 wContent=f->contentWindow();
2283 break;
2284 }
2285
2287 wChild=new FXSwitcher(parentComposite, opts);
2288 break;
2289
2291 wChild=new FXHorizontalSeparator(parentComposite, opts | SEPARATOR_GROOVE);
2292 break;
2293
2295 wChild=new FXVerticalSeparator(parentComposite, opts | SEPARATOR_GROOVE);
2296 break;
2297
2299 wChild=new FXSpinner(parentComposite,
2300 cols?cols:16,
2301 this,
2303 opts | SPIN_NORMAL);
2304 break;
2305
2307 wChild=new FXSplitter(parentComposite, opts | SPLITTER_HORIZONTAL, 0, 0, 0, 0);
2308 break;
2309
2311 wChild=new FXSplitter(parentComposite, opts | SPLITTER_VERTICAL, 0, 0, 0, 0);
2312 break;
2313
2315 DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] is of type \'unknown\'", name?name:"(unnamed)");
2316 return NULL;
2318 DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] is of type \'none\'", name?name:"(unnamed)");
2319 return NULL;
2320 }
2321
2322 assert(wChild);
2323 _widgetCount++;
2324
2325 if (wContent==NULL)
2326 wContent=wChild;
2327
2330
2331 /* handle children */
2332 w=GWEN_Widget_Tree_GetFirstChild(w);
2333 while(w) {
2334 if (NULL==setupTree(wContent, w))
2335 return NULL;
2336 w=GWEN_Widget_Tree_GetNext(w);
2337 }
2338
2339 return wChild;
2340}
2341
2342
2343
2345 FXDialogBox *dialogBox;
2346
2347 dialogBox=_mainWidget;
2348 return dialogBox->getApp()->runModalFor(dialogBox);
2349}
2350
2351
2352
2354 FXDialogBox *dialogBox;
2355
2356 dialogBox=_mainWidget;
2357
2358 /* show dialog */
2359 dialogBox->layout();
2360 dialogBox->show(PLACEMENT_OWNER);
2361 dialogBox->recalc(); /* set DIRTY flag */
2362 dialogBox->resize(dialogBox->getWidth(), dialogBox->getHeight());
2363
2364 return 0;
2365}
2366
2367
2368
2370 FXDialogBox *dialogBox;
2371
2372 dialogBox=_mainWidget;
2373
2374 /* let dialog write its settings */
2376
2377 /* hide dialog */
2378 dialogBox->hide();
2379 delete _mainWidget;
2381
2382 return 0;
2383}
2384
2385
2386
#define NULL
Definition binreloc.c:300
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition buffer.c:42
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition buffer.c:89
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition buffer.c:235
CppDialog(GWEN_DIALOG *dlg)
GWEN_DIALOG * _dialog
Definition cppdialog.hpp:50
static CPPGUI_API CppDialog * getDialog(GWEN_DIALOG *dlg)
virtual int setIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
std::list< RadioButtonGroup * > m_radioGroups
long onSelKeyRelease(FXObject *sender, FXSelector sel, void *ptr)
FXIconSource * m_iconSource
FXWindow * setupTree(FXWindow *parentWindow, GWEN_WIDGET *w)
FXDialogBox * _mainWidget
static FOX16_GuiDialog * getDialog(GWEN_DIALOG *dlg)
long onSelCommand(FXObject *sender, FXSelector sel, void *ptr)
virtual const char * getCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue)
std::list< FXIcon * > m_iconList
long onSelKeyPress(FXObject *sender, FXSelector sel, void *ptr)
virtual int setCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
long onSelChanged(FXObject *sender, FXSelector sel, void *ptr)
FXIcon * getIcon(const char *fileName)
virtual int getIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue)
bool setup(FXWindow *parentWindow)
FOX16_GuiDialog(FOX16_Gui *gui, GWEN_DIALOG *dlg)
FXbool getHeaderArrowDir(int c) const
virtual void sortByColumn(int c, bool up)
void setHeaderArrowDir(int c, FXbool b)
FXFoldingItem * getItem(int idx)
static FOX16GUI_API FXString getHtmlText(const char *text)
static FOX16GUI_API FXString getRawText(const char *text)
FXString getText() const
Get the text for this label.
void addMediaPath(const char *s)
void setIcon(FXIcon *ic)
void setMaxDefaultWidth(int i)
void setText(const FXString &text)
Set the text for this label.
FXString getText() const
Get the text for this label.
void setText(const FXString &text)
Set the text for this label.
void makePositionVisible(FXint pos)
#define DBG_INFO(dbg_logger, format,...)
Definition debug.h:181
#define DBG_ERROR(dbg_logger, format,...)
Definition debug.h:97
#define DBG_WARN(dbg_logger, format,...)
Definition debug.h:125
#define DBG_DEBUG(dbg_logger, format,...)
Definition debug.h:214
int GWEN_Dialog_EmitSignalToAll2(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender, int intArg, const char *stringArg)
Definition dialog.c:377
GWEN_WIDGET_TREE * GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg)
Definition dialog.c:629
GWEN_WIDGET * GWEN_Dialog_FindWidgetByImplData(const GWEN_DIALOG *dlg, int index, const void *ptr)
Definition dialog.c:605
GWEN_STRINGLIST * GWEN_Dialog_GetMediaPaths(const GWEN_DIALOG *dlg)
Definition dialog.c:295
int GWEN_Dialog_EmitSignalToAll(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition dialog.c:330
int GWEN_Dialog_EmitSignal(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition dialog.c:321
#define GWEN_WIDGET_FLAGS_DECOR_MAXIMIZE
Definition dialog.h:70
#define GWEN_WIDGET_FLAGS_JUSTIFY_RIGHT
Definition dialog.h:80
#define GWEN_WIDGET_FLAGS_FRAME_RAISED
Definition dialog.h:91
#define GWEN_WIDGET_FLAGS_FILLY
Definition dialog.h:62
#define GWEN_WIDGET_FLAGS_PASSWORD
Definition dialog.h:64
#define GWEN_WIDGET_FLAGS_DECOR_CLOSE
Definition dialog.h:71
#define GWEN_WIDGET_FLAGS_DECOR_SHRINKABLE
Definition dialog.h:67
@ GWEN_DialogSortDirection_None
Definition dialog.h:297
@ GWEN_DialogSortDirection_Up
Definition dialog.h:298
@ GWEN_DialogSortDirection_Down
Definition dialog.h:299
#define GWEN_WIDGET_FLAGS_DECOR_STRETCHABLE
Definition dialog.h:68
#define GWEN_WIDGET_FLAGS_EQUAL_HEIGHT
Definition dialog.h:77
#define GWEN_WIDGET_FLAGS_FILLX
Definition dialog.h:61
struct GWEN_DIALOG GWEN_DIALOG
Definition dialog.h:54
#define GWEN_WIDGET_FLAGS_JUSTIFY_TOP
Definition dialog.h:81
#define GWEN_WIDGET_FLAGS_READONLY
Definition dialog.h:63
GWEN_DIALOG_PROPERTY
Definition dialog.h:260
@ GWEN_DialogProperty_WindowId
Definition dialog.h:283
@ GWEN_DialogProperty_SelectionState
Definition dialog.h:275
@ GWEN_DialogProperty_AddValue
Definition dialog.h:268
@ GWEN_DialogProperty_MinValue
Definition dialog.h:265
@ GWEN_DialogProperty_ToolTip
Definition dialog.h:281
@ GWEN_DialogProperty_Visibility
Definition dialog.h:280
@ GWEN_DialogProperty_ColumnWidth
Definition dialog.h:271
@ GWEN_DialogProperty_MaxValue
Definition dialog.h:266
@ GWEN_DialogProperty_None
Definition dialog.h:261
@ GWEN_DialogProperty_ValueCount
Definition dialog.h:270
@ GWEN_DialogProperty_Title
Definition dialog.h:263
@ GWEN_DialogProperty_Sort
Definition dialog.h:279
@ GWEN_DialogProperty_ClearValues
Definition dialog.h:269
@ GWEN_DialogProperty_SelectionMode
Definition dialog.h:274
@ GWEN_DialogProperty_Height
Definition dialog.h:273
@ GWEN_DialogProperty_SortDirection
Definition dialog.h:278
@ GWEN_DialogProperty_Enabled
Definition dialog.h:267
@ GWEN_DialogProperty_Value
Definition dialog.h:264
@ GWEN_DialogProperty_Unknown
Definition dialog.h:285
@ GWEN_DialogProperty_Focus
Definition dialog.h:276
@ GWEN_DialogProperty_Width
Definition dialog.h:272
@ GWEN_DialogEvent_TypeKeyPressed
Definition dialog.h:106
@ GWEN_DialogEvent_TypeValueChanged
Definition dialog.h:101
@ GWEN_DialogEvent_TypeInit
Definition dialog.h:99
@ GWEN_DialogEvent_TypeFini
Definition dialog.h:100
@ GWEN_DialogEvent_TypeKeyReleased
Definition dialog.h:107
@ GWEN_DialogEvent_TypeActivated
Definition dialog.h:102
#define GWEN_WIDGET_FLAGS_JUSTIFY_LEFT
Definition dialog.h:79
@ GWEN_DialogEvent_ResultAccept
Definition dialog.h:122
@ GWEN_DialogEvent_ResultNotHandled
Definition dialog.h:121
@ GWEN_DialogEvent_ResultReject
Definition dialog.h:123
#define GWEN_WIDGET_FLAGS_DECOR_MINIMIZE
Definition dialog.h:69
#define GWEN_WIDGET_FLAGS_JUSTIFY_BOTTOM
Definition dialog.h:82
#define GWEN_WIDGET_FLAGS_EQUAL_WIDTH
Definition dialog.h:76
#define GWEN_WIDGET_FLAGS_JUSTIFY_CENTERX
Definition dialog.h:83
#define GWEN_WIDGET_FLAGS_FRAME_SUNKEN
Definition dialog.h:90
#define GWEN_WIDGET_FLAGS_JUSTIFY_CENTERY
Definition dialog.h:84
#define GWEN_WIDGET_FLAGS_DEFAULT_WIDGET
Definition dialog.h:65
@ GWEN_Dialog_SelectionMode_None
Definition dialog.h:290
@ GWEN_Dialog_SelectionMode_Multi
Definition dialog.h:292
@ GWEN_Dialog_SelectionMode_Single
Definition dialog.h:291
#define GWEN_WIDGET_FLAGS_NO_WORDWRAP
Definition dialog.h:86
#define GWEN_WIDGET_FLAGS_FRAME_GROOVE
Definition dialog.h:93
#define GWEN_WIDGET_FLAGS_FRAME_THICK
Definition dialog.h:92
#define GWEN_WIDGET_FLAGS_DECOR_MENU
Definition dialog.h:72
GWENHYWFAR_API int GWEN_Directory_FindFileInPaths(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf)
#define GWEN_ERROR_INVALID
Definition error.h:67
#define GWEN_ERROR_GENERIC
Definition error.h:62
#define FOX16_DIALOG_STRING_TITLE
#define FOX16_DIALOG_STRING_VALUE
FXDEFMAP(FOX16_GuiDialog) FOX16_GuiDialogMap[]
#define FOX16_DIALOG_WIDGET_CONTENT
#define FOX16_DIALOG_WIDGET_REAL
FXIMPLEMENT(FOX16_GuiSortingList, FXFoldingList, FOX16_GuiSortingListMap, ARRAYNUMBER(FOX16_GuiSortingListMap)) FOX16_GuiSortingList
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition buffer.h:38
#define GWEN_LOGDOMAIN
Definition logger.h:32
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition stringlist.c:406
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition stringlist.c:398
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
Definition stringlist.c:390
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition stringlist.h:53
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition stringlist.h:56
#define THEMEBUTTON
Definition theme.h:23
#define THEMETABITEM
Definition theme.h:31
#define THEMECOMBOBOX
Definition theme.h:25
int GWEN_Widget_GetColumns(const GWEN_WIDGET *w)
Definition widget.c:203
const char * GWEN_Widget_GetName(const GWEN_WIDGET *w)
Definition widget.c:320
int GWEN_Widget_GetWidth(const GWEN_WIDGET *w)
Definition widget.c:257
void GWEN_Widget_SetImplData(GWEN_WIDGET *w, int index, void *ptr)
Store a pointer with the widget.
Definition widget.c:136
void * GWEN_Widget_GetImplData(const GWEN_WIDGET *w, int index)
Definition widget.c:122
void GWEN_Widget_SetText(GWEN_WIDGET *w, int idx, const char *s)
Definition widget.c:304
const char * GWEN_Widget_GetText(const GWEN_WIDGET *w, int idx)
Definition widget.c:293
const char * GWEN_Widget_GetIconFileName(const GWEN_WIDGET *w)
Definition widget.c:342
uint32_t GWEN_Widget_GetFlags(const GWEN_WIDGET *w)
Definition widget.c:149
const char * GWEN_Widget_Type_toString(GWEN_WIDGET_TYPE t)
Definition widget.c:456
GWEN_DIALOG * GWEN_Widget_GetDialog(const GWEN_WIDGET *w)
Definition widget.c:92
int GWEN_Widget_GetGroupId(const GWEN_WIDGET *w)
Definition widget.c:239
GWEN_WIDGET_TYPE GWEN_Widget_GetType(const GWEN_WIDGET *w)
Definition widget.c:185
int GWEN_Widget_GetRows(const GWEN_WIDGET *w)
Definition widget.c:221
struct GWEN_WIDGET GWEN_WIDGET
Definition widget_be.h:34
@ GWEN_Widget_TypeTabBook
Definition widget_be.h:67
@ GWEN_Widget_TypeHSplitter
Definition widget_be.h:76
@ GWEN_Widget_TypeNone
Definition widget_be.h:51
@ GWEN_Widget_TypeComboBox
Definition widget_be.h:56
@ GWEN_Widget_TypeTabPage
Definition widget_be.h:68
@ GWEN_Widget_TypeRadioButton
Definition widget_be.h:57
@ GWEN_Widget_TypeHLayout
Definition widget_be.h:62
@ GWEN_Widget_TypeLineEdit
Definition widget_be.h:54
@ GWEN_Widget_TypeWidgetStack
Definition widget_be.h:70
@ GWEN_Widget_TypeScrollArea
Definition widget_be.h:71
@ GWEN_Widget_TypeLabel
Definition widget_be.h:52
@ GWEN_Widget_TypeGroupBox
Definition widget_be.h:59
@ GWEN_Widget_TypeDialog
Definition widget_be.h:66
@ GWEN_Widget_TypePushButton
Definition widget_be.h:53
@ GWEN_Widget_TypeCheckBox
Definition widget_be.h:69
@ GWEN_Widget_TypeTextBrowser
Definition widget_be.h:74
@ GWEN_Widget_TypeHSpacer
Definition widget_be.h:60
@ GWEN_Widget_TypeHLine
Definition widget_be.h:72
@ GWEN_Widget_TypeVSplitter
Definition widget_be.h:77
@ GWEN_Widget_TypeTextEdit
Definition widget_be.h:55
@ GWEN_Widget_TypeGridLayout
Definition widget_be.h:64
@ GWEN_Widget_TypeVLayout
Definition widget_be.h:63
@ GWEN_Widget_TypeProgressBar
Definition widget_be.h:58
@ GWEN_Widget_TypeSpinBox
Definition widget_be.h:75
@ GWEN_Widget_TypeVSpacer
Definition widget_be.h:61
@ GWEN_Widget_TypeUnknown
Definition widget_be.h:50
@ GWEN_Widget_TypeVLine
Definition widget_be.h:73
@ GWEN_Widget_TypeListBox
Definition widget_be.h:65