File: listctrl.h

package info (click to toggle)
wxwidgets3.0 3.0.5.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 120,464 kB
  • sloc: cpp: 896,633; makefile: 52,303; ansic: 21,971; sh: 5,713; python: 2,940; xml: 1,534; perl: 264; javascript: 33
file content (539 lines) | stat: -rw-r--r-- 15,436 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
///////////////////////////////////////////////////////////////////////////////
// Name:        wx/os2/listctrl.h
// Purpose:     wxListCtrl class
// Author:
// Modified by:
// Created:
// Copyright:   (c) wxWidgets team
// Licence:     wxWindows licence
///////////////////////////////////////////////////////////////////////////////

#ifndef _WX_LISTCTRL_H_
#define _WX_LISTCTRL_H_

#if wxUSE_LISTCTRL

#include "wx/control.h"
#include "wx/event.h"
#include "wx/hash.h"
#include "wx/textctrl.h"


class WXDLLIMPEXP_FWD_CORE wxImageList;

typedef int (wxCALLBACK *wxListCtrlCompare)(long lItem1, long lItem2, long lSortData);

class WXDLLIMPEXP_CORE wxListCtrl: public wxControl
{
public:
    wxListCtrl() { Init(); }
    wxListCtrl( wxWindow*          pParent
               ,wxWindowID         vId = -1
               ,const wxPoint&     rPos = wxDefaultPosition
               ,const wxSize&      rSize = wxDefaultSize
               ,long               lStyle = wxLC_ICON
               ,const wxValidator& rValidator = wxDefaultValidator
               ,const wxString&    rsName = wxListCtrlNameStr)
    {
        Init();
        Create( pParent
               ,vId
               ,rPos
               ,rSize
               ,lStyle
               ,rValidator
               ,rsName
              );
    }
    virtual ~wxListCtrl();

    bool Create( wxWindow*          pParent
                ,wxWindowID         vId = -1
                ,const wxPoint&     rPos = wxDefaultPosition
                ,const wxSize&      rSize = wxDefaultSize
                ,long               lStyle = wxLC_ICON
                ,const wxValidator& rValidator = wxDefaultValidator
                ,const wxString&    rsName = wxListCtrlNameStr
               );


    // Attributes
    ////////////////////////////////////////////////////////////////////////////
    //

    //
    // Set the control colours
    //
    bool SetForegroundColour(const wxColour& rCol);
    bool SetBackgroundColour(const wxColour& rCol);

    //
    // Information about this column
    //
    bool GetColumn( int nCol
                   ,wxListItem& rItem
                  ) const;
    bool SetColumn( int         nCol
                   ,wxListItem& rItem
                  );

    //
    // Column width
    //
    int  GetColumnWidth(int nCol) const;
    bool SetColumnWidth( int nCol
                        ,int nWidth
                       );

    //
    // Gets the number of items that can fit vertically in the
    // visible area of the list control (list or report view)
    // or the total number of items in the list control (icon
    // or small icon view)
    //
    int GetCountPerPage(void) const;

    wxRect GetViewRect() const;
    //
    // Gets the edit control for editing labels.
    //
    wxTextCtrl* GetEditControl(void) const;

    //
    // Information about the item
    //
    bool GetItem(wxListItem& rInfo) const;
    bool SetItem(wxListItem& rInfo);

    //
    // Sets a string field at a particular column
    //
    long SetItem( long            lIndex
                 ,int             nCol
                 ,const wxString& rsLabel
                 ,int             nImageId = -1
                );

    //
    // Item state
    //
    int  GetItemState( long lItem
                      ,long lStateMask
                     ) const;
    bool SetItemState( long lItem
                      ,long lState
                      ,long lStateMask
                      );

    //
    // Sets the item image
    //
    bool SetItemImage( long lItem
                      ,int  nImage
                      ,int  lSelImage
                     );
    bool SetItemColumnImage( long lItem
                            ,long lColumn
                            ,int  nImage
                           );

    //
    // Item text
    //
    wxString GetItemText(long lItem) const;
    void     SetItemText( long            lItem
                         ,const wxString& rsStr
                        );

    //
    // Item data
    //
    long GetItemData(long lItem) const;
    bool SetItemPtrData(long item, wxUIntPtr data);
    bool SetItemData(long item, long data) { return SetItemPtrData(item, data); }

    //
    // Gets the item rectangle
    //
    bool GetItemRect( long    lItem
                     ,wxRect& rRect
                     ,int     nCode = wxLIST_RECT_BOUNDS
                    ) const;

    //
    // Item position
    //
    bool GetItemPosition( long     lItem
                         ,wxPoint& rPos
                        ) const;
    bool SetItemPosition( long           lItem
                         ,const wxPoint& rPos
                        );

