Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

FuiManager.cpp

Go to the documentation of this file.
00001 /*
00002  * FuiManager.cpp
00003  *
00004  * Part of Fly! Legacy project
00005  *
00006  * Copyright 2003 Chris Wallace
00007  *
00008  * Fly! Legacy is free software; you can redistribute it and/or modify
00009  *   it under the terms of the GNU General Public License as published by
00010  *   the Free Software Foundation; either version 2 of the License, or
00011  *   (at your option) any later version.
00012  *
00013  * Fly! Legacy is distributed in the hope that it will be useful,
00014  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  *   GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  *   along with Fly! Legacy; if not, write to the Free Software
00020  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00021  */
00022 
00028 #include "../Include/Fui.h"
00029 #include "../Include/Globals.h"   // For globals->pfs
00030 #include "../Include/Utility.h"   // For stream functions
00031 #include "../Include/Ui.h"
00032 
00033 using namespace std;
00034 
00035 
00036 //
00037 // CFuiManager
00038 //
00039 CFuiManager::CFuiManager(void)
00040 {
00041   // When parsing master theme schema, theme identifiers and filenames
00042   //   are stored in the following map.  Only after the master schema
00043   //   file has been processed are the individual themes instantiated
00044   map<Tag,string> themename;
00045   
00046   // Load themes
00047   const char* masterFilename = "UI\\THEMES\\STDTHEMES.SCH";
00048   PODFILE *p = popen (&globals->pfs, masterFilename);
00049   if (p != NULL) {
00050     // Begin parsing lines
00051     char s[256];
00052     pgets (s, 256, p);
00053     const char *delimiters = " \t";
00054     while (!peof(p)) {
00055       // Trim trailing whitespace
00056       TrimTrailingWhitespace (s);
00057 
00058       // Check for comment or blank line
00059       if ((strcmp (s, "//") == 0) || (strlen(s) == 0)) {
00060         pgets (s, 256, p);
00061         continue;
00062       }
00063 
00064       // Check first token
00065       char *token = strtok (s, delimiters);
00066       if (stricmp (token, "THEMEID") == 0) {
00067         // THEMEID token just identifies unique ID for this theme set
00068       } else if (stricmp (token, "THEMEFILE") == 0) {
00069         // THEMENAME specifies a new theme; parse theme ID and filename
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         // END token indicates end of the schema list
00076         break;
00077       } else {
00078         gtfo ("CFuiManager : Unknown token %s in master theme file %s",
00079           token, masterFilename);
00080       }        
00081       
00082       // Get next line
00083       pgets (s, 256, p);
00084     }  
00085     pclose (p);
00086   } else {
00087     gtfo ("CFuiManager : Cannot open master theme file %s", masterFilename);
00088   }
00089 
00090   // Load the individual themes
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   // Initialize text popups
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   // Delete themes
00115   map<Tag,CFuiTheme*>::iterator i;
00116   for (i=themeMap.begin(); i!=themeMap.end(); i++) {
00117     delete i->second;
00118   }
00119 
00120   // Delete special widgets
00121   delete slew;
00122   delete pause;
00123   delete usermsg;
00124 
00125   // @todo Close all open windows
00126 }
00127 
00136 void CFuiManager::CreateFuiWindow (FuiEventNoticeCb handler,
00137                                    Tag windowId,
00138                                    const char *winFilename)
00139 {
00140   // Instantiate a new CFuiWindow object and add to the window map
00141   CFuiWindow *window = new CFuiWindow (winFilename, windowId, handler);
00142   windowMap[windowId] = window;
00143 
00144   // Send event notification to window handler
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     // Send event notification to window handler
00160     GenerateEventNotice (windowId, windowId, EVENT_CLOSEWINDOW, EVENT_NOSUBEVENT);
00161     window->Close ();
00162   }
00163 }
00164 
00171 bool CFuiManager::IsWindowCreated (Tag windowId)
00172 {
00173   // @todo : Change to find() lookup
00174   CFuiWindow *window = windowMap[windowId];
00175   return (window != NULL);
00176 }
00177 
00178 
00183 void CFuiManager::Draw (void)
00184 {
00185   // Check for user message expiry
00186   if (userMsgActive) {
00187     if (globals->timemgr->GetElapsedSimTime() >= userMsgExpiry) {
00188       usermsg->SetText (NULL);
00189       userMsgActive = false;
00190     }
00191   }
00192 
00193   // Set projection matrix to 2D screen size
00194   glMatrixMode(GL_PROJECTION);
00195   glPushMatrix();
00196   glLoadIdentity();
00197   gluOrtho2D (0, globals->screenWidth, globals->screenHeight, 0);
00198 
00199   // Set up OpenGL drawing state
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   // Close any windows if necessary before drawing
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       // Window has been closed; delete and remove from window list
00214       delete window;
00215       windowMap.erase(i);
00216     }
00217   }
00218 
00219   // Draw windows
00220   i = windowMap.begin();
00221   while (i != windowMap.end()) {
00222     CFuiWindow *window = i->second;
00223 
00224     // Check to see if the window has been closed; if so, remove it
00225     EFuiWindowState state = window->GetState ();
00226     switch (state) {
00227     case FUI_WINDOW_INIT:
00228       // Window is still being initialized; do nothing until it is open
00229       i++;
00230       break;
00231 
00232     case FUI_WINDOW_OPEN:
00233     case FUI_WINDOW_MOVE:
00234       // Window is open; draw it
00235       window->Draw ();
00236       i++;
00237       break;
00238 
00239     case FUI_WINDOW_CLOSED:
00240       // Window has been closed; delete and remove from window list
00241       delete window;
00242       windowMap.erase(i);
00243       i = windowMap.begin();
00244       break;
00245 
00246     default:
00247       // Invalid state for drawing
00248       gtfo ("CFuiManager::Draw : Invalid window state %d", state);
00249     }
00250   }
00251 
00252   // Draw Slew / Pause indicator if applicable
00253   if (globals->slewmgr->IsEnabled()) {
00254     // Slew mode is enabled
00255     slew->Draw ();
00256   } else if (globals->timemgr->GetPauseState()) {
00257     // Sim is paused
00258     pause->Draw ();
00259   }
00260 
00261   // Draw user message
00262   usermsg->Draw ();
00263 
00264   // Restore original OpenGL state
00265   glPopAttrib();
00266 
00267   // Restore original projection matrix
00268   glMatrixMode(GL_PROJECTION);
00269   glPopMatrix();
00270 
00271   // Check for an OpenGL error
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   // @todo Only send mouse motion to window in focus
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   // @todo Send mouse click to window in focus
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   // @todo Send mouse click to window in focus
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       // Found the name->type translation
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 // Protected methods
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 
SourceForge.net Logo Documentation generated by doxygen