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 
14 #include "fox16_gui_dialog_l.hpp"
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 
42 FXDEFMAP(FOX16_GuiDialog) FOX16_GuiDialogMap[]= {
47 };
48 
49 
50 FXIMPLEMENT(FOX16_GuiDialog, FXObject, FOX16_GuiDialogMap, ARRAYNUMBER(FOX16_GuiDialogMap))
51 
52 
53 
55  :FXObject()
56  ,CppDialog()
57  ,_gui(NULL)
58  ,_widgetCount(0)
59  ,_mainWidget(NULL)
60  ,m_iconSource(NULL)
61  ,m_sizeChanged(FALSE) {
62 }
63 
64 
65 
67  :FXObject()
68  ,CppDialog(dlg)
69  ,_gui(gui)
70  ,_widgetCount(0)
71  ,_mainWidget(NULL)
72  ,m_iconSource(NULL)
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 
112 FXIcon *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 
911  case GWEN_Widget_TypeLabel: {
912  FOX16_HtmlLabel *f;
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 
929  FOX16_HtmlText *f;
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 
1018  case GWEN_Widget_TypeComboBox: {
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 
1054  case GWEN_Widget_TypeGroupBox: {
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 
1073  f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
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 
1091  case GWEN_Widget_TypeCheckBox: {
1092  FXCheckButton *f;
1093 
1094  f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
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 
1112  case GWEN_Widget_TypeTabPage: {
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 
1136  case GWEN_Widget_TypeDialog: {
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 
1152  case GWEN_Widget_TypeListBox: {
1153  FXFoldingList *f;
1154  FXString str;
1155  FXString t;
1156  FXint n=0;
1157 
1158  f=(FXFoldingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
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 
1185  case GWEN_Widget_TypeSpinBox: {
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 
1211  case GWEN_Widget_TypeHLine:
1212  case GWEN_Widget_TypeVLine:
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 
1254  GWEN_DIALOG_PROPERTY prop,
1255  int index,
1256  const char *defaultValue) {
1257  FXString str;
1258 
1259  switch(GWEN_Widget_GetType(w)) {
1261  return defaultValue;
1262  case GWEN_Widget_TypeNone:
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 
1309  case GWEN_Widget_TypeLineEdit: {
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 
1331  case GWEN_Widget_TypeTextEdit: {
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 
1375  case GWEN_Widget_TypeComboBox: {
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 
1403  case GWEN_Widget_TypeGroupBox: {
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 
1428  f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
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 
1447  case GWEN_Widget_TypeCheckBox: {
1448  FXCheckButton *f;
1449 
1450  f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
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 
1469  case GWEN_Widget_TypeTabPage: {
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 
1495  case GWEN_Widget_TypeDialog: {
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 
1517  case GWEN_Widget_TypeListBox: {
1518  FXFoldingList *f;
1519  FXHeader *fh;
1520  FXFoldingItem *fi;
1521 
1522  f=(FXFoldingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
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 
1588  case GWEN_Widget_TypeHLine:
1589  case GWEN_Widget_TypeVLine:
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 
1633 long 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;
1643  RadioButtonGroup *grp=NULL;
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 
1675  case GWEN_Widget_TypeNone:
1676  return GWEN_ERROR_GENERIC;
1677 
1683  case GWEN_Widget_TypeLabel:
1687  GWEN_Widget_GetName(w));
1688  break;
1692  GWEN_Widget_GetName(w));
1693  break;
1694 
1695  case GWEN_Widget_TypeRadioButton: /* use SEL_UPDATED for FXRadioButton */
1708  case GWEN_Widget_TypeHLine:
1709  case GWEN_Widget_TypeVLine:
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 
1729 long 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;
1745  case GWEN_Widget_TypeNone:
1746  return GWEN_ERROR_GENERIC;
1751  GWEN_Widget_GetName(w));
1752  break;
1753 
1754  case GWEN_Widget_TypeLabel:
1773  case GWEN_Widget_TypeHLine:
1774  case GWEN_Widget_TypeVLine:
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 
1795 long 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)) {
1808  case GWEN_Widget_TypeNone:
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 
1818  case GWEN_Widget_TypeLabel:
1838  case GWEN_Widget_TypeHLine:
1839  case GWEN_Widget_TypeVLine:
1845  return 1;
1846  }
1847 
1848  return 0;
1849 }
1850 
1851 
1852 
1853 long 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 
1873  case GWEN_Widget_TypeNone:
1874  case GWEN_Widget_TypeLabel:
1894  case GWEN_Widget_TypeHLine:
1895  case GWEN_Widget_TypeVLine:
1901  return 1;
1902  }
1903 
1904  return 0;
1905 }
1906 
1907 
1908 
1909 bool 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 
1956 FXWindow *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;
2011  if (flags & GWEN_WIDGET_FLAGS_DECOR_CLOSE)
2012  opts|=DECOR_CLOSE;
2013  if (flags & GWEN_WIDGET_FLAGS_DECOR_MENU)
2014  opts|=DECOR_MENU;
2015  if (flags & GWEN_WIDGET_FLAGS_EQUAL_WIDTH)
2016  opts|=PACK_UNIFORM_WIDTH;
2017  if (flags & GWEN_WIDGET_FLAGS_EQUAL_HEIGHT)
2018  opts|=PACK_UNIFORM_HEIGHT;
2019  if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_LEFT)
2020  opts|=JUSTIFY_LEFT;
2021  if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_RIGHT)
2022  opts|=JUSTIFY_RIGHT;
2023  if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_TOP)
2024  opts|=JUSTIFY_TOP;
2026  opts|=JUSTIFY_BOTTOM;
2028  opts|=JUSTIFY_CENTER_X;
2030  opts|=JUSTIFY_CENTER_Y;
2031  if (flags & GWEN_WIDGET_FLAGS_FRAME_SUNKEN)
2032  opts|=FRAME_SUNKEN;
2033  if (flags & GWEN_WIDGET_FLAGS_FRAME_RAISED)
2034  opts|=FRAME_RAISED;
2035  if (flags & GWEN_WIDGET_FLAGS_FRAME_THICK)
2036  opts|=FRAME_THICK;
2037  if (flags & GWEN_WIDGET_FLAGS_FRAME_GROOVE)
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 
2049  if (flags & GWEN_WIDGET_FLAGS_NO_WORDWRAP)
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 
2063  wi=GWEN_Widget_GetWidth(w);
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 
2115  case GWEN_Widget_TypeTextEdit: {
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;
2154  RadioButtonGroup *grp=NULL;
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 
2290  case GWEN_Widget_TypeHLine:
2291  wChild=new FXHorizontalSeparator(parentComposite, opts | SEPARATOR_GROOVE);
2292  break;
2293 
2294  case GWEN_Widget_TypeVLine:
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;
2317  case GWEN_Widget_TypeNone:
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;
2380  _mainWidget=NULL;
2381 
2382  return 0;
2383 }
2384 
2385 
2386 
GWEN_WIDGET_TYPE GWEN_Widget_GetType(const GWEN_WIDGET *w)
Definition: widget.c:185
#define GWEN_WIDGET_FLAGS_DECOR_MENU
Definition: dialog.h:72
#define FOX16_DIALOG_WIDGET_CONTENT
#define DBG_ERROR(dbg_logger, format,...)
Definition: debug.h:97
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition: stringlist.h:53
#define GWEN_WIDGET_FLAGS_DECOR_STRETCHABLE
Definition: dialog.h:68
void GWEN_Widget_SetText(GWEN_WIDGET *w, int idx, const char *s)
Definition: widget.c:304
#define GWEN_WIDGET_FLAGS_JUSTIFY_TOP
Definition: dialog.h:81
#define GWEN_ERROR_INVALID
Definition: error.h:67
#define GWEN_WIDGET_FLAGS_FRAME_RAISED
Definition: dialog.h:91
#define DBG_DEBUG(dbg_logger, format,...)
Definition: debug.h:214
FXDEFMAP(FOX16_GuiDialog) FOX16_GuiDialogMap[]
#define GWEN_WIDGET_FLAGS_EQUAL_WIDTH
Definition: dialog.h:76
#define GWEN_WIDGET_FLAGS_DECOR_MAXIMIZE
Definition: dialog.h:70
void makePositionVisible(FXint pos)
const char * GWEN_Widget_GetName(const GWEN_WIDGET *w)
Definition: widget.c:320
static FOX16_GuiDialog * getDialog(GWEN_DIALOG *dlg)
GWEN_WIDGET_TREE * GWEN_Dialog_GetWidgets(const GWEN_DIALOG *dlg)
Definition: dialog.c:629
#define THEMEBUTTON
Definition: theme.h:23
#define GWEN_WIDGET_FLAGS_JUSTIFY_CENTERY
Definition: dialog.h:84
GWEN_DIALOG_PROPERTY
Definition: dialog.h:260
#define NULL
Definition: binreloc.c:300
#define THEMETABITEM
Definition: theme.h:31
uint32_t GWEN_Widget_GetFlags(const GWEN_WIDGET *w)
Definition: widget.c:149
int GWEN_Dialog_EmitSignalToAll2(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender, int intArg, const char *stringArg)
Definition: dialog.c:377
int GWEN_Widget_GetRows(const GWEN_WIDGET *w)
Definition: widget.c:221
#define GWEN_LOGDOMAIN
Definition: logger.h:32
A C++ binding for the C module GWEN_DIALOG.
Definition: cppdialog.hpp:32
#define GWEN_WIDGET_FLAGS_READONLY
Definition: dialog.h:63
FXbool getHeaderArrowDir(int c) const
void GWEN_Widget_SetImplData(GWEN_WIDGET *w, int index, void *ptr)
Store a pointer with the widget.
Definition: widget.c:136
void setText(const FXString &text)
Set the text for this label.
std::list< FXIcon * > m_iconList
FXString getText() const
Get the text for this label.
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
struct GWEN_DIALOG GWEN_DIALOG
Definition: dialog.h:54
#define GWEN_WIDGET_FLAGS_JUSTIFY_RIGHT
Definition: dialog.h:80
#define THEMECOMBOBOX
Definition: theme.h:25
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:390
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:406
#define DBG_WARN(dbg_logger, format,...)
Definition: debug.h:125
#define FOX16_DIALOG_STRING_TITLE
#define GWEN_WIDGET_FLAGS_EQUAL_HEIGHT
Definition: dialog.h:77
#define GWEN_WIDGET_FLAGS_DEFAULT_WIDGET
Definition: dialog.h:65
GWEN_WIDGET * GWEN_Dialog_FindWidgetByImplData(const GWEN_DIALOG *dlg, int index, const void *ptr)
Definition: dialog.c:605
virtual int getIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue)
void * GWEN_Widget_GetImplData(const GWEN_WIDGET *w, int index)
Definition: widget.c:122
GWEN_DIALOG * GWEN_Widget_GetDialog(const GWEN_WIDGET *w)
Definition: widget.c:92
int GWEN_Widget_GetColumns(const GWEN_WIDGET *w)
Definition: widget.c:203
#define GWEN_WIDGET_FLAGS_FRAME_GROOVE
Definition: dialog.h:93
int GWEN_Dialog_EmitSignalToAll(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.c:330
FXDialogBox * _mainWidget
void setText(const FXString &text)
Set the text for this label.
GWEN_DIALOG * _dialog
Definition: cppdialog.hpp:50
#define GWEN_WIDGET_FLAGS_FRAME_SUNKEN
Definition: dialog.h:90
#define GWEN_WIDGET_FLAGS_PASSWORD
Definition: dialog.h:64
GWENHYWFAR_API int GWEN_Directory_FindFileInPaths(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf)
GWEN_STRINGLIST * GWEN_Dialog_GetMediaPaths(const GWEN_DIALOG *dlg)
Definition: dialog.c:295
#define GWEN_WIDGET_FLAGS_DECOR_CLOSE
Definition: dialog.h:71
#define FOX16_DIALOG_STRING_VALUE
const char * GWEN_Widget_GetIconFileName(const GWEN_WIDGET *w)
Definition: widget.c:342
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
#define GWEN_ERROR_GENERIC
Definition: error.h:62
#define GWEN_WIDGET_FLAGS_JUSTIFY_BOTTOM
Definition: dialog.h:82
bool setup(FXWindow *parentWindow)
#define GWEN_WIDGET_FLAGS_NO_WORDWRAP
Definition: dialog.h:86
struct GWEN_WIDGET GWEN_WIDGET
Definition: widget_be.h:34
long onSelKeyPress(FXObject *sender, FXSelector sel, void *ptr)
long onSelChanged(FXObject *sender, FXSelector sel, void *ptr)
FXIMPLEMENT(FOX16_GuiSortingList, FXFoldingList, FOX16_GuiSortingListMap, ARRAYNUMBER(FOX16_GuiSortingListMap)) FOX16_GuiSortingList
#define GWEN_WIDGET_FLAGS_FILLY
Definition: dialog.h:62
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
FXWindow * setupTree(FXWindow *parentWindow, GWEN_WIDGET *w)
void setMaxDefaultWidth(int i)
#define GWEN_WIDGET_FLAGS_FILLX
Definition: dialog.h:61
int GWEN_Widget_GetGroupId(const GWEN_WIDGET *w)
Definition: widget.c:239
virtual ~FOX16_GuiDialog()
int GWEN_Dialog_EmitSignal(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.c:321
static FOX16GUI_API FXString getRawText(const char *text)
Definition: fox16_gui.cpp:204
int GWEN_Widget_GetWidth(const GWEN_WIDGET *w)
Definition: widget.c:257
virtual const char * getCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue)
virtual int setIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:398
void setHeaderArrowDir(int c, FXbool b)
void setIcon(FXIcon *ic)
std::list< RadioButtonGroup * > m_radioGroups
void addMediaPath(const char *s)
#define GWEN_WIDGET_FLAGS_FRAME_THICK
Definition: dialog.h:92
long onSelKeyRelease(FXObject *sender, FXSelector sel, void *ptr)
#define GWEN_WIDGET_FLAGS_JUSTIFY_LEFT
Definition: dialog.h:79
#define FOX16_DIALOG_WIDGET_REAL
virtual void sortByColumn(int c, bool up)
virtual int setCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
#define GWEN_WIDGET_FLAGS_JUSTIFY_CENTERX
Definition: dialog.h:83
#define DBG_INFO(dbg_logger, format,...)
Definition: debug.h:181
FXIcon * getIcon(const char *fileName)
static CPPGUI_API CppDialog * getDialog(GWEN_DIALOG *dlg)
Definition: cppdialog.cpp:146
const char * GWEN_Widget_Type_toString(GWEN_WIDGET_TYPE t)
Definition: widget.c:456
FXFoldingItem * getItem(int idx)
#define GWEN_WIDGET_FLAGS_DECOR_SHRINKABLE
Definition: dialog.h:67
FXIconSource * m_iconSource
static FOX16GUI_API FXString getHtmlText(const char *text)
Definition: fox16_gui.cpp:284
#define GWEN_WIDGET_FLAGS_DECOR_MINIMIZE
Definition: dialog.h:69
const char * GWEN_Widget_GetText(const GWEN_WIDGET *w, int idx)
Definition: widget.c:293
GWEN_GUI * _gui
Definition: cppgui.hpp:67
long onSelCommand(FXObject *sender, FXSelector sel, void *ptr)
FXString getText() const
Get the text for this label.