    //
    // Gets the number of items in the list control
    //
    int  GetItemCount(void) const;

    //
    // Gets the number of columns in the list control
    //
    inline int GetColumnCount(void) const { return m_nColCount; }

    //
    // Retrieves the spacing between icons in pixels.
    // If bIsSmall is true, gets the spacing for the small icon
    // view, otherwise the large icon view.
    //
    int  GetItemSpacing(bool bIsSmall) const;

    //
    // Foreground colour of an item.
    //
    wxColour GetItemTextColour(long lItem) const;
    void     SetItemTextColour( long            lItem
                               ,const wxColour& rCol
                              );

    //
    // Background colour of an item.
    //
    wxColour GetItemBackgroundColour(long lItem ) const;
    void     SetItemBackgroundColour( long            lItem
                                     ,const wxColour& rCol
                                    );

    //
    // Gets the number of selected items in the list control
    //
    int      GetSelectedItemCount(void) const;

    //
    // Text colour of the listview
    //
    wxColour GetTextColour(void) const;
    void     SetTextColour(const wxColour& rCol);

    //
    // Gets the index of the topmost visible item when in
    // list or report view
    //
    long GetTopItem(void) const;

    //
    // Add or remove a single window style
    void SetSingleStyle( long lStyle
                        ,bool bAdd = true
                       );

    //
    // Set the whole window style
    //
    void SetWindowStyleFlag(long lStyle);

    //
    // Searches for an item, starting from 'item'.
    // item can be -1 to find the first item that matches the
    // specified flags.
    // Returns the item or -1 if unsuccessful.
    long GetNextItem( long lItem
                     ,int  nGeometry = wxLIST_NEXT_ALL
                     ,int  lState = wxLIST_STATE_DONTCARE
                    ) const;

    //
    // Gets one of the three image lists
    //
    wxImageList* GetImageList(int nWhich) const;

    //
    // Sets the image list
    //
    void SetImageList( wxImageList* pImageList
                      ,int          nWhich
                     );
    void AssignImageList( wxImageList* pImageList
                         ,int          nWhich
                        );

    //
    // Returns true if it is a virtual list control
    //
    inline bool IsVirtual() const { return (GetWindowStyle() & wxLC_VIRTUAL) != 0; }

    //
    // Refresh items selectively (only useful for virtual list controls)
    //
    void RefreshItem(long lItem);
    void RefreshItems( long lItemFrom
                      ,long lItemTo
                     );

    //
    // Operations
    ////////////////////////////////////////////////////////////////////////////
    //

    //
    // Arranges the items
    //
    bool Arrange(int nFlag = wxLIST_ALIGN_DEFAULT);

    //
    // Deletes an item
    //
    bool DeleteItem(long lItem);

    //
    // Deletes all items
    bool DeleteAllItems(void);

    //
    // Deletes a column
    //
    bool DeleteColumn(int nCol);

    //
    // Deletes all columns
    //
    bool DeleteAllColumns(void);

    //
    // Clears items, and columns if there are any.
    //
    void ClearAll(void);

    //
    // Edit the label
    //
    wxTextCtrl* EditLabel( long         lItem
                          ,wxClassInfo* pTextControlClass = wxCLASSINFO(wxTextCtrl)
                         );

    //
    // End label editing, optionally cancelling the edit
    //
    bool EndEditLabel(bool bCancel);

    //
    // Ensures this item is visible
    //
    bool EnsureVisible(long lItem);

    //
    // Find an item whose label matches this string, starting from the item after 'start'
    // or the beginning if 'start' is -1.
    //
    long FindItem( long            lStart
                  ,const wxString& rsStr
                  ,bool            bPartial = false
                 );

    //
    // Find an item whose data matches this data, starting from the item after 'start'
    // or the beginning if 'start' is -1.
    //
    long FindItem( long lStart
                  ,long lData
                 );

    //
    // Find an item nearest this position in the specified direction, starting from
    // the item after 'start' or the beginning if 'start' is -1.
    //
    long FindItem( long           lStart
                  ,const wxPoint& rPoint
                  ,int            lDirection
                 );

    //
    // Determines which item (if any) is at the specified point,
    // giving details in 'flags' (see wxLIST_HITTEST_... flags above)
    //
    long HitTest( const wxPoint& rPoint
                 ,int&           rFlags
                );

    //
    // Inserts an item, returning the index of the new item if successful,
    // -1 otherwise.
    //
    long InsertItem(wxListItem& rInfo);

    //
    // Insert a string item
    //
    long InsertItem( long            lIndex
                    ,const wxString& rsLabel
                   );

    //
    // Insert an image item
    //
    long InsertItem( long lIndex
                    ,int  nImageIndex
                   );

