ROOT logo
// @(#)root/gui:$Id: TGListView.h 26097 2008-11-07 10:02:53Z bellenot $
// Author: Fons Rademakers   17/01/98

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TGListView
#define ROOT_TGListView


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGListView, TGLVContainer and TGLVEntry                              //
//                                                                      //
// A list view is a widget that can contain a number of items           //
// arranged in a grid or list. The items can be represented either      //
// by a string or by an icon.                                           //
//                                                                      //
// The TGListView is user callable. The other classes are service       //
// classes of the list view.                                            //
//                                                                      //
// A list view can generate the following events:                       //
// kC_CONTAINER, kCT_SELCHANGED, total items, selected items.           //
// kC_CONTAINER, kCT_ITEMCLICK, which button, location (y<<16|x).       //
// kC_CONTAINER, kCT_ITEMDBLCLICK, which button, location (y<<16|x).    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TGCanvas
#include "TGCanvas.h"
#endif
#ifndef ROOT_TGWidget
#include "TGWidget.h"
#endif
#ifndef ROOT_TGSplitter
#include "TGSplitter.h"
#endif


enum EListViewMode {
   kLVLargeIcons,
   kLVSmallIcons,
   kLVList,
   kLVDetails
};


class TGSelectedPicture;
class TGTextButton;
class TGListView;
class TGLVContainer;
class TGHeaderFrame;


class TGLVEntry : public TGFrame {

private:
   TGLVEntry(const TGLVEntry&); // Not implemented
   TGLVEntry& operator=(const TGLVEntry&); // Not implemented

protected:
   TGString           *fItemName;    // name of item
   TGString          **fSubnames;    // sub names of item (details)
   Int_t              *fCpos;        // position of sub names
   Int_t              *fJmode;       // alignment for sub names
   Int_t              *fCtw;         // width of sub names
   UInt_t              fTWidth;      // width of name
   UInt_t              fTHeight;     // height of name
   Bool_t              fActive;      // true if item is active
   Bool_t              fChecked;     // true if item is checked
   EListViewMode       fViewMode;    // list view viewing mode
   const TGPicture    *fBigPic;      // big icon
   const TGPicture    *fSmallPic;    // small icon
   const TGPicture    *fCurrent;     // current icon
   const TGPicture    *fCheckMark;   // checkmark
   TGSelectedPicture  *fSelPic;      // selected icon
   GContext_t          fNormGC;      // drawing graphics context
   FontStruct_t        fFontStruct;  // text font
   void               *fUserData;    // pointer to user data structure

   static const TGFont *fgDefaultFont;
   static TGGC         *fgDefaultGC;

   virtual void DoRedraw();

   static FontStruct_t  GetDefaultFontStruct();
   static const TGGC   &GetDefaultGC();

public:
   TGLVEntry(const TGWindow *p = 0,
             const TGPicture *bigpic = 0, const TGPicture *smallpic = 0,
             TGString *name = 0, TGString **subnames = 0,
             EListViewMode ViewMode = kLVDetails,
             UInt_t options = kChildFrame,
             Pixel_t back = GetWhitePixel());

   TGLVEntry(const TGLVContainer *p,
             const TString& name, const TString& cname, TGString **subnames = 0,
             UInt_t options = kChildFrame, Pixel_t back = GetWhitePixel());

   virtual ~TGLVEntry();

   virtual void SetViewMode(EListViewMode viewMode);

   virtual void        Activate(Bool_t a);
   Bool_t              IsActive() const { return fActive; }
   TGString           *GetItemName() const { return fItemName; }
   virtual const char *GetTitle() const { return fItemName->GetString(); }
   virtual void        SetTitle(const char *text) { *fItemName = text; }
   void                SetItemName(const char *name) { *fItemName = name; }
   const TGPicture    *GetPicture() const { return fCurrent; }
   EListViewMode       GetViewMode() const { return fViewMode; }
   void                SetUserData(void *userData) { fUserData = userData; }
   void               *GetUserData() const { return fUserData; }
   virtual void        SetSubnames(const char* n1="",const char* n2="",const char* n3="",
                                   const char* n4="",const char* n5="",const char* n6="",
                                   const char* n7="",const char* n8="",const char* n9="",
                                   const char* n10="",const char* n11="",const char* n12="");
   virtual void        SetPictures(const TGPicture *bigpic = 0, const TGPicture *smallpic = 0);
   virtual void        SetColumns(Int_t *cpos, Int_t *jmode) { fCpos = cpos; fJmode = jmode; }
   virtual void        SetCheckedEntry(Bool_t check = kTRUE) { fChecked = check; }

