/* * $Header$ * $Log$ */ #include #include #include #include #include #include #include #include #include "XSElementList.h" #include "XSPeriodicTable.h" #include "XSElementDlg.h" //ClassImp(XSElementDlg) enum XSElementDlgEnum { ELEM_OK=900, ELEM_CANCEL }; static Int_t activeTab=0; // Remember last active Tab static Int_t LastWinX = -1; static Int_t LastWinY = -1; /* ----- XSElementDlg ----- */ XSElementDlg::XSElementDlg( const TGWindow *p, const TGWindow *main, UInt_t *retZ, UInt_t w, UInt_t h) : TGTransientFrame(p,main,w,h) { selectedZ = retZ; // Save Address lHints = new TGLayoutHints( kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 2, 2, 2, 2); buttonFrame = new TGHorizontalFrame(this, 120, 20, kFixedWidth); okButton = new TGTextButton(buttonFrame, "&Ok", ELEM_OK); okButton->Associate(this); closeButton = new TGTextButton(buttonFrame, "&Close", ELEM_CANCEL); closeButton->Associate(this); buttonLayoutHints = new TGLayoutHints( kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 2, 5, 1); buttonFrame->AddFrame(okButton, buttonLayoutHints); buttonFrame->AddFrame(closeButton, buttonLayoutHints); frameLayoutHints = new TGLayoutHints(kLHintsBottom | kLHintsRight, 2, 2, 2, 2); AddFrame(buttonFrame, frameLayoutHints); // ---------- Add Periodic table ------------- TGCompositeFrame *tf; tabMenu = new TGTab(this, w, h); tf = tabMenu->AddTab("Periodic Table"); pTable = new XSPeriodicTable(this,tf,w,h); pTable->SelectZ(*selectedZ); tf->AddFrame(pTable, lHints); // ------------- Table Sorted by Name ------------ tf = tabMenu->AddTab("Name"); nameFrame = new TGCompositeFrame(tf,w,h, kVerticalFrame); nameListBox = new XSElementList(nameFrame,XSEL_SORTBY_NAME); nameListBox->SelectZ(*selectedZ); nameFrame->AddFrame(nameListBox,lHints); tf->AddFrame(nameFrame,lHints); // ------------- Table Sorted by Mnemonic ------------- tf = tabMenu->AddTab("Mnemonic"); mnemonicFrame = new TGCompositeFrame(tf,w,h,kVerticalFrame); mnemonicListBox = new XSElementList(mnemonicFrame,XSEL_SORTBY_MNEMONIC); mnemonicListBox->SelectZ(*selectedZ); mnemonicFrame->AddFrame(mnemonicListBox, lHints); tf->AddFrame(mnemonicFrame, lHints); // ------------- Table Sorted by Charge ------------- tf = tabMenu->AddTab("Z (Charge)"); zFrame = new TGCompositeFrame(tf,w,h,kVerticalFrame); zListBox = new XSElementList(zFrame,XSEL_SORTBY_Z); zListBox->SelectZ(*selectedZ); zFrame->AddFrame(zListBox, lHints); tf->AddFrame(zFrame, lHints); // ------------- Finalise settings ----------------- lHints2 = new TGLayoutHints( kLHintsBottom | kLHintsExpandX | kLHintsExpandY, 2, 2, 5, 1); AddFrame(tabMenu, lHints2); tabMenu->SetTab(activeTab); /* --------- Set Windows Position --------- */ int ax, ay; if (LastWinX == -1) { // Go to the middle of parent window Window_t wdum; gVirtualX->TranslateCoordinates(main->GetId(), GetParent()->GetId(), (((TGFrame *) main)->GetWidth() - fWidth) >> 1, (((TGFrame *) main)->GetHeight() - fHeight) >> 1, ax, ay, wdum); } else { ax = LastWinX; ay = LastWinY; } Move(ax,ay); SetWMPosition(ax,ay); MapSubwindows(); Resize(GetDefaultSize()); SetWindowName("Select Element"); MapWindow(); fClient->WaitFor(this); } // XSElementDlg /* ----- ~XSElementDlg ----- */ XSElementDlg::~XSElementDlg() { activeTab = tabMenu->GetCurrent(); delete closeButton; delete buttonFrame; delete buttonLayoutHints; delete frameLayoutHints; delete lHints; delete tabMenu; delete pTable; delete nameListBox; delete nameFrame; delete mnemonicListBox; delete mnemonicFrame; delete zListBox; delete zFrame; delete lHints2; } // ~XSElementDlg /* ----- CloseWindow ----- */ void XSElementDlg::CloseWindow() { // --- Remember old position --- Window_t wdum; gVirtualX->TranslateCoordinates(GetId(), GetParent()->GetId(), 0, 0, LastWinX, LastWinY, wdum); delete this; } // CloseWindow /* ----- ProcessButton ----- */ Bool_t XSElementDlg::ProcessButton(Long_t param) { Int_t activeTab; switch (param) { case ELEM_OK: // Find active Tab activeTab = tabMenu->GetCurrent(); if (activeTab==0) goto LERROR; else { switch (activeTab) { case 1: *selectedZ = nameListBox->CurrentZ(); break; case 2: *selectedZ = mnemonicListBox->CurrentZ(); break; case 3: *selectedZ = zListBox->CurrentZ(); break; } if (*selectedZ==0) goto LERROR; } break; case ELEM_CANCEL: *selectedZ = 0; break; default: *selectedZ = param; break; } CloseWindow(); return kTRUE; LERROR: // Issue a message to select an Element int retval; new TGMsgBox(fClient->GetRoot(), this, "Info", "Please Select one Element!", kMBIconAsterisk, kMBOk, &retval ); return kFALSE; } // ProcessButton /* ----- ProcessMessage ----- */ Bool_t XSElementDlg::ProcessMessage(Long_t msg, Long_t param1, Long_t /*param2*/) { switch (GET_MSG(msg)) { case kC_COMMAND: switch (GET_SUBMSG(msg)) { case kCM_BUTTON: ProcessButton(param1); break; default: break; } default: break; } return kTRUE; } // ProcessMessage