/* ======================================================================== *\ ! ! * ! * This file is part of MARS, the MAGIC Analysis and Reconstruction ! * Software. It is distributed to you in the hope that it can be a useful ! * and timesaving tool in analysing Data of imaging Cerenkov telescopes. ! * It is distributed WITHOUT ANY WARRANTY. ! * ! * Permission to use, copy, modify and distribute this software and its ! * documentation for any purpose is hereby granted without fee, ! * provided that the above copyright notice appear in all copies and ! * that both that copyright notice and this permission notice appear ! * in supporting documentation. It is provided "as is" without express ! * or implied warranty. ! * ! ! ! Author(s): Thomas Bretz 12/2000 ! Author(s): Harald Kornmayer 1/2001 ! ! Copyright: MAGIC Software Development, 2000-2002 ! ! \* ======================================================================== */ #include "MMars.h" #include #include // gROOT->GetApplication()->... #include // TGTab #include // TGPopupMenu #include // gSystem->Exec #include // TGMsgBox #include // TGPictureButton #include // TGHorizontal3DLine #include "MGList.h" #include "MEvtDisp.h" #include "MAnalysis.h" #include "MDataCheck.h" #include "MMonteCarlo.h" #include "MCameraDisplay.h" ClassImp(MMars); using namespace std; enum { kFileExit, kFileAbout, kPicMagic, kPicMars, kButEvtDisplay, kButDataCheck, kButAnalysis, kButMonteCarlo, kButCameraDisplay }; void MMars::CreateMenuBar() { TGLayoutHints *laymenubar = new TGLayoutHints(kLHintsTop|kLHintsLeft|kLHintsExpandX, 2, 2, 2, 2); TGLayoutHints *laymenuitem = new TGLayoutHints(kLHintsTop|kLHintsLeft, 0, 4, 0, 0); TGLayoutHints *laylinesep = new TGLayoutHints(kLHintsTop|kLHintsExpandX); fList->Add(laymenubar); fList->Add(laymenuitem); fList->Add(laylinesep); TGPopupMenu *filemenu = new TGPopupMenu(gClient->GetRoot()); filemenu->AddEntry("E&xit", kFileExit); filemenu->Associate(this); TGMenuBar *menubar = new TGMenuBar(this, 1, 1, kHorizontalFrame); menubar->AddPopup("&File", filemenu, laymenuitem); AddFrame(menubar, laymenubar); TGHorizontal3DLine *linesep = new TGHorizontal3DLine(this); AddFrame(linesep, laylinesep); fList->Add(filemenu); fList->Add(menubar); fList->Add(linesep); } void MMars::CreateTopFrame(TGHorizontalFrame *top) { const TGPicture *pic1 = fList->GetPicture("magiclogo.xpm"); if (pic1) { TGPictureButton *magic = new TGPictureButton(top, pic1, kPicMagic); fList->Add(magic); magic->Associate(this); TGLayoutHints *lay1 = new TGLayoutHints(kLHintsLeft, 10, 10, 20, 10); fList->Add(lay1); top->AddFrame(magic, lay1); } const TGPicture *pic2 = fList->GetPicture("marslogo.xpm"); if (pic2) { TGPictureButton *mars = new TGPictureButton(top, pic2, kPicMars); fList->Add(mars); mars->Associate(this); TGLayoutHints *lay2 = new TGLayoutHints(kLHintsRight, 10, 10, 10, 10); fList->Add(lay2); top->AddFrame(mars, lay2); } } #include void MMars::CreateTextButton(TGVerticalFrame *tab, const char *text, const char *descr, const UInt_t id) const { // // Create the button // TGHorizontalFrame *frame = new TGHorizontalFrame(tab, 1, 1); TGTextButton *button = new TGTextButton(frame, text, id); TGLabel *label = new TGLabel(frame, descr); TGLayoutHints *hints1 = new TGLayoutHints(kLHintsLeft|kLHintsCenterY|kLHintsExpandX, 5, 5, 2, 2); // // Add button for 'auto-delete' // fList->Add(hints1); fList->Add(button); fList->Add(label); fList->Add(frame); // // Send button events (meesages) to this object (s. ProcessMessage) // button->Associate(this); // // Add button with corresponding layout to containing frame // tab->AddFrame(frame, hints1); frame->AddFrame(button, hints1); frame->AddFrame(label, hints1); } void MMars::CreateBottomFrame(TGHorizontalFrame *low) { // // Create Tab Container // TGLayoutHints *laytabs = new TGLayoutHints(kLHintsBottom|kLHintsExpandX|kLHintsExpandY, 5, 5, 5, 5); fList->Add(laytabs); TGTab *tabs = new TGTab(low, 1, 1); fList->Add(tabs); low->AddFrame(tabs, laytabs); // // Create Tab1 // TGCompositeFrame *tf = tabs->AddTab("Control"); TGLayoutHints *laytab = new TGLayoutHints(kLHintsCenterY|kLHintsExpandX); TGVerticalFrame *tab = new TGVerticalFrame(tf, 1, 1); fList->Add(laytab); fList->Add(tab); CreateTextButton(tab, "Event Display", "Histograms: Pix per Event", kButEvtDisplay); CreateTextButton(tab, "Data Check", "Histograms: Pix per Run", kButDataCheck); CreateTextButton(tab, "Analysis", "Calculate image parameters", kButAnalysis); CreateTextButton(tab, "Monte Carlo", "Calculate MC stuff", kButMonteCarlo); CreateTextButton(tab, "Camera Display", "Display Cerenkov Photons", kButCameraDisplay); tf->AddFrame(tab, laytab); } MMars::MMars() : TGMainFrame(gClient->GetRoot(), 400, 400, kVerticalFrame) { // // Create the deletion list // fList = new MGList; fList->SetOwner(); // // Create the MenuBar // CreateMenuBar(); // // create and layout the frame/contents // TGHorizontalFrame *top = new TGHorizontalFrame(this, 1, 1); TGHorizontalFrame *low = new TGHorizontalFrame(this, 1, 1); TGHorizontal3DLine *linesep = new TGHorizontal3DLine(this); fList->Add(top); fList->Add(low); fList->Add(linesep); CreateTopFrame(top); CreateBottomFrame(low); TGLayoutHints *layout1 = new TGLayoutHints(kLHintsTop|kLHintsExpandX); TGLayoutHints *layout2 = new TGLayoutHints(kLHintsTop|kLHintsExpandX|kLHintsExpandY); fList->Add(layout1); fList->Add(layout2); AddFrame(top, layout1); AddFrame(linesep, layout1); AddFrame(low, layout2); // // Map the window, set up the layout, etc. // Move(rand()%100, rand()%100); Layout(); MapSubwindows(); SetWindowName("MARS Main Window"); SetIconName("MARS"); MapWindow(); } // ====================================================================== MMars::~MMars() { delete fList; } // ====================================================================== void MMars::CloseWindow() { // Got close message for this MainFrame. Calls parent CloseWindow() // (which destroys the window) and terminate the application. // The close message is generated by the window manager when its close // window menu item is selected. TGMainFrame::CloseWindow(); gROOT->GetApplication()->Terminate(0); } void MMars::DisplWarning(const char *txt) { Int_t retval; new TGMsgBox(fClient->GetRoot(), this, "WARNING!", txt, kMBIconExclamation, 4, &retval); } Bool_t MMars::ProcessMessage(Long_t msg, Long_t parm1, Long_t) { // Process events generated by the buttons in the frame. switch (GET_MSG(msg)) { case kC_COMMAND: switch (GET_SUBMSG(msg)) { case kCM_BUTTON: switch (parm1) { case kButEvtDisplay: new MEvtDisp(/*this*/); return kTRUE; case kButDataCheck: new MDataCheck(/*this*/); return kTRUE; case kButAnalysis: new MAnalysis(/*this*/); return kTRUE; case kButMonteCarlo: new MMonteCarlo(/*this*/); return kTRUE; case kButCameraDisplay: new MCameraDisplay(/*this*/); return kTRUE; case kPicMagic: cout << "Trying to start 'netscape http://hegra1.mppmu.mpg.de/MAGICWeb/'..." << endl; gSystem->Exec("netscape http://hegra1.mppmu.mpg.de/MAGICWeb/ &"); return kTRUE; case kPicMars: cout << "Trying to start 'netscape http://magic.astro.uni-wuerzburg.de/mars/'..." << endl; gSystem->Exec("netscape http://magic.astro.uni-wuerzburg.de/mars/ &"); return kTRUE; } case kCM_MENU: if (parm1!=kFileExit) return kTRUE; CloseWindow(); return kTRUE; } } return kTRUE; }