   virtual TGDimension GetDefaultSize() const;
   virtual Int_t       GetSubnameWidth(Int_t idx) const { return fCtw[idx]; }

   virtual void DrawCopy(Handle_t id, Int_t x, Int_t y);

   ClassDef(TGLVEntry,0)  // Item that goes into a TGListView container
};


class TGListView : public TGCanvas {

private:
   TGListView(const TGListView&); // Not implemented
   TGListView& operator=(const TGListView&); // Not implemented

protected:
   Int_t                 fNColumns;      // number of columns
   Int_t                *fColumns;       // column width
   Int_t                *fJmode;         // column text alignment
   EListViewMode         fViewMode;      // view mode if list view widget
   TGDimension           fMaxSize;       // maximum item size
   TGTextButton        **fColHeader;     // column headers for in detailed mode
   TString              *fColNames;      // column titles for in detailed mode
   TGVFileSplitter     **fSplitHeader;   // column splitters
   GContext_t            fNormGC;        // drawing graphics context
   FontStruct_t          fFontStruct;    // text font
   TGHeaderFrame        *fHeader;        // frame used as container for column headers
   Bool_t                fJustChanged;   // Indicate whether the view mode was just changed to Detail
   UInt_t                fMinColumnSize; // Minimun column size

   static const TGFont  *fgDefaultFont;
   static TGGC          *fgDefaultGC;

   static FontStruct_t   GetDefaultFontStruct();
   static const TGGC    &GetDefaultGC();

public:
   TGListView(const TGWindow *p, UInt_t w, UInt_t h,
              UInt_t options = kSunkenFrame | kDoubleBorder,
              Pixel_t back = GetDefaultFrameBackground());
   virtual ~TGListView();

   virtual void   ResizeColumns();
   virtual void   Layout();
   virtual void   LayoutHeader(TGFrame *head);
   virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
   virtual void   ScrollHeader(Int_t pos);
   virtual void   SetContainer(TGFrame *f);
   virtual void   AdjustHeaders() { fJustChanged = kTRUE; LayoutHeader(0); }
   virtual void   SetHeaders(Int_t ncolumns);
   virtual void   SetHeader(const char *s, Int_t hmode, Int_t cmode, Int_t idx);
   virtual void   SetDefaultHeaders();
   virtual void   SetViewMode(EListViewMode viewMode);
   TGTextButton** GetHeaderButtons() { return fColHeader; }
   UInt_t         GetNumColumns() { return fNColumns; }
   EListViewMode  GetViewMode() const { return fViewMode; }
   virtual const char *GetHeader(Int_t idx) const;
   virtual void   SavePrimitive(ostream &out, Option_t *option = "");
   virtual void   SetIncrements(Int_t hInc, Int_t vInc);
   virtual void   SetDefaultColumnWidth(TGVFileSplitter* splitter);
   TGDimension    GetMaxItemSize() const { return fMaxSize; }

   virtual void SelectionChanged() { Emit("SelectionChanged()"); }  //*SIGNAL*
   virtual void Clicked(TGLVEntry *entry, Int_t btn);  //*SIGNAL*
   virtual void Clicked(TGLVEntry *entry, Int_t btn, Int_t x, Int_t y);  //*SIGNAL*
   virtual void DoubleClicked(TGLVEntry *entry, Int_t btn);  //*SIGNAL*
   virtual void DoubleClicked(TGLVEntry *entry, Int_t btn, Int_t x, Int_t y);  //*SIGNAL*

   ClassDef(TGListView,0)  // List view widget (iconbox, small icons or tabular view)
};


class TGLVContainer : public TGContainer {

private:
   TGLVContainer(const TGLVContainer&); // Not implemented
   TGLVContainer& operator=(const TGLVContainer&); // Not implemented

protected:
   TGLayoutHints     *fItemLayout;    // item layout hints
   EListViewMode      fViewMode;      // list view viewing mode
   Int_t             *fCpos;          // position of sub names
   Int_t             *fJmode;         // alignment of sub names
   Bool_t             fMultiSelect;   // true = multiple file selection
   TGListView        *fListView;      // listview which contains this container
   TGLVEntry         *fLastActive;    // last active item

   virtual void ActivateItem(TGFrameElement* el);
   virtual void DeActivateItem(TGFrameElement* el);

public:
   TGLVContainer(const TGWindow *p, UInt_t w, UInt_t h,
                 UInt_t options = kSunkenFrame,
                 Pixel_t back = GetDefaultFrameBackground());
   TGLVContainer(TGCanvas *p, UInt_t options = kSunkenFrame,
                 Pixel_t back = GetDefaultFrameBackground());

