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;
fBar = 0;
fPopup = 0;
fPopupMain = 0;
fPopupSave = 0;
fStyle = 0;
fMainCanvas = 0;
@ -104,6 +105,10 @@ PMusrCanvas::~PMusrCanvas()
{
cout << "~PMusrCanvas() called. fMainCanvas name=" << fMainCanvas->GetName() << endl;
// cleanup
if (fPopupSave) {
delete fPopupSave;
fPopupSave = 0;
}
if (fStyle) {
delete fStyle;
fStyle = 0;
@ -177,7 +182,8 @@ void PMusrCanvas::InitMusrCanvas(const char* title, Int_t wtopx, Int_t wtopy, In
fImp = 0;
fBar = 0;
fPopup = 0;
fPopupMain = 0;
fPopupSave = 0;
fMainCanvas = 0;
fTitlePad = 0;
@ -196,17 +202,21 @@ void PMusrCanvas::InitMusrCanvas(const char* title, Int_t wtopx, Int_t wtopy, In
}
// add canvas menu
TRootCanvas *fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp();
TGMenuBar *fBar = fImp->GetMenuBar();
TGPopupMenu *fPopup = fBar->AddPopup("&Musrfit");
fPopup->AddEntry("&Fourier", P_MENU_ID_FOURIER);
fPopup->AddEntry("&Difference", P_MENU_ID_DIFFERENCE);
fPopup->AddSeparator();
fPopup->AddEntry("&Save Data", P_MENU_ID_SAVE_DATA);
fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp();
fBar = fImp->GetMenuBar();
fPopupMain = fBar->AddPopup("&Musrfit");
fPopupMain->AddEntry("&Fourier", P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber);
fPopupMain->AddEntry("&Difference", P_MENU_ID_DIFFERENCE+P_MENU_PLOT_OFFSET*fPlotNumber);
fPopupMain->AddSeparator();
// 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->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
// 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)
{
switch (id) {
case P_MENU_ID_FOURIER:
cout << endl << ">> will handle Fourier ..." << endl;
break;
case P_MENU_ID_DIFFERENCE:
cout << endl << ">> will handle Difference ..." << endl;
break;
case P_MENU_ID_SAVE_DATA:
cout << endl << ">> will handle Save Data ..." << endl;
break;
default:
break;
if (id == P_MENU_ID_FOURIER+P_MENU_PLOT_OFFSET*fPlotNumber) {
cout << endl << ">> will handle Fourier ..." << endl;
} else if (id == P_MENU_ID_DIFFERENCE+P_MENU_PLOT_OFFSET*fPlotNumber) {
HandleDifference();
} else if (id == P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_ASCII) {
SaveDataAscii();
} else if (id == P_MENU_ID_SAVE_DATA+P_MENU_PLOT_OFFSET*fPlotNumber+P_MENU_ID_SAVE_DB) {
SaveDataDb();
}
}
@ -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_SAVE_DATA 10003
#define P_MENU_PLOT_OFFSET 1000
#define P_MENU_ID_SAVE_ASCII 100
#define P_MENU_ID_SAVE_DB 101
//------------------------------------------------------------------------
/**
* <p>
@ -158,7 +162,8 @@ class PMusrCanvas : public TObject, public TQObject
// canvas menu related variables
TRootCanvas *fImp;
TGMenuBar *fBar;
TGPopupMenu *fPopup;
TGPopupMenu *fPopupMain;
TGPopupMenu *fPopupSave;
// canvas related variables
TCanvas *fMainCanvas;
@ -195,6 +200,9 @@ class PMusrCanvas : public TObject, public TQObject
virtual void PlotDifference();
virtual void PlotFourier(int fourierType);
virtual void SaveDataAscii();
virtual void SaveDataDb();
ClassDef(PMusrCanvas, 1)
};