Applied Patch #1424869: Implement wxListCtrl::SetItemColumnImage
[wxWidgets.git] / include / wx / os2 / listctrl.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/os2/listctrl.h
3 // Purpose: wxListCtrl class
4 // Author:
5 // Modified by:
6 // Created:
7 // RCS-ID: $Id$
8 // Copyright: (c) wxWidgets team
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_LISTCTRL_H_
13 #define _WX_LISTCTRL_H_
14
15 #if wxUSE_LISTCTRL
16
17 #include "wx/control.h"
18 #include "wx/event.h"
19 #include "wx/hash.h"
20 #include "wx/textctrl.h"
21
22
23 class WXDLLEXPORT wxImageList;
24
25 typedef int (wxCALLBACK *wxListCtrlCompare)(long lItem1, long lItem2, long lSortData);
26
27 class WXDLLEXPORT wxListCtrl: public wxControl
28 {
29 public:
30 wxListCtrl() { Init(); }
31 wxListCtrl( wxWindow* pParent
32 ,wxWindowID vId = -1
33 ,const wxPoint& rPos = wxDefaultPosition
34 ,const wxSize& rSize = wxDefaultSize
35 ,long lStyle = wxLC_ICON
36 ,const wxValidator& rValidator = wxDefaultValidator
37 ,const wxString& rsName = wxListCtrlNameStr)
38 {
39 Init();
40 Create( pParent
41 ,vId
42 ,rPos
43 ,rSize
44 ,lStyle
45 ,rValidator
46 ,rsName
47 );
48 }
49 virtual ~wxListCtrl();
50
51 bool Create( wxWindow* pParent
52 ,wxWindowID vId = -1
53 ,const wxPoint& rPos = wxDefaultPosition
54 ,const wxSize& rSize = wxDefaultSize
55 ,long lStyle = wxLC_ICON
56 ,const wxValidator& rValidator = wxDefaultValidator
57 ,const wxString& rsName = wxListCtrlNameStr
58 );
59
60
61 // Attributes
62 ////////////////////////////////////////////////////////////////////////////
63 //
64
65 //
66 // Set the control colours
67 //
68 bool SetForegroundColour(const wxColour& rCol);
69 bool SetBackgroundColour(const wxColour& rCol);
70
71 //
72 // Information about this column
73 //
74 bool GetColumn( int nCol
75 ,wxListItem& rItem
76 ) const;
77 bool SetColumn( int nCol
78 ,wxListItem& rItem
79 );
80
81 //
82 // Column width
83 //
84 int GetColumnWidth(int nCol) const;
85 bool SetColumnWidth( int nCol
86 ,int nWidth
87 );
88
89 //
90 // Gets the number of items that can fit vertically in the
91 // visible area of the list control (list or report view)
92 // or the total number of items in the list control (icon
93 // or small icon view)
94 //
95 int GetCountPerPage(void) const;
96
97 wxRect GetViewRect() const;
98 //
99 // Gets the edit control for editing labels.
100 //
101 wxTextCtrl* GetEditControl(void) const;
102
103 //
104 // Information about the item
105 //
106 bool GetItem(wxListItem& rInfo) const;
107 bool SetItem(wxListItem& rInfo);
108
109 //
110 // Sets a string field at a particular column
111 //
112 long SetItem( long lIndex
113 ,int nCol
114 ,const wxString& rsLabel
115 ,int nImageId = -1
116 );
117
118 //
119 // Item state
120 //
121 int GetItemState( long lItem
122 ,long lStateMask
123 ) const;
124 bool SetItemState( long lItem
125 ,long lState
126 ,long lStateMask
127 );
128
129 //
130 // Sets the item image
131 //
132 bool SetItemImage( long lItem
133 ,int nImage
134 ,int lSelImage
135 );
136 bool SetItemColumnImage( long lItem
137 ,long lColumn
138 ,int nImage
139 );
140
141 //
142 // Item text
143 //
144 wxString GetItemText(long lItem) const;
145 void SetItemText( long lItem
146 ,const wxString& rsStr
147 );
148
149 //
150 // Item data
151 //
152 long GetItemData(long lItem) const;
153 bool SetItemData( long lItem
154 ,long lData
155 );
156
157 //
158 // Gets the item rectangle
159 //
160 bool GetItemRect( long lItem
161 ,wxRect& rRect
162 ,int nCode = wxLIST_RECT_BOUNDS
163 ) const;
164
165 //
166 // Item position
167 //
168 bool GetItemPosition( long lItem
169 ,wxPoint& rPos
170 ) const;
171 bool SetItemPosition( long lItem
172 ,const wxPoint& rPos
173 );
174
175 //
176 // Gets the number of items in the list control
177 //
178 int GetItemCount(void) const;
179
180 //
181 // Gets the number of columns in the list control
182 //
183 inline int GetColumnCount(void) const { return m_nColCount; }
184
185 //
186 // Retrieves the spacing between icons in pixels.
187 // If bIsSmall is true, gets the spacing for the small icon
188 // view, otherwise the large icon view.
189 //
190 int GetItemSpacing(bool bIsSmall) const;
191
192 //
193 // Foreground colour of an item.
194 //
195 wxColour GetItemTextColour(long lItem) const;
196 void SetItemTextColour( long lItem
197 ,const wxColour& rCol
198 );
199
200 //
201 // Background colour of an item.
202 //
203 wxColour GetItemBackgroundColour(long lItem ) const;
204 void SetItemBackgroundColour( long lItem
205 ,const wxColour& rCol
206 );
207
208 //
209 // Gets the number of selected items in the list control
210 //
211 int GetSelectedItemCount(void) const;
212
213 //
214 // Text colour of the listview
215 //
216 wxColour GetTextColour(void) const;
217 void SetTextColour(const wxColour& rCol);
218
219 //
220 // Gets the index of the topmost visible item when in
221 // list or report view
222 //
223 long GetTopItem(void) const;
224
225 //
226 // Add or remove a single window style
227 void SetSingleStyle( long lStyle
228 ,bool bAdd = true
229 );
230
231 //
232 // Set the whole window style
233 //
234 void SetWindowStyleFlag(long lStyle);
235
236 //
237 // Searches for an item, starting from 'item'.
238 // item can be -1 to find the first item that matches the
239 // specified flags.
240 // Returns the item or -1 if unsuccessful.
241 long GetNextItem( long lItem
242 ,int nGeometry = wxLIST_NEXT_ALL
243 ,int lState = wxLIST_STATE_DONTCARE
244 ) const;
245
246 //
247 // Gets one of the three image lists
248 //
249 wxImageList* GetImageList(int nWhich) const;
250
251 //
252 // Sets the image list
253 //
254 void SetImageList( wxImageList* pImageList
255 ,int nWhich
256 );
257 void AssignImageList( wxImageList* pImageList
258 ,int nWhich
259 );
260
261 //
262 // Returns true if it is a virtual list control
263 //
264 inline bool IsVirtual() const { return (GetWindowStyle() & wxLC_VIRTUAL) != 0; }
265
266 //
267 // Refresh items selectively (only useful for virtual list controls)
268 //
269 void RefreshItem(long lItem);
270 void RefreshItems( long lItemFrom
271 ,long lItemTo
272 );
273
274 //
275 // Operations
276 ////////////////////////////////////////////////////////////////////////////
277 //
278
279 //
280 // Arranges the items
281 //
282 bool Arrange(int nFlag = wxLIST_ALIGN_DEFAULT);
283
284 //
285 // Deletes an item
286 //
287 bool DeleteItem(long lItem);
288
289 //
290 // Deletes all items
291 bool DeleteAllItems(void);
292
293 //
294 // Deletes a column
295 //
296 bool DeleteColumn(int nCol);
297
298 //
299 // Deletes all columns
300 //
301 bool DeleteAllColumns(void);
302
303 //
304 // Clears items, and columns if there are any.
305 //
306 void ClearAll(void);
307
308 //
309 // Edit the label
310 //
311 wxTextCtrl* EditLabel( long lItem
312 ,wxClassInfo* pTextControlClass = CLASSINFO(wxTextCtrl)
313 );
314
315 //
316 // End label editing, optionally cancelling the edit
317 //
318 bool EndEditLabel(bool bCancel);
319
320 //
321 // Ensures this item is visible
322 //
323 bool EnsureVisible(long lItem);
324
325 //
326 // Find an item whose label matches this string, starting from the item after 'start'
327 // or the beginning if 'start' is -1.
328 //
329 long FindItem( long lStart
330 ,const wxString& rsStr
331 ,bool bPartial = false
332 );
333
334 //
335 // Find an item whose data matches this data, starting from the item after 'start'
336 // or the beginning if 'start' is -1.
337 //
338 long FindItem( long lStart
339 ,long lData
340 );
341
342 //
343 // Find an item nearest this position in the specified direction, starting from
344 // the item after 'start' or the beginning if 'start' is -1.
345 //
346 long FindItem( long lStart
347 ,const wxPoint& rPoint
348 ,int lDirection
349 );
350
351 //
352 // Determines which item (if any) is at the specified point,
353 // giving details in 'flags' (see wxLIST_HITTEST_... flags above)
354 //
355 long HitTest( const wxPoint& rPoint
356 ,int& rFlags
357 );
358
359 //
360 // Inserts an item, returning the index of the new item if successful,
361 // -1 otherwise.
362 //
363 long InsertItem(wxListItem& rInfo);
364
365 //
366 // Insert a string item
367 //
368 long InsertItem( long lIndex
369 ,const wxString& rsLabel
370 );
371
372 //
373 // Insert an image item
374 //
375 long InsertItem( long lIndex
376 ,int nImageIndex
377 );
378
379 //
380 // Insert an image/string item
381 //
382 long InsertItem( long lIndex
383 ,const wxString& rsLabel
384 ,int nImageIndex
385 );
386
387 //
388 // For list view mode (only), inserts a column.
389 //
390 long InsertColumn( long lCol
391 ,wxListItem& rInfo
392 );
393
394 long InsertColumn( long lCol
395 ,const wxString& rsHeading
396 ,int nFormat = wxLIST_FORMAT_LEFT
397 ,int lWidth = -1
398 );
399
400 //
401 // set the number of items in a virtual list control
402 //
403 void SetItemCount(long lCount);
404
405 //
406 // Scrolls the list control. If in icon, small icon or report view mode,
407 // x specifies the number of pixels to scroll. If in list view mode, x
408 // specifies the number of columns to scroll.
409 // If in icon, small icon or list view mode, y specifies the number of pixels
410 // to scroll. If in report view mode, y specifies the number of lines to scroll.
411 //
412 bool ScrollList( int nDx
413 ,int nDy
414 );
415
416 // Sort items.
417
418 //
419 // fn is a function which takes 3 long arguments: item1, item2, data.
420 // item1 is the long data associated with a first item (NOT the index).
421 // item2 is the long data associated with a second item (NOT the index).
422 // data is the same value as passed to SortItems.
423 // The return value is a negative number if the first item should precede the second
424 // item, a positive number of the second item should precede the first,
425 // or zero if the two items are equivalent.
426 //
427 // data is arbitrary data to be passed to the sort function.
428 //
429 bool SortItems( wxListCtrlCompare fn
430 ,long lData
431 );
432
433 //
434 // IMPLEMENTATION
435 // --------------
436 //
437 virtual bool OS2Command( WXUINT uParam
438 ,WXWORD wId
439 );
440 //
441 // Bring the control in sync with current m_windowStyle value
442 //
443 void UpdateStyle(void);
444
445 //
446 // Implementation: converts wxWidgets style to MSW style.
447 // Can be a single style flag or a bit list.
448 // oldStyle is 'normalised' so that it doesn't contain
449 // conflicting styles.
450 //
451 long ConvertToOS2Style( long& lOldStyle
452 ,long lStyle
453 ) const;
454 long ConvertArrangeToOS2Style(long lStyle);
455 long ConvertViewToOS2Style(long lStyle);
456
457 virtual MRESULT OS2WindowProc( WXUINT uMsg
458 ,WXWPARAM wParam
459 ,WXLPARAM lParam
460 );
461
462 // Event handlers
463 ////////////////////////////////////////////////////////////////////////////
464 // Necessary for drawing hrules and vrules, if specified
465 void OnPaint(wxPaintEvent& rEvent);
466
467 protected:
468 //
469 // common part of all ctors
470 //
471 void Init(void);
472
473 //
474 // Free memory taken by all internal data
475 //
476 void FreeAllInternalData(void);
477
478 wxTextCtrl* m_pTextCtrl; // The control used for editing a label
479 wxImageList* m_pImageListNormal; // The image list for normal icons
480 wxImageList* m_pImageListSmall; // The image list for small icons
481 wxImageList* m_pImageListState; // The image list state icons (not implemented yet)
482 bool m_bOwnsImageListNormal;
483 bool m_bOwnsImageListSmall;
484 bool m_bOwnsImageListState;
485 long m_lBaseStyle; // Basic PM style flags, for recreation purposes
486 int m_nColCount; // PM doesn't have GetColumnCount so must
487 // keep track of inserted/deleted columns
488
489 //
490 // true if we have any internal data (user data & attributes)
491 //
492 bool m_bAnyInternalData;
493
494 //
495 // true if we have any items with custom attributes
496 //
497 bool m_bHasAnyAttr;
498
499 //
500 // These functions are only used for virtual list view controls, i.e. the
501 // ones with wxLC_VIRTUAL style
502 //
503 // return the text for the given column of the given item
504 //
505 virtual wxString OnGetItemText( long lItem
506 ,long lColumn
507 ) const;
508
509 //
510 // Return the icon for the given item. In report view, OnGetItemImage will
511 // only be called for the first column. See OnGetItemColumnImage for
512 // details.
513 //
514 virtual int OnGetItemImage(long lItem) const;
515
516 //
517 // Return the icon for the given item and column
518 //
519 virtual int OnGetItemColumnImage(long lItem, long lColumn) const;
520
521 //
522 // Return the attribute for the item (may return NULL if none)
523 //
524 virtual wxListItemAttr* OnGetItemAttr(long lItem) const;
525
526 private:
527 bool DoCreateControl( int nX
528 ,int nY
529 ,int nWidth
530 ,int nHeight
531 );
532
533 DECLARE_DYNAMIC_CLASS(wxListCtrl)
534 DECLARE_EVENT_TABLE()
535 DECLARE_NO_COPY_CLASS(wxListCtrl)
536 }; // end of CLASS wxListCtrl
537
538 #endif // wxUSE_LISTCTRL
539
540 #endif // _WX_LISTCTRL_H_
541