   virtual ~TGLVContainer();

   TGListView  *GetListView() const { return fListView; }

   virtual void AddItem(TGLVEntry *item)
                  { AddFrame(item, fItemLayout); item->SetColumns(fCpos, fJmode); fTotal++; }

   virtual void  SetListView(TGListView *lv) { fListView = lv; }
   virtual void  RemoveItemWithData(void *userData);
   virtual void  SetViewMode(EListViewMode viewMode);
   EListViewMode GetViewMode() const { return fViewMode; }
   virtual void  SetColumns(Int_t *cpos, Int_t *jmode);

   virtual TGDimension GetPageDimension() const;
   virtual TGDimension GetMaxItemSize() const;
   virtual Int_t GetMaxSubnameWidth(Int_t idx) const;
   virtual void  SetColHeaders(const char* n1="",const char* n2="",const char* n3="",
                               const char* n4="",const char* n5="",const char* n6="",
                               const char* n7="",const char* n8="",const char* n9="",
                               const char* n10="",const char* n11="",const char* n12="");
   virtual void LineUp(Bool_t select = kFALSE);
   virtual void LineDown(Bool_t select = kFALSE);
   virtual void LineLeft(Bool_t select = kFALSE);
   virtual void LineRight(Bool_t select = kFALSE);

   virtual Bool_t HandleButton(Event_t* event);
   TList* GetSelectedItems();
   Bool_t GetMultipleSelection() const { return fMultiSelect; };
   void   SetMultipleSelection(Bool_t multi = kTRUE) { fMultiSelect = multi; };
   void   SetHeaders(Int_t ncolumns) { fListView->SetHeaders(ncolumns); }
   void   SetHeader(const char *s, Int_t hmode, Int_t cmode, Int_t idx)
                              { fListView->SetHeader(s,hmode,cmode,idx); }
   void   SetDefaultHeaders() { fListView->SetDefaultHeaders(); }
   const char *GetHeader(Int_t idx) const { return fListView->GetHeader(idx); }
   virtual void   SavePrimitive(ostream &out, Option_t *option = "");

   ClassDef(TGLVContainer,0)  // Listview container
};

