guilabels.C: This macro gives an example of how to create different kind of labels | Graphics User Interface | iconAsXPMData.C: A simple example of creating icon image from XPM data, |
// Test program for ROOT native GUI classes // exactly like $ROOTSYS/test/guitest.cxx but using the new signal and slots // communication mechanism. It is now possible to run this entire // test program in the interpreter. Do either: // .x guitest.C // .x guitest.C++ // Authors: Bertrand Bellenot, Ilka Antcheva, Fons Rademakers, // Valeri Onuchin #include <stdlib.h> #include <TROOT.h> #include <TApplication.h> #include <TVirtualX.h> #include <TVirtualPadEditor.h> #include <TGResourcePool.h> #include <TGListBox.h> #include <TGListTree.h> #include <TGFSContainer.h> #include <TGClient.h> #include <TGFrame.h> #include <TGIcon.h> #include <TGLabel.h> #include <TGButton.h> #include <TGTextEntry.h> #include <TGNumberEntry.h> #include <TGMsgBox.h> #include <TGMenu.h> #include <TGCanvas.h> #include <TGComboBox.h> #include <TGTab.h> #include <TGSlider.h> #include <TGDoubleSlider.h> #include <TGFileDialog.h> #include <TGTextEdit.h> #include <TGShutter.h> #include <TGProgressBar.h> #include <TGColorSelect.h> #include <RQ_OBJECT.h> #include <TRootEmbeddedCanvas.h> #include <TCanvas.h> #include <TColor.h> #include <TH1.h> #include <TH2.h> #include <TRandom.h> #include <TSystem.h> #include <TSystemDirectory.h> #include <TEnv.h> #include <TFile.h> #include <TKey.h> #include <TGDockableFrame.h> #include <TGFontDialog.h> enum ETestCommandIdentifiers { M_FILE_OPEN, M_FILE_SAVE, M_FILE_SAVEAS, M_FILE_PRINT, M_FILE_PRINTSETUP, M_FILE_EXIT, M_TEST_DLG, M_TEST_MSGBOX, M_TEST_SLIDER, M_TEST_SHUTTER, M_TEST_DIRLIST, M_TEST_FILELIST, M_TEST_PROGRESS, M_TEST_NUMBERENTRY, M_TEST_FONTDIALOG, M_TEST_NEWMENU, M_VIEW_ENBL_DOCK, M_VIEW_ENBL_HIDE, M_VIEW_DOCK, M_VIEW_UNDOCK, M_HELP_CONTENTS, M_HELP_SEARCH, M_HELP_ABOUT, M_CASCADE_1, M_CASCADE_2, M_CASCADE_3, M_NEW_REMOVEMENU, VId1, HId1, VId2, HId2, VSId1, HSId1, VSId2, HSId2 }; Int_t mb_button_id[13] = { kMBYes, kMBNo, kMBOk, kMBApply, kMBRetry, kMBIgnore, kMBCancel, kMBClose, kMBYesAll, kMBNoAll, kMBNewer, kMBAppend, kMBDismiss}; EMsgBoxIcon mb_icon[4] = { kMBIconStop, kMBIconQuestion, kMBIconExclamation, kMBIconAsterisk }; const char *filetypes[] = { "All files", "*", "ROOT files", "*.root", "ROOT macros", "*.C", "Text files", "*.[tT][xX][tT]", 0, 0 }; struct shutterData_t { const char *pixmap_name; const char *tip_text; Int_t id; TGButton *button; }; shutterData_t histo_data[] = { { "h1_s.xpm", "TH1", 1001, 0 }, { "h2_s.xpm", "TH2", 1002, 0 }, { "h3_s.xpm", "TH3", 1003, 0 }, { "profile_s.xpm", "TProfile", 1004, 0 }, { 0, 0, 0, 0 } }; shutterData_t function_data[] = { { "f1_s.xpm", "TF1", 2001, 0 }, { "f2_s.xpm", "TF2", 2002, 0 }, { 0, 0, 0, 0 } }; shutterData_t tree_data[] = { { "ntuple_s.xpm", "TNtuple", 3001, 0 }, { "tree_s.xpm", "TTree", 3002, 0 }, { "chain_s.xpm", "TChain", 3003, 0 }, { 0, 0, 0, 0 } }; const char *editortxt1 = "This is the ROOT text edit widget TGTextEdit. It is not intended as\n" "a full developers editor, but it is relatively complete and can ideally\n" "be used to edit scripts or to present users editable config files, etc.\n\n" "The text edit widget supports standard emacs style ctrl-key navigation\n" "in addition to the arrow keys. By default the widget has under the right\n" "mouse button a popup menu giving access to several built-in functions.\n\n" "Cut, copy and paste between different editor windows and any other\n" "standard text handling application is supported.\n\n" "Text can be selected with the mouse while holding the left button\n" "or with the arrow keys while holding the shift key pressed. Use the\n" "middle mouse button to paste text at the current mouse location." ; const char *editortxt2 = "Mice with scroll-ball are properly supported.\n\n" "This are the currently defined key bindings:\n" "Left Arrow\n" " Move the cursor one character leftwards.\n" " Scroll when cursor is out of frame.\n" "Right Arrow\n" " Move the cursor one character rightwards.\n" " Scroll when cursor is out of frame.\n" "Backspace\n" " Deletes the character on the left side of the text cursor and moves the\n" " cursor one position to the left. If a text has been marked by the user" ; const char *editortxt3 = " (e.g. by clicking and dragging) the cursor will be put at the beginning\n" " of the marked text and the marked text will be removed.\n" "Home\n" " Moves the text cursor to the left end of the line. If mark is TRUE text\n" " will be marked towards the first position, if not any marked text will\n" " be unmarked if the cursor is moved.\n" "End\n" " Moves the text cursor to the right end of the line. If mark is TRUE text\n" " will be marked towards the last position, if not any marked text will\n" " be unmarked if the cursor is moved.\n" "Delete" ; const char *editortxt4 = " Deletes the character on the right side of the text cursor. If a text\n" " has been marked by the user (e.g. by clicking and dragging) the cursor\n" " will be put at the beginning of the marked text and the marked text will\n" " be removed.\n" "Shift - Left Arrow\n" " Mark text one character leftwards.\n" "Shift - Right Arrow\n" " Mark text one character rightwards.\n" "Control-A\n" " Select the whole text.\n" "Control-B\n" " Move the cursor one character leftwards." ; const char *editortxt5 = "Control-C\n" " Copy the marked text to the clipboard.\n" "Control-D\n" " Delete the character to the right of the cursor.\n" "Control-E\n" " Move the cursor to the end of the line.\n" "Control-F\n" " Start Search Dialog.\n" "Control-H\n" " Delete the character to the left of the cursor.\n" "Control-K\n" " Delete marked text if any or delete all\n" " characters to the right of the cursor.\n" "Control-L\n" " Start GoTo Line Dialog" ; const char *editortxt6 = "Control-U\n" " Delete all characters on the line.\n" "Control-V\n" " Paste the clipboard text into line edit.\n" "Control-X\n" " Cut the marked text, copy to clipboard.\n" "Control-Y\n" " Paste the clipboard text into line edit.\n" "Control-Z\n" " Undo action.\n\n" "All other keys with valid ASCII codes insert themselves into the line."; class TileFrame; class TestMainFrame { RQ_OBJECT("TestMainFrame") private: TGMainFrame *fMain; TGDockableFrame *fMenuDock; TGCompositeFrame *fStatusFrame; TGCanvas *fCanvasWindow; TileFrame *fContainer; TGTextEntry *fTestText; TGButton *fTestButton; TGColorSelect *fColorSel; TGMenuBar *fMenuBar; TGPopupMenu *fMenuFile, *fMenuTest, *fMenuView, *fMenuHelp; TGPopupMenu *fCascadeMenu, *fCascade1Menu, *fCascade2Menu; TGPopupMenu *fMenuNew1, *fMenuNew2; TGLayoutHints *fMenuBarLayout, *fMenuBarItemLayout, *fMenuBarHelpLayout; public: TestMainFrame(const TGWindow *p, UInt_t w, UInt_t h); virtual ~TestMainFrame(); // slots void CloseWindow(); void DoButton(); void HandleMenu(Int_t id); void HandlePopup() { printf("menu popped up\n"); } void HandlePopdown() { printf("menu popped down\n"); } void Created() { Emit("Created()"); } //*SIGNAL* void Welcome() { printf("TestMainFrame has been created. Welcome!\n"); } }; class TestDialog { RQ_OBJECT("TestDialog") private: TGTransientFrame *fMain; TGCompositeFrame *fFrame1, *fF1, *fF2, *fF3, *fF4, *fF5; TGGroupFrame *fF6, *fF7; TGButton *fOkButton, *fCancelButton, *fStartB, *fStopB; TGButton *fBtn1, *fBtn2, *fChk1, *fChk2, *fRad1, *fRad2; TGPictureButton *fPicBut1; TGCheckButton *fCheck1; TGCheckButton *fCheckMulti; TGListBox *fListBox; TGComboBox *fCombo; TGTab *fTab; TGTextEntry *fTxt1, *fTxt2; TGLayoutHints *fL1, *fL2, *fL3, *fL4; TRootEmbeddedCanvas *fEc1, *fEc2; Int_t fFirstEntry; Int_t fLastEntry; Bool_t fFillHistos; TH1F *fHpx; TH2F *fHpxpy; void FillHistos(); public: TestDialog(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h, UInt_t options = kVerticalFrame); virtual ~TestDialog(); // slots void DoClose(); void CloseWindow(); void DoOK(); void DoCancel(); void DoTab(Int_t id); void HandleButtons(Int_t id = -1); void HandleEmbeddedCanvas(Int_t event, Int_t x, Int_t y, TObject *sel); }; class TestMsgBox { RQ_OBJECT("TestMsgBox") private: TGTransientFrame *fMain; TGCompositeFrame *f1, *f2, *f3, *f4, *f5; TGButton *fTestButton, *fCloseButton; TGPictureButton *fPictButton; TGRadioButton *fR[4]; TGCheckButton *fC[13]; TGGroupFrame *fG1, *fG2; TGLayoutHints *fL1, *fL2, *fL3, *fL4, *fL5, *fL6, *fL21; TGTextEntry *fTitle, *fMsg; TGTextBuffer *fTbtitle, *fTbmsg; TGLabel *fLtitle, *fLmsg; TGGC fRedTextGC; public: TestMsgBox(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h, UInt_t options = kVerticalFrame); virtual ~TestMsgBox(); // slots void TryToClose(); void CloseWindow(); void DoClose(); void DoRadio(); void DoTest(); }; class TestSliders { RQ_OBJECT("TestSliders") private: TGTransientFrame *fMain; TGVerticalFrame *fVframe1, *fVframe2; TGLayoutHints *fBly, *fBfly1; TGHSlider *fHslider1, *fHslider2; TGVSlider *fVslider1; TGDoubleVSlider *fVslider2; TGTextEntry *fTeh1, *fTev1, *fTeh2, *fTev2; TGTextBuffer *fTbh1, *fTbv1, *fTbh2, *fTbv2; public: TestSliders(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h); virtual ~TestSliders(); // slots void CloseWindow(); void DoText(const char *text); void DoSlider(Int_t pos = 0); }; class TestShutter { RQ_OBJECT("TestShutter") private: TGTransientFrame *fMain; TGShutter *fShutter; TGLayoutHints *fLayout; const TGPicture *fDefaultPic; public: TestShutter(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h); ~TestShutter(); void AddShutterItem(const char *name, shutterData_t *data); // slots void CloseWindow(); void HandleButtons(); }; class TestDirList { RQ_OBJECT("TestDirList") protected: TGTransientFrame *fMain; TGListTree *fContents; const TGPicture *fIcon; TString DirName(TGListTreeItem* item); public: TestDirList(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h); virtual ~TestDirList(); // slots void OnDoubleClick(TGListTreeItem* item, Int_t btn); void CloseWindow(); }; class TestFileList { RQ_OBJECT("TestFileList") protected: TGTransientFrame *fMain; TGFileContainer *fContents; TGPopupMenu *fMenu; void DisplayFile(const TString &fname); void DisplayDirectory(const TString &fname); void DisplayObject(const TString& fname,const TString& name); public: TestFileList(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h); virtual ~TestFileList(); // slots void OnDoubleClick(TGLVEntry*,Int_t); void DoMenu(Int_t); void CloseWindow(); }; class TestProgress { private: TGTransientFrame *fMain; TGHorizontalFrame *fHframe1; TGVerticalFrame *fVframe1; TGLayoutHints *fHint1, *fHint2, *fHint3, *fHint4, *fHint5; TGHProgressBar *fHProg1, *fHProg2, *fHProg3; TGVProgressBar *fVProg1, *fVProg2; TGTextButton *fGO; Bool_t fClose; public: TestProgress(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h); virtual ~TestProgress(); // slots void CloseWindow(); void DoClose(); void DoGo(); }; class EntryTestDlg { private: TGTransientFrame *fMain; TGVerticalFrame *fF1; TGVerticalFrame *fF2; TGHorizontalFrame *fF[13]; TGLayoutHints *fL1; TGLayoutHints *fL2; TGLayoutHints *fL3; TGLabel *fLabel[13]; TGNumberEntry *fNumericEntries[13]; TGCheckButton *fLowerLimit; TGCheckButton *fUpperLimit; TGNumberEntry *fLimits[2]; TGCheckButton *fPositive; TGCheckButton *fNonNegative; TGButton *fSetButton; TGButton *fExitButton; // static const char *const numlabel[13]; // static const Double_t numinit[13]; public: EntryTestDlg(const TGWindow *p, const TGWindow *main); virtual ~EntryTestDlg(); // slots void CloseWindow(); void SetLimits(); void DoOK(); }; class Editor { private: TGTransientFrame *fMain; // main frame of this widget TGTextEdit *fEdit; // text edit widget TGTextButton *fOK; // OK button TGLayoutHints *fL1; // layout of TGTextEdit TGLayoutHints *fL2; // layout of OK button public: Editor(const TGWindow *main, UInt_t w, UInt_t h); virtual ~Editor(); void LoadFile(const char *file); void LoadBuffer(const char *buffer); void AddBuffer(const char *buffer); TGTextEdit *GetEditor() const { return fEdit; } void SetTitle(); void Popup(); // slots void CloseWindow(); void DoOK(); void DoOpen(); void DoSave(); void DoClose(); }; class TileFrame { RQ_OBJECT("TileFrame") private: TGCompositeFrame *fFrame; TGCanvas *fCanvas; public: TileFrame(const TGWindow *p); virtual ~TileFrame() { delete fFrame; } TGFrame *GetFrame() const { return fFrame; } void SetCanvas(TGCanvas *canvas) { fCanvas = canvas; } void HandleMouseWheel(Event_t *event); }; TileFrame::TileFrame(const TGWindow *p) { // Create tile view container. Used to show colormap. fFrame = new TGCompositeFrame(p, 10, 10, kHorizontalFrame, TGFrame::GetWhitePixel()); fFrame->Connect("ProcessedEvent(Event_t*)", "TileFrame", this, "HandleMouseWheel(Event_t*)"); fCanvas = 0; fFrame->SetLayoutManager(new TGTileLayout(fFrame, 8)); gVirtualX->GrabButton(fFrame->GetId(), kAnyButton, kAnyModifier, kButtonPressMask | kButtonReleaseMask | kPointerMotionMask, kNone, kNone); } void TileFrame::HandleMouseWheel(Event_t *event) { // Handle mouse wheel to scroll. if (event->fType != kButtonPress && event->fType != kButtonRelease) return; Int_t page = 0; if (event->fCode == kButton4 || event->fCode == kButton5) { if (!fCanvas) return; if (fCanvas->GetContainer()->GetHeight()) page = Int_t(Float_t(fCanvas->GetViewPort()->GetHeight() * fCanvas->GetViewPort()->GetHeight()) / fCanvas->GetContainer()->GetHeight()); } if (event->fCode == kButton4) { //scroll up Int_t newpos = fCanvas->GetVsbPosition() - page; if (newpos < 0) newpos = 0; fCanvas->SetVsbPosition(newpos); } if (event->fCode == kButton5) { // scroll down Int_t newpos = fCanvas->GetVsbPosition() + page; fCanvas->SetVsbPosition(newpos); } } TestMainFrame::TestMainFrame(const TGWindow *p, UInt_t w, UInt_t h) { // Create test main frame. A TGMainFrame is a top level window. fMain = new TGMainFrame(p, w, h); // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); fMain->Connect("CloseWindow()", "TestMainFrame", this, "CloseWindow()"); // Create menubar and popup menus. The hint objects are used to place // and group the different menu widgets with respect to eachother. fMenuDock = new TGDockableFrame(fMain); fMain->AddFrame(fMenuDock, new TGLayoutHints(kLHintsExpandX, 0, 0, 1, 0)); fMenuDock->SetWindowName("GuiTest Menu"); fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX); fMenuBarItemLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0); fMenuBarHelpLayout = new TGLayoutHints(kLHintsTop | kLHintsRight); fMenuFile = new TGPopupMenu(gClient->GetRoot()); fMenuFile->AddEntry("&Open...", M_FILE_OPEN); fMenuFile->AddEntry("&Save", M_FILE_SAVE); fMenuFile->AddEntry("S&ave as...", M_FILE_SAVEAS); fMenuFile->AddEntry("&Close", -1); fMenuFile->AddSeparator(); fMenuFile->AddEntry("&Print", M_FILE_PRINT); fMenuFile->AddEntry("P&rint setup...", M_FILE_PRINTSETUP); fMenuFile->AddSeparator(); fMenuFile->AddEntry("E&xit", M_FILE_EXIT); fMenuFile->DisableEntry(M_FILE_SAVEAS); fMenuFile->HideEntry(M_FILE_PRINT); fCascade2Menu = new TGPopupMenu(gClient->GetRoot()); fCascade2Menu->AddEntry("ID = 2&3", M_CASCADE_1); fCascade2Menu->AddEntry("ID = 2&4", M_CASCADE_2); fCascade2Menu->AddEntry("ID = 2&5", M_CASCADE_3); fCascade1Menu = new TGPopupMenu(gClient->GetRoot()); fCascade1Menu->AddEntry("ID = 4&1", 41); fCascade1Menu->AddEntry("ID = 4&2", 42); fCascade1Menu->AddEntry("ID = 4&3", 43); fCascade1Menu->AddSeparator(); fCascade1Menu->AddPopup("Cascade&d 2", fCascade2Menu); fCascadeMenu = new TGPopupMenu(gClient->GetRoot()); fCascadeMenu->AddEntry("ID = 5&1", 51); fCascadeMenu->AddEntry("ID = 5&2", 52); fCascadeMenu->AddEntry("ID = 5&3", 53); fCascadeMenu->AddSeparator(); fCascadeMenu->AddPopup("&Cascaded 1", fCascade1Menu); fMenuTest = new TGPopupMenu(gClient->GetRoot()); fMenuTest->AddLabel("Test different features..."); fMenuTest->AddSeparator(); fMenuTest->AddEntry("&Dialog...", M_TEST_DLG); fMenuTest->AddEntry("&Message Box...", M_TEST_MSGBOX); fMenuTest->AddEntry("&Sliders...", M_TEST_SLIDER); fMenuTest->AddEntry("Sh&utter...", M_TEST_SHUTTER); fMenuTest->AddEntry("&List Directory...", M_TEST_DIRLIST); fMenuTest->AddEntry("&File List...", M_TEST_FILELIST); fMenuTest->AddEntry("&Progress...", M_TEST_PROGRESS); fMenuTest->AddEntry("&Number Entry...", M_TEST_NUMBERENTRY); fMenuTest->AddEntry("F&ont Dialog...", M_TEST_FONTDIALOG); fMenuTest->AddSeparator(); fMenuTest->AddEntry("Add New Menus", M_TEST_NEWMENU); fMenuTest->AddSeparator(); fMenuTest->AddPopup("&Cascaded menus", fCascadeMenu); fMenuView = new TGPopupMenu(gClient->GetRoot()); fMenuView->AddEntry("&Dock", M_VIEW_DOCK); fMenuView->AddEntry("&Undock", M_VIEW_UNDOCK); fMenuView->AddSeparator(); fMenuView->AddEntry("Enable U&ndock", M_VIEW_ENBL_DOCK); fMenuView->AddEntry("Enable &Hide", M_VIEW_ENBL_HIDE); fMenuView->DisableEntry(M_VIEW_DOCK); fMenuDock->EnableUndock(kTRUE); fMenuDock->EnableHide(kTRUE); fMenuView->CheckEntry(M_VIEW_ENBL_DOCK); fMenuView->CheckEntry(M_VIEW_ENBL_HIDE); // When using the DockButton of the MenuDock, // the states 'enable' and 'disable' of menus have to be updated. fMenuDock->Connect("Undocked()", "TestMainFrame", this, "HandleMenu(=M_VIEW_UNDOCK)"); fMenuHelp = new TGPopupMenu(gClient->GetRoot()); fMenuHelp->AddEntry("&Contents", M_HELP_CONTENTS); fMenuHelp->AddEntry("&Search...", M_HELP_SEARCH); fMenuHelp->AddSeparator(); fMenuHelp->AddEntry("&About", M_HELP_ABOUT); fMenuNew1 = new TGPopupMenu(); fMenuNew1->AddEntry("Remove New Menus", M_NEW_REMOVEMENU); fMenuNew2 = new TGPopupMenu(); fMenuNew2->AddEntry("Remove New Menus", M_NEW_REMOVEMENU); // Menu button messages are handled by the main frame (i.e. "this") // HandleMenu() method. fMenuFile->Connect("Activated(Int_t)", "TestMainFrame", this, "HandleMenu(Int_t)"); fMenuFile->Connect("PoppedUp()", "TestMainFrame", this, "HandlePopup()"); fMenuFile->Connect("PoppedDown()", "TestMainFrame", this, "HandlePopdown()"); fMenuTest->Connect("Activated(Int_t)", "TestMainFrame", this, "HandleMenu(Int_t)"); fMenuView->Connect("Activated(Int_t)", "TestMainFrame", this, "HandleMenu(Int_t)"); fMenuHelp->Connect("Activated(Int_t)", "TestMainFrame", this, "HandleMenu(Int_t)"); fCascadeMenu->Connect("Activated(Int_t)", "TestMainFrame", this, "HandleMenu(Int_t)"); fCascade1Menu->Connect("Activated(Int_t)", "TestMainFrame", this, "HandleMenu(Int_t)"); fCascade2Menu->Connect("Activated(Int_t)", "TestMainFrame", this, "HandleMenu(Int_t)"); fMenuNew1->Connect("Activated(Int_t)", "TestMainFrame", this, "HandleMenu(Int_t)"); fMenuNew2->Connect("Activated(Int_t)", "TestMainFrame", this, "HandleMenu(Int_t)"); fMenuBar = new TGMenuBar(fMenuDock, 1, 1, kHorizontalFrame); fMenuBar->AddPopup("&File", fMenuFile, fMenuBarItemLayout); fMenuBar->AddPopup("&Test", fMenuTest, fMenuBarItemLayout); fMenuBar->AddPopup("&View", fMenuView, fMenuBarItemLayout); fMenuBar->AddPopup("&Help", fMenuHelp, fMenuBarHelpLayout); fMenuDock->AddFrame(fMenuBar, fMenuBarLayout); // Create TGCanvas and a canvas container which uses a tile layout manager fCanvasWindow = new TGCanvas(fMain, 400, 240); fContainer = new TileFrame(fCanvasWindow->GetViewPort()); fContainer->SetCanvas(fCanvasWindow); fCanvasWindow->SetContainer(fContainer->GetFrame()); // use hierarchical cleaning for container fContainer->GetFrame()->SetCleanup(kDeepCleanup); // Fill canvas with 256 colored frames for (int i=0; i < 256; ++i) fCanvasWindow->AddFrame(new TGFrame(fCanvasWindow->GetContainer(), 32, 32, 0, TColor::RGB2Pixel(0,0,(i+1)&255)), new TGLayoutHints(kLHintsExpandY | kLHintsRight)); fMain->AddFrame(fCanvasWindow, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 2, 2)); // Create status frame containing a button and a text entry widget fStatusFrame = new TGCompositeFrame(fMain, 60, 20, kHorizontalFrame | kSunkenFrame); fTestButton = new TGTextButton(fStatusFrame, "&Open editor...", 150); fTestButton->Connect("Clicked()", "TestMainFrame", this, "DoButton()"); fTestButton->SetToolTipText("Pops up\ntext editor"); fStatusFrame->AddFrame(fTestButton, new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 0, 2, 2)); fTestText = new TGTextEntry(fStatusFrame, new TGTextBuffer(100)); fTestText->SetToolTipText("This is a text entry widget"); fTestText->Resize(300, fTestText->GetDefaultHeight()); fStatusFrame->AddFrame(fTestText, new TGLayoutHints(kLHintsTop | kLHintsLeft, 10, 2, 2, 2)); Pixel_t yellow; gClient->GetColorByName("yellow", yellow); fColorSel = new TGColorSelect(fStatusFrame, yellow, 0); fStatusFrame->AddFrame(fColorSel, new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 0, 2, 2)); fMain->AddFrame(fStatusFrame, new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 0, 0, 1, 0)); fMain->SetWindowName("GuiTest Signal/Slots"); fMain->MapSubwindows(); // we need to use GetDefault...() to initialize the layout algorithm... fMain->Resize(); fMain->MapWindow(); fMain->Print(); Connect("Created()", "TestMainFrame", this, "Welcome()"); Created(); } TestMainFrame::~TestMainFrame() { // Delete all created widgets. delete fMenuFile; delete fMenuTest; delete fMenuView; delete fMenuHelp; delete fCascadeMenu; delete fCascade1Menu; delete fCascade2Menu; delete fMenuNew1; delete fMenuNew2; delete fContainer; delete fMain; } void TestMainFrame::CloseWindow() { // Got close message for this MainFrame. Terminates the application. gApplication->Terminate(); } void TestMainFrame::DoButton() { // Handle button click. Editor *ed = new Editor(fMain, 600, 400); ed->LoadBuffer(editortxt1); ed->AddBuffer(editortxt2); ed->AddBuffer(editortxt3); ed->AddBuffer(editortxt4); ed->AddBuffer(editortxt5); ed->AddBuffer(editortxt6); ed->Popup(); } void TestMainFrame::HandleMenu(Int_t id) { // Handle menu items. switch (id) { case M_FILE_OPEN: { static TString dir("."); TGFileInfo fi; fi.fFileTypes = filetypes; fi.fIniDir = StrDup(dir); printf("fIniDir = %s\n", fi.fIniDir); new TGFileDialog(gClient->GetRoot(), fMain, kFDOpen, &fi); printf("Open file: %s (dir: %s)\n", fi.fFilename, fi.fIniDir); dir = fi.fIniDir; } break; case M_FILE_SAVE: printf("M_FILE_SAVE\n"); break; case M_FILE_PRINT: printf("M_FILE_PRINT\n"); printf("Hiding itself, select \"Print Setup...\" to enable again\n"); fMenuFile->HideEntry(M_FILE_PRINT); break; case M_FILE_PRINTSETUP: printf("M_FILE_PRINTSETUP\n"); printf("Enabling \"Print\"\n"); fMenuFile->EnableEntry(M_FILE_PRINT); break; case M_FILE_EXIT: CloseWindow(); // terminate theApp no need to use SendCloseMessage() break; case M_TEST_DLG: new TestDialog(gClient->GetRoot(), fMain, 400, 200); break; case M_TEST_MSGBOX: new TestMsgBox(gClient->GetRoot(), fMain, 400, 200); break; case M_TEST_SLIDER: new TestSliders(gClient->GetRoot(), fMain, 400, 200); break; case M_TEST_SHUTTER: new TestShutter(gClient->GetRoot(), fMain, 400, 200); break; case M_TEST_DIRLIST: new TestDirList(gClient->GetRoot(), fMain, 400, 200); break; case M_TEST_FILELIST: new TestFileList(gClient->GetRoot(), fMain, 400, 200); break; case M_TEST_PROGRESS: new TestProgress(gClient->GetRoot(), fMain, 600, 300); break; case M_TEST_NUMBERENTRY: new EntryTestDlg(gClient->GetRoot(), fMain); break; case M_TEST_FONTDIALOG: { TGFontDialog::FontProp_t prop; new TGFontDialog(gClient->GetRoot(), fMain, &prop); if (prop.fName != "") printf("Selected font: %s, size %d, italic %s, bold %s, color 0x%lx, align %u\n", prop.fName.Data(), prop.fSize, prop.fItalic ? "yes" : "no", prop.fBold ? "yes" : "no", prop.fColor, prop.fAlign); } break; case M_TEST_NEWMENU: { if (fMenuTest->IsEntryChecked(M_TEST_NEWMENU)) { HandleMenu(M_NEW_REMOVEMENU); return; } fMenuTest->CheckEntry(M_TEST_NEWMENU); TGPopupMenu *p = fMenuBar->GetPopup("Test"); fMenuBar->AddPopup("New 1", fMenuNew1, fMenuBarItemLayout, p); p = fMenuBar->GetPopup("Help"); fMenuBar->AddPopup("New 2", fMenuNew2, fMenuBarItemLayout, p); fMenuBar->MapSubwindows(); fMenuBar->Layout(); TGMenuEntry *e = fMenuTest->GetEntry("Add New Menus"); fMenuTest->AddEntry("Remove New Menus", M_NEW_REMOVEMENU, 0, 0, e); } break; case M_NEW_REMOVEMENU: { fMenuBar->RemovePopup("New 1"); fMenuBar->RemovePopup("New 2"); fMenuBar->Layout(); fMenuTest->DeleteEntry(M_NEW_REMOVEMENU); fMenuTest->UnCheckEntry(M_TEST_NEWMENU); } break; case M_VIEW_ENBL_DOCK: fMenuDock->EnableUndock(!fMenuDock->EnableUndock()); if (fMenuDock->EnableUndock()) { fMenuView->CheckEntry(M_VIEW_ENBL_DOCK); fMenuView->EnableEntry(M_VIEW_UNDOCK); } else { fMenuView->UnCheckEntry(M_VIEW_ENBL_DOCK); fMenuView->DisableEntry(M_VIEW_UNDOCK); } break; case M_VIEW_ENBL_HIDE: fMenuDock->EnableHide(!fMenuDock->EnableHide()); if (fMenuDock->EnableHide()) { fMenuView->CheckEntry(M_VIEW_ENBL_HIDE); } else { fMenuView->UnCheckEntry(M_VIEW_ENBL_HIDE); } break; case M_VIEW_DOCK: fMenuDock->DockContainer(); fMenuView->EnableEntry(M_VIEW_UNDOCK); fMenuView->DisableEntry(M_VIEW_DOCK); break; case M_VIEW_UNDOCK: fMenuDock->UndockContainer(); fMenuView->EnableEntry(M_VIEW_DOCK); fMenuView->DisableEntry(M_VIEW_UNDOCK); break; default: printf("Menu item %d selected\n", id); break; } } TestDialog::TestDialog(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h, UInt_t options) { // Create a dialog window. A dialog window pops up with respect to its // "main" window. fMain = new TGTransientFrame(p, main, w, h, options); fMain->Connect("CloseWindow()", "TestDialog", this, "DoClose()"); fMain->DontCallClose(); // to avoid double deletions. // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); fFrame1 = new TGHorizontalFrame(fMain, 60, 20, kFixedWidth); fOkButton = new TGTextButton(fFrame1, "&Ok", 1); fOkButton->Connect("Clicked()", "TestDialog", this, "DoOK()"); fCancelButton = new TGTextButton(fFrame1, "&Cancel", 2); fCancelButton->Connect("Clicked()", "TestDialog", this, "DoCancel()"); fL1 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2); fL2 = new TGLayoutHints(kLHintsBottom | kLHintsRight, 2, 2, 5, 1); fFrame1->AddFrame(fOkButton, fL1); fFrame1->AddFrame(fCancelButton, fL1); fFrame1->Resize(150, fOkButton->GetDefaultHeight()); fMain->AddFrame(fFrame1, fL2); //--------- create Tab widget and some composite frames for Tab testing fTab = new TGTab(fMain, 300, 300); fTab->Connect("Selected(Int_t)", "TestDialog", this, "DoTab(Int_t)"); fL3 = new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5); TGCompositeFrame *tf = fTab->AddTab("Tab 1"); fF1 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame); fF1->AddFrame(new TGTextButton(fF1, "&Test button", 0), fL3); fF1->AddFrame(fTxt1 = new TGTextEntry(fF1, new TGTextBuffer(100)), fL3); fF1->AddFrame(fTxt2 = new TGTextEntry(fF1, new TGTextBuffer(100)), fL3); tf->AddFrame(fF1, fL3); fTxt1->Resize(150, fTxt1->GetDefaultHeight()); fTxt2->Resize(150, fTxt2->GetDefaultHeight()); tf = fTab->AddTab("Tab 2"); fL1 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 200, 2, 2, 2); fF2 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame); fF2->AddFrame(fBtn1 = new TGTextButton(fF2, "&Button 1", 61), fL1); fF2->AddFrame(fBtn2 = new TGTextButton(fF2, "B&utton 2", 62), fL1); fF2->AddFrame(fChk1 = new TGCheckButton(fF2, "C&heck 1", 71), fL1); fF2->AddFrame(fChk2 = new TGCheckButton(fF2, "Chec&k 2", 72), fL1); fF2->AddFrame(fRad1 = new TGRadioButton(fF2, "&Radio 1", 81), fL1); fF2->AddFrame(fRad2 = new TGRadioButton(fF2, "R&adio 2", 82), fL1); fCombo = new TGComboBox(fF2, 88); fF2->AddFrame(fCombo, fL3); tf->AddFrame(fF2, fL3); int i; char tmp[20]; for (i = 0; i < 20; i++) { sprintf(tmp, "Entry %i", i+1); fCombo->AddEntry(tmp, i+1); } fCombo->Resize(150, 20); fBtn1->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); fBtn2->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); fChk1->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); fChk2->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); fRad1->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); fRad2->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); //-------------- embedded canvas demo fFillHistos = kFALSE; fHpx = 0; fHpxpy = 0; tf = fTab->AddTab("Tab 3"); fF3 = new TGCompositeFrame(tf, 60, 20, kHorizontalFrame); fStartB = new TGTextButton(fF3, "Start &Filling Hists", 40); fStopB = new TGTextButton(fF3, "&Stop Filling Hists", 41); fStartB->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); fStopB->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); fF3->AddFrame(fStartB, fL3); fF3->AddFrame(fStopB, fL3); fF5 = new TGCompositeFrame(tf, 60, 60, kHorizontalFrame); fL4 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 5, 5, 5, 5); fEc1 = new TRootEmbeddedCanvas("ec1", fF5, 100, 100); fF5->AddFrame(fEc1, fL4); fEc2 = new TRootEmbeddedCanvas("ec2", fF5, 100, 100); fF5->AddFrame(fEc2, fL4); tf->AddFrame(fF3, fL3); tf->AddFrame(fF5, fL4); fEc1->GetCanvas()->SetBorderMode(0); fEc2->GetCanvas()->SetBorderMode(0); fEc1->GetCanvas()->SetBit(kNoContextMenu); fEc1->GetCanvas()->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)", "TestDialog", this, "HandleEmbeddedCanvas(Int_t,Int_t,Int_t,TObject*)"); // make tab yellow Pixel_t yellow; gClient->GetColorByName("yellow", yellow); TGTabElement *tabel = fTab->GetTabTab("Tab 3"); tabel->ChangeBackground(yellow); //-------------- end embedded canvas demo TGTextButton *bt; tf = fTab->AddTab("Tab 4"); fF4 = new TGCompositeFrame(tf, 60, 20, kVerticalFrame); fF4->AddFrame(bt = new TGTextButton(fF4, "A&dd Entry", 90), fL3); bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); fF4->AddFrame(bt = new TGTextButton(fF4, "Remove &Entry", 91), fL3); bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); fF4->AddFrame(fListBox = new TGListBox(fF4, 89), fL3); fF4->AddFrame(fCheckMulti = new TGCheckButton(fF4, "&Mutli Selectable", 92), fL3); fCheckMulti->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); tf->AddFrame(fF4, fL3); for (i = 0; i < 20; ++i) { sprintf(tmp, "Entry %i", i); fListBox->AddEntry(tmp, i); } fFirstEntry = 0; fLastEntry = 20; fListBox->Resize(150, 80); //--- tab 5 tf = fTab->AddTab("Tab 5"); tf->SetLayoutManager(new TGHorizontalLayout(tf)); fF6 = new TGGroupFrame(tf, "Options", kVerticalFrame); fF6->SetTitlePos(TGGroupFrame::kRight); // right aligned tf->AddFrame(fF6, fL3); // 2 column, n rows fF6->SetLayoutManager(new TGMatrixLayout(fF6, 0, 2, 10)); char buff[100]; int j; for (j = 0; j < 4; j++) { sprintf(buff, "Module %i", j+1); fF6->AddFrame(new TGLabel(fF6, new TGHotString(buff))); TGTextBuffer *tbuf = new TGTextBuffer(10); tbuf->AddText(0, "0.0"); TGTextEntry *tent = new TGTextEntry(fF6, tbuf); tent->Resize(50, tent->GetDefaultHeight()); tent->SetFont("-adobe-courier-bold-r-*-*-14-*-*-*-*-*-iso8859-1"); fF6->AddFrame(tent); } fF6->Resize(); // another matrix with text and buttons fF7 = new TGGroupFrame(tf, "Tab Handling", kVerticalFrame); tf->AddFrame(fF7, fL3); fF7->SetLayoutManager(new TGMatrixLayout(fF7, 0, 1, 10)); fF7->AddFrame(bt = new TGTextButton(fF7, "Remove Tab", 101)); bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); bt->Resize(90, bt->GetDefaultHeight()); fF7->AddFrame(bt = new TGTextButton(fF7, "Add Tab", 103)); bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); bt->Resize(90, bt->GetDefaultHeight()); fF7->AddFrame(bt = new TGTextButton(fF7, "Remove Tab 5", 102)); bt->Connect("Clicked()", "TestDialog", this, "HandleButtons()"); bt->Resize(90, bt->GetDefaultHeight()); fF7->Resize(fF6->GetDefaultSize()); //--- end of last tab TGLayoutHints *fL5 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX | kLHintsExpandY, 2, 2, 5, 1); fMain->AddFrame(fTab, fL5); fMain->MapSubwindows(); fMain->Resize(); // position relative to the parent's window fMain->CenterOnParent(); fMain->SetWindowName("Dialog"); fMain->MapWindow(); //gClient->WaitFor(fMain); // otherwise canvas contextmenu does not work } TestDialog::~TestDialog() { // Delete test dialog widgets. fMain->DeleteWindow(); // deletes fMain } void TestDialog::FillHistos() { // Fill histograms till user clicks "Stop Filling" button. static int cnt; if (!fHpx) { fHpx = new TH1F("hpx","This is the px distribution",100,-4,4); fHpxpy = new TH2F("hpxpy","py vs px",40,-4,4,40,-4,4); fHpx->SetFillColor(kRed); cnt = 0; } const int kUPDATE = 1000; float px, py; TCanvas *c1 = fEc1->GetCanvas(); TCanvas *c2 = fEc2->GetCanvas(); while (fFillHistos) { gRandom->Rannor(px,py); //px and py will be two gaussian random numbers fHpx->Fill(px); fHpxpy->Fill(px,py); cnt++; if (!(cnt % kUPDATE)) { if (cnt == kUPDATE) { c1->cd(); fHpx->Draw(); c2->cd(); fHpxpy->Draw("cont"); } c1->Modified(); c1->Update(); c2->Modified(); c2->Update(); gSystem->ProcessEvents(); // handle GUI events } } } void TestDialog::DoClose() { printf("\nTerminating dialog: via window manager\n"); if (fFillHistos) { fFillHistos = kFALSE; TTimer::SingleShot(150, "TestDialog", this, "CloseWindow()"); } else CloseWindow(); // Close the Ged editor if it was activated. if (TVirtualPadEditor::GetPadEditor(kFALSE) != 0) TVirtualPadEditor::Terminate(); } void TestDialog::CloseWindow() { // Called when window is closed via the window manager. delete this; } void TestDialog::DoOK() { fFillHistos = kFALSE; printf("\nTerminating dialog: OK pressed\n"); // Add protection against double-clicks fOkButton->SetState(kButtonDisabled); fCancelButton->SetState(kButtonDisabled); // Send a close message to the main frame. This will trigger the // emission of a CloseWindow() signal, which will then call // TestDialog::CloseWindow(). Calling directly CloseWindow() will cause // a segv since the OK button is still accessed after the DoOK() method. // This works since the close message is handled synchronous (via // message going to/from X server). //fMain->SendCloseMessage(); // The same effect can be obtained by using a singleshot timer: TTimer::SingleShot(150, "TestDialog", this, "CloseWindow()"); // Close the Ged editor if it was activated. if (TVirtualPadEditor::GetPadEditor(kFALSE) != 0) TVirtualPadEditor::Terminate(); } void TestDialog::DoCancel() { fFillHistos = kFALSE; printf("\nTerminating dialog: Cancel pressed\n"); // Add protection against double-clicks fOkButton->SetState(kButtonDisabled); fCancelButton->SetState(kButtonDisabled); TTimer::SingleShot(150, "TestDialog", this, "CloseWindow()"); // Close the Ged editor if it was activated. if (TVirtualPadEditor::GetPadEditor(kFALSE) != 0) TVirtualPadEditor::Terminate(); } void TestDialog::HandleButtons(Int_t id) { // Handle different buttons. if (id == -1) { TGButton *btn = (TGButton *) gTQSender; id = btn->WidgetId(); } printf("DoButton: id = %d\n", id); char tmp[20]; static int newtab = 0; switch (id) { case 40: // start histogram filling fFillHistos = kTRUE; FillHistos(); break; case 41: // stop histogram filling fFillHistos = kFALSE; break; case 61: // show item 1 in the combo box fCombo->Select(1); break; case 62: // show item 2 in the combo box fCombo->Select(2); break; case 90: // add one entry in list box fLastEntry++; sprintf(tmp, "Entry %i", fLastEntry); fListBox->AddEntry(tmp, fLastEntry); fListBox->MapSubwindows(); fListBox->Layout(); break; case 91: // remove one entry in list box if (fFirstEntry <= fLastEntry) { fListBox->RemoveEntry(fFirstEntry); fListBox->Layout(); fFirstEntry++; } break; case 101: // remove tabs { TString s = fTab->GetTabTab(0)->GetString(); if ((s == "Tab 3") && (fMain->MustCleanup() != kDeepCleanup)) { // Need to delete the embedded canvases // since RemoveTab() will Destroy the container // window, which in turn will destroy the embedded // canvas windows. delete fEc1; fEc1 = 0; delete fEc2; fEc2 = 0; } fTab->RemoveTab(0); fTab->Layout(); } break; case 102: // remove tab 5 { int nt = fTab->GetNumberOfTabs(); for (int i = 0 ; i < nt; i++) { TString s = fTab->GetTabTab(i)->GetString(); if (s == "Tab 5") { fTab->RemoveTab(i); fTab->Layout(); break; } } } break; case 103: // add tabs sprintf(tmp, "New Tab %d", ++newtab); fTab->AddTab(tmp); fTab->MapSubwindows(); fTab->Layout(); break; case 81: fRad2->SetState(kButtonUp); break; case 82: fRad1->SetState(kButtonUp); break; case 92: fListBox->SetMultipleSelections(fCheckMulti->GetState()); break; default: break; } } void TestDialog::DoTab(Int_t id) { printf("Tab item %d activated\n", id); } void TestDialog::HandleEmbeddedCanvas(Int_t event, Int_t x, Int_t y, TObject *sel) { // Handle events in the left embedded canvas. if (event == kButton3Down) printf("event = %d, x = %d, y = %d, obj = %s::%s\n", event, x, y, sel->IsA()->GetName(), sel->GetName()); } TestMsgBox::TestMsgBox(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h, UInt_t options) : fRedTextGC(TGButton::GetDefaultGC()) { // Create message box test dialog. Use this dialog to select the different // message dialog box styles and show the message dialog by clicking the // "Test" button. fMain = new TGTransientFrame(p, main, w, h, options); fMain->Connect("CloseWindow()", "TestMsgBox", this, "CloseWindow()"); fMain->DontCallClose(); // to avoid double deletions. // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); //------------------------------ // Set foreground color in graphics context for drawing of // TGlabel and TGButtons with text in red. Pixel_t red; gClient->GetColorByName("red", red); fRedTextGC.SetForeground(red); //--------------------------------- int i; fMain->ChangeOptions((fMain->GetOptions() & ~kVerticalFrame) | kHorizontalFrame); f1 = new TGCompositeFrame(fMain, 60, 20, kVerticalFrame | kFixedWidth); f2 = new TGCompositeFrame(fMain, 60, 20, kVerticalFrame); f3 = new TGCompositeFrame(f2, 60, 20, kHorizontalFrame); f4 = new TGCompositeFrame(f2, 60, 20, kHorizontalFrame); f5 = new TGCompositeFrame(f2, 60, 20, kHorizontalFrame); fTestButton = new TGTextButton(f1, "&Test", 1, fRedTextGC()); fTestButton->Connect("Clicked()", "TestMsgBox", this, "DoTest()"); // Change background of fTestButton to green Pixel_t green; gClient->GetColorByName("green", green); fTestButton->ChangeBackground(green); fCloseButton = new TGTextButton(f1, "&Close", 2); fCloseButton->Connect("Clicked()", "TestMsgBox", this, "DoClose()"); fPictButton = new TGPictureButton(f1, gClient->GetPicture("mb_stop_s.xpm")); f1->Resize(fTestButton->GetDefaultWidth()+40, fMain->GetDefaultHeight()); fL1 = new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 2, 3, 0); fL2 = new TGLayoutHints(kLHintsTop | kLHintsRight | kLHintsExpandX, 2, 5, 0, 2); fL21 = new TGLayoutHints(kLHintsTop | kLHintsRight, 2, 5, 10, 0); f1->AddFrame(fTestButton, fL1); f1->AddFrame(fCloseButton, fL1); f1->AddFrame(fPictButton, fL1); fMain->AddFrame(f1, fL21); //--------- create check and radio buttons groups fG1 = new TGGroupFrame(f3, new TGString("Buttons"),kVerticalFrame|kRaisedFrame); fG2 = new TGGroupFrame(f3, new TGString("Icons"),kVerticalFrame|kRaisedFrame); fL3 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 2, 2, 2, 2); fL4 = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 0, 5, 0); fC[0] = new TGCheckButton(fG1, new TGHotString("Yes"), -1); fC[1] = new TGCheckButton(fG1, new TGHotString("No"), -1); fC[2] = new TGCheckButton(fG1, new TGHotString("OK"), -1); fC[3] = new TGCheckButton(fG1, new TGHotString("Apply"), -1); fC[4] = new TGCheckButton(fG1, new TGHotString("Retry"), -1); fC[5] = new TGCheckButton(fG1, new TGHotString("Ignore"), -1); fC[6] = new TGCheckButton(fG1, new TGHotString("Cancel"), -1); fC[7] = new TGCheckButton(fG1, new TGHotString("Close"), -1); fC[8] = new TGCheckButton(fG1, new TGHotString("Yes to All"), -1); fC[9] = new TGCheckButton(fG1, new TGHotString("No to All"), -1); fC[10] = new TGCheckButton(fG1, new TGHotString("Newer Only"), -1); fC[11] = new TGCheckButton(fG1, new TGHotString("Append"), -1); fC[12] = new TGCheckButton(fG1, new TGHotString("Dismiss"), -1); for (i=0; i<13; ++i) fG1->AddFrame(fC[i], fL4); fR[0] = new TGRadioButton(fG2, new TGHotString("Stop"), 21); fR[1] = new TGRadioButton(fG2, new TGHotString("Question"), 22); fR[2] = new TGRadioButton(fG2, new TGHotString("Exclamation"), 23); fR[3] = new TGRadioButton(fG2, new TGHotString("Asterisk"), 24); for (i = 0; i < 4; ++i) { fG2->AddFrame(fR[i], fL4); fR[i]->Connect("Clicked()", "TestMsgBox", this, "DoRadio()"); } fC[2]->SetState(kButtonDown); fR[0]->SetState(kButtonDown); f3->AddFrame(fG1, fL3); f3->AddFrame(fG2, fL3); fLtitle = new TGLabel(f4, new TGString("Title:"), fRedTextGC()); fLmsg = new TGLabel(f5, new TGString("Message:")); fTitle = new TGTextEntry(f4, fTbtitle = new TGTextBuffer(100)); fMsg = new TGTextEntry(f5, fTbmsg = new TGTextBuffer(100)); fTbtitle->AddText(0, "MsgBox"); fTbmsg->AddText(0, "This is a test message box."); fTitle->Resize(300, fTitle->GetDefaultHeight()); fMsg->Resize(300, fMsg->GetDefaultHeight()); fL5 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 3, 5, 0, 0); fL6 = new TGLayoutHints(kLHintsRight | kLHintsCenterY, 0, 2, 0, 0); f4->AddFrame(fLtitle, fL5); f4->AddFrame(fTitle, fL6); f5->AddFrame(fLmsg, fL5); f5->AddFrame(fMsg, fL6); f2->AddFrame(f3, fL1); f2->AddFrame(f4, fL1); f2->AddFrame(f5, fL1); fMain->AddFrame(f2, fL2); fMain->MapSubwindows(); fMain->Resize(); // position relative to the parent's window fMain->CenterOnParent(); fMain->SetWindowName("Message Box Test"); fMain->MapWindow(); gClient->WaitFor(fMain); } // Order is important when deleting frames. Delete children first, // parents last. TestMsgBox::~TestMsgBox() { // Delete widgets created by dialog. fMain->DeleteWindow(); // deletes fMain } void TestMsgBox::CloseWindow() { // Close dialog in response to window manager close. delete this; } void TestMsgBox::DoClose() { // Handle Close button. CloseWindow(); } void TestMsgBox::DoTest() { // Handle test button. int i, buttons, retval; EMsgBoxIcon icontype = kMBIconStop; buttons = 0; for (i = 0; i < 13; i++) if (fC[i]->GetState() == kButtonDown) buttons |= mb_button_id[i]; for (i = 0; i < 4; i++) if (fR[i]->GetState() == kButtonDown) { icontype = mb_icon[i]; break; } // Since the message dialog box is created, we disable the // signal/slot communication mechanism, in order to ensure we // can't close the fMain window while the message box is open. fMain->Disconnect("CloseWindow()"); fMain->Connect("CloseWindow()", "TestMsgBox", this, "TryToClose()"); new TGMsgBox(gClient->GetRoot(), fMain, fTbtitle->GetString(), fTbmsg->GetString(), icontype, buttons, &retval); fMain->Disconnect("CloseWindow()"); fMain->Connect("CloseWindow()", "TestMsgBox", this, "CloseWindow()"); } void TestMsgBox::TryToClose() { // The user try to close the main window, // while a message dialog box is still open. printf("Can't close the window '%s' : a message box is still open\n", fMain->GetWindowName()); } void TestMsgBox::DoRadio() { // Handle radio buttons. TGButton *btn = (TGButton *) gTQSender; Int_t id = btn->WidgetId(); if (id >= 21 && id <= 24) { for (int i = 0; i < 4; i++) if (fR[i]->WidgetId() != id) fR[i]->SetState(kButtonUp); } } TestSliders::TestSliders(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h) { // Dialog used to test the different supported sliders. fMain = new TGTransientFrame(p, main, w, h); fMain->Connect("CloseWindow()", "TestSliders", this, "CloseWindow()"); fMain->DontCallClose(); // to avoid double deletions. // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); fMain->ChangeOptions((fMain->GetOptions() & ~kVerticalFrame) | kHorizontalFrame); fVframe1 = new TGVerticalFrame(fMain, 0, 0, 0); fTeh1 = new TGTextEntry(fVframe1, fTbh1 = new TGTextBuffer(10), HId1); fTev1 = new TGTextEntry(fVframe1, fTbv1 = new TGTextBuffer(10), VId1); fTbh1->AddText(0, "0"); fTbv1->AddText(0, "0"); fTeh1->Connect("TextChanged(char*)", "TestSliders", this, "DoText(char*)"); fTev1->Connect("TextChanged(char*)", "TestSliders", this, "DoText(char*)"); fHslider1 = new TGHSlider(fVframe1, 100, kSlider1 | kScaleBoth, HSId1); fHslider1->Connect("PositionChanged(Int_t)", "TestSliders", this, "DoSlider(Int_t)"); fHslider1->SetRange(0,50); fVslider1 = new TGVSlider(fVframe1, 100, kSlider2 | kScaleBoth, VSId1); fVslider1->Connect("PositionChanged(Int_t)", "TestSliders", this, "DoSlider(Int_t)"); fVslider1->SetRange(0,8); fVframe1->Resize(100, 100); fVframe2 = new TGVerticalFrame(fMain, 0, 0, 0); fTeh2 = new TGTextEntry(fVframe2, fTbh2 = new TGTextBuffer(10), HId2); fTev2 = new TGTextEntry(fVframe2, fTbv2 = new TGTextBuffer(10), VId2); fTbh2->AddText(0, "0"); fTbv2->AddText(0, "0"); fTeh2->Connect("TextChanged(char*)", "TestSliders", this, "DoText(char*)"); fTev2->Connect("TextChanged(char*)", "TestSliders", this, "DoText(char*)"); fHslider2 = new TGHSlider(fVframe2, 150, kSlider2 | kScaleBoth, HSId2); fHslider2->Connect("PositionChanged(Int_t)", "TestSliders", this, "DoSlider(Int_t)"); fHslider2->SetRange(0,3); fVslider2 = new TGDoubleVSlider(fVframe2, 100, kDoubleScaleBoth, VSId2); fVslider2->SetRange(-10,10); fVslider2->Connect("PositionChanged()", "TestSliders", this, "DoSlider()"); fVframe2->Resize(100, 100); //--- layout for buttons: top align, equally expand horizontally fBly = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 3, 0); //--- layout for the frame: place at bottom, right aligned fBfly1 = new TGLayoutHints(kLHintsTop | kLHintsRight, 20, 10, 15, 0); fVframe1->AddFrame(fHslider1, fBly); fVframe1->AddFrame(fVslider1, fBly); fVframe1->AddFrame(fTeh1, fBly); fVframe1->AddFrame(fTev1, fBly); fVframe2->AddFrame(fHslider2, fBly); fVframe2->AddFrame(fVslider2, fBly); fVframe2->AddFrame(fTeh2, fBly); fVframe2->AddFrame(fTev2, fBly); fMain->AddFrame(fVframe2, fBfly1); fMain->AddFrame(fVframe1, fBfly1); fMain->SetWindowName("Slider Test"); TGDimension size = fMain->GetDefaultSize(); fMain->Resize(size); fMain->SetWMSize(size.fWidth, size.fHeight); fMain->SetWMSizeHints(size.fWidth, size.fHeight, size.fWidth, size.fHeight, 0, 0); fMain->SetMWMHints(kMWMDecorAll | kMWMDecorResizeH | kMWMDecorMaximize | kMWMDecorMinimize | kMWMDecorMenu, kMWMFuncAll | kMWMFuncResize | kMWMFuncMaximize | kMWMFuncMinimize, kMWMInputModeless); // position relative to the parent's window fMain->CenterOnParent(); fMain->MapSubwindows(); fMain->MapWindow(); gClient->WaitFor(fMain); } TestSliders::~TestSliders() { // Delete dialog. fMain->DeleteWindow(); // deletes fMain } void TestSliders::CloseWindow() { // Called when window is closed via the window manager. delete this; } void TestSliders::DoText(const char * /*text*/) { // Handle text entry widgets. TGTextEntry *te = (TGTextEntry *) gTQSender; Int_t id = te->WidgetId(); switch (id) { case HId1: fHslider1->SetPosition(atoi(fTbh1->GetString())); break; case VId1: fVslider1->SetPosition(atoi(fTbv1->GetString())); break; case HId2: fHslider2->SetPosition(atoi(fTbh2->GetString())); break; case VId2: fVslider2->SetPosition(atoi(fTbv2->GetString()), atoi(fTbv2->GetString())+2); break; default: break; } } void TestSliders::DoSlider(Int_t pos) { // Handle slider widgets. Int_t id; TGFrame *frm = (TGFrame *) gTQSender; if (frm->IsA()->InheritsFrom(TGSlider::Class())) { TGSlider *sl = (TGSlider*) frm; id = sl->WidgetId(); } else { TGDoubleSlider *sd = (TGDoubleSlider *) frm; id = sd->WidgetId(); } char buf[32]; sprintf(buf, "%d", pos); #ifdef CINT_FIXED switch (id) { case HSId1: #else if (id == HSId1) { #endif fTbh1->Clear(); fTbh1->AddText(0, buf); // Re-align the cursor with the characters. fTeh1->SetCursorPosition(fTeh1->GetCursorPosition()); fTeh1->Deselect(); gClient->NeedRedraw(fTeh1); #ifdef CINT_FIXED break; case VSId1: #else } else if (id == VSId1) { #endif fTbv1->Clear(); fTbv1->AddText(0, buf); fTev1->SetCursorPosition(fTev1->GetCursorPosition()); fTev1->Deselect(); gClient->NeedRedraw(fTev1); #ifdef CINT_FIXED break; case HSId2: #else } else if (id == HSId2) { #endif fTbh2->Clear(); fTbh2->AddText(0, buf); fTeh2->SetCursorPosition(fTeh2->GetCursorPosition()); fTeh2->Deselect(); gClient->NeedRedraw(fTeh2); #ifdef CINT_FIXED break; case VSId2: #else } else if (id == VSId2) { #endif sprintf(buf, "%f", fVslider2->GetMinPosition()); fTbv2->Clear(); fTbv2->AddText(0, buf); fTev2->SetCursorPosition(fTev2->GetCursorPosition()); fTev2->Deselect(); gClient->NeedRedraw(fTev2); #ifdef CINT_FIXED break; default: break; #endif } } TestShutter::TestShutter(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h) { // Create transient frame containing a shutter widget. fMain = new TGTransientFrame(p, main, w, h); fMain->Connect("CloseWindow()", "TestShutter", this, "CloseWindow()"); fMain->DontCallClose(); // to avoid double deletions. // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); fDefaultPic = gClient->GetPicture("folder_s.xpm"); fShutter = new TGShutter(fMain, kSunkenFrame); AddShutterItem("Histograms", histo_data); AddShutterItem("Functions", function_data); AddShutterItem("Trees", tree_data); fLayout = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY); fMain->AddFrame(fShutter, fLayout); fMain->MapSubwindows(); fMain->Resize(80, 300); // position relative to the parent's window fMain->CenterOnParent(); fMain->SetWindowName("Shutter Test"); fMain->MapWindow(); //gClient->WaitFor(fMain); } void TestShutter::AddShutterItem(const char *name, shutterData_t *data) { TGShutterItem *item; TGCompositeFrame *container; TGButton *button; const TGPicture *buttonpic; static int id = 5001; TGLayoutHints *l = new TGLayoutHints(kLHintsTop | kLHintsCenterX, 5, 5, 5, 0); item = new TGShutterItem(fShutter, new TGHotString(name), id++); container = (TGCompositeFrame *) item->GetContainer(); for (int i=0; data[i].pixmap_name != 0; i++) { buttonpic = gClient->GetPicture(data[i].pixmap_name); if (!buttonpic) { printf("<TestShutter::AddShutterItem>: missing pixmap \"%s\", using default", data[i].pixmap_name); buttonpic = fDefaultPic; } button = new TGPictureButton(container, buttonpic, data[i].id); container->AddFrame(button, l); button->Connect("Clicked()", "TestShutter", this, "HandleButtons()"); button->SetToolTipText(data[i].tip_text); data[i].button = button; } fShutter->AddItem(item); } TestShutter::~TestShutter() { // dtor gClient->FreePicture(fDefaultPic); fMain->DeleteWindow(); // deletes fMain } void TestShutter::CloseWindow() { delete this; } void TestShutter::HandleButtons() { TGButton *btn = (TGButton *) gTQSender; printf("Shutter button %d\n", btn->WidgetId()); } TestDirList::TestDirList(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h) { // Create transient frame containing a dirlist widget. fMain = new TGTransientFrame(p, main, w, h); fMain->Connect("CloseWindow()", "TestDirList", this, "CloseWindow()"); fMain->DontCallClose(); // to avoid double deletions. fIcon = gClient->GetPicture("rootdb_t.xpm"); TGLayoutHints *lo; // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); TGCanvas* canvas = new TGCanvas(fMain, 500, 300); fContents = new TGListTree(canvas, kHorizontalFrame); lo = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY | kLHintsBottom); fMain->AddFrame(canvas,lo); fContents->Connect("DoubleClicked(TGListTreeItem*,Int_t)","TestDirList",this, "OnDoubleClick(TGListTreeItem*,Int_t)"); fContents->Connect("Clicked(TGListTreeItem*,Int_t)","TestDirList",this, "OnDoubleClick(TGListTreeItem*,Int_t)"); #ifdef G__WIN32 fContents->AddItem(0,"c:\\"); // browse the upper directory #else fContents->AddItem(0,"/"); // browse the upper directory #endif // position relative to the parent's window fMain->CenterOnParent(); fMain->SetWindowName("List Dir Test"); fMain->MapSubwindows(); fMain->Resize(); fMain->MapWindow(); } TestDirList::~TestDirList() { // Cleanup. gClient->FreePicture(fIcon); delete fContents; fMain->DeleteWindow(); // delete fMain } void TestDirList::CloseWindow() { delete this; } TString TestDirList::DirName(TGListTreeItem* item) { // Returns an absolute path. TGListTreeItem* parent; TString dirname = item->GetText(); while ((parent=item->GetParent())) { dirname = gSystem->ConcatFileName(parent->GetText(),dirname); item = parent; } return dirname; } void TestDirList::OnDoubleClick(TGListTreeItem* item, Int_t btn) { // Show contents of directory. if ((btn!=kButton1) || !item || (Bool_t)item->GetUserData()) return; // use UserData to indicate that item was already browsed item->SetUserData((void*)1); TSystemDirectory dir(item->GetText(),DirName(item)); TList *files = dir.GetListOfFiles(); if (files) { TIter next(files); TSystemFile *file; TString fname; while ((file=(TSystemFile*)next())) { fname = file->GetName(); if (file->IsDirectory()) { if ((fname!="..") && (fname!=".")) { // skip it fContents->AddItem(item,fname); } } else if (fname.EndsWith(".root")) { // add root files fContents->AddItem(item,fname,fIcon,fIcon); } } delete files; } } TestFileList::TestFileList(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h) { // Create transient frame containing a filelist widget. TGLayoutHints *lo; fMain = new TGTransientFrame(p, main, w, h); fMain->Connect("CloseWindow()", "TestDirList", this, "CloseWindow()"); fMain->DontCallClose(); // to avoid double deletions. // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); TGMenuBar* mb = new TGMenuBar(fMain); lo = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 1, 1); fMain->AddFrame(mb, lo); fMenu = mb->AddPopup("&View"); fMenu->AddEntry("Lar&ge Icons",kLVLargeIcons); fMenu->AddEntry("S&mall Icons",kLVSmallIcons); fMenu->AddEntry("&List", kLVList); fMenu->AddEntry("&Details", kLVDetails); fMenu->AddSeparator(); fMenu->AddEntry("&Close", 10); fMenu->Connect("Activated(Int_t)","TestFileList",this,"DoMenu(Int_t)"); TGListView* lv = new TGListView(fMain, w, h); lo = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY); fMain->AddFrame(lv,lo); Pixel_t white; gClient->GetColorByName("white", white); fContents = new TGFileContainer(lv, kSunkenFrame,white); fContents->Connect("DoubleClicked(TGFrame*,Int_t)", "TestFileList", this, "OnDoubleClick(TGLVEntry*,Int_t)"); // position relative to the parent's window fMain->CenterOnParent(); fMain->SetWindowName("File List Test"); fMain->MapSubwindows(); fMain->MapWindow(); fContents->SetDefaultHeaders(); fContents->DisplayDirectory(); fContents->AddFile(".."); // up level directory fContents->Resize(); fContents->StopRefreshTimer(); // stop refreshing fMain->Resize(); } TestFileList::~TestFileList() { // Cleanup. delete fContents; delete fMenu; fMain->DeleteWindow(); // deletes fMain } void TestFileList::DoMenu(Int_t mode) { // Switch view mode. if (mode<10) { fContents->SetViewMode((EListViewMode)mode); } else { delete this; } } void TestFileList::DisplayFile(const TString &fname) { // Display content of ROOT file. TFile file(fname); fContents->RemoveAll(); fContents->AddFile(gSystem->WorkingDirectory()); fContents->SetPagePosition(0,0); fContents->SetColHeaders("Name","Title"); TIter next(file.GetListOfKeys()); TKey *key; while ((key=(TKey*)next())) { TString cname = key->GetClassName(); TString name = key->GetName(); TGLVEntry *entry = new TGLVEntry(fContents,name,cname); entry->SetSubnames(key->GetTitle()); fContents->AddItem(entry); // user data is a filename entry->SetUserData((void*)StrDup(fname)); } fMain->Resize(); } void TestFileList::DisplayDirectory(const TString &fname) { // Display content of directory. fContents->SetDefaultHeaders(); gSystem->ChangeDirectory(fname); fContents->ChangeDirectory(fname); fContents->DisplayDirectory(); fContents->AddFile(".."); // up level directory fMain->Resize(); } void TestFileList::DisplayObject(const TString& fname,const TString& name) { // Browse object located in file. TDirectory *sav = gDirectory; static TFile *file = 0; if (file) delete file; // close file = new TFile(fname); // reopen TObject* obj = file->Get(name); if (obj) { if (!obj->IsFolder()) { obj->Browse(0); } else obj->Print(); } gDirectory = sav; } void TestFileList::OnDoubleClick(TGLVEntry *f, Int_t btn) { // Handle double click. if (btn != kButton1) return; // set kWatch cursor ULong_t cur = gVirtualX->CreateCursor(kWatch); gVirtualX->SetCursor(fContents->GetId(), cur); TString name(f->GetTitle()); const char* fname = (const char*)f->GetUserData(); if (fname) { DisplayObject(fname, name); } else if (name.EndsWith(".root")) { DisplayFile(name); } else { DisplayDirectory(name); } // set kPointer cursor cur = gVirtualX->CreateCursor(kPointer); gVirtualX->SetCursor(fContents->GetId(), cur); } void TestFileList::CloseWindow() { delete this; } TestProgress::TestProgress(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h) { // Dialog used to test the different supported progress bars. fClose = kTRUE; fMain = new TGTransientFrame(p, main, w, h); fMain->Connect("CloseWindow()", "TestProgress", this, "DoClose()"); fMain->DontCallClose(); // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); fMain->ChangeOptions((fMain->GetOptions() & ~kVerticalFrame) | kHorizontalFrame); fHframe1 = new TGHorizontalFrame(fMain, 0, 0, 0); fVProg1 = new TGVProgressBar(fHframe1, TGProgressBar::kFancy, 300); fVProg1->SetBarColor("purple"); fVProg2 = new TGVProgressBar(fHframe1, TGProgressBar::kFancy, 300); fVProg2->SetFillType(TGProgressBar::kBlockFill); fVProg2->SetBarColor("green"); fHframe1->Resize(300, 300); fVframe1 = new TGVerticalFrame(fMain, 0, 0, 0); fHProg1 = new TGHProgressBar(fVframe1, 300); fHProg1->ShowPosition(); fHProg2 = new TGHProgressBar(fVframe1, TGProgressBar::kFancy, 300); fHProg2->SetBarColor("lightblue"); fHProg2->ShowPosition(kTRUE, kFALSE, "%.0f events"); fHProg3 = new TGHProgressBar(fVframe1, TGProgressBar::kStandard, 300); fHProg3->SetFillType(TGProgressBar::kBlockFill); fGO = new TGTextButton(fVframe1, "Go", 10); fGO->Connect("Clicked()", "TestProgress", this, "DoGo()"); fVframe1->Resize(300, 300); fHint1 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 5, 10, 5, 5); fHint2 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 5, 5, 5, 10); fHint3 = new TGLayoutHints(kLHintsTop | kLHintsRight, 0, 50, 50, 0); fHint4 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0); fHint5 = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0); fHframe1->AddFrame(fVProg1, fHint1); fHframe1->AddFrame(fVProg2, fHint1); fVframe1->AddFrame(fHProg1, fHint2); fVframe1->AddFrame(fHProg2, fHint2); fVframe1->AddFrame(fHProg3, fHint2); fVframe1->AddFrame(fGO, fHint3); fMain->AddFrame(fHframe1, fHint4); fMain->AddFrame(fVframe1, fHint5); fMain->SetWindowName("Progress Test"); TGDimension size = fMain->GetDefaultSize(); fMain->Resize(size); // position relative to the parent's window fMain->CenterOnParent(); fMain->MapSubwindows(); fMain->MapWindow(); gClient->WaitFor(fMain); } TestProgress::~TestProgress() { // Delete dialog. fMain->DeleteWindow(); // deletes fMain } void TestProgress::CloseWindow() { // Called when window is closed via the window manager. delete this; } void TestProgress::DoClose() { // If fClose is false we are still in event processing loop in DoGo(). // In that case, set the close flag true and use a timer to call // CloseWindow(). This gives us change to get out of the DoGo() loop. // Note: calling SendCloseMessage() will not work since that will // bring us back here (CloseWindow() signal is connected to this method) // with the fClose flag true, which will cause window deletion while // still being in the event processing loop (since SendCloseMessage() // is directly processed in ProcessEvents() without exiting DoGo()). if (fClose) CloseWindow(); else { fClose = kTRUE; TTimer::SingleShot(150, "TestProgress", this, "CloseWindow()"); } } void TestProgress::DoGo() { // Handle Go button. fClose = kFALSE; fVProg1->Reset(); fVProg2->Reset(); fHProg1->Reset(); fHProg2->Reset(); fHProg3->Reset(); fVProg2->SetBarColor("green"); int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0; int inc1 = 4, inc2 = 3, inc3 = 2, inc4 = 1; while (cnt1 < 100 || cnt2 < 100 || cnt3 < 100 || cnt4 <100) { if (cnt1 < 100) { cnt1 += inc1; fVProg1->Increment(inc1); } if (cnt2 < 100) { cnt2 += inc2; fVProg2->Increment(inc2); if (cnt2 > 75) fVProg2->SetBarColor("red"); } if (cnt3 < 100) { cnt3 += inc3; fHProg1->Increment(inc3); } if (cnt4 < 100) { cnt4 += inc4; fHProg2->Increment(inc4); fHProg3->Increment(inc4); } gSystem->Sleep(100); gSystem->ProcessEvents(); // if user closed window return if (fClose) return; } fClose = kTRUE; } // TGNumberEntry widget test dialog //const char *const EntryTestDlg::numlabel[] = { const char *numlabel[] = { "Integer", "One digit real", "Two digit real", "Three digit real", "Four digit real", "Real", "Degree.min.sec", "Min:sec", "Hour:min", "Hour:min:sec", "Day/month/year", "Month/day/year", "Hex" }; //const Double_t EntryTestDlg::numinit[] = { const Double_t numinit[] = { 12345, 1.0, 1.00, 1.000, 1.0000, 1.2E-12, 90 * 3600, 120 * 60, 12 * 60, 12 * 3600 + 15 * 60, 19991121, 19991121, (Double_t) 0xDEADFACEU }; EntryTestDlg::EntryTestDlg(const TGWindow *p, const TGWindow *main) { // build widgets fMain = new TGTransientFrame(p, main, 10, 10, kHorizontalFrame); fMain->Connect("CloseWindow()", "EntryTestDlg", this, "CloseWindow()"); fMain->DontCallClose(); // to avoid double deletions. // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); TGGC myGC = *gClient->GetResourcePool()->GetFrameGC(); TGFont *myfont = gClient->GetFont("-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-iso8859-1"); if (myfont) myGC.SetFont(myfont->GetFontHandle()); fF1 = new TGVerticalFrame(fMain, 200, 300); fL1 = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 2, 2); fMain->AddFrame(fF1, fL1); fL2 = new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2); for (int i = 0; i < 13; i++) { fF[i] = new TGHorizontalFrame(fF1, 200, 30); fF1->AddFrame(fF[i], fL2); fNumericEntries[i] = new TGNumberEntry(fF[i], numinit[i], 12, i + 20, (TGNumberFormat::EStyle) i); fF[i]->AddFrame(fNumericEntries[i], fL2); fLabel[i] = new TGLabel(fF[i], numlabel[i], myGC(), myfont->GetFontStruct()); fF[i]->AddFrame(fLabel[i], fL2); } fF2 = new TGVerticalFrame(fMain, 200, 500); fL3 = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 2, 2); fMain->AddFrame(fF2, fL3); fLowerLimit = new TGCheckButton(fF2, "lower limit:", 4); fF2->AddFrame(fLowerLimit, fL3); fLimits[0] = new TGNumberEntry(fF2, 0, 12, 10); fLimits[0]->SetLogStep(kFALSE); fF2->AddFrame(fLimits[0], fL3); fUpperLimit = new TGCheckButton(fF2, "upper limit:", 5); fF2->AddFrame(fUpperLimit, fL3); fLimits[1] = new TGNumberEntry(fF2, 0, 12, 11); fLimits[1]->SetLogStep(kFALSE); fF2->AddFrame(fLimits[1], fL3); fPositive = new TGCheckButton(fF2, "Positive", 6); fF2->AddFrame(fPositive, fL3); fNonNegative = new TGCheckButton(fF2, "Non negative", 7); fF2->AddFrame(fNonNegative, fL3); fSetButton = new TGTextButton(fF2, " Set ", 2); fSetButton->Connect("Clicked()", "EntryTestDlg", this, "SetLimits()"); fF2->AddFrame(fSetButton, fL3); fExitButton = new TGTextButton(fF2, " Close ", 1); fExitButton->Connect("Clicked()", "EntryTestDlg", this, "DoOK()"); fF2->AddFrame(fExitButton, fL3); // set dialog box title fMain->SetWindowName("Number Entry Test"); fMain->SetIconName("Number Entry Test"); fMain->SetClassHints("NumberEntryDlg", "NumberEntryDlg"); // resize & move to center fMain->MapSubwindows(); UInt_t width = fMain->GetDefaultWidth(); UInt_t height = fMain->GetDefaultHeight(); fMain->Resize(width, height); fMain->CenterOnParent(); // make the message box non-resizable fMain->SetWMSize(width, height); fMain->SetWMSizeHints(width, height, width, height, 0, 0); fMain->SetMWMHints(kMWMDecorAll | kMWMDecorResizeH | kMWMDecorMaximize | kMWMDecorMinimize | kMWMDecorMenu, kMWMFuncAll | kMWMFuncResize | kMWMFuncMaximize | kMWMFuncMinimize, kMWMInputModeless); fMain->MapWindow(); gClient->WaitFor(fMain); } EntryTestDlg::~EntryTestDlg() { // dtor fMain->DeleteWindow(); } void EntryTestDlg::CloseWindow() { delete this; } void EntryTestDlg::DoOK() { // Handle ok button. fMain->SendCloseMessage(); } void EntryTestDlg::SetLimits() { Double_t min = fLimits[0]->GetNumber(); Bool_t low = (fLowerLimit->GetState() == kButtonDown); Double_t max = fLimits[1]->GetNumber(); Bool_t high = (fUpperLimit->GetState() == kButtonDown); TGNumberFormat::ELimit lim; if (low && high) { lim = TGNumberFormat::kNELLimitMinMax; } else if (low) { lim = TGNumberFormat::kNELLimitMin; } else if (high) { lim = TGNumberFormat::kNELLimitMax; } else { lim = TGNumberFormat::kNELNoLimits; } Bool_t pos = (fPositive->GetState() == kButtonDown); Bool_t nneg = (fNonNegative->GetState() == kButtonDown); TGNumberFormat::EAttribute attr; if (pos) { attr = TGNumberFormat::kNEAPositive; } else if (nneg) { attr = TGNumberFormat::kNEANonNegative; } else { attr = TGNumberFormat::kNEAAnyNumber; } for (int i = 0; i < 13; i++) { fNumericEntries[i]->SetFormat(fNumericEntries[i]->GetNumStyle(), attr); fNumericEntries[i]->SetLimits(lim, min, max); } } Editor::Editor(const TGWindow *main, UInt_t w, UInt_t h) { // Create an editor in a dialog. fMain = new TGTransientFrame(gClient->GetRoot(), main, w, h); fMain->Connect("CloseWindow()", "Editor", this, "CloseWindow()"); fMain->DontCallClose(); // to avoid double deletions. // use hierarchical cleaning fMain->SetCleanup(kDeepCleanup); fEdit = new TGTextEdit(fMain, w, h, kSunkenFrame | kDoubleBorder); fL1 = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 3, 3, 3, 3); fMain->AddFrame(fEdit, fL1); fEdit->Connect("Opened()", "Editor", this, "DoOpen()"); fEdit->Connect("Saved()", "Editor", this, "DoSave()"); fEdit->Connect("Closed()", "Editor", this, "DoClose()"); // set selected text colors Pixel_t pxl; gClient->GetColorByName("#ccccff", pxl); fEdit->SetSelectBack(pxl); fEdit->SetSelectFore(TGFrame::GetBlackPixel()); fOK = new TGTextButton(fMain, " &OK "); fOK->Connect("Clicked()", "Editor", this, "DoOK()"); fL2 = new TGLayoutHints(kLHintsBottom | kLHintsCenterX, 0, 0, 5, 5); fMain->AddFrame(fOK, fL2); SetTitle(); fMain->MapSubwindows(); fMain->Resize(); // editor covers right half of parent window fMain->CenterOnParent(kTRUE, TGTransientFrame::kRight); } Editor::~Editor() { // Delete editor dialog. fMain->DeleteWindow(); // deletes fMain } void Editor::SetTitle() { // Set title in editor window. TGText *txt = GetEditor()->GetText(); Bool_t untitled = !strlen(txt->GetFileName()) ? kTRUE : kFALSE; char title[256]; if (untitled) sprintf(title, "ROOT Editor - Untitled"); else sprintf(title, "ROOT Editor - %s", txt->GetFileName()); fMain->SetWindowName(title); fMain->SetIconName(title); } void Editor::Popup() { // Show editor. fMain->MapWindow(); } void Editor::LoadBuffer(const char *buffer) { // Load a text buffer in the editor. fEdit->LoadBuffer(buffer); } void Editor::LoadFile(const char *file) { // Load a file in the editor. fEdit->LoadFile(file); } void Editor::AddBuffer(const char *buffer) { // Add text to the editor. TGText txt; txt.LoadBuffer(buffer); fEdit->AddText(&txt); } void Editor::CloseWindow() { // Called when closed via window manager action. delete this; } void Editor::DoOK() { // Handle ok button. CloseWindow(); } void Editor::DoOpen() { SetTitle(); } void Editor::DoSave() { SetTitle(); } void Editor::DoClose() { // Handle close button. CloseWindow(); } void guitest() { new TestMainFrame(gClient->GetRoot(), 400, 220); } //---- Main program ------------------------------------------------------------ #ifdef STANDALONE int main(int argc, char **argv) { TApplication theApp("App", &argc, argv); if (gROOT->IsBatch()) { fprintf(stderr, "%s: cannot run in batch mode\n", argv[0]); return 1; } guitest(); theApp.Run(); return 0; } #endif guitest.C:1 guitest.C:2 guitest.C:3 guitest.C:4 guitest.C:5 guitest.C:6 guitest.C:7 guitest.C:8 guitest.C:9 guitest.C:10 guitest.C:11 guitest.C:12 guitest.C:13 guitest.C:14 guitest.C:15 guitest.C:16 guitest.C:17 guitest.C:18 guitest.C:19 guitest.C:20 guitest.C:21 guitest.C:22 guitest.C:23 guitest.C:24 guitest.C:25 guitest.C:26 guitest.C:27 guitest.C:28 guitest.C:29 guitest.C:30 guitest.C:31 guitest.C:32 guitest.C:33 guitest.C:34 guitest.C:35 guitest.C:36 guitest.C:37 guitest.C:38 guitest.C:39 guitest.C:40 guitest.C:41 guitest.C:42 guitest.C:43 guitest.C:44 guitest.C:45 guitest.C:46 guitest.C:47 guitest.C:48 guitest.C:49 guitest.C:50 guitest.C:51 guitest.C:52 guitest.C:53 guitest.C:54 guitest.C:55 guitest.C:56 guitest.C:57 guitest.C:58 guitest.C:59 guitest.C:60 guitest.C:61 guitest.C:62 guitest.C:63 guitest.C:64 guitest.C:65 guitest.C:66 guitest.C:67 guitest.C:68 guitest.C:69 guitest.C:70 guitest.C:71 guitest.C:72 guitest.C:73 guitest.C:74 guitest.C:75 guitest.C:76 guitest.C:77 guitest.C:78 guitest.C:79 guitest.C:80 guitest.C:81 guitest.C:82 guitest.C:83 guitest.C:84 guitest.C:85 guitest.C:86 guitest.C:87 guitest.C:88 guitest.C:89 guitest.C:90 guitest.C:91 guitest.C:92 guitest.C:93 guitest.C:94 guitest.C:95 guitest.C:96 guitest.C:97 guitest.C:98 guitest.C:99 guitest.C:100 guitest.C:101 guitest.C:102 guitest.C:103 guitest.C:104 guitest.C:105 guitest.C:106 guitest.C:107 guitest.C:108 guitest.C:109 guitest.C:110 guitest.C:111 guitest.C:112 guitest.C:113 guitest.C:114 guitest.C:115 guitest.C:116 guitest.C:117 guitest.C:118 guitest.C:119 guitest.C:120 guitest.C:121 guitest.C:122 guitest.C:123 guitest.C:124 guitest.C:125 guitest.C:126 guitest.C:127 guitest.C:128 guitest.C:129 guitest.C:130 guitest.C:131 guitest.C:132 guitest.C:133 guitest.C:134 guitest.C:135 guitest.C:136 guitest.C:137 guitest.C:138 guitest.C:139 guitest.C:140 guitest.C:141 guitest.C:142 guitest.C:143 guitest.C:144 guitest.C:145 guitest.C:146 guitest.C:147 guitest.C:148 guitest.C:149 guitest.C:150 guitest.C:151 guitest.C:152 guitest.C:153 guitest.C:154 guitest.C:155 guitest.C:156 guitest.C:157 guitest.C:158 guitest.C:159 guitest.C:160 guitest.C:161 guitest.C:162 guitest.C:163 guitest.C:164 guitest.C:165 guitest.C:166 guitest.C:167 guitest.C:168 guitest.C:169 guitest.C:170 guitest.C:171 guitest.C:172 guitest.C:173 guitest.C:174 guitest.C:175 guitest.C:176 guitest.C:177 guitest.C:178 guitest.C:179 guitest.C:180 guitest.C:181 guitest.C:182 guitest.C:183 guitest.C:184 guitest.C:185 guitest.C:186 guitest.C:187 guitest.C:188 guitest.C:189 guitest.C:190 guitest.C:191 guitest.C:192 guitest.C:193 guitest.C:194 guitest.C:195 guitest.C:196 guitest.C:197 guitest.C:198 guitest.C:199 guitest.C:200 guitest.C:201 guitest.C:202 guitest.C:203 guitest.C:204 guitest.C:205 guitest.C:206 guitest.C:207 guitest.C:208 guitest.C:209 guitest.C:210 guitest.C:211 guitest.C:212 guitest.C:213 guitest.C:214 guitest.C:215 guitest.C:216 guitest.C:217 guitest.C:218 guitest.C:219 guitest.C:220 guitest.C:221 guitest.C:222 guitest.C:223 guitest.C:224 guitest.C:225 guitest.C:226 guitest.C:227 guitest.C:228 guitest.C:229 guitest.C:230 guitest.C:231 guitest.C:232 guitest.C:233 guitest.C:234 guitest.C:235 guitest.C:236 guitest.C:237 guitest.C:238 guitest.C:239 guitest.C:240 guitest.C:241 guitest.C:242 guitest.C:243 guitest.C:244 guitest.C:245 guitest.C:246 guitest.C:247 guitest.C:248 guitest.C:249 guitest.C:250 guitest.C:251 guitest.C:252 guitest.C:253 guitest.C:254 guitest.C:255 guitest.C:256 guitest.C:257 guitest.C:258 guitest.C:259 guitest.C:260 guitest.C:261 guitest.C:262 guitest.C:263 guitest.C:264 guitest.C:265 guitest.C:266 guitest.C:267 guitest.C:268 guitest.C:269 guitest.C:270 guitest.C:271 guitest.C:272 guitest.C:273 guitest.C:274 guitest.C:275 guitest.C:276 guitest.C:277 guitest.C:278 guitest.C:279 guitest.C:280 guitest.C:281 guitest.C:282 guitest.C:283 guitest.C:284 guitest.C:285 guitest.C:286 guitest.C:287 guitest.C:288 guitest.C:289 guitest.C:290 guitest.C:291 guitest.C:292 guitest.C:293 guitest.C:294 guitest.C:295 guitest.C:296 guitest.C:297 guitest.C:298 guitest.C:299 guitest.C:300 guitest.C:301 guitest.C:302 guitest.C:303 guitest.C:304 guitest.C:305 guitest.C:306 guitest.C:307 guitest.C:308 guitest.C:309 guitest.C:310 guitest.C:311 guitest.C:312 guitest.C:313 guitest.C:314 guitest.C:315 guitest.C:316 guitest.C:317 guitest.C:318 guitest.C:319 guitest.C:320 guitest.C:321 guitest.C:322 guitest.C:323 guitest.C:324 guitest.C:325 guitest.C:326 guitest.C:327 guitest.C:328 guitest.C:329 guitest.C:330 guitest.C:331 guitest.C:332 guitest.C:333 guitest.C:334 guitest.C:335 guitest.C:336 guitest.C:337 guitest.C:338 guitest.C:339 guitest.C:340 guitest.C:341 guitest.C:342 guitest.C:343 guitest.C:344 guitest.C:345 guitest.C:346 guitest.C:347 guitest.C:348 guitest.C:349 guitest.C:350 guitest.C:351 guitest.C:352 guitest.C:353 guitest.C:354 guitest.C:355 guitest.C:356 guitest.C:357 guitest.C:358 guitest.C:359 guitest.C:360 guitest.C:361 guitest.C:362 guitest.C:363 guitest.C:364 guitest.C:365 guitest.C:366 guitest.C:367 guitest.C:368 guitest.C:369 guitest.C:370 guitest.C:371 guitest.C:372 guitest.C:373 guitest.C:374 guitest.C:375 guitest.C:376 guitest.C:377 guitest.C:378 guitest.C:379 guitest.C:380 guitest.C:381 guitest.C:382 guitest.C:383 guitest.C:384 guitest.C:385 guitest.C:386 guitest.C:387 guitest.C:388 guitest.C:389 guitest.C:390 guitest.C:391 guitest.C:392 guitest.C:393 guitest.C:394 guitest.C:395 guitest.C:396 guitest.C:397 guitest.C:398 guitest.C:399 guitest.C:400 guitest.C:401 guitest.C:402 guitest.C:403 guitest.C:404 guitest.C:405 guitest.C:406 guitest.C:407 guitest.C:408 guitest.C:409 guitest.C:410 guitest.C:411 guitest.C:412 guitest.C:413 guitest.C:414 guitest.C:415 guitest.C:416 guitest.C:417 guitest.C:418 guitest.C:419 guitest.C:420 guitest.C:421 guitest.C:422 guitest.C:423 guitest.C:424 guitest.C:425 guitest.C:426 guitest.C:427 guitest.C:428 guitest.C:429 guitest.C:430 guitest.C:431 guitest.C:432 guitest.C:433 guitest.C:434 guitest.C:435 guitest.C:436 guitest.C:437 guitest.C:438 guitest.C:439 guitest.C:440 guitest.C:441 guitest.C:442 guitest.C:443 guitest.C:444 guitest.C:445 guitest.C:446 guitest.C:447 guitest.C:448 guitest.C:449 guitest.C:450 guitest.C:451 guitest.C:452 guitest.C:453 guitest.C:454 guitest.C:455 guitest.C:456 guitest.C:457 guitest.C:458 guitest.C:459 guitest.C:460 guitest.C:461 guitest.C:462 guitest.C:463 guitest.C:464 guitest.C:465 guitest.C:466 guitest.C:467 guitest.C:468 guitest.C:469 guitest.C:470 guitest.C:471 guitest.C:472 guitest.C:473 guitest.C:474 guitest.C:475 guitest.C:476 guitest.C:477 guitest.C:478 guitest.C:479 guitest.C:480 guitest.C:481 guitest.C:482 guitest.C:483 guitest.C:484 guitest.C:485 guitest.C:486 guitest.C:487 guitest.C:488 guitest.C:489 guitest.C:490 guitest.C:491 guitest.C:492 guitest.C:493 guitest.C:494 guitest.C:495 guitest.C:496 guitest.C:497 guitest.C:498 guitest.C:499 guitest.C:500 guitest.C:501 guitest.C:502 guitest.C:503 guitest.C:504 guitest.C:505 guitest.C:506 guitest.C:507 guitest.C:508 guitest.C:509 guitest.C:510 guitest.C:511 guitest.C:512 guitest.C:513 guitest.C:514 guitest.C:515 guitest.C:516 guitest.C:517 guitest.C:518 guitest.C:519 guitest.C:520 guitest.C:521 guitest.C:522 guitest.C:523 guitest.C:524 guitest.C:525 guitest.C:526 guitest.C:527 guitest.C:528 guitest.C:529 guitest.C:530 guitest.C:531 guitest.C:532 guitest.C:533 guitest.C:534 guitest.C:535 guitest.C:536 guitest.C:537 guitest.C:538 guitest.C:539 guitest.C:540 guitest.C:541 guitest.C:542 guitest.C:543 guitest.C:544 guitest.C:545 guitest.C:546 guitest.C:547 guitest.C:548 guitest.C:549 guitest.C:550 guitest.C:551 guitest.C:552 guitest.C:553 guitest.C:554 guitest.C:555 guitest.C:556 guitest.C:557 guitest.C:558 guitest.C:559 guitest.C:560 guitest.C:561 guitest.C:562 guitest.C:563 guitest.C:564 guitest.C:565 guitest.C:566 guitest.C:567 guitest.C:568 guitest.C:569 guitest.C:570 guitest.C:571 guitest.C:572 guitest.C:573 guitest.C:574 guitest.C:575 guitest.C:576 guitest.C:577 guitest.C:578 guitest.C:579 guitest.C:580 guitest.C:581 guitest.C:582 guitest.C:583 guitest.C:584 guitest.C:585 guitest.C:586 guitest.C:587 guitest.C:588 guitest.C:589 guitest.C:590 guitest.C:591 guitest.C:592 guitest.C:593 guitest.C:594 guitest.C:595 guitest.C:596 guitest.C:597 guitest.C:598 guitest.C:599 guitest.C:600 guitest.C:601 guitest.C:602 guitest.C:603 guitest.C:604 guitest.C:605 guitest.C:606 guitest.C:607 guitest.C:608 guitest.C:609 guitest.C:610 guitest.C:611 guitest.C:612 guitest.C:613 guitest.C:614 guitest.C:615 guitest.C:616 guitest.C:617 guitest.C:618 guitest.C:619 guitest.C:620 guitest.C:621 guitest.C:622 guitest.C:623 guitest.C:624 guitest.C:625 guitest.C:626 guitest.C:627 guitest.C:628 guitest.C:629 guitest.C:630 guitest.C:631 guitest.C:632 guitest.C:633 guitest.C:634 guitest.C:635 guitest.C:636 guitest.C:637 guitest.C:638 guitest.C:639 guitest.C:640 guitest.C:641 guitest.C:642 guitest.C:643 guitest.C:644 guitest.C:645 guitest.C:646 guitest.C:647 guitest.C:648 guitest.C:649 guitest.C:650 guitest.C:651 guitest.C:652 guitest.C:653 guitest.C:654 guitest.C:655 guitest.C:656 guitest.C:657 guitest.C:658 guitest.C:659 guitest.C:660 guitest.C:661 guitest.C:662 guitest.C:663 guitest.C:664 guitest.C:665 guitest.C:666 guitest.C:667 guitest.C:668 guitest.C:669 guitest.C:670 guitest.C:671 guitest.C:672 guitest.C:673 guitest.C:674 guitest.C:675 guitest.C:676 guitest.C:677 guitest.C:678 guitest.C:679 guitest.C:680 guitest.C:681 guitest.C:682 guitest.C:683 guitest.C:684 guitest.C:685 guitest.C:686 guitest.C:687 guitest.C:688 guitest.C:689 guitest.C:690 guitest.C:691 guitest.C:692 guitest.C:693 guitest.C:694 guitest.C:695 guitest.C:696 guitest.C:697 guitest.C:698 guitest.C:699 guitest.C:700 guitest.C:701 guitest.C:702 guitest.C:703 guitest.C:704 guitest.C:705 guitest.C:706 guitest.C:707 guitest.C:708 guitest.C:709 guitest.C:710 guitest.C:711 guitest.C:712 guitest.C:713 guitest.C:714 guitest.C:715 guitest.C:716 guitest.C:717 guitest.C:718 guitest.C:719 guitest.C:720 guitest.C:721 guitest.C:722 guitest.C:723 guitest.C:724 guitest.C:725 guitest.C:726 guitest.C:727 guitest.C:728 guitest.C:729 guitest.C:730 guitest.C:731 guitest.C:732 guitest.C:733 guitest.C:734 guitest.C:735 guitest.C:736 guitest.C:737 guitest.C:738 guitest.C:739 guitest.C:740 guitest.C:741 guitest.C:742 guitest.C:743 guitest.C:744 guitest.C:745 guitest.C:746 guitest.C:747 guitest.C:748 guitest.C:749 guitest.C:750 guitest.C:751 guitest.C:752 guitest.C:753 guitest.C:754 guitest.C:755 guitest.C:756 guitest.C:757 guitest.C:758 guitest.C:759 guitest.C:760 guitest.C:761 guitest.C:762 guitest.C:763 guitest.C:764 guitest.C:765 guitest.C:766 guitest.C:767 guitest.C:768 guitest.C:769 guitest.C:770 guitest.C:771 guitest.C:772 guitest.C:773 guitest.C:774 guitest.C:775 guitest.C:776 guitest.C:777 guitest.C:778 guitest.C:779 guitest.C:780 guitest.C:781 guitest.C:782 guitest.C:783 guitest.C:784 guitest.C:785 guitest.C:786 guitest.C:787 guitest.C:788 guitest.C:789 guitest.C:790 guitest.C:791 guitest.C:792 guitest.C:793 guitest.C:794 guitest.C:795 guitest.C:796 guitest.C:797 guitest.C:798 guitest.C:799 guitest.C:800 guitest.C:801 guitest.C:802 guitest.C:803 guitest.C:804 guitest.C:805 guitest.C:806 guitest.C:807 guitest.C:808 guitest.C:809 guitest.C:810 guitest.C:811 guitest.C:812 guitest.C:813 guitest.C:814 guitest.C:815 guitest.C:816 guitest.C:817 guitest.C:818 guitest.C:819 guitest.C:820 guitest.C:821 guitest.C:822 guitest.C:823 guitest.C:824 guitest.C:825 guitest.C:826 guitest.C:827 guitest.C:828 guitest.C:829 guitest.C:830 guitest.C:831 guitest.C:832 guitest.C:833 guitest.C:834 guitest.C:835 guitest.C:836 guitest.C:837 guitest.C:838 guitest.C:839 guitest.C:840 guitest.C:841 guitest.C:842 guitest.C:843 guitest.C:844 guitest.C:845 guitest.C:846 guitest.C:847 guitest.C:848 guitest.C:849 guitest.C:850 guitest.C:851 guitest.C:852 guitest.C:853 guitest.C:854 guitest.C:855 guitest.C:856 guitest.C:857 guitest.C:858 guitest.C:859 guitest.C:860 guitest.C:861 guitest.C:862 guitest.C:863 guitest.C:864 guitest.C:865 guitest.C:866 guitest.C:867 guitest.C:868 guitest.C:869 guitest.C:870 guitest.C:871 guitest.C:872 guitest.C:873 guitest.C:874 guitest.C:875 guitest.C:876 guitest.C:877 guitest.C:878 guitest.C:879 guitest.C:880 guitest.C:881 guitest.C:882 guitest.C:883 guitest.C:884 guitest.C:885 guitest.C:886 guitest.C:887 guitest.C:888 guitest.C:889 guitest.C:890 guitest.C:891 guitest.C:892 guitest.C:893 guitest.C:894 guitest.C:895 guitest.C:896 guitest.C:897 guitest.C:898 guitest.C:899 guitest.C:900 guitest.C:901 guitest.C:902 guitest.C:903 guitest.C:904 guitest.C:905 guitest.C:906 guitest.C:907 guitest.C:908 guitest.C:909 guitest.C:910 guitest.C:911 guitest.C:912 guitest.C:913 guitest.C:914 guitest.C:915 guitest.C:916 guitest.C:917 guitest.C:918 guitest.C:919 guitest.C:920 guitest.C:921 guitest.C:922 guitest.C:923 guitest.C:924 guitest.C:925 guitest.C:926 guitest.C:927 guitest.C:928 guitest.C:929 guitest.C:930 guitest.C:931 guitest.C:932 guitest.C:933 guitest.C:934 guitest.C:935 guitest.C:936 guitest.C:937 guitest.C:938 guitest.C:939 guitest.C:940 guitest.C:941 guitest.C:942 guitest.C:943 guitest.C:944 guitest.C:945 guitest.C:946 guitest.C:947 guitest.C:948 guitest.C:949 guitest.C:950 guitest.C:951 guitest.C:952 guitest.C:953 guitest.C:954 guitest.C:955 guitest.C:956 guitest.C:957 guitest.C:958 guitest.C:959 guitest.C:960 guitest.C:961 guitest.C:962 guitest.C:963 guitest.C:964 guitest.C:965 guitest.C:966 guitest.C:967 guitest.C:968 guitest.C:969 guitest.C:970 guitest.C:971 guitest.C:972 guitest.C:973 guitest.C:974 guitest.C:975 guitest.C:976 guitest.C:977 guitest.C:978 guitest.C:979 guitest.C:980 guitest.C:981 guitest.C:982 guitest.C:983 guitest.C:984 guitest.C:985 guitest.C:986 guitest.C:987 guitest.C:988 guitest.C:989 guitest.C:990 guitest.C:991 guitest.C:992 guitest.C:993 guitest.C:994 guitest.C:995 guitest.C:996 guitest.C:997 guitest.C:998 guitest.C:999 guitest.C:1000 guitest.C:1001 guitest.C:1002 guitest.C:1003 guitest.C:1004 guitest.C:1005 guitest.C:1006 guitest.C:1007 guitest.C:1008 guitest.C:1009 guitest.C:1010 guitest.C:1011 guitest.C:1012 guitest.C:1013 guitest.C:1014 guitest.C:1015 guitest.C:1016 guitest.C:1017 guitest.C:1018 guitest.C:1019 guitest.C:1020 guitest.C:1021 guitest.C:1022 guitest.C:1023 guitest.C:1024 guitest.C:1025 guitest.C:1026 guitest.C:1027 guitest.C:1028 guitest.C:1029 guitest.C:1030 guitest.C:1031 guitest.C:1032 guitest.C:1033 guitest.C:1034 guitest.C:1035 guitest.C:1036 guitest.C:1037 guitest.C:1038 guitest.C:1039 guitest.C:1040 guitest.C:1041 guitest.C:1042 guitest.C:1043 guitest.C:1044 guitest.C:1045 guitest.C:1046 guitest.C:1047 guitest.C:1048 guitest.C:1049 guitest.C:1050 guitest.C:1051 guitest.C:1052 guitest.C:1053 guitest.C:1054 guitest.C:1055 guitest.C:1056 guitest.C:1057 guitest.C:1058 guitest.C:1059 guitest.C:1060 guitest.C:1061 guitest.C:1062 guitest.C:1063 guitest.C:1064 guitest.C:1065 guitest.C:1066 guitest.C:1067 guitest.C:1068 guitest.C:1069 guitest.C:1070 guitest.C:1071 guitest.C:1072 guitest.C:1073 guitest.C:1074 guitest.C:1075 guitest.C:1076 guitest.C:1077 guitest.C:1078 guitest.C:1079 guitest.C:1080 guitest.C:1081 guitest.C:1082 guitest.C:1083 guitest.C:1084 guitest.C:1085 guitest.C:1086 guitest.C:1087 guitest.C:1088 guitest.C:1089 guitest.C:1090 guitest.C:1091 guitest.C:1092 guitest.C:1093 guitest.C:1094 guitest.C:1095 guitest.C:1096 guitest.C:1097 guitest.C:1098 guitest.C:1099 guitest.C:1100 guitest.C:1101 guitest.C:1102 guitest.C:1103 guitest.C:1104 guitest.C:1105 guitest.C:1106 guitest.C:1107 guitest.C:1108 guitest.C:1109 guitest.C:1110 guitest.C:1111 guitest.C:1112 guitest.C:1113 guitest.C:1114 guitest.C:1115 guitest.C:1116 guitest.C:1117 guitest.C:1118 guitest.C:1119 guitest.C:1120 guitest.C:1121 guitest.C:1122 guitest.C:1123 guitest.C:1124 guitest.C:1125 guitest.C:1126 guitest.C:1127 guitest.C:1128 guitest.C:1129 guitest.C:1130 guitest.C:1131 guitest.C:1132 guitest.C:1133 guitest.C:1134 guitest.C:1135 guitest.C:1136 guitest.C:1137 guitest.C:1138 guitest.C:1139 guitest.C:1140 guitest.C:1141 guitest.C:1142 guitest.C:1143 guitest.C:1144 guitest.C:1145 guitest.C:1146 guitest.C:1147 guitest.C:1148 guitest.C:1149 guitest.C:1150 guitest.C:1151 guitest.C:1152 guitest.C:1153 guitest.C:1154 guitest.C:1155 guitest.C:1156 guitest.C:1157 guitest.C:1158 guitest.C:1159 guitest.C:1160 guitest.C:1161 guitest.C:1162 guitest.C:1163 guitest.C:1164 guitest.C:1165 guitest.C:1166 guitest.C:1167 guitest.C:1168 guitest.C:1169 guitest.C:1170 guitest.C:1171 guitest.C:1172 guitest.C:1173 guitest.C:1174 guitest.C:1175 guitest.C:1176 guitest.C:1177 guitest.C:1178 guitest.C:1179 guitest.C:1180 guitest.C:1181 guitest.C:1182 guitest.C:1183 guitest.C:1184 guitest.C:1185 guitest.C:1186 guitest.C:1187 guitest.C:1188 guitest.C:1189 guitest.C:1190 guitest.C:1191 guitest.C:1192 guitest.C:1193 guitest.C:1194 guitest.C:1195 guitest.C:1196 guitest.C:1197 guitest.C:1198 guitest.C:1199 guitest.C:1200 guitest.C:1201 guitest.C:1202 guitest.C:1203 guitest.C:1204 guitest.C:1205 guitest.C:1206 guitest.C:1207 guitest.C:1208 guitest.C:1209 guitest.C:1210 guitest.C:1211 guitest.C:1212 guitest.C:1213 guitest.C:1214 guitest.C:1215 guitest.C:1216 guitest.C:1217 guitest.C:1218 guitest.C:1219 guitest.C:1220 guitest.C:1221 guitest.C:1222 guitest.C:1223 guitest.C:1224 guitest.C:1225 guitest.C:1226 guitest.C:1227 guitest.C:1228 guitest.C:1229 guitest.C:1230 guitest.C:1231 guitest.C:1232 guitest.C:1233 guitest.C:1234 guitest.C:1235 guitest.C:1236 guitest.C:1237 guitest.C:1238 guitest.C:1239 guitest.C:1240 guitest.C:1241 guitest.C:1242 guitest.C:1243 guitest.C:1244 guitest.C:1245 guitest.C:1246 guitest.C:1247 guitest.C:1248 guitest.C:1249 guitest.C:1250 guitest.C:1251 guitest.C:1252 guitest.C:1253 guitest.C:1254 guitest.C:1255 guitest.C:1256 guitest.C:1257 guitest.C:1258 guitest.C:1259 guitest.C:1260 guitest.C:1261 guitest.C:1262 guitest.C:1263 guitest.C:1264 guitest.C:1265 guitest.C:1266 guitest.C:1267 guitest.C:1268 guitest.C:1269 guitest.C:1270 guitest.C:1271 guitest.C:1272 guitest.C:1273 guitest.C:1274 guitest.C:1275 guitest.C:1276 guitest.C:1277 guitest.C:1278 guitest.C:1279 guitest.C:1280 guitest.C:1281 guitest.C:1282 guitest.C:1283 guitest.C:1284 guitest.C:1285 guitest.C:1286 guitest.C:1287 guitest.C:1288 guitest.C:1289 guitest.C:1290 guitest.C:1291 guitest.C:1292 guitest.C:1293 guitest.C:1294 guitest.C:1295 guitest.C:1296 guitest.C:1297 guitest.C:1298 guitest.C:1299 guitest.C:1300 guitest.C:1301 guitest.C:1302 guitest.C:1303 guitest.C:1304 guitest.C:1305 guitest.C:1306 guitest.C:1307 guitest.C:1308 guitest.C:1309 guitest.C:1310 guitest.C:1311 guitest.C:1312 guitest.C:1313 guitest.C:1314 guitest.C:1315 guitest.C:1316 guitest.C:1317 guitest.C:1318 guitest.C:1319 guitest.C:1320 guitest.C:1321 guitest.C:1322 guitest.C:1323 guitest.C:1324 guitest.C:1325 guitest.C:1326 guitest.C:1327 guitest.C:1328 guitest.C:1329 guitest.C:1330 guitest.C:1331 guitest.C:1332 guitest.C:1333 guitest.C:1334 guitest.C:1335 guitest.C:1336 guitest.C:1337 guitest.C:1338 guitest.C:1339 guitest.C:1340 guitest.C:1341 guitest.C:1342 guitest.C:1343 guitest.C:1344 guitest.C:1345 guitest.C:1346 guitest.C:1347 guitest.C:1348 guitest.C:1349 guitest.C:1350 guitest.C:1351 guitest.C:1352 guitest.C:1353 guitest.C:1354 guitest.C:1355 guitest.C:1356 guitest.C:1357 guitest.C:1358 guitest.C:1359 guitest.C:1360 guitest.C:1361 guitest.C:1362 guitest.C:1363 guitest.C:1364 guitest.C:1365 guitest.C:1366 guitest.C:1367 guitest.C:1368 guitest.C:1369 guitest.C:1370 guitest.C:1371 guitest.C:1372 guitest.C:1373 guitest.C:1374 guitest.C:1375 guitest.C:1376 guitest.C:1377 guitest.C:1378 guitest.C:1379 guitest.C:1380 guitest.C:1381 guitest.C:1382 guitest.C:1383 guitest.C:1384 guitest.C:1385 guitest.C:1386 guitest.C:1387 guitest.C:1388 guitest.C:1389 guitest.C:1390 guitest.C:1391 guitest.C:1392 guitest.C:1393 guitest.C:1394 guitest.C:1395 guitest.C:1396 guitest.C:1397 guitest.C:1398 guitest.C:1399 guitest.C:1400 guitest.C:1401 guitest.C:1402 guitest.C:1403 guitest.C:1404 guitest.C:1405 guitest.C:1406 guitest.C:1407 guitest.C:1408 guitest.C:1409 guitest.C:1410 guitest.C:1411 guitest.C:1412 guitest.C:1413 guitest.C:1414 guitest.C:1415 guitest.C:1416 guitest.C:1417 guitest.C:1418 guitest.C:1419 guitest.C:1420 guitest.C:1421 guitest.C:1422 guitest.C:1423 guitest.C:1424 guitest.C:1425 guitest.C:1426 guitest.C:1427 guitest.C:1428 guitest.C:1429 guitest.C:1430 guitest.C:1431 guitest.C:1432 guitest.C:1433 guitest.C:1434 guitest.C:1435 guitest.C:1436 guitest.C:1437 guitest.C:1438 guitest.C:1439 guitest.C:1440 guitest.C:1441 guitest.C:1442 guitest.C:1443 guitest.C:1444 guitest.C:1445 guitest.C:1446 guitest.C:1447 guitest.C:1448 guitest.C:1449 guitest.C:1450 guitest.C:1451 guitest.C:1452 guitest.C:1453 guitest.C:1454 guitest.C:1455 guitest.C:1456 guitest.C:1457 guitest.C:1458 guitest.C:1459 guitest.C:1460 guitest.C:1461 guitest.C:1462 guitest.C:1463 guitest.C:1464 guitest.C:1465 guitest.C:1466 guitest.C:1467 guitest.C:1468 guitest.C:1469 guitest.C:1470 guitest.C:1471 guitest.C:1472 guitest.C:1473 guitest.C:1474 guitest.C:1475 guitest.C:1476 guitest.C:1477 guitest.C:1478 guitest.C:1479 guitest.C:1480 guitest.C:1481 guitest.C:1482 guitest.C:1483 guitest.C:1484 guitest.C:1485 guitest.C:1486 guitest.C:1487 guitest.C:1488 guitest.C:1489 guitest.C:1490 guitest.C:1491 guitest.C:1492 guitest.C:1493 guitest.C:1494 guitest.C:1495 guitest.C:1496 guitest.C:1497 guitest.C:1498 guitest.C:1499 guitest.C:1500 guitest.C:1501 guitest.C:1502 guitest.C:1503 guitest.C:1504 guitest.C:1505 guitest.C:1506 guitest.C:1507 guitest.C:1508 guitest.C:1509 guitest.C:1510 guitest.C:1511 guitest.C:1512 guitest.C:1513 guitest.C:1514 guitest.C:1515 guitest.C:1516 guitest.C:1517 guitest.C:1518 guitest.C:1519 guitest.C:1520 guitest.C:1521 guitest.C:1522 guitest.C:1523 guitest.C:1524 guitest.C:1525 guitest.C:1526 guitest.C:1527 guitest.C:1528 guitest.C:1529 guitest.C:1530 guitest.C:1531 guitest.C:1532 guitest.C:1533 guitest.C:1534 guitest.C:1535 guitest.C:1536 guitest.C:1537 guitest.C:1538 guitest.C:1539 guitest.C:1540 guitest.C:1541 guitest.C:1542 guitest.C:1543 guitest.C:1544 guitest.C:1545 guitest.C:1546 guitest.C:1547 guitest.C:1548 guitest.C:1549 guitest.C:1550 guitest.C:1551 guitest.C:1552 guitest.C:1553 guitest.C:1554 guitest.C:1555 guitest.C:1556 guitest.C:1557 guitest.C:1558 guitest.C:1559 guitest.C:1560 guitest.C:1561 guitest.C:1562 guitest.C:1563 guitest.C:1564 guitest.C:1565 guitest.C:1566 guitest.C:1567 guitest.C:1568 guitest.C:1569 guitest.C:1570 guitest.C:1571 guitest.C:1572 guitest.C:1573 guitest.C:1574 guitest.C:1575 guitest.C:1576 guitest.C:1577 guitest.C:1578 guitest.C:1579 guitest.C:1580 guitest.C:1581 guitest.C:1582 guitest.C:1583 guitest.C:1584 guitest.C:1585 guitest.C:1586 guitest.C:1587 guitest.C:1588 guitest.C:1589 guitest.C:1590 guitest.C:1591 guitest.C:1592 guitest.C:1593 guitest.C:1594 guitest.C:1595 guitest.C:1596 guitest.C:1597 guitest.C:1598 guitest.C:1599 guitest.C:1600 guitest.C:1601 guitest.C:1602 guitest.C:1603 guitest.C:1604 guitest.C:1605 guitest.C:1606 guitest.C:1607 guitest.C:1608 guitest.C:1609 guitest.C:1610 guitest.C:1611 guitest.C:1612 guitest.C:1613 guitest.C:1614 guitest.C:1615 guitest.C:1616 guitest.C:1617 guitest.C:1618 guitest.C:1619 guitest.C:1620 guitest.C:1621 guitest.C:1622 guitest.C:1623 guitest.C:1624 guitest.C:1625 guitest.C:1626 guitest.C:1627 guitest.C:1628 guitest.C:1629 guitest.C:1630 guitest.C:1631 guitest.C:1632 guitest.C:1633 guitest.C:1634 guitest.C:1635 guitest.C:1636 guitest.C:1637 guitest.C:1638 guitest.C:1639 guitest.C:1640 guitest.C:1641 guitest.C:1642 guitest.C:1643 guitest.C:1644 guitest.C:1645 guitest.C:1646 guitest.C:1647 guitest.C:1648 guitest.C:1649 guitest.C:1650 guitest.C:1651 guitest.C:1652 guitest.C:1653 guitest.C:1654 guitest.C:1655 guitest.C:1656 guitest.C:1657 guitest.C:1658 guitest.C:1659 guitest.C:1660 guitest.C:1661 guitest.C:1662 guitest.C:1663 guitest.C:1664 guitest.C:1665 guitest.C:1666 guitest.C:1667 guitest.C:1668 guitest.C:1669 guitest.C:1670 guitest.C:1671 guitest.C:1672 guitest.C:1673 guitest.C:1674 guitest.C:1675 guitest.C:1676 guitest.C:1677 guitest.C:1678 guitest.C:1679 guitest.C:1680 guitest.C:1681 guitest.C:1682 guitest.C:1683 guitest.C:1684 guitest.C:1685 guitest.C:1686 guitest.C:1687 guitest.C:1688 guitest.C:1689 guitest.C:1690 guitest.C:1691 guitest.C:1692 guitest.C:1693 guitest.C:1694 guitest.C:1695 guitest.C:1696 guitest.C:1697 guitest.C:1698 guitest.C:1699 guitest.C:1700 guitest.C:1701 guitest.C:1702 guitest.C:1703 guitest.C:1704 guitest.C:1705 guitest.C:1706 guitest.C:1707 guitest.C:1708 guitest.C:1709 guitest.C:1710 guitest.C:1711 guitest.C:1712 guitest.C:1713 guitest.C:1714 guitest.C:1715 guitest.C:1716 guitest.C:1717 guitest.C:1718 guitest.C:1719 guitest.C:1720 guitest.C:1721 guitest.C:1722 guitest.C:1723 guitest.C:1724 guitest.C:1725 guitest.C:1726 guitest.C:1727 guitest.C:1728 guitest.C:1729 guitest.C:1730 guitest.C:1731 guitest.C:1732 guitest.C:1733 guitest.C:1734 guitest.C:1735 guitest.C:1736 guitest.C:1737 guitest.C:1738 guitest.C:1739 guitest.C:1740 guitest.C:1741 guitest.C:1742 guitest.C:1743 guitest.C:1744 guitest.C:1745 guitest.C:1746 guitest.C:1747 guitest.C:1748 guitest.C:1749 guitest.C:1750 guitest.C:1751 guitest.C:1752 guitest.C:1753 guitest.C:1754 guitest.C:1755 guitest.C:1756 guitest.C:1757 guitest.C:1758 guitest.C:1759 guitest.C:1760 guitest.C:1761 guitest.C:1762 guitest.C:1763 guitest.C:1764 guitest.C:1765 guitest.C:1766 guitest.C:1767 guitest.C:1768 guitest.C:1769 guitest.C:1770 guitest.C:1771 guitest.C:1772 guitest.C:1773 guitest.C:1774 guitest.C:1775 guitest.C:1776 guitest.C:1777 guitest.C:1778 guitest.C:1779 guitest.C:1780 guitest.C:1781 guitest.C:1782 guitest.C:1783 guitest.C:1784 guitest.C:1785 guitest.C:1786 guitest.C:1787 guitest.C:1788 guitest.C:1789 guitest.C:1790 guitest.C:1791 guitest.C:1792 guitest.C:1793 guitest.C:1794 guitest.C:1795 guitest.C:1796 guitest.C:1797 guitest.C:1798 guitest.C:1799 guitest.C:1800 guitest.C:1801 guitest.C:1802 guitest.C:1803 guitest.C:1804 guitest.C:1805 guitest.C:1806 guitest.C:1807 guitest.C:1808 guitest.C:1809 guitest.C:1810 guitest.C:1811 guitest.C:1812 guitest.C:1813 guitest.C:1814 guitest.C:1815 guitest.C:1816 guitest.C:1817 guitest.C:1818 guitest.C:1819 guitest.C:1820 guitest.C:1821 guitest.C:1822 guitest.C:1823 guitest.C:1824 guitest.C:1825 guitest.C:1826 guitest.C:1827 guitest.C:1828 guitest.C:1829 guitest.C:1830 guitest.C:1831 guitest.C:1832 guitest.C:1833 guitest.C:1834 guitest.C:1835 guitest.C:1836 guitest.C:1837 guitest.C:1838 guitest.C:1839 guitest.C:1840 guitest.C:1841 guitest.C:1842 guitest.C:1843 guitest.C:1844 guitest.C:1845 guitest.C:1846 guitest.C:1847 guitest.C:1848 guitest.C:1849 guitest.C:1850 guitest.C:1851 guitest.C:1852 guitest.C:1853 guitest.C:1854 guitest.C:1855 guitest.C:1856 guitest.C:1857 guitest.C:1858 guitest.C:1859 guitest.C:1860 guitest.C:1861 guitest.C:1862 guitest.C:1863 guitest.C:1864 guitest.C:1865 guitest.C:1866 guitest.C:1867 guitest.C:1868 guitest.C:1869 guitest.C:1870 guitest.C:1871 guitest.C:1872 guitest.C:1873 guitest.C:1874 guitest.C:1875 guitest.C:1876 guitest.C:1877 guitest.C:1878 guitest.C:1879 guitest.C:1880 guitest.C:1881 guitest.C:1882 guitest.C:1883 guitest.C:1884 guitest.C:1885 guitest.C:1886 guitest.C:1887 guitest.C:1888 guitest.C:1889 guitest.C:1890 guitest.C:1891 guitest.C:1892 guitest.C:1893 guitest.C:1894 guitest.C:1895 guitest.C:1896 guitest.C:1897 guitest.C:1898 guitest.C:1899 guitest.C:1900 guitest.C:1901 guitest.C:1902 guitest.C:1903 guitest.C:1904 guitest.C:1905 guitest.C:1906 guitest.C:1907 guitest.C:1908 guitest.C:1909 guitest.C:1910 guitest.C:1911 guitest.C:1912 guitest.C:1913 guitest.C:1914 guitest.C:1915 guitest.C:1916 guitest.C:1917 guitest.C:1918 guitest.C:1919 guitest.C:1920 guitest.C:1921 guitest.C:1922 guitest.C:1923 guitest.C:1924 guitest.C:1925 guitest.C:1926 guitest.C:1927 guitest.C:1928 guitest.C:1929 guitest.C:1930 guitest.C:1931 guitest.C:1932 guitest.C:1933 guitest.C:1934 guitest.C:1935 guitest.C:1936 guitest.C:1937 guitest.C:1938 guitest.C:1939 guitest.C:1940 guitest.C:1941 guitest.C:1942 guitest.C:1943 guitest.C:1944 guitest.C:1945 guitest.C:1946 guitest.C:1947 guitest.C:1948 guitest.C:1949 guitest.C:1950 guitest.C:1951 guitest.C:1952 guitest.C:1953 guitest.C:1954 guitest.C:1955 guitest.C:1956 guitest.C:1957 guitest.C:1958 guitest.C:1959 guitest.C:1960 guitest.C:1961 guitest.C:1962 guitest.C:1963 guitest.C:1964 guitest.C:1965 guitest.C:1966 guitest.C:1967 guitest.C:1968 guitest.C:1969 guitest.C:1970 guitest.C:1971 guitest.C:1972 guitest.C:1973 guitest.C:1974 guitest.C:1975 guitest.C:1976 guitest.C:1977 guitest.C:1978 guitest.C:1979 guitest.C:1980 guitest.C:1981 guitest.C:1982 guitest.C:1983 guitest.C:1984 guitest.C:1985 guitest.C:1986 guitest.C:1987 guitest.C:1988 guitest.C:1989 guitest.C:1990 guitest.C:1991 guitest.C:1992 guitest.C:1993 guitest.C:1994 guitest.C:1995 guitest.C:1996 guitest.C:1997 guitest.C:1998 guitest.C:1999 guitest.C:2000 guitest.C:2001 guitest.C:2002 guitest.C:2003 guitest.C:2004 guitest.C:2005 guitest.C:2006 guitest.C:2007 guitest.C:2008 guitest.C:2009 guitest.C:2010 guitest.C:2011 guitest.C:2012 guitest.C:2013 guitest.C:2014 guitest.C:2015 guitest.C:2016 guitest.C:2017 guitest.C:2018 guitest.C:2019 guitest.C:2020 guitest.C:2021 guitest.C:2022 guitest.C:2023 guitest.C:2024 guitest.C:2025 guitest.C:2026 guitest.C:2027 guitest.C:2028 guitest.C:2029 guitest.C:2030 guitest.C:2031 guitest.C:2032 guitest.C:2033 guitest.C:2034 guitest.C:2035 guitest.C:2036 guitest.C:2037 guitest.C:2038 guitest.C:2039 guitest.C:2040 guitest.C:2041 guitest.C:2042 guitest.C:2043 guitest.C:2044 guitest.C:2045 guitest.C:2046 guitest.C:2047 guitest.C:2048 guitest.C:2049 guitest.C:2050 guitest.C:2051 guitest.C:2052 guitest.C:2053 guitest.C:2054 guitest.C:2055 guitest.C:2056 guitest.C:2057 guitest.C:2058 guitest.C:2059 guitest.C:2060 guitest.C:2061 guitest.C:2062 guitest.C:2063 guitest.C:2064 guitest.C:2065 guitest.C:2066 guitest.C:2067 guitest.C:2068 guitest.C:2069 guitest.C:2070 guitest.C:2071 guitest.C:2072 guitest.C:2073 guitest.C:2074 guitest.C:2075 guitest.C:2076 guitest.C:2077 guitest.C:2078 guitest.C:2079 guitest.C:2080 guitest.C:2081 guitest.C:2082 guitest.C:2083 guitest.C:2084 guitest.C:2085 guitest.C:2086 guitest.C:2087 guitest.C:2088 guitest.C:2089 guitest.C:2090 guitest.C:2091 guitest.C:2092 guitest.C:2093 guitest.C:2094 guitest.C:2095 guitest.C:2096 guitest.C:2097 guitest.C:2098 guitest.C:2099 guitest.C:2100 guitest.C:2101 guitest.C:2102 guitest.C:2103 guitest.C:2104 guitest.C:2105 guitest.C:2106 guitest.C:2107 guitest.C:2108 guitest.C:2109 guitest.C:2110 guitest.C:2111 guitest.C:2112 guitest.C:2113 guitest.C:2114 guitest.C:2115 guitest.C:2116 guitest.C:2117 guitest.C:2118 guitest.C:2119 guitest.C:2120 guitest.C:2121 guitest.C:2122 guitest.C:2123 guitest.C:2124 guitest.C:2125 guitest.C:2126 guitest.C:2127 guitest.C:2128 guitest.C:2129 guitest.C:2130 guitest.C:2131 guitest.C:2132 guitest.C:2133 guitest.C:2134 guitest.C:2135 guitest.C:2136 guitest.C:2137 guitest.C:2138 guitest.C:2139 guitest.C:2140 guitest.C:2141 guitest.C:2142 guitest.C:2143 guitest.C:2144 guitest.C:2145 guitest.C:2146 guitest.C:2147 guitest.C:2148 guitest.C:2149 guitest.C:2150 guitest.C:2151 guitest.C:2152 guitest.C:2153 guitest.C:2154 guitest.C:2155 guitest.C:2156 guitest.C:2157 guitest.C:2158 guitest.C:2159 guitest.C:2160 guitest.C:2161 guitest.C:2162 guitest.C:2163 guitest.C:2164 guitest.C:2165 guitest.C:2166 guitest.C:2167 guitest.C:2168 guitest.C:2169 guitest.C:2170 guitest.C:2171 guitest.C:2172 guitest.C:2173 guitest.C:2174 guitest.C:2175 guitest.C:2176 guitest.C:2177 guitest.C:2178 guitest.C:2179 guitest.C:2180 guitest.C:2181 guitest.C:2182 guitest.C:2183 guitest.C:2184 guitest.C:2185 guitest.C:2186 guitest.C:2187 guitest.C:2188 guitest.C:2189 guitest.C:2190 guitest.C:2191 guitest.C:2192 guitest.C:2193 guitest.C:2194 guitest.C:2195 guitest.C:2196 guitest.C:2197 guitest.C:2198 guitest.C:2199 guitest.C:2200 guitest.C:2201 guitest.C:2202 guitest.C:2203 guitest.C:2204 guitest.C:2205 guitest.C:2206 guitest.C:2207 guitest.C:2208 guitest.C:2209 guitest.C:2210 guitest.C:2211 guitest.C:2212 guitest.C:2213 guitest.C:2214 guitest.C:2215 guitest.C:2216 guitest.C:2217 guitest.C:2218 guitest.C:2219 guitest.C:2220 guitest.C:2221 guitest.C:2222 guitest.C:2223 guitest.C:2224 guitest.C:2225 guitest.C:2226 guitest.C:2227 guitest.C:2228 guitest.C:2229 guitest.C:2230 guitest.C:2231 guitest.C:2232 guitest.C:2233 guitest.C:2234 guitest.C:2235 guitest.C:2236 guitest.C:2237 guitest.C:2238 guitest.C:2239 guitest.C:2240 guitest.C:2241 guitest.C:2242 guitest.C:2243 guitest.C:2244 guitest.C:2245 guitest.C:2246 guitest.C:2247 guitest.C:2248 guitest.C:2249 guitest.C:2250 guitest.C:2251 guitest.C:2252 guitest.C:2253 guitest.C:2254 guitest.C:2255 guitest.C:2256 guitest.C:2257 guitest.C:2258 guitest.C:2259 guitest.C:2260 guitest.C:2261 guitest.C:2262 guitest.C:2263 guitest.C:2264 guitest.C:2265 guitest.C:2266 guitest.C:2267 guitest.C:2268 guitest.C:2269 guitest.C:2270 guitest.C:2271 guitest.C:2272 guitest.C:2273 guitest.C:2274 guitest.C:2275 guitest.C:2276 guitest.C:2277 guitest.C:2278 guitest.C:2279 guitest.C:2280 guitest.C:2281 guitest.C:2282 guitest.C:2283 guitest.C:2284 guitest.C:2285 guitest.C:2286 guitest.C:2287 guitest.C:2288 guitest.C:2289 guitest.C:2290 guitest.C:2291 guitest.C:2292 guitest.C:2293 guitest.C:2294 guitest.C:2295 guitest.C:2296 guitest.C:2297 guitest.C:2298 guitest.C:2299 guitest.C:2300 guitest.C:2301 guitest.C:2302 guitest.C:2303 guitest.C:2304 guitest.C:2305 guitest.C:2306 guitest.C:2307 guitest.C:2308 guitest.C:2309 guitest.C:2310 guitest.C:2311 guitest.C:2312 guitest.C:2313 guitest.C:2314 guitest.C:2315 guitest.C:2316 guitest.C:2317 guitest.C:2318 guitest.C:2319 guitest.C:2320 guitest.C:2321 guitest.C:2322 guitest.C:2323 guitest.C:2324 guitest.C:2325 guitest.C:2326 guitest.C:2327 guitest.C:2328 guitest.C:2329 guitest.C:2330 guitest.C:2331 guitest.C:2332 guitest.C:2333 guitest.C:2334 guitest.C:2335 guitest.C:2336 guitest.C:2337 guitest.C:2338 guitest.C:2339 guitest.C:2340 guitest.C:2341 guitest.C:2342 guitest.C:2343 guitest.C:2344 guitest.C:2345 guitest.C:2346 guitest.C:2347 guitest.C:2348 guitest.C:2349 guitest.C:2350 guitest.C:2351 guitest.C:2352 guitest.C:2353 guitest.C:2354 guitest.C:2355 guitest.C:2356 guitest.C:2357 guitest.C:2358 guitest.C:2359 guitest.C:2360 guitest.C:2361 guitest.C:2362 guitest.C:2363 guitest.C:2364 guitest.C:2365 guitest.C:2366 guitest.C:2367 guitest.C:2368 guitest.C:2369 guitest.C:2370 guitest.C:2371 guitest.C:2372 guitest.C:2373 guitest.C:2374 guitest.C:2375 guitest.C:2376 guitest.C:2377 guitest.C:2378 guitest.C:2379 guitest.C:2380 guitest.C:2381 guitest.C:2382 guitest.C:2383 guitest.C:2384 guitest.C:2385 guitest.C:2386 guitest.C:2387 guitest.C:2388 guitest.C:2389 guitest.C:2390 guitest.C:2391 guitest.C:2392 guitest.C:2393 guitest.C:2394 guitest.C:2395 guitest.C:2396 guitest.C:2397 guitest.C:2398 guitest.C:2399 guitest.C:2400 guitest.C:2401 guitest.C:2402 guitest.C:2403 guitest.C:2404 guitest.C:2405 guitest.C:2406 guitest.C:2407 guitest.C:2408 guitest.C:2409 guitest.C:2410 guitest.C:2411 guitest.C:2412 guitest.C:2413 guitest.C:2414 guitest.C:2415 guitest.C:2416 guitest.C:2417 guitest.C:2418 guitest.C:2419 guitest.C:2420 guitest.C:2421 guitest.C:2422 guitest.C:2423 guitest.C:2424 guitest.C:2425 guitest.C:2426 guitest.C:2427 guitest.C:2428 guitest.C:2429 guitest.C:2430 guitest.C:2431 guitest.C:2432 guitest.C:2433 guitest.C:2434 guitest.C:2435 guitest.C:2436 guitest.C:2437 guitest.C:2438 guitest.C:2439 guitest.C:2440 guitest.C:2441 guitest.C:2442 guitest.C:2443 guitest.C:2444 guitest.C:2445 guitest.C:2446 guitest.C:2447 guitest.C:2448 guitest.C:2449 guitest.C:2450 guitest.C:2451 guitest.C:2452 guitest.C:2453 guitest.C:2454 guitest.C:2455 guitest.C:2456 guitest.C:2457 guitest.C:2458 guitest.C:2459 guitest.C:2460 guitest.C:2461 guitest.C:2462 guitest.C:2463 guitest.C:2464 guitest.C:2465 guitest.C:2466 guitest.C:2467 guitest.C:2468 guitest.C:2469 guitest.C:2470 guitest.C:2471 guitest.C:2472 guitest.C:2473 guitest.C:2474 guitest.C:2475 guitest.C:2476 guitest.C:2477 guitest.C:2478 guitest.C:2479 guitest.C:2480 guitest.C:2481 guitest.C:2482 guitest.C:2483 guitest.C:2484 guitest.C:2485 guitest.C:2486 guitest.C:2487 guitest.C:2488 guitest.C:2489 guitest.C:2490 guitest.C:2491 guitest.C:2492 guitest.C:2493 guitest.C:2494 guitest.C:2495 guitest.C:2496 guitest.C:2497 guitest.C:2498 guitest.C:2499 guitest.C:2500 guitest.C:2501 guitest.C:2502 guitest.C:2503 guitest.C:2504 guitest.C:2505 guitest.C:2506 guitest.C:2507 guitest.C:2508 guitest.C:2509 guitest.C:2510 guitest.C:2511 guitest.C:2512 guitest.C:2513 guitest.C:2514 guitest.C:2515 guitest.C:2516 guitest.C:2517 guitest.C:2518 guitest.C:2519 guitest.C:2520 guitest.C:2521 guitest.C:2522 guitest.C:2523 guitest.C:2524 guitest.C:2525 guitest.C:2526 guitest.C:2527 guitest.C:2528 guitest.C:2529 guitest.C:2530 guitest.C:2531 guitest.C:2532 guitest.C:2533 guitest.C:2534 guitest.C:2535 guitest.C:2536 guitest.C:2537 guitest.C:2538 guitest.C:2539 guitest.C:2540 guitest.C:2541 guitest.C:2542 guitest.C:2543 guitest.C:2544 guitest.C:2545 guitest.C:2546 guitest.C:2547 guitest.C:2548 guitest.C:2549 guitest.C:2550 guitest.C:2551 guitest.C:2552 guitest.C:2553 guitest.C:2554 guitest.C:2555 guitest.C:2556 guitest.C:2557 guitest.C:2558 guitest.C:2559 guitest.C:2560 guitest.C:2561 guitest.C:2562 guitest.C:2563 guitest.C:2564 guitest.C:2565 guitest.C:2566 guitest.C:2567 guitest.C:2568 guitest.C:2569 guitest.C:2570 guitest.C:2571 guitest.C:2572 guitest.C:2573 guitest.C:2574 guitest.C:2575 guitest.C:2576 guitest.C:2577 guitest.C:2578 guitest.C:2579 guitest.C:2580 guitest.C:2581 guitest.C:2582 guitest.C:2583 guitest.C:2584 guitest.C:2585 guitest.C:2586 |
|