#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.