#endif
 TGListView.h:1
 TGListView.h:2
 TGListView.h:3
 TGListView.h:4
 TGListView.h:5
 TGListView.h:6
 TGListView.h:7
 TGListView.h:8
 TGListView.h:9
 TGListView.h:10
 TGListView.h:11
 TGListView.h:12
 TGListView.h:13
 TGListView.h:14
 TGListView.h:15
 TGListView.h:16
 TGListView.h:17
 TGListView.h:18
 TGListView.h:19
 TGListView.h:20
 TGListView.h:21
 TGListView.h:22
 TGListView.h:23
 TGListView.h:24
 TGListView.h:25
 TGListView.h:26
 TGListView.h:27
 TGListView.h:28
 TGListView.h:29
 TGListView.h:30
 TGListView.h:31
 TGListView.h:32
 TGListView.h:33
 TGListView.h:34
 TGListView.h:35
 TGListView.h:36
 TGListView.h:37
 TGListView.h:38
 TGListView.h:39
 TGListView.h:40
 TGListView.h:41
 TGListView.h:42
 TGListView.h:43
 TGListView.h:44
 TGListView.h:45
 TGListView.h:46
 TGListView.h:47
 TGListView.h:48
 TGListView.h:49
 TGListView.h:50
 TGListView.h:51
 TGListView.h:52
 TGListView.h:53
 TGListView.h:54
 TGListView.h:55
 TGListView.h:56
 TGListView.h:57
 TGListView.h:58
 TGListView.h:59
 TGListView.h:60
 TGListView.h:61
 TGListView.h:62
 TGListView.h:63
 TGListView.h:64
 TGListView.h:65
 TGListView.h:66
 TGListView.h:67
 TGListView.h:68
 TGListView.h:69
 TGListView.h:70
 TGListView.h:71
 TGListView.h:72
 TGListView.h:73
 TGListView.h:74
 TGListView.h:75
 TGListView.h:76
 TGListView.h:77
 TGListView.h:78
 TGListView.h:79
 TGListView.h:80
 TGListView.h:81
 TGListView.h:82
 TGListView.h:83
 TGListView.h:84
 TGListView.h:85
 TGListView.h:86
 TGListView.h:87
 TGListView.h:88
 TGListView.h:89
 TGListView.h:90
 TGListView.h:91
 TGListView.h:92
 TGListView.h:93
 TGListView.h:94
 TGListView.h:95
 TGListView.h:96
 TGListView.h:97
 TGListView.h:98
 TGListView.h:99
 TGListView.h:100
 TGListView.h:101
 TGListView.h:102
 TGListView.h:103
 TGListView.h:104
 TGListView.h:105
 TGListView.h:106
 TGListView.h:107
 TGListView.h:108
 TGListView.h:109
 TGListView.h:110
 TGListView.h:111
 TGListView.h:112
 TGListView.h:113
 TGListView.h:114
 TGListView.h:115
 TGListView.h:116
 TGListView.h:117
 TGListView.h:118
 TGListView.h:119
 TGListView.h:120
 TGListView.h:121
 TGListView.h:122
 TGListView.h:123
 TGListView.h:124
 TGListView.h:125
 TGListView.h:126
 TGListView.h:127
 TGListView.h:128
 TGListView.h:129
 TGListView.h:130
 TGListView.h:131
 TGListView.h:132
 TGListView.h:133
 TGListView.h:134
 TGListView.h:135
 TGListView.h:136
 TGListView.h:137
 TGListView.h:138
 TGListView.h:139
 TGListView.h:140
 TGListView.h:141
 TGListView.h:142
 TGListView.h:143
 TGListView.h:144
 TGListView.h:145
 TGListView.h:146
 TGListView.h:147
 TGListView.h:148
 TGListView.h:149
 TGListView.h:150
 TGListView.h:151
 TGListView.h:152
 TGListView.h:153
 TGListView.h:154
 TGListView.h:155
 TGListView.h:156
 TGListView.h:157
 TGListView.h:158
 TGListView.h:159
 TGListView.h:160
 TGListView.h:161
 TGListView.h:162
 TGListView.h:163
 TGListView.h:164
 TGListView.h:165
 TGListView.h:166
 TGListView.h:167
 TGListView.h:168
 TGListView.h:169
 TGListView.h:170
 TGListView.h:171
 TGListView.h:172
 TGListView.h:173
 TGListView.h:174
 TGListView.h:175
 TGListView.h:176
 TGListView.h:177
 TGListView.h:178
 TGListView.h:179
 TGListView.h:180
 TGListView.h:181
 TGListView.h:182
 TGListView.h:183
 TGListView.h:184
 TGListView.h:185
 TGListView.h:186
 TGListView.h:187
 TGListView.h:188
 TGListView.h:189
 TGListView.h:190
 TGListView.h:191
 TGListView.h:192
 TGListView.h:193
 TGListView.h:194
 TGListView.h:195
 TGListView.h:196
 TGListView.h:197
 TGListView.h:198
 TGListView.h:199
 TGListView.h:200
 TGListView.h:201
 TGListView.h:202
 TGListView.h:203
 TGListView.h:204
 TGListView.h:205
 TGListView.h:206
 TGListView.h:207
 TGListView.h:208
 TGListView.h:209
 TGListView.h:210
 TGListView.h:211
 TGListView.h:212
 TGListView.h:213
 TGListView.h:214
 TGListView.h:215
 TGListView.h:216
 TGListView.h:217
 TGListView.h:218
 TGListView.h:219
 TGListView.h:220
 TGListView.h:221
 TGListView.h:222
 TGListView.h:223
 TGListView.h:224
 TGListView.h:225
 TGListView.h:226
 TGListView.h:227
 TGListView.h:228
 TGListView.h:229
 TGListView.h:230
 TGListView.h:231
 TGListView.h:232
 TGListView.h:233
 TGListView.h:234
 TGListView.h:235
 TGListView.h:236
 TGListView.h:237
 TGListView.h:238
 TGListView.h:239
 TGListView.h:240
 TGListView.h:241
 TGListView.h:242
 TGListView.h:243
 TGListView.h:244
 TGListView.h:245
 TGListView.h:246
 TGListView.h:247
 TGListView.h:248
 TGListView.h:249
 TGListView.h:250
 TGListView.h:251
 TGListView.h:252
 TGListView.h:253
 TGListView.h:254
 TGListView.h:255
 TGListView.h:256
 TGListView.h:257
 TGListView.h:258
 TGListView.h:259
 TGListView.h:260
 TGListView.h:261
 TGListView.h:262
 TGListView.h:263
 TGListView.h:264