KaliVeda  1.12/06
Heavy-Ion Analysis Toolkit
KVLVContainer.h
Go to the documentation of this file.
1 /*
2 $Id: KVLVContainer.h,v 1.7 2009/04/28 09:11:29 franklan Exp $
3 $Revision: 1.7 $
4 $Date: 2009/04/28 09:11:29 $
5 */
6 
9 
10 #ifndef __KVLVCONTAINER_H
11 #define __KVLVCONTAINER_H
12 
13 #include "TGListView.h"
14 #include "TFunction.h"
15 #include "TString.h"
16 #include "TMethodCall.h"
17 #include "TClass.h"
18 #include "TTimer.h"
19 #include "Riostream.h"
20 #include "KVDatime.h"
21 #include "TContextMenu.h"
22 #include "KVList.h"
23 #include "KVNumberList.h"
24 
32 
43 
44  enum {
47  kTString
48  };
53 
54 public:
55  KVLVColumnData(TClass* cl, const Char_t* name, const Char_t* method = "")
56  : fName(name), fMethod(method), result(""), fDate(kFALSE), fFmt(KVDatime::kCTIME), fIsKVDatime(kFALSE), fIsBoolean(kFALSE)
57  {
58  if (fMethod == "") fMethod.Form("Get%s", name);
59  fMethCall.Init(cl, fMethod.Data(), "");
60  if (!fMethCall.IsValid()) {
61  std::cout << "Error in <KVLVColumnData::KVLVColumnData> : method " << fMethod.Data()
62  << " is not valid for class " << cl->GetName() << std::endl;
63  }
65  fDataFormat = "";
66  switch (fRetType) {
68  fDataFormat = "%ld";
69  break;
70 
72  fDataFormat = "%lf";
73  break;
74 
75  default:
76  break;
77  }
79  if (rtn == "bool" || rtn == "Bool_t") fIsBoolean = kTRUE;
80  else fIsBoolean = kFALSE;
81  if (rtn == "TString" || rtn == "KVString") fRetType = kTString;
82  }
83  virtual ~KVLVColumnData()
84  {
85  }
86  virtual void SetIsDateTime(KVDatime::EKVDateFormat fmt = KVDatime::kCTIME, Bool_t with_reference = kTRUE);
87  virtual void SetIsBoolean(Bool_t isit = kTRUE)
88  {
89  fIsBoolean = isit;
90  };
91  virtual void SetDataFormat(const Char_t* fmt)
92  {
94  fDataFormat = fmt;
95  }
96 
97  virtual Bool_t IsBoolean() const
98  {
99  return fIsBoolean;
100  };
101  const Char_t* GetDataString(TObject*);
102  void GetData(TObject*, Long_t&);
103  void GetData(TObject*, Double_t&);
104  void GetData(TObject*, TString&);
105  void GetData(TObject*, KVDatime&);
106  Int_t Compare(TObject* ob1, TObject* ob2);
107 
108  ClassDef(KVLVColumnData, 0) //column data handler
109 };
110 
117 class KVLVContainer : public TGLVContainer {
118 
119  friend class KVLVFrameElement;
120  friend class KVLVEntry;
121 
124 
130 
132 protected:
133 
142 
144 
146 
147  virtual void FillList(const TCollection* = 0);
148  void DeleteColData();
149  void default_init();
150 
151  virtual void ActivateItemFromSelectAll(TGFrameElement* el);
152 public:
153 
154  KVLVContainer(const TGWindow* p = 0, UInt_t w = 1, UInt_t h = 1,
155  UInt_t options = kSunkenFrame,
157  KVLVContainer(TGCanvas* p, UInt_t options = kSunkenFrame,
159  virtual ~KVLVContainer();
160 
161  void AddFrame(TGFrame* f, TGLayoutHints* l = 0);
162  void Sort(int column); // *MENU*
163  virtual void Display(const TCollection* = 0);
164  virtual void Refresh();
165  virtual void SetDataColumns(Int_t ncols);
166  virtual void SetDataColumn(Int_t index, TClass* cl, const Char_t* name, const Char_t* method = "");
167  virtual KVLVColumnData* GetDataColumn(Int_t index) const
168  {
169  return (fColData ? (index < fNcols ? fColData[index] : 0) : 0);
170  };
171  TGLVEntry* FindItemWithData(void* userData);
172  void ActivateItemWithData(void* userData, Bool_t activate = kTRUE);
173  TGLVEntry* FindItemWithColumnData(const Char_t* colname, const Char_t* data);
174  TGLVEntry* FindItemWithColumnData(const Char_t* colname, Long_t data);
175  TGLVEntry* FindItemWithColumnData(const Char_t* colname, Double_t data);
176  void ActivateItemWithColumnData(const Char_t* colname, const Char_t* data, Bool_t activate = kTRUE);
177  void ActivateItemWithColumnData(const Char_t* colname, Long_t data, Bool_t activate = kTRUE);
178  void ActivateItemWithColumnData(const Char_t* colname, Double_t data, Bool_t activate = kTRUE);
179  void ActivateItemsWithColumnData(const Char_t* colname, KVNumberList data, Bool_t activate = kTRUE);
180 
183  void SetDoubleClickAction(const char* receiver_class, void* receiver, const char* slot);
184 
186  {
189  };
191  {
193  return (TGLVEntry*)GetLastActive();
194  };
200  {
203  return fPickOrderedObjects;
204  }
206  {
208  return fUserItems;
209  };
211  {
212  return fSort;
213  };
214  void AllowContextMenu(Bool_t on = kTRUE)
215  {
217  fAllowContextMenu = on;
218  };
220  void AllowBrowse(Bool_t on = kTRUE)
221  {
223  AllowDoubleClick(on);
224  };
225  void AllowDoubleClick(Bool_t on = kTRUE)
226  {
228  fAllowDoubleClick = on;
229  };
230  virtual void RemoveAll();
231 
232  void DoubleClickAction(TObject*); /* SIGNAL */
234 
235  void SetObjClass(TClass* cN)
236  {
237  fObjClass = cN;
238  }
239  void AddDataColumn(const char* columnName); // *MENU*
241  virtual void SelectAll(); /* SIGNAL */
242 
244  {
246  }
247 
248  ClassDef(KVLVContainer, 0) //List view container class
249 };
250 
251 #endif
int Int_t
unsigned int UInt_t
long Long_t
ULong_t Pixel_t
char Char_t
const Bool_t kFALSE
bool Bool_t
double Double_t
const Bool_t kTRUE
#define ClassDef(name, id)
Extension of TDatime to handle various useful date formats.
Definition: KVDatime.h:32
EKVDateFormat
Definition: KVDatime.h:40
@ kCTIME
Definition: KVDatime.h:41
Utility class describing the data used to fill each column of the list view container.
Definition: KVLVContainer.h:31
TString fName
name used on button at top of column
Definition: KVLVContainer.h:33
virtual Bool_t IsBoolean() const
Definition: KVLVContainer.h:97
Int_t Compare_double(TObject *o1, TObject *o2)
TMethodCall fMethCall
method call object
Definition: KVLVContainer.h:35
const Char_t * GetDataString(TObject *)
Format string with column data for object.
Int_t fRetType
return type of data retrieval method
Definition: KVLVContainer.h:36
virtual void SetDataFormat(const Char_t *fmt)
Definition: KVLVContainer.h:91
KVDatime::EKVDateFormat fFmt
format for presenting date & time
Definition: KVLVContainer.h:39
Int_t Compare_date(TObject *o1, TObject *o2)
Int_t Compare(TObject *ob1, TObject *ob2)
TString fMethod
method used to retrieve data from objects
Definition: KVLVContainer.h:34
Int_t Compare_long(TObject *o1, TObject *o2)
TString fDataFormat
format for displaying numerical data
Definition: KVLVContainer.h:42
TString result
string used to store object data
Definition: KVLVContainer.h:37
KVLVColumnData(TClass *cl, const Char_t *name, const Char_t *method="")
Definition: KVLVContainer.h:55
Int_t Compare_string(TObject *o1, TObject *o2)
Bool_t fIsBoolean
kTRUE if column data is a boolean (i.e. 1 or 0, kTRUE or kFALSE)
Definition: KVLVContainer.h:41
virtual void SetIsDateTime(KVDatime::EKVDateFormat fmt=KVDatime::kCTIME, Bool_t with_reference=kTRUE)
Bool_t fDate
kTRUE if column contains TDatime date & time info
Definition: KVLVContainer.h:38
void GetData(TObject *, Long_t &)
virtual ~KVLVColumnData()
Definition: KVLVContainer.h:83
Bool_t fIsKVDatime
kTRUE if date & time is in KVDatime object, TDatime if not
Definition: KVLVContainer.h:40
virtual void SetIsBoolean(Bool_t isit=kTRUE)
Definition: KVLVContainer.h:87
Extension of TGLVContainer for KVListView widget.
virtual void RemoveAll()
void ActivateItemWithData(void *userData, Bool_t activate=kTRUE)
void AllowDoubleClick(Bool_t on=kTRUE)
KVLVColumnData * fSortData
name of column (i.e. type of data) currently used to sort objects
virtual void FillList(const TCollection *=0)
void AddDataColumn(const char *columnName)
virtual void Display(const TCollection *=0)
void DoubleClickAction(TObject *)
TObject * GetFirstInList()
Returns first object in currently displayed list.
void ActivateItemsWithColumnData(const Char_t *colname, KVNumberList data, Bool_t activate=kTRUE)
TContextMenu * fContextMenu
used to display popup context menu for items
virtual ~KVLVContainer()
Destructor.
virtual void Refresh()
void OpenContextMenu(TGFrame *, Int_t, Int_t, Int_t)
Bool_t fUserDoubleClickAction
user-defined double-click action instead of Browse() method
void ActivateItemWithColumnData(const Char_t *colname, const Char_t *data, Bool_t activate=kTRUE)
Bool_t fAllowContextMenu
can objects' context menu be opened with right-click ?
Int_t fNcols
number of data columns
void AllowBrowse(Bool_t on=kTRUE)
KVList * GetPickOrderedSelectedObjects() const
void DoDoubleClick(TGFrame *, Int_t, Int_t, Int_t)
Bool_t fUseObjLabelAsRealClass
if kTRUE, object's classname read from KVBase::GetLabel() (objects must be KVBase-derived!...
Bool_t fControlClick
set to kTRUE when user ctrl-clicks an item
TGLVEntry * FindItemWithColumnData(const Char_t *colname, const Char_t *data)
Bool_t fAllowDoubleClick
do something when object double-clicked ?
TCollection * GetUserItems()
TObject * GetLastSelectedObject() const
void SetUseObjLabelAsRealClass(Bool_t on=kTRUE)
TList * GetSelectedItems()
Bool_t fKeepUserItems
internal use only, do not clear list of user items in RemoveAll()
KVLVColumnData ** fColData
description of column data
virtual void SelectAll()
void SetNewColumnName(const char* columnName);
KVList * fUserItems
list of currently displayed items, used by Refresh()
void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add an item to the list.
KVLVContainer(const TGWindow *p=0, UInt_t w=1, UInt_t h=1, UInt_t options=kSunkenFrame, Pixel_t back=GetDefaultFrameBackground())
TObject * GetLastInList()
Returns last object in currently displayed list.
TList * GetSelectedObjects()
virtual void SetDataColumns(Int_t ncols)
void AddContextMenuClassException(TClass *)
Int_t fSortType
current sorting mode of contents (ascending or descending)
virtual KVLVColumnData * GetDataColumn(Int_t index) const
void AllowContextMenu(Bool_t on=kTRUE)
virtual void SetDataColumn(Int_t index, TClass *cl, const Char_t *name, const Char_t *method="")
void SetObjClass(TClass *cN)
void Sort(int column)
Sort objects in container according to contents of given column.
virtual void ActivateItemFromSelectAll(TGFrameElement *el)
Activate item.
TList * fContextMenuClassExceptions
list of classes for which we override value of fAllowContextMenu
void SetDoubleClickAction(const char *receiver_class, void *receiver, const char *slot)
Bool_t HandleButton(Event_t *event)
Override TGContainer method in order to set fControlClick flag.
TGLVEntry * FindItemWithData(void *userData)
Find item with fUserData == userData in container.
TGLVEntry * GetLastSelectedItem() const
Bool_t IsBeingSorted() const
Int_t * fSortDir
direction of sorting for each column
KVList * fPickOrderedObjects
list of currently selected objects, in order of selection
TClass * fObjClass
Bool_t fIsResized
used to resize columns exactly once
One item/line in a KVListView window.
Definition: KVLVEntry.h:64
Extension of TGFrameElement used by KVLVContainer.
Extended TList class which owns its objects by default.
Definition: KVList.h:27
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:83
const char * GetReturnTypeName() const
virtual TGFrame * GetLastActive() const
static Pixel_t GetDefaultFrameBackground()
void * GetUserData() const
EReturnType ReturnType()
static const EReturnType kLong
TFunction * GetMethod()
static const EReturnType kNone
Bool_t IsValid() const
void Init(const char *function, const char *params)
static const EReturnType kDouble
const char * Data() const
void Form(const char *fmt,...)
const long double cl
Definition: KVUnits.h:85