ROOT logo
#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;
}
 TSelection.cxx:1
 TSelection.cxx:2
 TSelection.cxx:3
 TSelection.cxx:4
 TSelection.cxx:5
 TSelection.cxx:6
 TSelection.cxx:7
 TSelection.cxx:8
 TSelection.cxx:9
 TSelection.cxx:10
 TSelection.cxx:11
 TSelection.cxx:12
 TSelection.cxx:13
 TSelection.cxx:14
 TSelection.cxx:15
 TSelection.cxx:16
 TSelection.cxx:17
 TSelection.cxx:18
 TSelection.cxx:19
 TSelection.cxx:20
 TSelection.cxx:21
 TSelection.cxx:22
 TSelection.cxx:23
 TSelection.cxx:24
 TSelection.cxx:25
 TSelection.cxx:26
 TSelection.cxx:27
 TSelection.cxx:28
 TSelection.cxx:29
 TSelection.cxx:30
 TSelection.cxx:31
 TSelection.cxx:32
 TSelection.cxx:33
 TSelection.cxx:34
 TSelection.cxx:35
 TSelection.cxx:36
 TSelection.cxx:37
 TSelection.cxx:38
 TSelection.cxx:39
 TSelection.cxx:40
 TSelection.cxx:41
 TSelection.cxx:42
 TSelection.cxx:43
 TSelection.cxx:44
 TSelection.cxx:45
 TSelection.cxx:46
 TSelection.cxx:47
 TSelection.cxx:48
 TSelection.cxx:49
 TSelection.cxx:50
 TSelection.cxx:51
 TSelection.cxx:52
 TSelection.cxx:53
 TSelection.cxx:54
 TSelection.cxx:55
 TSelection.cxx:56
 TSelection.cxx:57
 TSelection.cxx:58
 TSelection.cxx:59
 TSelection.cxx:60
 TSelection.cxx:61
 TSelection.cxx:62
 TSelection.cxx:63
 TSelection.cxx:64
 TSelection.cxx:65
 TSelection.cxx:66
 TSelection.cxx:67
 TSelection.cxx:68
 TSelection.cxx:69
 TSelection.cxx:70
 TSelection.cxx:71
 TSelection.cxx:72
 TSelection.cxx:73
 TSelection.cxx:74
 TSelection.cxx:75
 TSelection.cxx:76
 TSelection.cxx:77
 TSelection.cxx:78
 TSelection.cxx:79
 TSelection.cxx:80
 TSelection.cxx:81
 TSelection.cxx:82
 TSelection.cxx:83
 TSelection.cxx:84
 TSelection.cxx:85
 TSelection.cxx:86
 TSelection.cxx:87
 TSelection.cxx:88
 TSelection.cxx:89
 TSelection.cxx:90
 TSelection.cxx:91
 TSelection.cxx:92
 TSelection.cxx:93
 TSelection.cxx:94
 TSelection.cxx:95
 TSelection.cxx:96
 TSelection.cxx:97
 TSelection.cxx:98
 TSelection.cxx:99
 TSelection.cxx:100
 TSelection.cxx:101
 TSelection.cxx:102
 TSelection.cxx:103
 TSelection.cxx:104
 TSelection.cxx:105
 TSelection.cxx:106
 TSelection.cxx:107
 TSelection.cxx:108
 TSelection.cxx:109
 TSelection.cxx:110
 TSelection.cxx:111
 TSelection.cxx:112
 TSelection.cxx:113
 TSelection.cxx:114
 TSelection.cxx:115
 TSelection.cxx:116
 TSelection.cxx:117
 TSelection.cxx:118
 TSelection.cxx:119
 TSelection.cxx:120
 TSelection.cxx:121
 TSelection.cxx:122
 TSelection.cxx:123
 TSelection.cxx:124
 TSelection.cxx:125
 TSelection.cxx:126
 TSelection.cxx:127
 TSelection.cxx:128
 TSelection.cxx:129
 TSelection.cxx:130
 TSelection.cxx:131
 TSelection.cxx:132
 TSelection.cxx:133
 TSelection.cxx:134
 TSelection.cxx:135
 TSelection.cxx:136
 TSelection.cxx:137
 TSelection.cxx:138
 TSelection.cxx:139
 TSelection.cxx:140
 TSelection.cxx:141
 TSelection.cxx:142
 TSelection.cxx:143
 TSelection.cxx:144
 TSelection.cxx:145
 TSelection.cxx:146
 TSelection.cxx:147
 TSelection.cxx:148
 TSelection.cxx:149
 TSelection.cxx:150
 TSelection.cxx:151
 TSelection.cxx:152
 TSelection.cxx:153
 TSelection.cxx:154
 TSelection.cxx:155
 TSelection.cxx:156
 TSelection.cxx:157
 TSelection.cxx:158
 TSelection.cxx:159
 TSelection.cxx:160
 TSelection.cxx:161
 TSelection.cxx:162
 TSelection.cxx:163
 TSelection.cxx:164
 TSelection.cxx:165