gwenhywfar 4.0.3
|
00001 /*************************************************************************** 00002 begin : Fri Jan 22 2010 00003 copyright : (C) 2010 by Martin Preuss 00004 email : martin@libchipcard.de 00005 00006 *************************************************************************** 00007 * Please see toplevel file COPYING for license details * 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 /* execute dialog */ 00158 dialogBox->show(PLACEMENT_OWNER); 00159 rv=dialogBox->execute(); 00160 GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, ""); 00161 00162 if (rv==0) { 00163 /* aborted */ 00164 return 0; 00165 } 00166 else 00167 /* accepted */ 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 /* simply fall-through */ 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 /* generic properties every widget has */ 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 // undefined 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 /* this block is just to make sure we get warnings when new 01204 * properties are available but not handled here 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 /* this block is just to make sure we get warnings when new 01590 * properties are available but not handled here 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 // no signal for now 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: /* use SEL_UPDATED for FXRadioButton */ 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 /* nothing to do for these types */ 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 /* catch ENTER key */ 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 /* catch ENTER key */ 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 /* create X11 server side resources */ 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 /* sample data */ 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 /* check for parent type */ 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 /* these types don't need the parent to be a FXComposite */ 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 /* setup info for new widget */ 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 /* create THIS widget */ 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 /* copy media paths to label */ 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, /* icon */ 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 /* handle children */ 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 /* show dialog */ 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 /* let dialog write its settings */ 02333 GWEN_Dialog_EmitSignalToAll(_dialog, GWEN_DialogEvent_TypeFini, ""); 02334 02335 /* hide dialog */ 02336 dialogBox->hide(); 02337 delete _mainWidget; 02338 _mainWidget=NULL; 02339 02340 return 0; 02341 } 02342 02343 02344