00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00028 #include "../Include/Fui.h"
00029 #include "../Include/Globals.h"
00030 #include "../Include/Utility.h"
00031 #include "../Include/Ui.h"
00032
00033 using namespace std;
00034
00035
00036
00037
00038
00039 CFuiManager::CFuiManager(void)
00040 {
00041
00042
00043
00044 map<Tag,string> themename;
00045
00046
00047 const char* masterFilename = "UI\\THEMES\\STDTHEMES.SCH";
00048 PODFILE *p = popen (&globals->pfs, masterFilename);
00049 if (p != NULL) {
00050
00051 char s[256];
00052 pgets (s, 256, p);
00053 const char *delimiters = " \t";
00054 while (!peof(p)) {
00055
00056 TrimTrailingWhitespace (s);
00057
00058
00059 if ((strcmp (s, "//") == 0) || (strlen(s) == 0)) {
00060 pgets (s, 256, p);
00061 continue;
00062 }
00063
00064
00065 char *token = strtok (s, delimiters);
00066 if (stricmp (token, "THEMEID") == 0) {
00067
00068 } else if (stricmp (token, "THEMEFILE") == 0) {
00069
00070 token = strtok (NULL, delimiters);
00071 Tag tag = StringToTag (token);
00072 token = strtok (NULL, delimiters);
00073 themename[tag] = token;
00074 } else if (stricmp (token, "END") == 0) {
00075
00076 break;
00077 } else {
00078 gtfo ("CFuiManager : Unknown token %s in master theme file %s",
00079 token, masterFilename);
00080 }
00081
00082
00083 pgets (s, 256, p);
00084 }
00085 pclose (p);
00086 } else {
00087 gtfo ("CFuiManager : Cannot open master theme file %s", masterFilename);
00088 }
00089
00090
00091 map<Tag,string>::iterator i;
00092 for (i = themename.begin(); i != themename.end(); i++) {
00093 CFuiTheme *theme = new CFuiTheme (i->second.c_str());
00094 themeMap[i->first] = theme;
00095 }
00096
00097
00098 slew = new CFuiTextPopup;
00099 slew->SetText ("Slew");
00100 slew->SetPosition (globals->screenWidth - 60, globals->screenHeight - 40);
00101
00102 pause = new CFuiTextPopup;
00103 pause->SetText ("Paused");
00104 pause->SetPosition (globals->screenWidth - 60, globals->screenHeight - 40);
00105
00106 usermsg = new CFuiTextPopup;
00107 usermsg->SetPosition (12, globals->screenHeight - 40);
00108 }
00109
00112 CFuiManager::~CFuiManager (void)
00113 {
00114
00115 map<Tag,CFuiTheme*>::iterator i;
00116 for (i=themeMap.begin(); i!=themeMap.end(); i++) {
00117 delete i->second;
00118 }
00119
00120
00121 delete slew;
00122 delete pause;
00123 delete usermsg;
00124
00125
00126 }
00127
00136 void CFuiManager::CreateFuiWindow (FuiEventNoticeCb handler,
00137 Tag windowId,
00138 const char *winFilename)
00139 {
00140
00141 CFuiWindow *window = new CFuiWindow (winFilename, windowId, handler);
00142 windowMap[windowId] = window;
00143
00144
00145 GenerateEventNotice (windowId, windowId, EVENT_OPENWINDOW, EVENT_NOSUBEVENT);
00146 }
00147
00155 void CFuiManager::DestroyFuiWindow (Tag windowId)
00156 {
00157 CFuiWindow *window = GetFuiWindow (windowId);
00158 if (window != NULL) {
00159
00160 GenerateEventNotice (windowId, windowId, EVENT_CLOSEWINDOW, EVENT_NOSUBEVENT);
00161 window->Close ();
00162 }
00163 }
00164
00171 bool CFuiManager::IsWindowCreated (Tag windowId)
00172 {
00173
00174 CFuiWindow *window = windowMap[windowId];
00175 return (window != NULL);
00176 }
00177
00178
00183 void CFuiManager::Draw (void)
00184 {
00185
00186 if (userMsgActive) {
00187 if (globals->timemgr->GetElapsedSimTime() >= userMsgExpiry) {
00188 usermsg->SetText (NULL);
00189 userMsgActive = false;
00190 }
00191 }
00192
00193
00194 glMatrixMode(GL_PROJECTION);
00195 glPushMatrix();
00196 glLoadIdentity();
00197 gluOrtho2D (0, globals->screenWidth, globals->screenHeight, 0);
00198
00199
00200 glPushAttrib (GL_ENABLE_BIT);
00201 glEnable (GL_ALPHA_TEST);
00202 glDisable (GL_DEPTH_TEST);
00203 glDisable (GL_LIGHTING);
00204 glDisable (GL_COLOR_MATERIAL);
00205 glDisable (GL_TEXTURE_2D);
00206
00207
00208 map <Tag,CFuiWindow*>::iterator i;
00209 for (i=windowMap.begin(); i!=windowMap.end(); i++) {
00210 CFuiWindow *window = i->second;
00211
00212 if (window->GetState() == FUI_WINDOW_CLOSED) {
00213
00214 delete window;
00215 windowMap.erase(i);
00216 }
00217 }
00218
00219
00220 i = windowMap.begin();
00221 while (i != windowMap.end()) {
00222 CFuiWindow *window = i->second;
00223
00224
00225 EFuiWindowState state = window->GetState ();
00226 switch (state) {
00227 case FUI_WINDOW_INIT:
00228
00229 i++;
00230 break;
00231
00232 case FUI_WINDOW_OPEN:
00233 case FUI_WINDOW_MOVE:
00234
00235 window->Draw ();
00236 i++;
00237 break;
00238
00239 case FUI_WINDOW_CLOSED:
00240
00241 delete window;
00242 windowMap.erase(i);
00243 i = windowMap.begin();
00244 break;
00245
00246 default:
00247
00248 gtfo ("CFuiManager::Draw : Invalid window state %d", state);
00249 }
00250 }
00251
00252
00253 if (globals->slewmgr->IsEnabled()) {
00254
00255 slew->Draw ();
00256 } else if (globals->timemgr->GetPauseState()) {
00257
00258 pause->Draw ();
00259 }
00260
00261
00262 usermsg->Draw ();
00263
00264
00265 glPopAttrib();
00266
00267
00268 glMatrixMode(GL_PROJECTION);
00269 glPopMatrix();
00270
00271
00272 GLenum e = glGetError ();
00273 if (e != GL_NO_ERROR) {
00274 gtfo ("CFuiManager::Draw:Return : GL Error 0x%04X", e);
00275 }
00276 }
00277
00284 CFuiTheme *CFuiManager::GetTheme (Tag tag)
00285 {
00286 CFuiTheme *rc = NULL;
00287
00288 map<Tag,CFuiTheme*>::iterator i = themeMap.find(tag);
00289 if (i != themeMap.end()) {
00290 rc = i->second;
00291 }
00292
00293 return rc;
00294 }
00295
00303
00304 CFuiThemeWidget *CFuiManager::GetThemeWidget (Tag tag, string name)
00305 {
00306 CFuiThemeWidget *rc = NULL;
00307
00308 CFuiTheme *theme = GetTheme (tag);
00309 if (theme != NULL) {
00310 rc = theme->GetWidget (name);
00311 }
00312
00313 return rc;
00314 }
00315
00320 void CFuiManager::GenerateEventNotice (Tag windowId, Tag componentId,
00321 EFuiEvents event, EFuiEvents subevent)
00322 {
00323 CFuiWindow *window = GetFuiWindow (windowId);
00324 if (window != NULL) {
00325 window->GenerateEventNotice (componentId, event, subevent);
00326 }
00327 }
00328
00329
00337 void CFuiManager::DrawNoticeToUser (const char *text, float timeout)
00338 {
00339 usermsg->SetText (text);
00340 userMsgActive = true;
00341 userMsgExpiry = globals->timemgr->GetElapsedSimTime() + timeout;
00342 }
00343
00351 void DrawNoticeToUser (const char* text, float timeout)
00352 {
00353 globals->fuimgr->DrawNoticeToUser (text, timeout);
00354 }
00355
00363 CFuiWindow *CFuiManager::GetFuiWindow (Tag tag)
00364 {
00365 CFuiWindow *rc = NULL;
00366
00367 map<Tag,CFuiWindow*>::iterator i = windowMap.find(tag);
00368 if (i != windowMap.end()) {
00369 rc = i->second;
00370 }
00371
00372 return rc;
00373 }
00374
00381 bool CFuiManager::MouseMove (int mx, int my)
00382 {
00383 bool rc = false;
00384
00385
00386 map<Tag,CFuiWindow*>::iterator i;
00387 for (i=windowMap.begin(); i!=windowMap.end() && !rc; i++) {
00388 CFuiWindow *window = i->second;
00389 rc = window->MouseMove (mx, my);
00390 }
00391
00392 return rc;
00393 }
00394
00402 bool CFuiManager::MouseClick (int mx, int my, EMouseButton button)
00403 {
00404 bool rc = false;
00405
00406
00407 map<Tag,CFuiWindow*>::iterator i;
00408 for (i=windowMap.begin(); i!=windowMap.end() && !rc; i++) {
00409 CFuiWindow *window = i->second;
00410 rc = window->MouseClick (mx, my, button);
00411 }
00412
00413 return rc;
00414 }
00415
00423 bool CFuiManager::MouseStopClick (int mx, int my, EMouseButton button)
00424 {
00425 bool rc = false;
00426
00427
00428 map<Tag,CFuiWindow*>::iterator i;
00429 for (i=windowMap.begin(); i!=windowMap.end() && !rc; i++) {
00430 CFuiWindow *window = i->second;
00431 rc = window->MouseStopClick (mx, my, button);
00432 }
00433
00434 return rc;
00435 }
00436
00444 void CFuiManager::SetComponentText (Tag window, Tag component, const char* text)
00445 {
00446 CFuiWindow *w = GetFuiWindow (window);
00447 if (w != NULL) {
00448 CFuiComponent *c = w->GetComponent (component);
00449 if (c != NULL) {
00450 c->SetText (text);
00451 }
00452 }
00453 }
00454
00461 void CFuiManager::SetWindowTitle (Tag window, const char* title)
00462 {
00463 CFuiWindow *w = GetFuiWindow (window);
00464 if (w != NULL) {
00465 w->SetTitle (title);
00466 }
00467 }
00468
00474 void CFuiManager::Print (FILE *f)
00475 {
00476 map<Tag,CFuiTheme*>::iterator i;
00477 for (i=themeMap.begin(); i!=themeMap.end(); i++) {
00478 i->second->Print (f);
00479 fprintf (f, "\n");
00480 }
00481 }
00482
00486 typedef struct {
00487 char *name;
00488 EFuiComponentTypes type;
00489 } SFuiNameLookup;
00490
00494 static SFuiNameLookup nameLookupTable[] =
00495 {
00496 {"Window", COMPONENT_WINDOW},
00497 {"Button", COMPONENT_BUTTON},
00498 {"DoubleButton", COMPONENT_DOUBLE_BUTTON},
00499 {"DefaultButton", COMPONENT_DEFAULT_BUTTON},
00500 {"PopupMenu", COMPONENT_POPUPMENU},
00501 {"MenuBar", COMPONENT_MENUBAR},
00502 {"WindowMenuBar", COMPONENT_WINDOW_MENUBAR},
00503 {"Menu", COMPONENT_MENU},
00504 {"CheckBox", COMPONENT_CHECKBOX},
00505 {"RadioButton", COMPONENT_RADIOBUTTON},
00506 {"Label", COMPONENT_LABEL},
00507 {"Line", COMPONENT_LINE},
00508 {"Box", COMPONENT_BOX},
00509 {"Picture", COMPONENT_PICTURE},
00510 {"Scrollbar", COMPONENT_SCROLLBAR},
00511 {"Slider", COMPONENT_SLIDER},
00512 {"Groupbox", COMPONENT_GROUPBOX},
00513 {"Gauge", COMPONENT_GAUGE},
00514 {"List", COMPONENT_LIST},
00515 {"ScrollArea", COMPONENT_SCROLLAREA},
00516 {"TextField", COMPONENT_TEXTFIELD},
00517 {"TextArea", COMPONENT_TEXTAREA},
00518 {"Progress", COMPONENT_PROGRESS},
00519 {"Map", COMPONENT_MAP},
00520 {"TabPage", COMPONENT_TABPAGE},
00521 {"TabButton", COMPONENT_TABBUTTON},
00522 {"TabControl", COMPONENT_TABCONTROL},
00523 {"Graph", COMPONENT_GRAPH},
00524 {"DLLView", COMPONENT_DLLVIEW},
00525 {"Disclosure", COMPONENT_DISCLOSURE},
00526 {"Canvas", COMPONENT_CANVAS},
00527 {"RunwayCanvas", COMPONENT_RUNWAY_CANVAS},
00528 {"Marquee", COMPONENT_MARQUEE},
00529 {"HorizMarquee", COMPONENT_HORIZ_MARQUEE},
00530 {"WindowNoResize", COMPONENT_WINDOW_NORESIZE},
00531 {"WindowTitle", COMPONENT_TITLE},
00532 {"PaletteWindow", COMPONENT_PALETTE_WINDOW},
00533 {"PaletteWindowTitle", COMPONENT_PALETTE_WINDOW_TITLE},
00534 {"WindowCloseButton", COMPONENT_CLOSE_BUTTON},
00535 {"WindowMinimizeButton", COMPONENT_MINIMIZE_BUTTON},
00536 {"WindowZoomButton", COMPONENT_ZOOM_BUTTON}
00537 };
00538
00545 Tag CFuiManager::GetComponentType (const char *name)
00546 {
00547 Tag rc = 0;
00548
00549 int i;
00550 int n = sizeof(nameLookupTable) / sizeof(SFuiNameLookup);
00551 for (i=0; i<n; i++) {
00552 SFuiNameLookup *lkup = &nameLookupTable[i];
00553 if (strcmp (lkup->name, name) == 0) {
00554
00555 rc = lkup->type;
00556 break;
00557 }
00558 }
00559
00560 if (rc == 0) {
00561 globals->logWarning->Write ("CFuiManager::GetComponentType : Unknown type %s", name);
00562 }
00563 return rc;
00564 }
00565
00566 void CFuiManager::SetLabelColour (Tag window, Tag labelID, unsigned int colour)
00567 {
00568 CFuiLabel *label = FindLabel (window, labelID);
00569 if (label != NULL) {
00570 label->SetColour (colour);
00571 }
00572 }
00573
00574 int CFuiManager::GetCheckboxState(Tag windowID, Tag checkID)
00575 {
00576 int rc = 0;
00577
00578 CFuiWindow *window = GetFuiWindow (windowID);
00579 if (window != NULL) {
00580 CFuiComponent *comp = window->GetComponent (checkID);
00581 if (comp != NULL) {
00582 if (comp->IsType(COMPONENT_CHECKBOX)) {
00583 CFuiCheckbox *checkbox = (CFuiCheckbox*)comp;
00584 rc = checkbox->GetState();
00585 }
00586 }
00587 }
00588 return rc;
00589 }
00590
00591 void CFuiManager::SetCheckboxState(Tag windowID, Tag checkID, int state)
00592 {
00593 CFuiWindow *window = GetFuiWindow (windowID);
00594 if (window != NULL) {
00595 CFuiComponent *comp = window->GetComponent (checkID);
00596 if (comp != NULL) {
00597 if (comp->IsType(COMPONENT_CHECKBOX)) {
00598 CFuiCheckbox *checkbox = (CFuiCheckbox*)comp;
00599 checkbox->SetState(state);
00600 }
00601 }
00602 }
00603 }
00604
00605 int CFuiManager::GetRadioState(Tag windowID, Tag radioID)
00606 {
00607 int rc = 0;
00608
00609 CFuiWindow *window = GetFuiWindow (windowID);
00610 if (window != NULL) {
00611 CFuiComponent *comp = window->GetComponent (radioID);
00612 if (comp != NULL) {
00613 if (comp->IsType(COMPONENT_RADIOBUTTON)) {
00614 CFuiRadioButton *radio = (CFuiRadioButton*)comp;
00615 rc = radio->GetState();
00616 }
00617 }
00618 }
00619 return rc;
00620 }
00621
00622 void CFuiManager::SetRadioState(Tag windowID, Tag radioID, int state)
00623 {
00624 CFuiWindow *window = GetFuiWindow (windowID);
00625 if (window != NULL) {
00626 CFuiComponent *comp = window->GetComponent (radioID);
00627 if (comp != NULL) {
00628 if (comp->IsType(COMPONENT_RADIOBUTTON)) {
00629 CFuiRadioButton *radio = (CFuiRadioButton*)comp;
00630 radio->SetState(state);
00631 }
00632 }
00633 }
00634 }
00635
00636 void CFuiManager::SetTextMaxChars(Tag windowID, Tag textID, int maxChars)
00637 {
00638 CFuiWindow *window = GetFuiWindow (windowID);
00639 if (window != NULL) {
00640 CFuiComponent *comp = window->GetComponent (textID);
00641 if (comp != NULL) {
00642 if (comp->IsType(COMPONENT_TEXTFIELD)) {
00643 CFuiTextField *tf = (CFuiTextField*)comp;
00644 tf->SetMaxChars (maxChars);
00645 }
00646 }
00647 }
00648 }
00649
00650 int CFuiManager::GetTextMaxChars(Tag windowID, Tag textID)
00651 {
00652 int rc = 0;
00653
00654 CFuiWindow *window = GetFuiWindow (windowID);
00655 if (window != NULL) {
00656 CFuiComponent *comp = window->GetComponent (textID);
00657 if (comp != NULL) {
00658 if (comp->IsType(COMPONENT_TEXTFIELD)) {
00659 CFuiTextField *tf = (CFuiTextField*)comp;
00660 rc = tf->GetMaxChars ();
00661 }
00662 }
00663 }
00664
00665 return rc;
00666 }
00667
00668 void CFuiManager::UseTextPassword(Tag windowID, Tag textID, int passwordFlag)
00669 {
00670 CFuiWindow *window = GetFuiWindow (windowID);
00671 if (window != NULL) {
00672 CFuiComponent *comp = window->GetComponent (textID);
00673 if (comp != NULL) {
00674 if (comp->IsType(COMPONENT_TEXTFIELD)) {
00675 CFuiTextField *tf = (CFuiTextField*)comp;
00676 tf->UsePassword (passwordFlag);
00677 }
00678 }
00679 }
00680 }
00681
00682 int CFuiManager::IsTextPassword(Tag windowID, Tag textID)
00683 {
00684 int rc = 0;
00685
00686 CFuiWindow *window = GetFuiWindow (windowID);
00687 if (window != NULL) {
00688 CFuiComponent *comp = window->GetComponent (textID);
00689 if (comp != NULL) {
00690 if (comp->IsType(COMPONENT_TEXTFIELD)) {
00691 CFuiTextField *tf = (CFuiTextField*)comp;
00692 tf->IsPassword ();
00693 }
00694 }
00695 }
00696
00697 return rc;
00698 }
00699
00700 int CFuiManager::GetTextLength(Tag windowID, Tag textID)
00701 {
00702 int rc = 0;
00703
00704 CFuiWindow *window = GetFuiWindow (windowID);
00705 if (window != NULL) {
00706 CFuiComponent *comp = window->GetComponent (textID);
00707 if (comp != NULL) {
00708 if (comp->IsType(COMPONENT_TEXTFIELD)) {
00709 CFuiTextField *tf = (CFuiTextField*)comp;
00710 rc = tf->GetLength ();
00711 }
00712 }
00713 }
00714
00715 return rc;
00716 }
00717
00718 void CFuiManager::SetTextText(Tag windowID, Tag textID, char *text)
00719 {
00720 CFuiWindow *window = GetFuiWindow (windowID);
00721 if (window != NULL) {
00722 CFuiComponent *comp = window->GetComponent (textID);
00723 if (comp != NULL) {
00724 if (comp->IsType(COMPONENT_TEXTFIELD)) {
00725 CFuiTextField *tf = (CFuiTextField*)comp;
00726 tf->SetText (text);
00727 }
00728 }
00729 }
00730 }
00731
00732 char* CFuiManager::GetTextText(Tag windowID, Tag textID)
00733 {
00734 char *rc = NULL;
00735
00736 CFuiWindow *window = GetFuiWindow (windowID);
00737 if (window != NULL) {
00738 CFuiComponent *comp = window->GetComponent (textID);
00739 if (comp != NULL) {
00740 if (comp->IsType(COMPONENT_TEXTFIELD)) {
00741 CFuiTextField *tf = (CFuiTextField*)comp;
00742 rc = tf->GetText ();
00743 }
00744 }
00745 }
00746 return rc;
00747 }
00748
00749 void CFuiManager::SetTextSelection(Tag windowID, Tag textID, int firstChar, int lastChar)
00750 {
00751 CFuiWindow *window = GetFuiWindow (windowID);
00752 if (window != NULL) {
00753 CFuiComponent *comp = window->GetComponent (textID);
00754 if (comp != NULL) {
00755 if (comp->IsType(COMPONENT_TEXTFIELD)) {
00756 CFuiTextField *tf = (CFuiTextField*)comp;
00757 tf->SetSelection (firstChar, lastChar);
00758 }
00759 }
00760 }
00761 }
00762
00763 void CFuiManager::GetTextSelection(Tag windowID, Tag textID, int *firstChar, int *lastChar)
00764 {
00765 CFuiWindow *window = GetFuiWindow (windowID);
00766 if (window != NULL) {
00767 CFuiComponent *comp = window->GetComponent (textID);
00768 if (comp != NULL) {
00769 if (comp->IsType(COMPONENT_TEXTFIELD)) {
00770 CFuiTextField *tf = (CFuiTextField*)comp;
00771 tf->GetSelection (firstChar, lastChar);
00772 }
00773 }
00774 }
00775 }
00776
00777 void CFuiManager::AddPopupItem (Tag windowID, Tag popupID, Tag itemID, const char *label)
00778 {
00779 CFuiWindow *window = GetFuiWindow (windowID);
00780 if (window != NULL) {
00781 CFuiComponent *comp = window->GetComponent (popupID);
00782 if (comp != NULL) {
00783 if (comp->IsType(COMPONENT_POPUPMENU)) {
00784 CFuiPopupMenu *pm = (CFuiPopupMenu*)comp;
00785 pm->AddItem (itemID, label);
00786 }
00787 }
00788 }
00789 }
00790
00791 void CFuiManager::AddPopupSeperator (Tag windowID, Tag popupID)
00792 {
00793 CFuiWindow *window = GetFuiWindow (windowID);
00794 if (window != NULL) {
00795 CFuiComponent *comp = window->GetComponent (popupID);
00796 if (comp != NULL) {
00797 if (comp->IsType(COMPONENT_POPUPMENU)) {
00798 CFuiPopupMenu *pm = (CFuiPopupMenu*)comp;
00799 pm->AddSeparator ();
00800 }
00801 }
00802 }
00803 }
00804
00805 void CFuiManager::RemovePopupItem (Tag windowID, Tag popupID, Tag itemID)
00806 {
00807 CFuiWindow *window = GetFuiWindow (windowID);
00808 if (window != NULL) {
00809 CFuiComponent *comp = window->GetComponent (popupID);
00810 if (comp != NULL) {
00811 if (comp->IsType(COMPONENT_POPUPMENU)) {
00812 CFuiPopupMenu *pm = (CFuiPopupMenu*)comp;
00813 pm->RemoveItem (itemID);
00814 }
00815 }
00816 }
00817 }
00818
00819 void CFuiManager::ClearPopupItems (Tag windowID, Tag popupID)
00820 {
00821 CFuiWindow *window = GetFuiWindow (windowID);
00822 if (window != NULL) {
00823 CFuiComponent *comp = window->GetComponent (popupID);
00824 if (comp != NULL) {
00825 if (comp->IsType(COMPONENT_POPUPMENU)) {
00826 CFuiPopupMenu *pm = (CFuiPopupMenu*)comp;
00827 pm->ClearItems ();
00828 }
00829 }
00830 }
00831 }
00832
00833 void CFuiManager::SelectPopupItem (Tag windowID, Tag popupID, Tag itemID)
00834 {
00835 CFuiWindow *window = GetFuiWindow (windowID);
00836 if (window != NULL) {
00837 CFuiComponent *comp = window->GetComponent (popupID);
00838 if (comp != NULL) {
00839 if (comp->IsType(COMPONENT_POPUPMENU)) {
00840 CFuiPopupMenu *pm = (CFuiPopupMenu*)comp;
00841 pm->SelectItem (itemID);
00842 }
00843 }
00844 }
00845 }
00846
00847 Tag CFuiManager::GetPopupItemSelection(Tag windowID, Tag popupID, char *outText)
00848 {
00849 Tag rc = 0;
00850
00851 CFuiWindow *window = GetFuiWindow (windowID);
00852 if (window != NULL) {
00853 CFuiComponent *comp = window->GetComponent (popupID);
00854 if (comp != NULL) {
00855 if (comp->IsType(COMPONENT_POPUPMENU)) {
00856 CFuiPopupMenu *pm = (CFuiPopupMenu*)comp;
00857 rc = pm->GetItemSelection (outText);
00858 }
00859 }
00860 }
00861
00862 return rc;
00863 }
00864
00865 void CFuiManager::SetGroupBoxLabel (Tag windowID, Tag groupID, char *label)
00866 {
00867 CFuiWindow *window = GetFuiWindow (windowID);
00868 if (window != NULL) {
00869 CFuiComponent *comp = window->GetComponent (groupID);
00870 if (comp != NULL) {
00871 if (comp->IsType(COMPONENT_GROUPBOX)) {
00872 CFuiGroupBox *gb = (CFuiGroupBox*)comp;
00873 gb->SetText (label);
00874 }
00875 }
00876 }
00877 }
00878
00879 void CFuiManager::SetSliderMajorTickSpacing (Tag windowID, Tag sliderID, float spacing)
00880 {
00881 CFuiSlider *slider = FindSlider (windowID, sliderID);
00882 if (slider != NULL) {
00883 slider->SetMajorTickSpacing (spacing);
00884 }
00885 }
00886
00887 void CFuiManager::SetSliderMinorTickSpacing (Tag windowID, Tag sliderID, float spacing)
00888 {
00889 CFuiSlider *slider = FindSlider (windowID, sliderID);
00890 if (slider != NULL) {
00891 slider->SetMinorTickSpacing (spacing);
00892 }
00893 }
00894
00895 void CFuiManager::SetSliderSnapToTicks (Tag windowID, Tag sliderID, int snapFlag)
00896 {
00897 CFuiSlider *slider = FindSlider (windowID, sliderID);
00898 if (slider != NULL) {
00899 slider->SetSnapToTicks (snapFlag);
00900 }
00901 }
00902
00903 void CFuiManager::SetSliderDrawMajorTicks (Tag windowID, Tag sliderID, int drawFlag)
00904 {
00905 CFuiSlider *slider = FindSlider (windowID, sliderID);
00906 if (slider != NULL) {
00907 slider->SetDrawMajorTicks (drawFlag);
00908 }
00909 }
00910
00911 void CFuiManager::SetSliderDrawMinorTicks (Tag windowID, Tag sliderID, int drawFlag)
00912 {
00913 CFuiSlider *slider = FindSlider (windowID, sliderID);
00914 if (slider != NULL) {
00915 slider->SetDrawMinorTicks (drawFlag);
00916 }
00917 }
00918
00919 float CFuiManager::GetSliderMajorTickSpacing (Tag windowID, Tag sliderID)
00920 {
00921 float rc = 0;
00922
00923 CFuiSlider *slider = FindSlider (windowID, sliderID);
00924 if (slider != NULL) {
00925 rc = slider->GetMajorTickSpacing ();
00926 }
00927
00928 return rc;
00929 }
00930
00931 float CFuiManager::GetSliderMinorTickSpacing (Tag windowID, Tag sliderID)
00932 {
00933 float rc = 0;
00934
00935 CFuiSlider *slider = FindSlider (windowID, sliderID);
00936 if (slider != NULL) {
00937 rc = slider->GetMinorTickSpacing ();
00938 }
00939
00940 return rc;
00941 }
00942
00943 int CFuiManager::GetSliderSnapToTicks (Tag windowID, Tag sliderID)
00944 {
00945 int rc = 0;
00946
00947 CFuiSlider *slider = FindSlider (windowID, sliderID);
00948 if (slider != NULL) {
00949 rc = slider->GetSnapToTicks ();
00950 }
00951
00952 return rc;
00953 }
00954
00955 int CFuiManager::GetSliderDrawMajorTicks (Tag windowID, Tag sliderID)
00956 {
00957 int rc = 0;
00958
00959 CFuiSlider *slider = FindSlider (windowID, sliderID);
00960 if (slider != NULL) {
00961 rc = slider->GetDrawMajorTicks ();
00962 }
00963
00964 return rc;
00965 }
00966
00967 int CFuiManager::GetSliderDrawMinorTicks (Tag windowID, Tag sliderID)
00968 {
00969 int rc = 0;
00970
00971 CFuiSlider *slider = FindSlider (windowID, sliderID);
00972 if (slider != NULL) {
00973 rc = slider->GetDrawMinorTicks ();
00974 }
00975
00976 return rc;
00977 }
00978
00979 void CFuiManager::ScrollListToRow (Tag windowID, Tag listID, int row)
00980 {
00981 CFuiList *list = FindList (windowID, listID);
00982 if (list != NULL) {
00983 list->ScrollToRow (row);
00984 }
00985 }
00986
00987 void CFuiManager::ScrollListToColumn (Tag windowID, Tag listID, int column)
00988 {
00989 CFuiList *list = FindList (windowID, listID);
00990 if (list != NULL) {
00991 list->ScrollToColumn (column);
00992 }
00993 }
00994
00995 int CFuiManager::GetListRowCount (Tag windowID, Tag listID)
00996 {
00997 int rc = 0;
00998
00999 CFuiList *list = FindList (windowID, listID);
01000 if (list != NULL) {
01001 rc = list->GetRowCount ();
01002 }
01003
01004 return rc;
01005 }
01006
01007 int CFuiManager::GetListColumnCount (Tag windowID, Tag listID)
01008 {
01009 int rc = 0;
01010
01011 CFuiList *list = FindList (windowID, listID);
01012 if (list != NULL) {
01013 rc = list->GetColumnCount ();
01014 }
01015
01016 return rc;
01017 }
01018
01019 void CFuiManager::AddListColumn (Tag windowID, Tag listID, int width, char *title)
01020 {
01021 CFuiList *list = FindList (windowID, listID);
01022 if (list != NULL) {
01023 list->AddColumn (width, title);
01024 }
01025 }
01026
01027 void CFuiManager::DeleteListColumn (Tag windowID, Tag listID, int column)
01028 {
01029 CFuiList *list = FindList (windowID, listID);
01030 if (list != NULL) {
01031 list->DeleteColumn (column);
01032 }
01033 }
01034
01035 void CFuiManager::DeleteAllListColumns (Tag windowID, Tag listID)
01036 {
01037 CFuiList *list = FindList (windowID, listID);
01038 if (list != NULL) {
01039 list->DeleteAllColumns ();
01040 }
01041 }
01042
01043 void CFuiManager::SetListColumnWidth (Tag windowID, Tag listID, int column, int width)
01044 {
01045 CFuiList *list = FindList (windowID, listID);
01046 if (list != NULL) {
01047 list->SetColumnWidth (column, width);
01048 }
01049 }
01050
01051 void CFuiManager::AddListRow (Tag windowID, Tag listID, int height)
01052 {
01053 CFuiList *list = FindList (windowID, listID);
01054 if (list != NULL) {
01055 list->AddRow (height);
01056 }
01057 }
01058
01059 void CFuiManager::DeleteListRow (Tag windowID, Tag listID, int row)
01060 {
01061 CFuiList *list = FindList (windowID, listID);
01062 if (list != NULL) {
01063 list->DeleteRow (row);
01064 }
01065 }
01066
01067 void CFuiManager::DeleteAllListRows (Tag windowID, Tag listID)
01068 {
01069 CFuiList *list = FindList (windowID, listID);
01070 if (list != NULL) {
01071 list->DeleteAllRows ();
01072 }
01073 }
01074
01075 int CFuiManager::CountListSelectedRows (Tag windowID, Tag listID)
01076 {
01077 int rc = 0;
01078
01079 CFuiList *list = FindList (windowID, listID);
01080 if (list != NULL) {
01081 rc = list->CountSelectedRows ();
01082 }
01083
01084 return rc;
01085 }
01086
01087 int CFuiManager::GetListSelectedRow (Tag windowID, Tag listID, int index)
01088 {
01089 int rc = 0;
01090
01091 CFuiList *list = FindList (windowID, listID);
01092 if (list != NULL) {
01093 rc = list->GetSelectedRow (index);
01094 }
01095
01096 return rc;
01097 }
01098
01099 void CFuiManager::SelectListRow (Tag windowID, Tag listID, int row)
01100 {
01101 CFuiList *list = FindList (windowID, listID);
01102 if (list != NULL) {
01103 list->SelectRow (row);
01104 }
01105 }
01106
01107 void CFuiManager::ClearListSelection (Tag windowID, Tag listID)
01108 {
01109 CFuiList *list = FindList (windowID, listID);
01110 if (list != NULL) {
01111 list->ClearSelection ();
01112 }
01113 }
01114
01115 void CFuiManager::SetListCellText (Tag windowID, Tag listID, int row, int column, char *text)
01116 {
01117 CFuiList *list = FindList (windowID, listID);
01118 if (list != NULL) {
01119 list->SetCellText (row, column, text);
01120 }
01121 }
01122
01123 void CFuiManager::SetListCellIcon (Tag windowID, Tag listID, int row, int column, char *filename)
01124 {
01125 CFuiList *list = FindList (windowID, listID);
01126 if (list != NULL) {
01127 list->SetCellIcon (row, column, filename);
01128 }
01129 }
01130
01131 void CFuiManager::ClearListCellText (Tag windowID, Tag listID, int row, int column)
01132 {
01133 CFuiList *list = FindList (windowID, listID);
01134 if (list != NULL) {
01135 list->ClearCellText (row, column);
01136 }
01137 }
01138
01139 void CFuiManager::ClearListCellIcon (Tag windowID, Tag listID, int row, int column)
01140 {
01141 CFuiList *list = FindList (windowID, listID);
01142 if (list != NULL) {
01143 list->ClearCellIcon (row, column);
01144 }
01145 }
01146
01147 void CFuiManager::GetListCellText (Tag windowID, Tag listID, int row, int column, char *outtext)
01148 {
01149 CFuiList *list = FindList (windowID, listID);
01150 if (list != NULL) {
01151 list->GetCellText (row, column, outtext);
01152 }
01153 }
01154
01155
01156 void CFuiManager::SetSliderLabel (Tag windowID, Tag sliderID, char *label)
01157 {
01158 CFuiSlider *slider = FindSlider (windowID, sliderID);
01159 if (slider != NULL) {
01160 slider->SetText (label);
01161 }
01162 }
01163
01164 void CFuiManager::AddGraphTrace (Tag windowID, Tag graphID, Tag traceID, int traceType)
01165 {
01166 CFuiGraph *graph = FindGraph (windowID, graphID);
01167 if (graph != NULL) {
01168 graph->AddTrace (traceID, traceType);
01169 }
01170 }
01171
01172 void CFuiManager::RemoveGraphTrace (Tag windowID, Tag graphID, Tag traceID)
01173 {
01174 CFuiGraph *graph = FindGraph (windowID, graphID);
01175 if (graph != NULL) {
01176 graph->RemoveTrace (traceID);
01177 }
01178 }
01179
01180 void CFuiManager::RemoveAllGraphTraces (Tag windowID, Tag graphID)
01181 {
01182 CFuiGraph *graph = FindGraph (windowID, graphID);
01183 if (graph != NULL) {
01184 graph->RemoveAllTraces ();
01185 }
01186 }
01187
01188 void CFuiManager::AddGraphTracePoint (Tag windowID, Tag graphID, Tag traceID,
01189 float x, float y)
01190 {
01191 CFuiGraph *graph = FindGraph (windowID, graphID);
01192 if (graph != NULL) {
01193 graph->AddTracePoint (traceID, x, y);
01194 }
01195 }
01196
01197 void CFuiManager::ClearGraphTracePoints (Tag windowID, Tag graphID, Tag traceID)
01198 {
01199 CFuiGraph *graph = FindGraph (windowID, graphID);
01200 if (graph != NULL) {
01201 graph->ClearTracePoints (traceID);
01202 }
01203 }
01204
01205 void CFuiManager::SetGraphTraceRange (Tag windowID, Tag graphID, Tag traceID,
01206 float minX, float minY, float maxX, float maxY)
01207 {
01208 CFuiGraph *graph = FindGraph (windowID, graphID);
01209 if (graph != NULL) {
01210 graph->SetTraceRange (traceID, minX, minY, maxX, maxY);
01211 }
01212 }
01213
01214 void CFuiManager::SetGraphTraceColour (Tag windowID, Tag graphID, Tag traceID,
01215 unsigned int colour)
01216 {
01217 CFuiGraph *graph = FindGraph (windowID, graphID);
01218 if (graph != NULL) {
01219 graph->SetTraceColour (traceID, colour);
01220 }
01221 }
01222
01223 void CFuiManager::SetGraphUseGrid (Tag windowID, Tag graphID, int useGrid)
01224 {
01225 CFuiGraph *graph = FindGraph (windowID, graphID);
01226 if (graph != NULL) {
01227 graph->SetUseGrid (useGrid);
01228 }
01229 }
01230
01231 void CFuiManager::SetGraphGridRange (Tag windowID, Tag graphID,
01232 float minX, float minY, float maxX, float maxY)
01233 {
01234 CFuiGraph *graph = FindGraph (windowID, graphID);
01235 if (graph != NULL) {
01236 graph->SetGridRange (minX, minY, maxX, maxY);
01237 }
01238 }
01239
01240 void CFuiManager::SetGraphGridSpacing (Tag windowID, Tag graphID,
01241 float stepX, float stepY)
01242 {
01243 CFuiGraph *graph = FindGraph (windowID, graphID);
01244 if (graph != NULL) {
01245 graph->SetGridSpacing (stepX, stepY);
01246 }
01247 }
01248
01249 void CFuiManager::SetGridColour (Tag windowID, Tag graphID,
01250 unsigned int colour)
01251 {
01252 CFuiGraph *graph = FindGraph (windowID, graphID);
01253 if (graph != NULL) {
01254 graph->SetGridColour (colour);
01255 }
01256 }
01257
01258 void CFuiManager::SetGridBackColour (Tag windowID, Tag graphID,
01259 unsigned int colour)
01260 {
01261 CFuiGraph *graph = FindGraph (windowID, graphID);
01262 if (graph != NULL) {
01263 graph->SetGridBackColour (colour);
01264 }
01265 }
01266
01267 void CFuiManager::GetGraphGridRange (Tag windowID, Tag graphID,
01268 float *minX, float *minY, float *maxX, float *maxY)
01269 {
01270 CFuiGraph *graph = FindGraph (windowID, graphID);
01271 if (graph != NULL) {
01272 graph->GetGridRange (minX, minY, maxX, maxY);
01273 }
01274 }
01275
01276 void CFuiManager::GetGraphGridSpacing (Tag windowID, Tag graphID,
01277 float *stepX, float *stepY)
01278 {
01279 CFuiGraph *graph = FindGraph (windowID, graphID);
01280 if (graph != NULL) {
01281 graph->GetGridSpacing (stepX, stepY);
01282 }
01283 }
01284
01285
01286
01287
01288
01289
01290 CFuiComponent* CFuiManager::FindComponent (Tag windowID, Tag id)
01291 {
01292 CFuiComponent *rc = NULL;
01293
01294 CFuiWindow *window = GetFuiWindow (windowID);
01295 if (window != NULL) {
01296 rc = window->GetComponent (id);
01297 }
01298
01299 return rc;
01300 }
01301
01302 CFuiLabel* CFuiManager::FindLabel (Tag windowID, Tag labelID)
01303 {
01304 CFuiLabel *rc = NULL;
01305
01306 CFuiComponent *comp = FindComponent (windowID, labelID);
01307 if (comp != NULL) {
01308 if (comp->IsType(COMPONENT_LABEL)) {
01309 rc = (CFuiLabel *)comp;
01310 }
01311 }
01312
01313 return rc;
01314 }
01315
01316 CFuiCheckbox* CFuiManager::FindCheckbox (Tag windowID, Tag checkboxID)
01317 {
01318 CFuiCheckbox *rc = NULL;
01319
01320 CFuiComponent *comp = FindComponent (windowID, checkboxID);
01321 if (comp != NULL) {
01322 if (comp->IsType(COMPONENT_CHECKBOX)) {
01323 rc = (CFuiCheckbox *)comp;
01324 }
01325 }
01326
01327 return rc;
01328 }
01329
01330 CFuiSlider* CFuiManager::FindSlider (Tag windowID, Tag sliderID)
01331 {
01332 CFuiSlider *rc = NULL;
01333
01334 CFuiComponent *comp = FindComponent (windowID, sliderID);
01335 if (comp != NULL) {
01336 if (comp->IsType(COMPONENT_SLIDER)) {
01337 rc = (CFuiSlider *)comp;
01338 }
01339 }
01340
01341 return rc;
01342 }
01343
01344 CFuiList* CFuiManager::FindList (Tag windowID, Tag listID)
01345 {
01346 CFuiList *rc = NULL;
01347
01348 CFuiComponent *comp = FindComponent (windowID, listID);
01349 if (comp != NULL) {
01350 if (comp->IsType(COMPONENT_LIST)) {
01351 rc = (CFuiList *)comp;
01352 }
01353 }
01354
01355 return rc;
01356 }
01357
01358 CFuiGraph* CFuiManager::FindGraph (Tag windowID, Tag graphID)
01359 {
01360 CFuiGraph *rc = NULL;
01361
01362 CFuiComponent *comp = FindComponent (windowID, graphID);
01363 if (comp != NULL) {
01364 if (comp->IsType(COMPONENT_GRAPH)) {
01365 rc = (CFuiGraph *)comp;
01366 }
01367 }
01368
01369 return rc;
01370 }
01371