00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifdef HAVE_CONFIG_H
00011 # include <config.h>
00012 #endif
00013
00014 #include "fox16_gui_dialog_l.hpp"
00015 #include "fox16_gui_sortinglist_l.hpp"
00016 #include "fox16_htmllabel.hpp"
00017 #include "fox16_htmltext.hpp"
00018
00019 #include "theme.h"
00020
00021 #include <gwenhywfar/dialog_be.h>
00022 #include <gwenhywfar/directory.h>
00023 #include <gwenhywfar/debug.h>
00024
00025 #include <list>
00026 #include <string>
00027 #include <assert.h>
00028
00029 #include <fxkeys.h>
00030
00031
00032 #define FOX16_DIALOG_WIDGET_REAL 0
00033 #define FOX16_DIALOG_WIDGET_CONTENT 1
00034
00035 #define FOX16_DIALOG_STRING_TITLE 0
00036 #define FOX16_DIALOG_STRING_VALUE 1
00037
00038
00039
00040
00041
00042 FXDEFMAP(FOX16_GuiDialog) FOX16_GuiDialogMap[]={
00043 FXMAPFUNCS(SEL_COMMAND, FOX16_GuiDialog::ID_WIDGET_FIRST, FOX16_GuiDialog::ID_WIDGET_LAST, FOX16_GuiDialog::onSelCommand),
00044 FXMAPFUNCS(SEL_CHANGED, FOX16_GuiDialog::ID_WIDGET_FIRST, FOX16_GuiDialog::ID_WIDGET_LAST, FOX16_GuiDialog::onSelChanged),
00045 FXMAPFUNCS(SEL_KEYPRESS, FOX16_GuiDialog::ID_WIDGET_FIRST, FOX16_GuiDialog::ID_WIDGET_LAST, FOX16_GuiDialog::onSelKeyPress),
00046 FXMAPFUNCS(SEL_KEYRELEASE, FOX16_GuiDialog::ID_WIDGET_FIRST, FOX16_GuiDialog::ID_WIDGET_LAST, FOX16_GuiDialog::onSelKeyRelease)
00047 };
00048
00049
00050 FXIMPLEMENT(FOX16_GuiDialog, FXObject, FOX16_GuiDialogMap, ARRAYNUMBER(FOX16_GuiDialogMap))
00051
00052
00053
00054 FOX16_GuiDialog::FOX16_GuiDialog()
00055 :FXObject()
00056 ,CppDialog()
00057 ,_gui(NULL)
00058 ,_widgetCount(0)
00059 ,_mainWidget(NULL)
00060 ,m_iconSource(NULL)
00061 {
00062 }
00063
00064
00065
00066 FOX16_GuiDialog::FOX16_GuiDialog(FOX16_Gui *gui, GWEN_DIALOG *dlg)
00067 :FXObject()
00068 ,CppDialog(dlg)
00069 ,_gui(gui)
00070 ,_widgetCount(0)
00071 ,_mainWidget(NULL)
00072 ,m_iconSource(NULL)
00073 {
00074 }
00075
00076
00077
00078 FOX16_GuiDialog::~FOX16_GuiDialog() {
00079 if (_mainWidget)
00080 delete _mainWidget;
00081 if (!m_iconList.empty()) {
00082 std::list<FXIcon*>::iterator it;
00083
00084 for (it=m_iconList.begin(); it!=m_iconList.end(); it++)
00085 delete *it;
00086 m_iconList.clear();
00087 }
00088 if (m_iconSource)
00089 delete m_iconSource;
00090
00091 if (!m_radioGroups.empty()) {
00092 std::list<RadioButtonGroup*>::iterator it;
00093
00094 for (it=m_radioGroups.begin(); it!=m_radioGroups.end(); it++)
00095 delete *it;
00096 }
00097 }
00098
00099
00100
00101 FOX16_GuiDialog *FOX16_GuiDialog::getDialog(GWEN_DIALOG *dlg) {
00102 CppDialog *cppDlg;
00103
00104 cppDlg=CppDialog::getDialog(dlg);
00105 if (cppDlg)
00106 return dynamic_cast<FOX16_GuiDialog*>(cppDlg);
00107 return NULL;
00108 }
00109
00110
00111
00112 FXIcon *FOX16_GuiDialog::getIcon(const char *fileName) {
00113 GWEN_STRINGLIST *sl;
00114
00115 sl=GWEN_Dialog_GetMediaPaths(_dialog);
00116 if (sl) {
00117 GWEN_BUFFER *tbuf;
00118 int rv;
00119 FXIcon *ic;
00120
00121 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
00122 rv=GWEN_Directory_FindFileInPaths(sl, fileName, tbuf);
00123 if (rv<0) {
00124 DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv);
00125 GWEN_Buffer_free(tbuf);
00126 return NULL;
00127 }
00128
00129 if (m_iconSource==NULL)
00130 m_iconSource=new FXIconSource(FXApp::instance());
00131
00132 DBG_DEBUG(GWEN_LOGDOMAIN, "Loading [%s]", GWEN_Buffer_GetStart(tbuf));
00133 ic=m_iconSource->loadIconFile(GWEN_Buffer_GetStart(tbuf));
00134 if (ic==NULL) {
00135 DBG_ERROR(GWEN_LOGDOMAIN, "Could not load icon [%s]", GWEN_Buffer_GetStart(tbuf));
00136 GWEN_Buffer_free(tbuf);
00137 return NULL;
00138 }
00139 m_iconList.push_back(ic);
00140 GWEN_Buffer_free(tbuf);
00141 return ic;
00142 }
00143 else {
00144 DBG_ERROR(GWEN_LOGDOMAIN, "No media paths in dialog");
00145 return NULL;
00146 }
00147 }
00148
00149
00150
00151 int FOX16_GuiDialog::execute() {
00152 FXDialogBox *dialogBox;
00153 int rv;
00154
00155 dialogBox=_mainWidget;
00156
00157
00158 dialogBox->show(PLACEMENT_OWNER);
00159 rv=dialogBox->execute();
00160 GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, "");
00161
00162 if (rv==0) {
00163
00164 return 0;
00165 }
00166 else
00167
00168 return 1;
00169 }
00170
00171
00172 int FOX16_GuiDialog::setIntProperty(GWEN_WIDGET *w,
00173 GWEN_DIALOG_PROPERTY prop,
00174 int index,
00175 int value,
00176 int doSignal) {
00177 DBG_DEBUG(GWEN_LOGDOMAIN, "SetIntProperty([%s], %d)", GWEN_Widget_GetName(w), value);
00178
00179 switch(GWEN_Widget_GetType(w)) {
00180 case GWEN_Widget_TypeUnknown:
00181 return GWEN_ERROR_GENERIC;
00182
00183 case GWEN_Widget_TypeNone:
00184 return GWEN_ERROR_GENERIC;
00185
00186 case GWEN_Widget_TypeComboBox:
00187 {
00188 THEMECOMBOBOX *f;
00189
00190 f=(THEMECOMBOBOX*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00191 assert(f);
00192
00193 switch(prop) {
00194 case GWEN_DialogProperty_Value:
00195 if (value<f->getNumItems()) {
00196 f->setCurrentItem(value, doSignal?TRUE:FALSE);
00197 return 0;
00198 }
00199 else {
00200 DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range in widget [%s]", value, GWEN_Widget_GetName(w));
00201 return GWEN_ERROR_INVALID;
00202 }
00203
00204 case GWEN_DialogProperty_ClearValues:
00205 f->clearItems();
00206 return 0;
00207
00208 default:
00209 break;
00210 }
00211 break;
00212 }
00213
00214 case GWEN_Widget_TypeRadioButton:
00215 {
00216 FXRadioButton *f;
00217
00218 f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00219 assert(f);
00220
00221 switch(prop) {
00222 case GWEN_DialogProperty_Value:
00223 f->setCheck((value==0)?FALSE:TRUE, doSignal?TRUE:FALSE);
00224 return 0;
00225
00226 default:
00227 break;
00228 }
00229 break;
00230 }
00231
00232 case GWEN_Widget_TypeProgressBar:
00233 {
00234 FXProgressBar *f;
00235
00236 f=(FXProgressBar*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00237 assert(f);
00238
00239 switch(prop) {
00240 case GWEN_DialogProperty_Value:
00241 f->setProgress(value);
00242 return 0;
00243
00244 case GWEN_DialogProperty_MinValue:
00245 if (value!=0) {
00246 DBG_ERROR(GWEN_LOGDOMAIN, "MinValue should be 0!");
00247 return GWEN_ERROR_INVALID;
00248 }
00249 return 0;
00250
00251 case GWEN_DialogProperty_MaxValue:
00252 f->setTotal(value);
00253 return 0;
00254
00255 default:
00256 break;
00257 }
00258 break;
00259 }
00260
00261 case GWEN_Widget_TypeSpinBox:
00262 {
00263 FXSpinner *f;
00264
00265 f=(FXSpinner*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00266 assert(f);
00267
00268 switch(prop) {
00269 case GWEN_DialogProperty_Value:
00270 f->setValue(value);
00271 return 0;
00272
00273 case GWEN_DialogProperty_MinValue: {
00274 FXint lo, hi;
00275
00276 f->getRange(lo, hi);
00277 lo=value;
00278 f->setRange(lo, hi);
00279 return 0;
00280 }
00281
00282 case GWEN_DialogProperty_MaxValue: {
00283 FXint lo, hi;
00284
00285 f->getRange(lo, hi);
00286 lo=value;
00287 f->setRange(lo, hi);
00288 return 0;
00289 }
00290
00291 default:
00292 break;
00293 }
00294 break;
00295 }
00296
00297 case GWEN_Widget_TypeListBox:
00298 {
00299 FOX16_GuiSortingList *f;
00300 FXFoldingItem *fi;
00301 int i=0;
00302
00303 f=(FOX16_GuiSortingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00304 assert(f);
00305
00306 switch(prop) {
00307 case GWEN_DialogProperty_Value:
00308 fi=f->getFirstItem();
00309 while(fi && i<value) {
00310 fi=fi->getNext();
00311 i++;
00312 }
00313 if (fi && i==value)
00314 f->setCurrentItem(fi, doSignal?TRUE:FALSE);
00315 else {
00316 DBG_ERROR(GWEN_LOGDOMAIN, "Value %d out of range", value);
00317 return GWEN_ERROR_INVALID;
00318 }
00319 return 0;
00320
00321 case GWEN_DialogProperty_ColumnWidth:
00322 f->setHeaderSize(index, value);
00323 return 0;
00324
00325 case GWEN_DialogProperty_SelectionMode:
00326 switch(value) {
00327 case GWEN_Dialog_SelectionMode_None:
00328
00329 case GWEN_Dialog_SelectionMode_Single:
00330 f->setListStyle(FOLDINGLIST_BROWSESELECT);
00331 return 0;
00332 case GWEN_Dialog_SelectionMode_Multi:
00333 f->setListStyle(FOLDINGLIST_EXTENDEDSELECT);
00334 return 0;
00335 ;
00336 }
00337 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown SelectionMode %d", value);
00338 return GWEN_ERROR_INVALID;
00339
00340 case GWEN_DialogProperty_SelectionState:
00341 {
00342 FXFoldingItem *ti;
00343
00344 ti=f->getItem(index);
00345 if (ti==NULL) {
00346 DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range", index);
00347 return GWEN_ERROR_INVALID;
00348 }
00349 ti->setSelected((value==0)?FALSE:TRUE);
00350 return 0;
00351 }
00352
00353 case GWEN_DialogProperty_ClearValues:
00354 f->clearItems();
00355 return 0;
00356
00357 case GWEN_DialogProperty_SortDirection:
00358 {
00359 int i;
00360
00361 for (i=0; i<f->getNumHeaders(); i++) {
00362 if (i==index) {
00363 switch(value) {
00364 case GWEN_DialogSortDirection_None:
00365 f->setHeaderArrowDir(i, MAYBE);
00366 break;
00367 case GWEN_DialogSortDirection_Up:
00368 f->setHeaderArrowDir(i, TRUE);
00369 break;
00370 case GWEN_DialogSortDirection_Down:
00371 f->setHeaderArrowDir(i, FALSE);
00372 break;
00373 }
00374 }
00375 else
00376 f->setHeaderArrowDir(i, MAYBE);
00377 }
00378
00379 switch(value) {
00380 case GWEN_DialogSortDirection_None:
00381 break;
00382 case GWEN_DialogSortDirection_Up:
00383 f->sortByColumn(i, true);
00384 break;
00385 case GWEN_DialogSortDirection_Down:
00386 f->sortByColumn(i, false);
00387 break;
00388 }
00389 }
00390 return 0;
00391
00392 case GWEN_DialogProperty_Sort:
00393 {
00394 int i;
00395
00396 for (i=0; i<f->getNumHeaders(); i++) {
00397 FXbool b;
00398
00399 b=f->getHeaderArrowDir(i);
00400 if (b!=MAYBE) {
00401 if (b==TRUE)
00402 f->sortByColumn(i, true);
00403 else
00404 f->sortByColumn(i, false);
00405 break;
00406 }
00407 }
00408 }
00409 return 0;
00410
00411
00412 default:
00413 break;
00414 }
00415 break;
00416 }
00417
00418 case GWEN_Widget_TypeCheckBox:
00419 {
00420 FXCheckButton *f;
00421
00422 f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00423 assert(f);
00424
00425 switch(prop) {
00426 case GWEN_DialogProperty_Value:
00427 f->setCheck((value==0)?FALSE:TRUE, doSignal?TRUE:FALSE);
00428 return 0;
00429
00430 default:
00431 break;
00432 }
00433 break;
00434 }
00435
00436 case GWEN_Widget_TypeTabBook:
00437 {
00438 FXTabBook *f;
00439
00440 f=(FXTabBook*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00441 assert(f);
00442
00443 switch(prop) {
00444 case GWEN_DialogProperty_Value:
00445 f->setCurrent(value, doSignal?TRUE:FALSE);
00446 return 0;
00447
00448 default:
00449 break;
00450 }
00451 break;
00452 }
00453
00454 case GWEN_Widget_TypeWidgetStack:
00455 {
00456 FXSwitcher *f;
00457
00458 f=(FXSwitcher*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00459 assert(f);
00460
00461 switch(prop) {
00462 case GWEN_DialogProperty_Value:
00463 f->setCurrent(value, doSignal?TRUE:FALSE);
00464 return 0;
00465
00466 default:
00467 break;
00468 }
00469 break;
00470 }
00471
00472 case GWEN_Widget_TypeLabel:
00473 case GWEN_Widget_TypePushButton:
00474 case GWEN_Widget_TypeLineEdit:
00475 case GWEN_Widget_TypeTextEdit:
00476 case GWEN_Widget_TypeGroupBox:
00477 case GWEN_Widget_TypeHSpacer:
00478 case GWEN_Widget_TypeVSpacer:
00479 case GWEN_Widget_TypeHLayout:
00480 case GWEN_Widget_TypeVLayout:
00481 case GWEN_Widget_TypeGridLayout:
00482 case GWEN_Widget_TypeDialog:
00483 case GWEN_Widget_TypeTabPage:
00484 case GWEN_Widget_TypeScrollArea:
00485 case GWEN_Widget_TypeHLine:
00486 case GWEN_Widget_TypeVLine:
00487 case GWEN_Widget_TypeTextBrowser:
00488 ;
00489 }
00490
00491 {
00492 FXWindow *f;
00493
00494 f=(FXWindow*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00495 assert(f);
00496
00497 switch(prop) {
00498 case GWEN_DialogProperty_Width:
00499 f->recalc();
00500 f->resize(value, f->getHeight());
00501 return 0;
00502 case GWEN_DialogProperty_Height:
00503 f->recalc();
00504 f->resize(f->getWidth(), value);
00505 return 0;
00506 case GWEN_DialogProperty_Enabled:
00507 if (value==0)
00508 f->disable();
00509 else
00510 f->enable();
00511 return 0;
00512
00513 case GWEN_DialogProperty_Focus:
00514 f->setFocus();
00515 return 0;
00516
00517 case GWEN_DialogProperty_Visibility:
00518 if (value==0) {
00519 f->hide();
00520 f->recalc();
00521 }
00522 else {
00523 f->show();
00524 f->recalc();
00525 }
00526 return 0;
00527
00528 case GWEN_DialogProperty_Title:
00529 case GWEN_DialogProperty_Value:
00530 case GWEN_DialogProperty_MinValue:
00531 case GWEN_DialogProperty_MaxValue:
00532 case GWEN_DialogProperty_AddValue:
00533 case GWEN_DialogProperty_ClearValues:
00534 case GWEN_DialogProperty_ValueCount:
00535 case GWEN_DialogProperty_ColumnWidth:
00536 case GWEN_DialogProperty_SelectionMode:
00537 case GWEN_DialogProperty_SelectionState:
00538 case GWEN_DialogProperty_SortDirection:
00539 case GWEN_DialogProperty_Sort:
00540 case GWEN_DialogProperty_ToolTip:
00541 case GWEN_DialogProperty_None:
00542 case GWEN_DialogProperty_Unknown:
00543 ;
00544 }
00545 }
00546
00547 DBG_WARN(0, "Function is not appropriate for this type of widget (%s)",
00548 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00549 return GWEN_ERROR_INVALID;
00550 }
00551
00552
00553
00554 int FOX16_GuiDialog::getIntProperty(GWEN_WIDGET *w,
00555 GWEN_DIALOG_PROPERTY prop,
00556 int index,
00557 int defaultValue) {
00558 switch(GWEN_Widget_GetType(w)) {
00559 case GWEN_Widget_TypeUnknown:
00560 case GWEN_Widget_TypeNone:
00561 return defaultValue;
00562
00563 case GWEN_Widget_TypeComboBox:
00564 {
00565 THEMECOMBOBOX *f;
00566
00567 f=(THEMECOMBOBOX*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00568 assert(f);
00569
00570 switch(prop) {
00571 case GWEN_DialogProperty_Value:
00572 return f->getCurrentItem();
00573
00574 case GWEN_DialogProperty_ValueCount:
00575 return f->getNumItems();
00576
00577 default:
00578 break;
00579 }
00580 break;
00581 }
00582
00583 case GWEN_Widget_TypeRadioButton:
00584 {
00585 FXRadioButton *f;
00586
00587 f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00588 assert(f);
00589
00590 switch(prop) {
00591 case GWEN_DialogProperty_Value:
00592 return (f->getCheck()==TRUE)?1:0;
00593
00594 default:
00595 break;
00596 }
00597 break;
00598 }
00599
00600 case GWEN_Widget_TypeProgressBar:
00601 {
00602 FXProgressBar *f;
00603
00604 f=(FXProgressBar*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00605 assert(f);
00606
00607 switch(prop) {
00608 case GWEN_DialogProperty_Value:
00609 return f->getProgress();
00610
00611 case GWEN_DialogProperty_MinValue:
00612 return 0;
00613
00614 case GWEN_DialogProperty_MaxValue:
00615 return f->getTotal();
00616
00617 default:
00618 break;
00619 }
00620
00621 break;
00622 }
00623
00624 case GWEN_Widget_TypeSpinBox:
00625 {
00626 FXSpinner *f;
00627
00628 f=(FXSpinner*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00629 assert(f);
00630
00631 switch(prop) {
00632 case GWEN_DialogProperty_Value:
00633 return f->getValue();
00634
00635 case GWEN_DialogProperty_MinValue: {
00636 FXint lo, hi;
00637
00638 f->getRange(lo, hi);
00639 return lo;
00640 }
00641
00642 case GWEN_DialogProperty_MaxValue: {
00643 FXint lo, hi;
00644
00645 f->getRange(lo, hi);
00646 return hi;
00647 }
00648
00649 default:
00650 break;
00651 }
00652
00653 break;
00654 }
00655
00656 case GWEN_Widget_TypeListBox:
00657 {
00658 FOX16_GuiSortingList *f;
00659 FXFoldingItem *fi;
00660 int i=0;
00661
00662 f=(FOX16_GuiSortingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00663 assert(f);
00664
00665 switch(prop) {
00666 case GWEN_DialogProperty_Value:
00667 fi=f->getCurrentItem();
00668 if (fi==NULL)
00669 return defaultValue;
00670 else {
00671 FXFoldingItem *ti;
00672
00673 ti=fi;
00674 while( (ti=ti->getPrev()) )
00675 i++;
00676
00677 return i;
00678 }
00679
00680 case GWEN_DialogProperty_ValueCount:
00681 return f->getNumItems();
00682
00683 case GWEN_DialogProperty_ColumnWidth:
00684 return f->getHeaderSize(index);
00685
00686 case GWEN_DialogProperty_SelectionMode:
00687 {
00688 switch(f->getListStyle()) {
00689 case FOLDINGLIST_BROWSESELECT:
00690 return GWEN_Dialog_SelectionMode_Single;
00691 case FOLDINGLIST_EXTENDEDSELECT:
00692 return GWEN_Dialog_SelectionMode_Multi;
00693 default:
00694 return GWEN_Dialog_SelectionMode_None;
00695 }
00696 break;
00697 }
00698
00699 case GWEN_DialogProperty_SelectionState:
00700 {
00701 FXFoldingItem *ti;
00702 int i=index;
00703
00704 ti=f->getFirstItem();
00705 while(ti && i) {
00706 ti=ti->getNext();
00707 i--;
00708 }
00709
00710 if (ti)
00711 return (ti->isSelected()==TRUE)?1:0;
00712 return defaultValue;
00713 }
00714
00715 case GWEN_DialogProperty_SortDirection:
00716 {
00717 int i;
00718
00719 for (i=0; i<f->getNumHeaders(); i++) {
00720 if (i==index) {
00721 FXbool b;
00722
00723 b=f->getHeaderArrowDir(i);
00724 if (b==MAYBE)
00725 return GWEN_DialogSortDirection_None;
00726 else if (b==TRUE)
00727 return GWEN_DialogSortDirection_Up;
00728 else
00729 return GWEN_DialogSortDirection_Down;
00730 }
00731 }
00732 DBG_ERROR(GWEN_LOGDOMAIN, "Column %d out of range", index);
00733 }
00734 return defaultValue;
00735
00736 default:
00737 break;
00738 }
00739
00740 break;
00741 }
00742
00743 case GWEN_Widget_TypeCheckBox:
00744 {
00745 FXCheckButton *f;
00746
00747 f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00748 assert(f);
00749
00750 switch(prop) {
00751 case GWEN_DialogProperty_Value:
00752 return (f->getCheck()==TRUE)?1:0;
00753
00754 default:
00755 break;
00756 }
00757
00758 break;
00759 }
00760
00761 case GWEN_Widget_TypeTabBook:
00762 {
00763 FXTabBook *f;
00764
00765 f=(FXTabBook*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00766 assert(f);
00767
00768 switch(prop) {
00769 case GWEN_DialogProperty_Value:
00770 return f->getCurrent();
00771
00772 default:
00773 break;
00774 }
00775
00776 break;
00777 }
00778
00779 case GWEN_Widget_TypeWidgetStack:
00780 {
00781 FXSwitcher *f;
00782
00783 f=(FXSwitcher*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00784 assert(f);
00785
00786 switch(prop) {
00787 case GWEN_DialogProperty_Value:
00788 return f->getCurrent();
00789
00790 default:
00791 break;
00792 }
00793
00794 break;
00795 }
00796
00797 case GWEN_Widget_TypeLabel:
00798 case GWEN_Widget_TypePushButton:
00799 case GWEN_Widget_TypeLineEdit:
00800 case GWEN_Widget_TypeTextEdit:
00801 case GWEN_Widget_TypeGroupBox:
00802 case GWEN_Widget_TypeHSpacer:
00803 case GWEN_Widget_TypeVSpacer:
00804 case GWEN_Widget_TypeHLayout:
00805 case GWEN_Widget_TypeVLayout:
00806 case GWEN_Widget_TypeGridLayout:
00807 case GWEN_Widget_TypeDialog:
00808 case GWEN_Widget_TypeTabPage:
00809 case GWEN_Widget_TypeScrollArea:
00810 case GWEN_Widget_TypeHLine:
00811 case GWEN_Widget_TypeVLine:
00812 case GWEN_Widget_TypeTextBrowser:
00813 break;
00814 }
00815
00816
00817 {
00818 FXWindow *f;
00819
00820 f=(FXWindow*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00821 assert(f);
00822
00823 switch(prop) {
00824 case GWEN_DialogProperty_Width:
00825 return f->getWidth();
00826
00827 case GWEN_DialogProperty_Height:
00828 return f->getHeight();
00829
00830 case GWEN_DialogProperty_Enabled:
00831 return (f->isEnabled()==TRUE)?1:0;
00832
00833 case GWEN_DialogProperty_Focus:
00834 return (f->hasFocus())?1:0;
00835
00836 case GWEN_DialogProperty_Title:
00837 case GWEN_DialogProperty_Value:
00838 case GWEN_DialogProperty_MinValue:
00839 case GWEN_DialogProperty_MaxValue:
00840 case GWEN_DialogProperty_AddValue:
00841 case GWEN_DialogProperty_ClearValues:
00842 case GWEN_DialogProperty_ValueCount:
00843 case GWEN_DialogProperty_ColumnWidth:
00844 case GWEN_DialogProperty_SelectionMode:
00845 case GWEN_DialogProperty_SelectionState:
00846 case GWEN_DialogProperty_SortDirection:
00847 case GWEN_DialogProperty_Sort:
00848 case GWEN_DialogProperty_Visibility:
00849 case GWEN_DialogProperty_ToolTip:
00850 case GWEN_DialogProperty_None:
00851 case GWEN_DialogProperty_Unknown:
00852 ;
00853 }
00854 }
00855
00856
00857 DBG_WARN(0, "Function is not appropriate for this type of widget (%s)",
00858 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00859 return defaultValue;
00860 }
00861
00862
00863
00864 int FOX16_GuiDialog::setCharProperty(GWEN_WIDGET *w,
00865 GWEN_DIALOG_PROPERTY prop,
00866 int index,
00867 const char *value,
00868 int doSignal) {
00869
00870 FXString strValue;
00871 FXString htmlValue;
00872
00873 if (value && *value) {
00874 strValue=FOX16_Gui::getRawText(value);
00875 htmlValue=FOX16_Gui::getHtmlText(value);
00876 }
00877
00878 switch(GWEN_Widget_GetType(w)) {
00879 case GWEN_Widget_TypeUnknown:
00880 return GWEN_ERROR_GENERIC;
00881 case GWEN_Widget_TypeNone:
00882 return GWEN_ERROR_GENERIC;
00883
00884 case GWEN_Widget_TypeLabel:
00885 {
00886 FOX16_HtmlLabel *f;
00887
00888 f=(FOX16_HtmlLabel*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00889 assert(f);
00890
00891 switch(prop) {
00892 case GWEN_DialogProperty_Title:
00893 f->setText(htmlValue);
00894 return 0;
00895
00896 default:
00897 break;
00898 }
00899 break;
00900 }
00901
00902 case GWEN_Widget_TypeTextBrowser:
00903 {
00904 FOX16_HtmlText *f;
00905
00906 f=(FOX16_HtmlText*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00907 assert(f);
00908
00909 switch(prop) {
00910 case GWEN_DialogProperty_Value:
00911 f->setText(htmlValue);
00912 f->makePositionVisible(strValue.length());
00913 return 0;
00914
00915 case GWEN_DialogProperty_AddValue:
00916 f->setText(f->getText()+htmlValue);
00917 return 0;
00918
00919 case GWEN_DialogProperty_ClearValues:
00920 f->setText("");
00921 return 0;
00922
00923 default:
00924 break;
00925 }
00926 break;
00927
00928 }
00929
00930 case GWEN_Widget_TypePushButton:
00931 {
00932 THEMEBUTTON *f;
00933
00934 f=(THEMEBUTTON*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00935 assert(f);
00936
00937 switch(prop) {
00938 case GWEN_DialogProperty_Title:
00939 f->setText(value);
00940 return 0;
00941
00942 case GWEN_DialogProperty_ToolTip:
00943 f->setTipText(htmlValue);
00944 return 0;
00945
00946 default:
00947 break;
00948 }
00949 break;
00950 }
00951
00952 case GWEN_Widget_TypeLineEdit:
00953 {
00954 FXTextField *f;
00955
00956 f=(FXTextField*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00957 assert(f);
00958
00959 switch(prop) {
00960 case GWEN_DialogProperty_Value:
00961 f->setText(value, doSignal?TRUE:FALSE);
00962 return 0;
00963
00964 case GWEN_DialogProperty_ToolTip:
00965 f->setTipText(htmlValue);
00966 return 0;
00967
00968 default:
00969 break;
00970 }
00971 break;
00972 }
00973
00974 case GWEN_Widget_TypeTextEdit:
00975 {
00976 FXText *f;
00977
00978 f=(FXText*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
00979 assert(f);
00980
00981 switch(prop) {
00982 case GWEN_DialogProperty_Value:
00983 f->setText(strValue);
00984 return 0;
00985
00986 case GWEN_DialogProperty_ToolTip:
00987 f->setTipText(htmlValue);
00988 return 0;
00989
00990 default:
00991 break;
00992 }
00993 break;
00994 }
00995
00996 case GWEN_Widget_TypeComboBox:
00997 {
00998 THEMECOMBOBOX *f;
00999
01000 f=(THEMECOMBOBOX*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01001 assert(f);
01002
01003 switch(prop) {
01004 case GWEN_DialogProperty_Value:
01005
01006 break;
01007
01008 case GWEN_DialogProperty_ToolTip:
01009 f->setTipText(htmlValue);
01010 return 0;
01011
01012 case GWEN_DialogProperty_AddValue:
01013 {
01014 int i;
01015
01016 f->appendItem(strValue);
01017 i=f->getNumItems();
01018 if (i>10)
01019 i=10;
01020 f->setNumVisible(i);
01021 return 0;
01022 }
01023
01024 case GWEN_DialogProperty_ClearValues:
01025 f->clearItems();
01026 return 0;
01027
01028 default:
01029 break;
01030 }
01031 break;
01032 }
01033
01034 case GWEN_Widget_TypeGroupBox:
01035 {
01036 FXGroupBox *f;
01037
01038 f=(FXGroupBox*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01039 assert(f);
01040
01041 switch(prop) {
01042 case GWEN_DialogProperty_Title:
01043 f->setText(strValue);
01044 return 0;
01045 default:
01046 break;
01047 }
01048 break;
01049 }
01050
01051 case GWEN_Widget_TypeRadioButton:
01052 {
01053 FXRadioButton *f;
01054
01055 f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01056 assert(f);
01057
01058 switch(prop) {
01059 case GWEN_DialogProperty_Title:
01060 f->setText(strValue);
01061 return 0;
01062
01063 case GWEN_DialogProperty_ToolTip:
01064 f->setTipText(htmlValue);
01065 return 0;
01066
01067 default:
01068 break;
01069 }
01070 break;
01071 }
01072
01073 case GWEN_Widget_TypeCheckBox:
01074 {
01075 FXCheckButton *f;
01076
01077 f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01078 assert(f);
01079
01080 switch(prop) {
01081 case GWEN_DialogProperty_Title:
01082 f->setText(strValue);
01083 return 0;
01084
01085 case GWEN_DialogProperty_ToolTip:
01086 f->setTipText(htmlValue);
01087 return 0;
01088
01089 default:
01090 break;
01091 }
01092 break;
01093 }
01094
01095 case GWEN_Widget_TypeTabPage:
01096 {
01097 FXWindow *f1;
01098 THEMETABITEM *f2;
01099
01100 f1=(FXWindow*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01101 assert(f1);
01102 f2=(THEMETABITEM*) (f1->getPrev());
01103 assert(f2);
01104
01105 switch(prop) {
01106 case GWEN_DialogProperty_Title:
01107 f2->setText(strValue);
01108 return 0;
01109
01110 case GWEN_DialogProperty_ToolTip:
01111 f2->setTipText(htmlValue);
01112 return 0;
01113
01114 default:
01115 break;
01116 }
01117 break;
01118 }
01119
01120 case GWEN_Widget_TypeDialog:
01121 {
01122 FXDialogBox *f;
01123
01124 f=(FXDialogBox*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01125 assert(f);
01126
01127 switch(prop) {
01128 case GWEN_DialogProperty_Title:
01129 f->setTitle(strValue);
01130 return 0;
01131 default:
01132 break;
01133 }
01134 break;
01135 }
01136
01137 case GWEN_Widget_TypeListBox:
01138 {
01139 FXFoldingList *f;
01140 FXString str;
01141 FXString t;
01142 FXint n=0;
01143
01144 f=(FXFoldingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01145 assert(f);
01146
01147 switch(prop) {
01148 case GWEN_DialogProperty_Title:
01149 f->getHeader()->clearItems();
01150 str=strValue;
01151 while(!(t=str.section('\t',n)).empty()){
01152 f->appendHeader(t, NULL, 20);
01153 n++;
01154 }
01155 return 0;
01156
01157 case GWEN_DialogProperty_AddValue:
01158 f->appendItem(NULL, strValue);
01159 return 0;
01160
01161 case GWEN_DialogProperty_ClearValues:
01162 f->clearItems();
01163 return 0;
01164
01165 default:
01166 break;
01167 }
01168 break;
01169 }
01170
01171 case GWEN_Widget_TypeSpinBox:
01172 {
01173 FXSpinner *f;
01174
01175 f=(FXSpinner*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01176 assert(f);
01177
01178 switch(prop) {
01179 case GWEN_DialogProperty_ToolTip:
01180 f->setTipText(htmlValue);
01181 return 0;
01182
01183 default:
01184 break;
01185 }
01186 break;
01187 }
01188
01189 case GWEN_Widget_TypeProgressBar:
01190 case GWEN_Widget_TypeHSpacer:
01191 case GWEN_Widget_TypeVSpacer:
01192 case GWEN_Widget_TypeHLayout:
01193 case GWEN_Widget_TypeVLayout:
01194 case GWEN_Widget_TypeGridLayout:
01195 case GWEN_Widget_TypeTabBook:
01196 case GWEN_Widget_TypeScrollArea:
01197 case GWEN_Widget_TypeWidgetStack:
01198 case GWEN_Widget_TypeHLine:
01199 case GWEN_Widget_TypeVLine:
01200 ;
01201 }
01202
01203
01204
01205
01206 switch(prop) {
01207 case GWEN_DialogProperty_Title:
01208 case GWEN_DialogProperty_Value:
01209 case GWEN_DialogProperty_MinValue:
01210 case GWEN_DialogProperty_MaxValue:
01211 case GWEN_DialogProperty_Enabled:
01212 case GWEN_DialogProperty_AddValue:
01213 case GWEN_DialogProperty_ClearValues:
01214 case GWEN_DialogProperty_ValueCount:
01215 case GWEN_DialogProperty_ColumnWidth:
01216 case GWEN_DialogProperty_Width:
01217 case GWEN_DialogProperty_Height:
01218 case GWEN_DialogProperty_SelectionMode:
01219 case GWEN_DialogProperty_SelectionState:
01220 case GWEN_DialogProperty_Focus:
01221 case GWEN_DialogProperty_SortDirection:
01222 case GWEN_DialogProperty_Sort:
01223 case GWEN_DialogProperty_Visibility:
01224 case GWEN_DialogProperty_ToolTip:
01225 case GWEN_DialogProperty_None:
01226 case GWEN_DialogProperty_Unknown:
01227 break;
01228 }
01229
01230 DBG_WARN(0, "Function is not appropriate for this type of widget (%s)",
01231 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
01232 return GWEN_ERROR_INVALID;
01233 }
01234
01235
01236
01237 const char *FOX16_GuiDialog::getCharProperty(GWEN_WIDGET *w,
01238 GWEN_DIALOG_PROPERTY prop,
01239 int index,
01240 const char *defaultValue) {
01241 FXString str;
01242
01243 switch(GWEN_Widget_GetType(w)) {
01244 case GWEN_Widget_TypeUnknown:
01245 return defaultValue;
01246 case GWEN_Widget_TypeNone:
01247 return defaultValue;
01248
01249 case GWEN_Widget_TypeLabel:
01250 {
01251 FOX16_HtmlLabel *f;
01252
01253 f=(FOX16_HtmlLabel*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01254 assert(f);
01255
01256 switch(prop) {
01257 case GWEN_DialogProperty_Title:
01258 str=f->getText();
01259 if (str.empty())
01260 return defaultValue;
01261 else {
01262 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text());
01263 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE);
01264 }
01265
01266 default:
01267 break;
01268 }
01269 break;
01270 }
01271
01272 case GWEN_Widget_TypePushButton:
01273 {
01274 THEMEBUTTON *f;
01275
01276 f=(THEMEBUTTON*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01277 assert(f);
01278
01279 switch(prop) {
01280 case GWEN_DialogProperty_Title:
01281 str=f->getText();
01282 if (str.empty())
01283 return defaultValue;
01284 else {
01285 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text());
01286 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE);
01287 }
01288
01289 default:
01290 break;
01291 }
01292 break;
01293 }
01294
01295 case GWEN_Widget_TypeLineEdit:
01296 {
01297 FXTextField *f;
01298
01299 f=(FXTextField*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01300 assert(f);
01301
01302 switch(prop) {
01303 case GWEN_DialogProperty_Value:
01304 str=f->getText();
01305 if (str.empty())
01306 return defaultValue;
01307 else {
01308 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text());
01309 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE);
01310 }
01311
01312 default:
01313 break;
01314 }
01315 break;
01316 }
01317
01318 case GWEN_Widget_TypeTextEdit:
01319 {
01320 FXText *f;
01321
01322 f=(FXText*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01323 assert(f);
01324
01325 switch(prop) {
01326 case GWEN_DialogProperty_Value:
01327 str=f->getText();
01328 if (str.empty())
01329 return defaultValue;
01330 else {
01331 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text());
01332 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE);
01333 }
01334
01335 default:
01336 break;
01337 }
01338 break;
01339 }
01340
01341 case GWEN_Widget_TypeTextBrowser:
01342 {
01343 FOX16_HtmlText *f;
01344
01345 f=(FOX16_HtmlText*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01346 assert(f);
01347
01348 switch(prop) {
01349 case GWEN_DialogProperty_Value:
01350 str=f->getText();
01351 if (str.empty())
01352 return defaultValue;
01353 else {
01354 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text());
01355 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE);
01356 }
01357
01358 default:
01359 break;
01360 }
01361 break;
01362 }
01363
01364 case GWEN_Widget_TypeComboBox:
01365 {
01366 THEMECOMBOBOX *f;
01367
01368 f=(THEMECOMBOBOX*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01369 assert(f);
01370
01371 switch(prop) {
01372 case GWEN_DialogProperty_Value:
01373 if (index<f->getNumItems()) {
01374 str=f->getItem(index);
01375 if (str.empty())
01376 return defaultValue;
01377 else {
01378 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text());
01379 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE);
01380 }
01381 }
01382 else {
01383 DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range", index);
01384 return defaultValue;
01385 }
01386
01387 default:
01388 break;
01389 }
01390 break;
01391 }
01392
01393 case GWEN_Widget_TypeGroupBox:
01394 {
01395 FXGroupBox *f;
01396
01397 f=(FXGroupBox*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01398 assert(f);
01399
01400 switch(prop) {
01401 case GWEN_DialogProperty_Title:
01402 str=f->getText();
01403 if (str.empty())
01404 return defaultValue;
01405 else {
01406 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text());
01407 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE);
01408 }
01409
01410 default:
01411 break;
01412 }
01413 break;
01414 }
01415
01416 case GWEN_Widget_TypeRadioButton:
01417 {
01418 FXRadioButton *f;
01419
01420 f=(FXRadioButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01421 assert(f);
01422
01423 switch(prop) {
01424 case GWEN_DialogProperty_Title:
01425 str=f->getText();
01426 if (str.empty())
01427 return defaultValue;
01428 else {
01429 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text());
01430 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE);
01431 }
01432
01433 default:
01434 break;
01435 }
01436 break;
01437 }
01438
01439 case GWEN_Widget_TypeCheckBox:
01440 {
01441 FXCheckButton *f;
01442
01443 f=(FXCheckButton*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01444 assert(f);
01445
01446 switch(prop) {
01447 case GWEN_DialogProperty_Title:
01448 str=f->getText();
01449 if (str.empty())
01450 return defaultValue;
01451 else {
01452 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text());
01453 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE);
01454 }
01455
01456 default:
01457 break;
01458 }
01459 break;
01460 }
01461
01462 case GWEN_Widget_TypeTabPage:
01463 {
01464 FXWindow *f1;
01465 THEMETABITEM *f2;
01466
01467 f1=(FXWindow*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01468 assert(f1);
01469 f2=(THEMETABITEM*) (f1->getPrev());
01470 assert(f2);
01471
01472 switch(prop) {
01473 case GWEN_DialogProperty_Title:
01474 str=f2->getText();
01475 if (str.empty())
01476 return defaultValue;
01477 else {
01478 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text());
01479 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE);
01480 }
01481
01482 default:
01483 break;
01484 }
01485
01486 break;
01487 }
01488
01489 case GWEN_Widget_TypeDialog:
01490 {
01491 FXDialogBox *f;
01492
01493 f=(FXDialogBox*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01494 assert(f);
01495
01496 switch(prop) {
01497 case GWEN_DialogProperty_Title:
01498 str=f->getTitle();
01499 if (str.empty())
01500 return defaultValue;
01501 else {
01502 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text());
01503 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE);
01504 }
01505
01506 default:
01507 break;
01508 }
01509 break;
01510 }
01511
01512 case GWEN_Widget_TypeListBox:
01513 {
01514 FXFoldingList *f;
01515 FXHeader *fh;
01516 FXFoldingItem *fi;
01517
01518 f=(FXFoldingList*)GWEN_Widget_GetImplData(w, FOX16_DIALOG_WIDGET_REAL);
01519 assert(f);
01520
01521 switch(prop) {
01522 case GWEN_DialogProperty_Title:
01523 fh=f->getHeader();
01524 if (fh) {
01525 int i;
01526
01527 for (i=0; i<fh->getNumItems(); i++) {
01528 if (!str.empty())
01529 str+="\t";
01530 str+=fh->getItemText(i);
01531 }
01532 }
01533
01534 if (str.empty())
01535 return defaultValue;
01536 else {
01537 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_TITLE, str.text());
01538 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_TITLE);
01539 }
01540
01541 case GWEN_DialogProperty_Value:
01542 fi=f->getFirstItem();
01543 if (fi) {
01544 int i=index;
01545
01546 while(fi && i>0) {
01547 fi=fi->getNext();
01548 i--;
01549 }
01550 if (fi) {
01551 str=fi->getText();
01552 if (str.empty())
01553 return defaultValue;
01554 GWEN_Widget_SetText(w, FOX16_DIALOG_STRING_VALUE, str.text());
01555 return GWEN_Widget_GetText(w, FOX16_DIALOG_STRING_VALUE);
01556 }
01557 else {
01558 DBG_ERROR(GWEN_LOGDOMAIN, "Index %d out of range", index);
01559 return defaultValue;
01560 }
01561 }
01562 else {
01563 DBG_ERROR(GWEN_LOGDOMAIN, "Empty list");
01564 return defaultValue;
01565 }
01566
01567 default:
01568 break;
01569 }
01570 break;
01571 }
01572
01573
01574 case GWEN_Widget_TypeProgressBar:
01575 case GWEN_Widget_TypeSpinBox:
01576 case GWEN_Widget_TypeHSpacer:
01577 case GWEN_Widget_TypeVSpacer:
01578 case GWEN_Widget_TypeHLayout:
01579 case GWEN_Widget_TypeVLayout:
01580 case GWEN_Widget_TypeGridLayout:
01581 case GWEN_Widget_TypeTabBook:
01582 case GWEN_Widget_TypeScrollArea:
01583 case GWEN_Widget_TypeWidgetStack:
01584 case GWEN_Widget_TypeHLine:
01585 case GWEN_Widget_TypeVLine:
01586 break;
01587 }
01588
01589
01590
01591
01592 switch(prop) {
01593 case GWEN_DialogProperty_Title:
01594 case GWEN_DialogProperty_Value:
01595 case GWEN_DialogProperty_MinValue:
01596 case GWEN_DialogProperty_MaxValue:
01597 case GWEN_DialogProperty_Enabled:
01598 case GWEN_DialogProperty_AddValue:
01599 case GWEN_DialogProperty_ClearValues:
01600 case GWEN_DialogProperty_ValueCount:
01601 case GWEN_DialogProperty_ColumnWidth:
01602 case GWEN_DialogProperty_Width:
01603 case GWEN_DialogProperty_Height:
01604 case GWEN_DialogProperty_SelectionMode:
01605 case GWEN_DialogProperty_SelectionState:
01606 case GWEN_DialogProperty_Focus:
01607 case GWEN_DialogProperty_SortDirection:
01608 case GWEN_DialogProperty_Sort:
01609 case GWEN_DialogProperty_Visibility:
01610 case GWEN_DialogProperty_ToolTip:
01611 case GWEN_DialogProperty_None:
01612 case GWEN_DialogProperty_Unknown:
01613 break;
01614 }
01615
01616
01617 DBG_WARN(0, "Function is not appropriate for this type of widget (%s)",
01618 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
01619 return defaultValue;
01620 }
01621
01622
01623
01624
01625
01626 long FOX16_GuiDialog::onSelCommand(FXObject *sender, FXSelector sel, void *ptr) {
01627 GWEN_WIDGET *w;
01628 const char *wname;
01629 int rv=GWEN_DialogEvent_ResultNotHandled;
01630 FXDialogBox *dialogBox;
01631
01632 w=GWEN_Dialog_FindWidgetByImplData(_dialog, FOX16_DIALOG_WIDGET_REAL, sender);
01633 if (w==NULL) {
01634 if (!m_radioGroups.empty()) {
01635 std::list<RadioButtonGroup*>::iterator it;
01636 RadioButtonGroup *grp=NULL;
01637
01638 for (it=m_radioGroups.begin(); it!=m_radioGroups.end(); it++) {
01639 if ((*it)->getDataTarget()==sender) {
01640 grp=*it;
01641 break;
01642 }
01643 }
01644
01645 if (grp==NULL) {
01646 DBG_WARN(GWEN_LOGDOMAIN, "Widget or RadioButtonGroup not found");
01647 return 0;
01648 }
01649 else {
01650 DBG_INFO(0, "Found button group %d: %d", grp->getGroupId(), grp->getRadioValue());
01651
01652 return 1;
01653 }
01654 }
01655 }
01656 wname=GWEN_Widget_GetName(w);
01657
01658 dialogBox=_mainWidget;
01659
01660 DBG_DEBUG(GWEN_LOGDOMAIN, "Command for [%s] (type: %s)",
01661 wname?wname:"(unnamed)",
01662 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
01663
01664 switch(GWEN_Widget_GetType(w)) {
01665 case GWEN_Widget_TypeUnknown:
01666 return GWEN_ERROR_GENERIC;
01667
01668 case GWEN_Widget_TypeNone:
01669 return GWEN_ERROR_GENERIC;
01670
01671 case GWEN_Widget_TypePushButton:
01672 case GWEN_Widget_TypeLineEdit:
01673 case GWEN_Widget_TypeComboBox:
01674 case GWEN_Widget_TypeListBox:
01675 case GWEN_Widget_TypeCheckBox:
01676 case GWEN_Widget_TypeLabel:
01677 case GWEN_Widget_TypeTextEdit:
01678 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
01679 GWEN_DialogEvent_TypeActivated,
01680 GWEN_Widget_GetName(w));
01681 break;
01682 case GWEN_Widget_TypeSpinBox:
01683 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
01684 GWEN_DialogEvent_TypeValueChanged,
01685 GWEN_Widget_GetName(w));
01686 break;
01687
01688 case GWEN_Widget_TypeRadioButton:
01689 case GWEN_Widget_TypeProgressBar:
01690 case GWEN_Widget_TypeGroupBox:
01691 case GWEN_Widget_TypeHSpacer:
01692 case GWEN_Widget_TypeVSpacer:
01693 case GWEN_Widget_TypeHLayout:
01694 case GWEN_Widget_TypeVLayout:
01695 case GWEN_Widget_TypeGridLayout:
01696 case GWEN_Widget_TypeDialog:
01697 case GWEN_Widget_TypeTabBook:
01698 case GWEN_Widget_TypeTabPage:
01699 case GWEN_Widget_TypeScrollArea:
01700 case GWEN_Widget_TypeWidgetStack:
01701 case GWEN_Widget_TypeHLine:
01702 case GWEN_Widget_TypeVLine:
01703 case GWEN_Widget_TypeTextBrowser:
01704
01705 ;
01706 }
01707
01708 if (rv==GWEN_DialogEvent_ResultAccept) {
01709 dialogBox->getApp()->stopModal(dialogBox, 1);
01710 }
01711 else if (rv==GWEN_DialogEvent_ResultReject) {
01712 dialogBox->getApp()->stopModal(dialogBox, 0);
01713 }
01714
01715 return 1;
01716 }
01717
01718
01719
01720 long FOX16_GuiDialog::onSelChanged(FXObject *sender, FXSelector sel, void *ptr) {
01721 GWEN_WIDGET *w;
01722 int rv=GWEN_DialogEvent_ResultNotHandled;
01723 FXDialogBox *dialogBox;
01724
01725 w=GWEN_Dialog_FindWidgetByImplData(_dialog, FOX16_DIALOG_WIDGET_REAL, sender);
01726 if (w==NULL) {
01727 DBG_INFO(0, "Widget not found");
01728 return 0;
01729 }
01730
01731 dialogBox=_mainWidget;
01732
01733 switch(GWEN_Widget_GetType(w)) {
01734 case GWEN_Widget_TypeUnknown:
01735 return GWEN_ERROR_GENERIC;
01736 case GWEN_Widget_TypeNone:
01737 return GWEN_ERROR_GENERIC;
01738 case GWEN_Widget_TypeSpinBox:
01739 case GWEN_Widget_TypeLineEdit:
01740 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
01741 GWEN_DialogEvent_TypeValueChanged,
01742 GWEN_Widget_GetName(w));
01743 break;
01744
01745 case GWEN_Widget_TypeLabel:
01746 case GWEN_Widget_TypePushButton:
01747 case GWEN_Widget_TypeTextEdit:
01748 case GWEN_Widget_TypeComboBox:
01749 case GWEN_Widget_TypeRadioButton:
01750 case GWEN_Widget_TypeProgressBar:
01751 case GWEN_Widget_TypeGroupBox:
01752 case GWEN_Widget_TypeHSpacer:
01753 case GWEN_Widget_TypeVSpacer:
01754 case GWEN_Widget_TypeHLayout:
01755 case GWEN_Widget_TypeVLayout:
01756 case GWEN_Widget_TypeGridLayout:
01757 case GWEN_Widget_TypeListBox:
01758 case GWEN_Widget_TypeDialog:
01759 case GWEN_Widget_TypeTabBook:
01760 case GWEN_Widget_TypeTabPage:
01761 case GWEN_Widget_TypeCheckBox:
01762 case GWEN_Widget_TypeScrollArea:
01763 case GWEN_Widget_TypeWidgetStack:
01764 case GWEN_Widget_TypeHLine:
01765 case GWEN_Widget_TypeVLine:
01766 case GWEN_Widget_TypeTextBrowser:
01767 ;
01768 }
01769
01770 if (rv==GWEN_DialogEvent_ResultAccept) {
01771 GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, "");
01772 dialogBox->getApp()->stopModal(dialogBox, 1);
01773 }
01774 else if (rv==GWEN_DialogEvent_ResultReject) {
01775 GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, "");
01776 dialogBox->getApp()->stopModal(dialogBox, 0);
01777 }
01778
01779 return 1;
01780 }
01781
01782
01783
01784 long FOX16_GuiDialog::onSelKeyPress(FXObject *sender, FXSelector sel, void *ptr) {
01785 GWEN_WIDGET *w;
01786
01787 w=GWEN_Dialog_FindWidgetByImplData(_dialog, FOX16_DIALOG_WIDGET_REAL, sender);
01788 if (w==NULL) {
01789 DBG_INFO(0, "Widget not found");
01790 return 0;
01791 }
01792
01793 switch(GWEN_Widget_GetType(w)) {
01794 case GWEN_Widget_TypeUnknown:
01795 case GWEN_Widget_TypeNone:
01796 return 0;
01797
01798 case GWEN_Widget_TypeDialog:
01799
01800 if (((FXEvent*)ptr)->code==KEY_Return || ((FXEvent*)ptr)->code==KEY_KP_Enter) {
01801 return 1;
01802 }
01803 return 0;
01804
01805 case GWEN_Widget_TypeLabel:
01806 case GWEN_Widget_TypePushButton:
01807 case GWEN_Widget_TypeLineEdit:
01808 case GWEN_Widget_TypeTextEdit:
01809 case GWEN_Widget_TypeComboBox:
01810 case GWEN_Widget_TypeRadioButton:
01811 case GWEN_Widget_TypeProgressBar:
01812 case GWEN_Widget_TypeSpinBox:
01813 case GWEN_Widget_TypeGroupBox:
01814 case GWEN_Widget_TypeHSpacer:
01815 case GWEN_Widget_TypeVSpacer:
01816 case GWEN_Widget_TypeHLayout:
01817 case GWEN_Widget_TypeVLayout:
01818 case GWEN_Widget_TypeGridLayout:
01819 case GWEN_Widget_TypeListBox:
01820 case GWEN_Widget_TypeTabBook:
01821 case GWEN_Widget_TypeTabPage:
01822 case GWEN_Widget_TypeCheckBox:
01823 case GWEN_Widget_TypeScrollArea:
01824 case GWEN_Widget_TypeWidgetStack:
01825 case GWEN_Widget_TypeHLine:
01826 case GWEN_Widget_TypeVLine:
01827 case GWEN_Widget_TypeTextBrowser:
01828 ;
01829 }
01830
01831 return 0;
01832 }
01833
01834
01835
01836 long FOX16_GuiDialog::onSelKeyRelease(FXObject *sender, FXSelector sel, void *ptr) {
01837 GWEN_WIDGET *w;
01838
01839 w=GWEN_Dialog_FindWidgetByImplData(_dialog, FOX16_DIALOG_WIDGET_REAL, sender);
01840 if (w==NULL) {
01841 DBG_INFO(0, "Widget not found");
01842 return 0;
01843 }
01844
01845 switch(GWEN_Widget_GetType(w)) {
01846 case GWEN_Widget_TypeDialog:
01847
01848 if (((FXEvent*)ptr)->code==KEY_Return || ((FXEvent*)ptr)->code==KEY_KP_Enter) {
01849 return 1;
01850 }
01851 return 0;
01852
01853 case GWEN_Widget_TypeUnknown:
01854 case GWEN_Widget_TypeNone:
01855 case GWEN_Widget_TypeLabel:
01856 case GWEN_Widget_TypePushButton:
01857 case GWEN_Widget_TypeLineEdit:
01858 case GWEN_Widget_TypeTextEdit:
01859 case GWEN_Widget_TypeComboBox:
01860 case GWEN_Widget_TypeRadioButton:
01861 case GWEN_Widget_TypeProgressBar:
01862 case GWEN_Widget_TypeSpinBox:
01863 case GWEN_Widget_TypeGroupBox:
01864 case GWEN_Widget_TypeHSpacer:
01865 case GWEN_Widget_TypeVSpacer:
01866 case GWEN_Widget_TypeHLayout:
01867 case GWEN_Widget_TypeVLayout:
01868 case GWEN_Widget_TypeGridLayout:
01869 case GWEN_Widget_TypeListBox:
01870 case GWEN_Widget_TypeTabBook:
01871 case GWEN_Widget_TypeTabPage:
01872 case GWEN_Widget_TypeCheckBox:
01873 case GWEN_Widget_TypeScrollArea:
01874 case GWEN_Widget_TypeWidgetStack:
01875 case GWEN_Widget_TypeHLine:
01876 case GWEN_Widget_TypeVLine:
01877 case GWEN_Widget_TypeTextBrowser:
01878 ;
01879 }
01880
01881 return 0;
01882 }
01883
01884
01885
01886 bool FOX16_GuiDialog::setup(FXWindow *parentWindow) {
01887 FXWindow *xw;
01888 GWEN_WIDGET_TREE *wtree;
01889 GWEN_WIDGET *w;
01890 int rv;
01891
01892 wtree=GWEN_Dialog_GetWidgets(_dialog);
01893 if (wtree==NULL) {
01894 DBG_ERROR(GWEN_LOGDOMAIN, "No widget tree in dialog");
01895 return false;
01896 }
01897 w=GWEN_Widget_Tree_GetFirst(wtree);
01898 if (w==NULL) {
01899 DBG_ERROR(GWEN_LOGDOMAIN, "No widgets in dialog");
01900 return false;
01901 }
01902
01903 xw=setupTree(parentWindow, w);
01904 if (xw==NULL) {
01905 DBG_INFO(0, "here");
01906 return false;
01907 }
01908
01909 _mainWidget=dynamic_cast<FXDialogBox*>(xw);
01910 assert(_mainWidget);
01911
01912 rv=GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeInit, "");
01913 if (rv<0) {
01914 DBG_INFO(0, "Error initializing dialog: %d", rv);
01915 return false;
01916 }
01917
01918
01919 xw->create();
01920
01921 xw->layout();
01922
01923 return true;
01924 }
01925
01926
01927
01928
01929 FXWindow *FOX16_GuiDialog::setupTree(FXWindow *parentWindow, GWEN_WIDGET *w) {
01930 const char *s;
01931 const char *name;
01932 FXuint opts=0;
01933 uint32_t flags;
01934 FXString text;
01935 FXString htmlText;
01936 FXComposite *parentComposite=NULL;
01937 FXWindow *wChild=NULL;
01938 FXWindow *wContent=NULL;
01939 GWEN_WIDGET *parentWidget;
01940 int cols;
01941 int rows;
01942
01943
01944 flags=GWEN_Widget_GetFlags(w);
01945 s=GWEN_Widget_GetText(w, 0);
01946 if (s) {
01947 text=FXString(s);
01948 htmlText=FOX16_Gui::getHtmlText(s);
01949 }
01950 name=GWEN_Widget_GetName(w);
01951 cols=GWEN_Widget_GetColumns(w);
01952 rows=GWEN_Widget_GetRows(w);
01953
01954 parentWidget=GWEN_Widget_Tree_GetParent(w);
01955
01956
01957 if (parentWindow)
01958 parentComposite=dynamic_cast<FXComposite*>(parentWindow);
01959 if (parentComposite==NULL) {
01960 switch(GWEN_Widget_GetType(w)) {
01961 case GWEN_Widget_TypeDialog:
01962
01963 break;
01964 default:
01965 DBG_ERROR(GWEN_LOGDOMAIN, "Parent of widget [%s] (type %d) is not a composite",
01966 name?name:"(unnamed)", GWEN_Widget_GetType(w));
01967 return NULL;
01968 }
01969 }
01970
01971
01972 if (flags & GWEN_WIDGET_FLAGS_FILLX)
01973 opts|=LAYOUT_FILL_X | LAYOUT_FILL_COLUMN;
01974 if (flags & GWEN_WIDGET_FLAGS_FILLY)
01975 opts|=LAYOUT_FILL_Y;
01976 if (flags & GWEN_WIDGET_FLAGS_DECOR_SHRINKABLE)
01977 opts|=DECOR_SHRINKABLE;
01978 if (flags & GWEN_WIDGET_FLAGS_DECOR_STRETCHABLE)
01979 opts|=DECOR_STRETCHABLE;
01980 if (flags & GWEN_WIDGET_FLAGS_DECOR_MINIMIZE)
01981 opts|=DECOR_MINIMIZE;
01982 if (flags & GWEN_WIDGET_FLAGS_DECOR_MAXIMIZE)
01983 opts|=DECOR_MAXIMIZE;
01984 if (flags & GWEN_WIDGET_FLAGS_DECOR_CLOSE)
01985 opts|=DECOR_CLOSE;
01986 if (flags & GWEN_WIDGET_FLAGS_DECOR_MENU)
01987 opts|=DECOR_MENU;
01988 if (flags & GWEN_WIDGET_FLAGS_EQUAL_WIDTH)
01989 opts|=PACK_UNIFORM_WIDTH;
01990 if (flags & GWEN_WIDGET_FLAGS_EQUAL_HEIGHT)
01991 opts|=PACK_UNIFORM_HEIGHT;
01992 if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_LEFT)
01993 opts|=JUSTIFY_LEFT;
01994 if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_RIGHT)
01995 opts|=JUSTIFY_RIGHT;
01996 if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_TOP)
01997 opts|=JUSTIFY_TOP;
01998 if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_BOTTOM)
01999 opts|=JUSTIFY_BOTTOM;
02000 if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_CENTERX)
02001 opts|=JUSTIFY_CENTER_X;
02002 if (flags & GWEN_WIDGET_FLAGS_JUSTIFY_CENTERY)
02003 opts|=JUSTIFY_CENTER_Y;
02004
02005
02006 switch(GWEN_Widget_GetType(w)) {
02007
02008 case GWEN_Widget_TypeLabel: {
02009 FOX16_HtmlLabel *label;
02010 int wi;
02011 const char *s;
02012 GWEN_STRINGLISTENTRY *se;
02013
02014 if (flags & GWEN_WIDGET_FLAGS_NO_WORDWRAP)
02015 opts|=FOX16_HtmlLabel::FLAGS_NO_WORDWRAP;
02016 label=new FOX16_HtmlLabel(parentComposite,
02017 htmlText,
02018 opts);
02019 s=GWEN_Widget_GetIconFileName(w);
02020 if (s && *s) {
02021 FXIcon *ic;
02022
02023 ic=getIcon(s);
02024 if (ic)
02025 label->setIcon(ic);
02026 }
02027
02028 wi=GWEN_Widget_GetWidth(w);
02029 if (wi>0)
02030 label->setMaxDefaultWidth(wi);
02031
02032
02033 se=GWEN_StringList_FirstEntry(GWEN_Dialog_GetMediaPaths(_dialog));
02034 while(se) {
02035 const char *s;
02036
02037 s=GWEN_StringListEntry_Data(se);
02038 assert(s);
02039 label->addMediaPath(s);
02040 se=GWEN_StringListEntry_Next(se);
02041 }
02042
02043 wChild=label;
02044 break;
02045 }
02046
02047 case GWEN_Widget_TypePushButton: {
02048 const char *s;
02049 FXIcon *ic=NULL;
02050
02051 if (flags & GWEN_WIDGET_FLAGS_DEFAULT_WIDGET)
02052 opts|=BUTTON_DEFAULT | BUTTON_INITIAL | BUTTON_NORMAL;
02053 else
02054 opts|=BUTTON_NORMAL;
02055 s=GWEN_Widget_GetIconFileName(w);
02056 if (s && *s)
02057 ic=getIcon(s);
02058
02059 wChild=new THEMEBUTTON(parentComposite,
02060 text,
02061 ic,
02062 this,
02063 ID_WIDGET_FIRST+_widgetCount,
02064 opts);
02065 break;
02066 }
02067
02068 case GWEN_Widget_TypeLineEdit:
02069 if (flags & GWEN_WIDGET_FLAGS_PASSWORD)
02070 opts|=TEXTFIELD_PASSWD;
02071 if (flags & GWEN_WIDGET_FLAGS_READONLY)
02072 opts|=TEXTFIELD_READONLY;
02073 wChild=new FXTextField(parentComposite,
02074 cols?cols:16,
02075 this,
02076 ID_WIDGET_FIRST+_widgetCount,
02077 opts | TEXTFIELD_NORMAL | TEXTFIELD_ENTER_ONLY);
02078 break;
02079
02080 case GWEN_Widget_TypeTextEdit:
02081 {
02082 FXText *f;
02083
02084 if (flags & GWEN_WIDGET_FLAGS_READONLY)
02085 opts|=TEXT_READONLY;
02086 f=new FXText(parentComposite,
02087 this,
02088 ID_WIDGET_FIRST+_widgetCount,
02089 opts | HSCROLLING_OFF);
02090 if (cols)
02091 f->setVisibleColumns(cols);
02092 if (rows)
02093 f->setVisibleRows(rows);
02094 wChild=f;
02095 break;
02096 }
02097
02098 case GWEN_Widget_TypeTextBrowser:
02099 {
02100 FOX16_HtmlText *f;
02101
02102 f=new FOX16_HtmlText(parentComposite, "",
02103 opts | HSCROLLING_OFF);
02104 wChild=f;
02105 break;
02106 }
02107
02108 case GWEN_Widget_TypeComboBox:
02109 if (flags & GWEN_WIDGET_FLAGS_READONLY)
02110 opts|=COMBOBOX_STATIC;
02111 wChild=new THEMECOMBOBOX(parentComposite,
02112 cols?cols:16,
02113 this,
02114 ID_WIDGET_FIRST+_widgetCount,
02115 opts);
02116 break;
02117
02118 case GWEN_Widget_TypeRadioButton: {
02119 FXRadioButton *rb;
02120 int groupId;
02121 RadioButtonGroup *grp=NULL;
02122 std::list<RadioButtonGroup*>::iterator it;
02123
02124 groupId=GWEN_Widget_GetGroupId(w);
02125
02126
02127 for (it=m_radioGroups.begin(); it!=m_radioGroups.end(); it++) {
02128 if ((*it)->getGroupId()==groupId) {
02129 grp=*it;
02130 }
02131 }
02132 if (grp==NULL) {
02133 grp=new RadioButtonGroup(groupId, this, ID_WIDGET_FIRST+_widgetCount);
02134 m_radioGroups.push_back(grp);
02135 }
02136
02137 rb=new FXRadioButton(parentComposite,
02138 text,
02139 grp->getDataTarget(),
02140 FXDataTarget::ID_OPTION+grp->getButtonCount(),
02141 opts | RADIOBUTTON_NORMAL);
02142 grp->addButton(rb);
02143 wChild=rb;
02144 break;
02145 }
02146
02147 case GWEN_Widget_TypeProgressBar:
02148 wChild=new FXProgressBar(parentComposite,
02149 this,
02150 ID_WIDGET_FIRST+_widgetCount,
02151 opts | PROGRESSBAR_NORMAL | PROGRESSBAR_PERCENTAGE);
02152 break;
02153
02154 case GWEN_Widget_TypeGroupBox:
02155 wChild=new FXGroupBox(parentComposite,
02156 text,
02157 opts | GROUPBOX_NORMAL | FRAME_LINE);
02158 break;
02159
02160 case GWEN_Widget_TypeHSpacer:
02161 wChild=new FXSpring(parentComposite, opts | LAYOUT_FILL_X);
02162 break;
02163
02164 case GWEN_Widget_TypeVSpacer:
02165 wChild=new FXSpring(parentComposite, opts | LAYOUT_FILL_Y);
02166 break;
02167
02168 case GWEN_Widget_TypeHLayout:
02169 wChild=new FXHorizontalFrame(parentComposite, opts,
02170 0, 0, 0, 0, 0, 0, 0, 0);
02171 break;
02172
02173 case GWEN_Widget_TypeVLayout:
02174 wChild=new FXVerticalFrame(parentComposite, opts,
02175 0, 0, 0, 0, 0, 0, 0, 0);
02176 break;
02177
02178 case GWEN_Widget_TypeGridLayout:
02179 if (cols & rows) {
02180 DBG_ERROR(GWEN_LOGDOMAIN, "State columns *or* rows, not both in widget [%s]",
02181 name?name:"(unnamed)");
02182 return NULL;
02183 }
02184 if (cols)
02185 wChild=new FXMatrix(parentComposite, cols,
02186 opts | MATRIX_BY_COLUMNS,
02187 0, 0, 0, 0, 0, 0, 0, 0);
02188 else
02189 wChild=new FXMatrix(parentComposite, rows,
02190 opts | MATRIX_BY_ROWS,
02191 0, 0, 0, 0, 0, 0, 0, 0);
02192 break;
02193
02194 case GWEN_Widget_TypeListBox:
02195 wChild=new FOX16_GuiSortingList(parentComposite,
02196 this,
02197 ID_WIDGET_FIRST+_widgetCount,
02198 opts | FRAME_SUNKEN|FRAME_THICK | LISTBOX_NORMAL);
02199 break;
02200
02201 case GWEN_Widget_TypeDialog:
02202 if (parentWindow)
02203 wChild=new FXDialogBox(parentWindow,
02204 name?FXString(name):FXString(""),
02205 opts | DECOR_TITLE | DECOR_BORDER);
02206 else
02207 wChild=new FXDialogBox(FXApp::instance(),
02208 name?FXString(name):FXString(""),
02209 opts | DECOR_TITLE | DECOR_BORDER);
02210 break;
02211
02212 case GWEN_Widget_TypeTabBook:
02213 wChild=new FXTabBook(parentComposite,
02214 this,
02215 ID_WIDGET_FIRST+_widgetCount,
02216 opts | TABBOOK_NORMAL);
02217 break;
02218
02219 case GWEN_Widget_TypeTabPage:
02220 if (parentWidget==NULL) {
02221 DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] has no parent", name?name:"(unnamed)");
02222 return NULL;
02223 }
02224 else {
02225 FXTabBook *tbook=dynamic_cast<FXTabBook*>(parentWindow);
02226 if (tbook==NULL) {
02227 DBG_ERROR(GWEN_LOGDOMAIN, "Parent of widget [%s] needs to be of type TabBook", name?name:"(unnamed)");
02228 return NULL;
02229 }
02230
02231 new THEMETABITEM(tbook, text, NULL, opts | TAB_TOP_NORMAL);
02232 wChild=new FXVerticalFrame(tbook, opts);
02233 }
02234 break;
02235
02236 case GWEN_Widget_TypeCheckBox:
02237 wChild=new FXCheckButton(parentComposite,
02238 text,
02239 this,
02240 ID_WIDGET_FIRST+_widgetCount,
02241 opts | CHECKBUTTON_NORMAL);
02242 break;
02243
02244 case GWEN_Widget_TypeScrollArea:
02245 {
02246 FXScrollWindow *f;
02247
02248 f=new FXScrollWindow(parentComposite, opts);
02249 wChild=f;
02250 wContent=f->contentWindow();
02251 break;
02252 }
02253
02254 case GWEN_Widget_TypeWidgetStack:
02255 wChild=new FXSwitcher(parentComposite, opts);
02256 break;
02257
02258 case GWEN_Widget_TypeHLine:
02259 wChild=new FXHorizontalSeparator(parentComposite, opts | SEPARATOR_GROOVE);
02260 break;
02261
02262 case GWEN_Widget_TypeVLine:
02263 wChild=new FXVerticalSeparator(parentComposite, opts | SEPARATOR_GROOVE);
02264 break;
02265
02266 case GWEN_Widget_TypeSpinBox:
02267 wChild=new FXSpinner(parentComposite,
02268 cols?cols:16,
02269 this,
02270 ID_WIDGET_FIRST+_widgetCount,
02271 opts | SPIN_NORMAL);
02272 break;
02273
02274 case GWEN_Widget_TypeUnknown:
02275 DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] is of type \'unknown\'", name?name:"(unnamed)");
02276 return NULL;
02277 case GWEN_Widget_TypeNone:
02278 DBG_ERROR(GWEN_LOGDOMAIN, "Widget [%s] is of type \'none\'", name?name:"(unnamed)");
02279 return NULL;
02280 }
02281
02282 assert(wChild);
02283 _widgetCount++;
02284
02285 if (wContent==NULL)
02286 wContent=wChild;
02287
02288 GWEN_Widget_SetImplData(w, FOX16_DIALOG_WIDGET_REAL, (void*) wChild);
02289 GWEN_Widget_SetImplData(w, FOX16_DIALOG_WIDGET_CONTENT, (void*) wContent);
02290
02291
02292 w=GWEN_Widget_Tree_GetFirstChild(w);
02293 while(w) {
02294 if (NULL==setupTree(wContent, w))
02295 return NULL;
02296 w=GWEN_Widget_Tree_GetNext(w);
02297 }
02298
02299 return wChild;
02300 }
02301
02302
02303
02304 int FOX16_GuiDialog::cont() {
02305 FXDialogBox *dialogBox;
02306
02307 dialogBox=_mainWidget;
02308 return dialogBox->getApp()->runModalFor(dialogBox);
02309 }
02310
02311
02312
02313 int FOX16_GuiDialog::openDialog() {
02314 FXDialogBox *dialogBox;
02315
02316 dialogBox=_mainWidget;
02317
02318
02319 dialogBox->layout();
02320 dialogBox->show(PLACEMENT_OWNER);
02321
02322 return 0;
02323 }
02324
02325
02326
02327 int FOX16_GuiDialog::closeDialog() {
02328 FXDialogBox *dialogBox;
02329
02330 dialogBox=_mainWidget;
02331
02332
02333 GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, "");
02334
02335
02336 dialogBox->hide();
02337 delete _mainWidget;
02338 _mainWidget=NULL;
02339
02340 return 0;
02341 }
02342
02343
02344