proper menu ID handling for multiple plots

This commit is contained in:
nemu 2008-10-30 07:43:22 +00:00
parent 6cc5c2478c
commit 2ed303abb6
2 changed files with 61 additions and 23 deletions

View File

@ -55,7 +55,8 @@ PMusrCanvas::PMusrCanvas()
fImp = 0; fImp = 0;
fBar = 0; fBar = 0;
fPopup = 0; fPopupMain = 0;
fPopupSave = 0;
fStyle = 0; fStyle = 0;
fMainCanvas = 0; fMainCanvas = 0;
@ -104,6 +105,10 @@ PMusrCanvas::~PMusrCanvas()
{ {
cout << "~PMusrCanvas() called. fMainCanvas name=" << fMainCanvas->GetName() << endl; cout << "~PMusrCanvas() called. fMainCanvas name=" << fMainCanvas->GetName() << endl;
// cleanup // cleanup
if (fPopupSave) {
delete fPopupSave;
fPopupSave = 0;
}
if (fStyle) { if (fStyle) {
delete fStyle; delete fStyle;
fStyle = 0; fStyle = 0;
@ -177,7 +182,8 @@ void PMusrCanvas::InitMusrCanvas(const char* title, Int_t wtopx, Int_t wtopy, In
fImp = 0; fImp = 0;
fBar = 0; fBar = 0;
fPopup = 0; fPopupMain = 0;
fPopupSave = 0;
fMainCanvas = 0; fMainCanvas = 0;
fTitlePad = 0; fTitlePad = 0;
@ -196,17 +202,21 @@ void PMusrCanvas::InitMusrCanvas(const char* title, Int_t wtopx, Int_t wtopy, In
} }
// add canvas menu // add canvas menu
TRootCanvas *fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp(); fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp();
TGMenuBar *fBar = fImp->GetMenuBar(); fBar = fImp->GetMenuBar();
TGPopupMenu *fPopup = fBar->AddPopup("&Musrfit"); fPopupMain = fBar->AddPopup("&Musrfit");
fPopup->AddEntry("&Fourier", P_MENU_ID_FOURIER); fPopupMain->AddEntry("&Fourier", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber);
fPopup->AddEntry("&Difference", P_MENU_ID_DIFFERENCE); fPopupMain->AddEntry("&Difference", P_MENU_ID_DIFFERENCE+P_MENU_PLOT_OFFSET*fPlotNumber);
fPopup->AddSeparator(); fPopupMain->AddSeparator();
fPopup->AddEntry("&Save Data", P_MENU_ID_SAVE_DATA); // fPopupMain->AddEntry("&Save Data", P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber);
fPopupSave = new TGPopupMenu();
fPopupSave->AddEntry("Save ascii", P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_ASCII);
fPopupSave->AddEntry("Save db", P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_DB);
fPopupMain->AddPopup("&Save Data", fPopupSave);
fBar->MapSubwindows(); fBar->MapSubwindows();
fBar->Layout(); fBar->Layout();
fPopup->Connect("TGPopupMenu", "Activated(Int_t)", "PMusrCanvas", this, "HandleMenuPopup(Int_t)"); fPopupMain->Connect("TGPopupMenu", "Activated(Int_t)", "PMusrCanvas", this, "HandleMenuPopup(Int_t)");
// divide the canvas into 4 pads // divide the canvas into 4 pads
// title pad // title pad
@ -321,18 +331,14 @@ void PMusrCanvas::HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected)
*/ */
void PMusrCanvas::HandleMenuPopup(Int_t id) void PMusrCanvas::HandleMenuPopup(Int_t id)
{ {
switch (id) { if (id == P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber) {
case P_MENU_ID_FOURIER: cout << endl << ">> will handle Fourier ..." << endl;
cout << endl << ">> will handle Fourier ..." << endl; } else if (id == P_MENU_ID_DIFFERENCE+P_MENU_PLOT_OFFSET*fPlotNumber) {
break; HandleDifference();
case P_MENU_ID_DIFFERENCE: } else if (id == P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_ASCII) {
cout << endl << ">> will handle Difference ..." << endl; SaveDataAscii();
break; } else if (id == P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_DB) {
case P_MENU_ID_SAVE_DATA: SaveDataDb();
cout << endl << ">> will handle Save Data ..." << endl;
break;
default:
break;
} }
} }
@ -1383,3 +1389,27 @@ void PMusrCanvas::PlotFourier(int fourierType)
{ {
} }
//--------------------------------------------------------------------------
// SaveDataAscii
//--------------------------------------------------------------------------
/**
* <p>
*
*/
void PMusrCanvas::SaveDataAscii()
{
cout << endl << ">> will handle Save Data in ascii format ..." << endl;
}
//--------------------------------------------------------------------------
// SaveDataDb
//--------------------------------------------------------------------------
/**
* <p>
*
*/
void PMusrCanvas::SaveDataDb()
{
cout << endl << ">> will handle Save Data in db format ..." << endl;
}

View File

@ -59,6 +59,10 @@
#define P_MENU_ID_DIFFERENCE 10002 #define P_MENU_ID_DIFFERENCE 10002
#define P_MENU_ID_SAVE_DATA 10003 #define P_MENU_ID_SAVE_DATA 10003
#define P_MENU_PLOT_OFFSET 1000
#define P_MENU_ID_SAVE_ASCII 100
#define P_MENU_ID_SAVE_DB 101
//------------------------------------------------------------------------ //------------------------------------------------------------------------
/** /**
* <p> * <p>
@ -158,7 +162,8 @@ class PMusrCanvas : public TObject, public TQObject
// canvas menu related variables // canvas menu related variables
TRootCanvas *fImp; TRootCanvas *fImp;
TGMenuBar *fBar; TGMenuBar *fBar;
TGPopupMenu *fPopup; TGPopupMenu *fPopupMain;
TGPopupMenu *fPopupSave;
// canvas related variables // canvas related variables
TCanvas *fMainCanvas; TCanvas *fMainCanvas;
@ -195,6 +200,9 @@ class PMusrCanvas : public TObject, public TQObject
virtual void PlotDifference(); virtual void PlotDifference();
virtual void PlotFourier(int fourierType); virtual void PlotFourier(int fourierType);
virtual void SaveDataAscii();
virtual void SaveDataDb();
ClassDef(PMusrCanvas, 1) ClassDef(PMusrCanvas, 1)
}; };