#include "TSelection.h"
#include <iostream>
using namespace std;
ClassImp(TSelection)
TSelection::TSelection(char* title, TList* list, int* selection, int* stat, int N, int w, int h):TGTransientFrame(gClient->GetRoot(),gClient->GetRoot(),w,h)
{
int n;
mLoop = false;
mOK = 0;
mCancel = 0;
mNext = 0;
mPrevious = 0;
for(n = 0;n<20;n++) mCheck[n] = 0;
mId = 0;
mFirst = true;
if(!list)
{
delete this;
return;
}
mSelection = selection;
mStat = stat;
mMax = N;
mList = list;
if(mMax>20) mMax = 20;
n = mList->GetEntries();
if(n>mMax) mLoop = true;
else mMax = n;
SetWindowName((char*)title);
make();
gClient->WaitFor(this);
}
TSelection::~TSelection()
{
int n;
if(mOK) delete mOK;
if(mCancel) delete mCancel;
if(mNext) delete mNext;
if(mPrevious) delete mPrevious;
for(n = 0;n<20;n++) if(mCheck[n]) delete mCheck[n];
}
void TSelection::make()
{
int n,i;
int start = mId;
int stop = mId+mMax;
int entries = mList->GetEntries();
if (stop>entries) stop = entries;
for(n = start; n<stop; n++)
{
i = n-mId;
TObject* o = mList->At(n);
if(mFirst)
{
mCheck[i] = new TGRadioButton(this, (char*)o->GetName(), i);
mCheck[i]->SetToolTipText((char*)o->GetTitle());
AddFrame(mCheck[i],new TGLayoutHints(kLHintsExpandX));
}
else
{
mCheck[i]->SetTitle((char*)o->GetName());
mCheck[i]->SetToolTipText((char*)o->GetTitle());
}
mCheck[i]->SetState(kButtonUp);
}
if(stop-start<mMax)
{
for(n = stop-start; n<mMax; n++)
{
mCheck[n]->SetTitle("");
mCheck[i]->SetToolTipText("");
mCheck[n]->SetState(kButtonDisabled);
}
}
if(mFirst)
{
if(mLoop)
{
mPrevious = new TGTextButton(this, "Previous", 1001);
mNext = new TGTextButton(this, "Next", 1002);
AddFrame(mPrevious, new TGLayoutHints(kLHintsExpandX));
AddFrame(mNext, new TGLayoutHints(kLHintsExpandX));
}
mOK = new TGTextButton(this, "Ok", 1003);
mCancel = new TGTextButton(this, "Cancel", 1004);
AddFrame(mOK, new TGLayoutHints(kLHintsExpandX));
AddFrame(mCancel, new TGLayoutHints(kLHintsExpandX));
Resize(GetDefaultSize());
}
MapSubwindows();
MapWindow();
mFirst = false;
}
void TSelection::CloseWindow()
{
*mStat = 0;
delete this;
return;
}
bool TSelection::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
{
int i;
bool ok = false;
switch (GET_MSG(msg))
{
case kC_COMMAND:
switch (GET_SUBMSG(msg))
{
case kCM_BUTTON:
switch (parm1)
{
case 1001:
mId-=mMax;
if(mId<0) mId+=mMax;
else make();
break;
case 1002:
mId+=mMax;
if(mId>mList->GetEntries()) mId-=mMax;
else make();
break;
case 1003:
for(i = 0; i<mMax;i++)
{
if(mCheck[i])
if(mCheck[i]->GetState()==kButtonDown)
{
*mSelection = i+mId;
*mStat = 1;
ok = true;
}
}
if(ok) delete this;
break;
case 1004:
*mStat=0;
delete this;
break;
}
break;
case kCM_RADIOBUTTON:
for(i = 0; i<mMax; i++)
{
if(mCheck[i] && i!=parm1) mCheck[i]->SetState(kButtonUp);
}
break;
}
}
return true;
}
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.