    //
    // Insert an image/string item
    //
    long InsertItem( long            lIndex
                    ,const wxString& rsLabel
                    ,int             nImageIndex
                   );

    //
    // For list view mode (only), inserts a column.
    //
    long InsertColumn( long        lCol
                      ,wxListItem& rInfo
                     );

    long InsertColumn( long            lCol
                      ,const wxString& rsHeading
                      ,int             nFormat = wxLIST_FORMAT_LEFT
                      ,int             lWidth = -1
                     );

    //
    // set the number of items in a virtual list control
    //
    void SetItemCount(long lCount);

    //
    // Scrolls the list control. If in icon, small icon or report view mode,
    // x specifies the number of pixels to scroll. If in list view mode, x
    // specifies the number of columns to scroll.
    // If in icon, small icon or list view mode, y specifies the number of pixels
    // to scroll. If in report view mode, y specifies the number of lines to scroll.
    //
    bool ScrollList( int nDx
                    ,int nDy
                   );

    // Sort items.

    //
    // fn is a function which takes 3 long arguments: item1, item2, data.
    // item1 is the long data associated with a first item (NOT the index).
    // item2 is the long data associated with a second item (NOT the index).
    // data is the same value as passed to SortItems.
    // The return value is a negative number if the first item should precede the second
    // item, a positive number of the second item should precede the first,
    // or zero if the two items are equivalent.
    //
    // data is arbitrary data to be passed to the sort function.
    //
    bool SortItems( wxListCtrlCompare fn
                   ,long              lData
                  );

    //
    // IMPLEMENTATION
    // --------------
    //
    virtual bool OS2Command( WXUINT uParam
                            ,WXWORD wId
                           );
    //
    // Bring the control in sync with current m_windowStyle value
    //
    void UpdateStyle(void);

    //
    // Implementation: converts wxWidgets style to MSW style.
    // Can be a single style flag or a bit list.
    // oldStyle is 'normalised' so that it doesn't contain
    // conflicting styles.
    //
    long ConvertToOS2Style( long& lOldStyle
                           ,long  lStyle
                          ) const;
    long ConvertArrangeToOS2Style(long lStyle);
    long ConvertViewToOS2Style(long lStyle);

    virtual MRESULT OS2WindowProc( WXUINT   uMsg
                                  ,WXWPARAM wParam
                                  ,WXLPARAM lParam
                                 );

    // Event handlers
    ////////////////////////////////////////////////////////////////////////////
    // Necessary for drawing hrules and vrules, if specified
    void OnPaint(wxPaintEvent& rEvent);

protected:
    //
    // common part of all ctors
    //
    void Init(void);

    //
    // Free memory taken by all internal data
    //
    void FreeAllInternalData(void);

    wxTextCtrl*                     m_pTextCtrl;        // The control used for editing a label
    wxImageList*                    m_pImageListNormal; // The image list for normal icons
    wxImageList*                    m_pImageListSmall;  // The image list for small icons
    wxImageList*                    m_pImageListState;  // The image list state icons (not implemented yet)
    bool                            m_bOwnsImageListNormal;
    bool                            m_bOwnsImageListSmall;
    bool                            m_bOwnsImageListState;
    long                            m_lBaseStyle;       // Basic PM style flags, for recreation purposes
    int                             m_nColCount;        // PM doesn't have GetColumnCount so must
                                                        // keep track of inserted/deleted columns

    //
    // true if we have any internal data (user data & attributes)
    //
    bool                            m_bAnyInternalData;

    //
    // true if we have any items with custom attributes
    //
    bool                            m_bHasAnyAttr;

    //
    // These functions are only used for virtual list view controls, i.e. the
    // ones with wxLC_VIRTUAL style
    //
    // return the text for the given column of the given item
    //
    virtual wxString OnGetItemText( long lItem
                                   ,long lColumn
                                  ) const;

    //
    // Return the icon for the given item. In report view, OnGetItemImage will
    // only be called for the first column. See OnGetItemColumnImage for
    // details.
    //
    virtual int OnGetItemImage(long lItem) const;

    //
    // Return the icon for the given item and column
    //
    virtual int OnGetItemColumnImage(long lItem, long lColumn) const;

    //
    // Return the attribute for the item (may return NULL if none)
    //
    virtual wxListItemAttr* OnGetItemAttr(long lItem) const;

private:
    bool DoCreateControl( int nX
                         ,int nY
                         ,int nWidth
                         ,int nHeight
                        );

    DECLARE_DYNAMIC_CLASS(wxListCtrl)
    DECLARE_EVENT_TABLE()
    wxDECLARE_NO_COPY_CLASS(wxListCtrl);
}; // end of CLASS wxListCtrl

#endif // wxUSE_LISTCTRL

#endif // _WX_LISTCTRL_H_