]> git.saurik.com Git - wxWidgets.git/blame - src/mac/listctrl.cpp
a base for geometry operations
[wxWidgets.git] / src / mac / listctrl.cpp
CommitLineData
e9576ca5
SC
1/////////////////////////////////////////////////////////////////////////////
2// Name: listctrl.cpp
3// Purpose: wxListCtrl. See also Robert's generic wxListCtrl
4// Author: AUTHOR
5// Modified by:
6// Created: ??/??/98
7// RCS-ID: $Id$
8// Copyright: (c) AUTHOR
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "listctrl.h"
14#endif
15
16#include "wx/stubs/textctrl.h"
17#include "wx/stubs/listctrl.h"
18
e9576ca5
SC
19IMPLEMENT_DYNAMIC_CLASS(wxListCtrl, wxControl)
20IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject)
21
e9576ca5
SC
22
23wxListCtrl::wxListCtrl()
24{
25 m_imageListNormal = NULL;
26 m_imageListSmall = NULL;
27 m_imageListState = NULL;
28 m_baseStyle = 0;
29 m_colCount = 0;
30}
31
32bool wxListCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size,
33 long style, const wxValidator& validator, const wxString& name)
34{
35 m_imageListNormal = NULL;
36 m_imageListSmall = NULL;
37 m_imageListState = NULL;
38 m_colCount = 0;
39
40 SetValidator(validator);
41 SetName(name);
42
43 m_windowStyle = style;
44
45 SetParent(parent);
46
47 m_windowId = (id == -1) ? NewControlId() : id;
48
49 if (parent) parent->AddChild(this);
50
51 // TODO create list control
52 return TRUE;
53}
54
55wxListCtrl::~wxListCtrl()
56{
57}
58
59// Add or remove a single window style
60void wxListCtrl::SetSingleStyle(long style, bool add)
61{
62 long flag = GetWindowStyleFlag();
63
64 // Get rid of conflicting styles
65 if ( add )
66 {
67 if ( style & wxLC_MASK_TYPE)
68 flag = flag & ~wxLC_MASK_TYPE ;
69 if ( style & wxLC_MASK_ALIGN )
70 flag = flag & ~wxLC_MASK_ALIGN ;
71 if ( style & wxLC_MASK_SORT )
72 flag = flag & ~wxLC_MASK_SORT ;
73 }
74
75 if ( flag & style )
76 {
77 if ( !add )
78 flag -= style;
79 }
80 else
81 {
82 if ( add )
83 {
84 flag |= style;
85 }
86 }
87
88 m_windowStyle = flag;
89
90 /* TODO RecreateWindow(); */
91}
92
93// Set the whole window style
94void wxListCtrl::SetWindowStyleFlag(long flag)
95{
96 m_windowStyle = flag;
97
98 /* TODO RecreateWindow(); */
99}
100
101
102// Gets information about this column
103bool wxListCtrl::GetColumn(int col, wxListItem& item) const
104{
105 // TODO
106 return FALSE;
107}
108
109// Sets information about this column
110bool wxListCtrl::SetColumn(int col, wxListItem& item)
111{
112 // TODO
113 return FALSE;
114}
115
116// Gets the column width
117int wxListCtrl::GetColumnWidth(int col) const
118{
119 // TODO
120 return 0;
121}
122
123// Sets the column width
124bool wxListCtrl::SetColumnWidth(int col, int width)
125{
126 // TODO
127 return FALSE;
128}
129
130// Gets the number of items that can fit vertically in the
131// visible area of the list control (list or report view)
132// or the total number of items in the list control (icon
133// or small icon view)
134int wxListCtrl::GetCountPerPage() const
135{
136 // TODO
137 return 0;
138}
139
140// Gets the edit control for editing labels.
141wxTextCtrl* wxListCtrl::GetEditControl() const
142{
143 return m_textCtrl;
144}
145
146// Gets information about the item
147bool wxListCtrl::GetItem(wxListItem& info) const
148{
149 // TODO
150 return FALSE;
151}
152
153// Sets information about the item
154bool wxListCtrl::SetItem(wxListItem& info)
155{
156 // TODO
157 return FALSE;
158}
159
160long wxListCtrl::SetItem(long index, int col, const wxString& label, int imageId)
161{
162 wxListItem info;
163 info.m_text = label;
164 info.m_mask = wxLIST_MASK_TEXT;
165 info.m_itemId = index;
166 info.m_col = col;
167 if ( imageId > -1 )
168 {
169 info.m_image = imageId;
170 info.m_mask |= wxLIST_MASK_IMAGE;
171 }
172 return SetItem(info);
173}
174
175
176// Gets the item state
177int wxListCtrl::GetItemState(long item, long stateMask) const
178{
179 wxListItem info;
180
181 info.m_mask = wxLIST_MASK_STATE ;
182 info.m_stateMask = stateMask;
183 info.m_itemId = item;
184
185 if (!GetItem(info))
186 return 0;
187
188 return info.m_state;
189}
190
191// Sets the item state
192bool wxListCtrl::SetItemState(long item, long state, long stateMask)
193{
194 wxListItem info;
195
196 info.m_mask = wxLIST_MASK_STATE ;
197 info.m_state = state;
198 info.m_stateMask = stateMask;
199 info.m_itemId = item;
200
201 return SetItem(info);
202}
203
204// Sets the item image
205bool wxListCtrl::SetItemImage(long item, int image, int selImage)
206{
207 wxListItem info;
208
209 info.m_mask = wxLIST_MASK_IMAGE ;
210 info.m_image = image;
211 info.m_itemId = item;
212
213 return SetItem(info);
214}
215
216// Gets the item text
217wxString wxListCtrl::GetItemText(long item) const
218{
219 wxListItem info;
220
221 info.m_mask = wxLIST_MASK_TEXT ;
222 info.m_itemId = item;
223
224 if (!GetItem(info))
225 return wxString("");
226 return info.m_text;
227}
228
229// Sets the item text
230void wxListCtrl::SetItemText(long item, const wxString& str)
231{
232 wxListItem info;
233
234 info.m_mask = wxLIST_MASK_TEXT ;
235 info.m_itemId = item;
236 info.m_text = str;
237
238 SetItem(info);
239}
240
241// Gets the item data
242long wxListCtrl::GetItemData(long item) const
243{
244 wxListItem info;
245
246 info.m_mask = wxLIST_MASK_DATA ;
247 info.m_itemId = item;
248
249 if (!GetItem(info))
250 return 0;
251 return info.m_data;
252}
253
254// Sets the item data
255bool wxListCtrl::SetItemData(long item, long data)
256{
257 wxListItem info;
258
259 info.m_mask = wxLIST_MASK_DATA ;
260 info.m_itemId = item;
261 info.m_data = data;
262
263 return SetItem(info);
264}
265
266// Gets the item rectangle
267bool wxListCtrl::GetItemRect(long item, wxRect& rect, int code) const
268{
269 // TODO
270 return FALSE;
271}
272
273// Gets the item position
274bool wxListCtrl::GetItemPosition(long item, wxPoint& pos) const
275{
276 // TODO
277 return FALSE;
278}
279
280// Sets the item position.
281bool wxListCtrl::SetItemPosition(long item, const wxPoint& pos)
282{
283 // TODO
284 return FALSE;
285}
286
287// Gets the number of items in the list control
288int wxListCtrl::GetItemCount() const
289{
290 // TODO
291 return FALSE;
292}
293
294// Retrieves the spacing between icons in pixels.
295// If small is TRUE, gets the spacing for the small icon
296// view, otherwise the large icon view.
297int wxListCtrl::GetItemSpacing(bool isSmall) const
298{
299 // TODO
300 return FALSE;
301}
302
303// Gets the number of selected items in the list control
304int wxListCtrl::GetSelectedItemCount() const
305{
306 // TODO
307 return FALSE;
308}
309
310// Gets the text colour of the listview
311wxColour wxListCtrl::GetTextColour() const
312{
313 // TODO
314 return wxColour();
315}
316
317// Sets the text colour of the listview
318void wxListCtrl::SetTextColour(const wxColour& col)
319{
320 // TODO
321}
322
323// Gets the index of the topmost visible item when in
324// list or report view
325long wxListCtrl::GetTopItem() const
326{
327 // TODO
328 return 0;
329}
330
331// Searches for an item, starting from 'item'.
332// 'geometry' is one of
333// wxLIST_NEXT_ABOVE/ALL/BELOW/LEFT/RIGHT.
334// 'state' is a state bit flag, one or more of
335// wxLIST_STATE_DROPHILITED/FOCUSED/SELECTED/CUT.
336// item can be -1 to find the first item that matches the
337// specified flags.
338// Returns the item or -1 if unsuccessful.
339long wxListCtrl::GetNextItem(long item, int geom, int state) const
340{
341 // TODO
342 return 0;
343}
344
345wxImageList *wxListCtrl::GetImageList(int which) const
346{
347 if ( which == wxIMAGE_LIST_NORMAL )
348 {
349 return m_imageListNormal;
350 }
351 else if ( which == wxIMAGE_LIST_SMALL )
352 {
353 return m_imageListSmall;
354 }
355 else if ( which == wxIMAGE_LIST_STATE )
356 {
357 return m_imageListState;
358 }
359 return NULL;
360}
361
362void wxListCtrl::SetImageList(wxImageList *imageList, int which)
363{
364 int flags = 0;
365 if ( which == wxIMAGE_LIST_NORMAL )
366 {
367 m_imageListNormal = imageList;
368 }
369 else if ( which == wxIMAGE_LIST_SMALL )
370 {
371 m_imageListSmall = imageList;
372 }
373 else if ( which == wxIMAGE_LIST_STATE )
374 {
375 m_imageListState = imageList;
376 }
377 // TODO set image list
378}
379
380// Operations
381////////////////////////////////////////////////////////////////////////////
382
383// Arranges the items
384bool wxListCtrl::Arrange(int flag)
385{
386 // TODO
387 return FALSE;
388}
389
390// Deletes an item
391bool wxListCtrl::DeleteItem(long item)
392{
393 // TODO
394 return FALSE;
395}
396
397// Deletes all items
398bool wxListCtrl::DeleteAllItems()
399{
400 // TODO
401 return FALSE;
402}
403
404// Deletes all items
405bool wxListCtrl::DeleteAllColumns()
406{
407 // TODO
408 return FALSE;
409}
410
411// Deletes a column
412bool wxListCtrl::DeleteColumn(int col)
413{
414 // TODO
415 return FALSE;
416}
417
418// Clears items, and columns if there are any.
419void wxListCtrl::ClearAll()
420{
421 DeleteAllItems();
422 if ( m_colCount > 0 )
423 DeleteAllColumns();
424}
425
426// Edit the label
427wxTextCtrl* wxListCtrl::EditLabel(long item, wxClassInfo* textControlClass)
428{
429 // TODO
430 return NULL;
431}
432
433// End label editing, optionally cancelling the edit
434bool wxListCtrl::EndEditLabel(bool cancel)
435{
436 // TODO
437 return FALSE;
438}
439
440// Ensures this item is visible
441bool wxListCtrl::EnsureVisible(long item)
442{
443 // TODO
444 return FALSE;
445}
446
447// Find an item whose label matches this string, starting from the item after 'start'
448// or the beginning if 'start' is -1.
449long wxListCtrl::FindItem(long start, const wxString& str, bool partial)
450{
451 // TODO
452 return FALSE;
453}
454
455// Find an item whose data matches this data, starting from the item after 'start'
456// or the beginning if 'start' is -1.
457long wxListCtrl::FindItem(long start, long data)
458{
459 // TODO
460 return 0;
461}
462
463// Find an item nearest this position in the specified direction, starting from
464// the item after 'start' or the beginning if 'start' is -1.
465long wxListCtrl::FindItem(long start, const wxPoint& pt, int direction)
466{
467 // TODO
468 return 0;
469}
470
471// Determines which item (if any) is at the specified point,
472// giving details in 'flags' (see wxLIST_HITTEST_... flags above)
473long wxListCtrl::HitTest(const wxPoint& point, int& flags)
474{
475 // TODO
476 return 0;
477}
478
479// Inserts an item, returning the index of the new item if successful,
480// -1 otherwise.
481long wxListCtrl::InsertItem(wxListItem& info)
482{
483 // TODO
484 return 0;
485}
486
487long wxListCtrl::InsertItem(long index, const wxString& label)
488{
489 wxListItem info;
490 info.m_text = label;
491 info.m_mask = wxLIST_MASK_TEXT;
492 info.m_itemId = index;
493 return InsertItem(info);
494}
495
496// Inserts an image item
497long wxListCtrl::InsertItem(long index, int imageIndex)
498{
499 wxListItem info;
500 info.m_image = imageIndex;
501 info.m_mask = wxLIST_MASK_IMAGE;
502 info.m_itemId = index;
503 return InsertItem(info);
504}
505
506// Inserts an image/string item
507long wxListCtrl::InsertItem(long index, const wxString& label, int imageIndex)
508{
509 wxListItem info;
510 info.m_image = imageIndex;
511 info.m_text = label;
512 info.m_mask = wxLIST_MASK_IMAGE | wxLIST_MASK_TEXT;
513 info.m_itemId = index;
514 return InsertItem(info);
515}
516
517// For list view mode (only), inserts a column.
518long wxListCtrl::InsertColumn(long col, wxListItem& item)
519{
520 // TODO
521 return 0;
522}
523
524long wxListCtrl::InsertColumn(long col, const wxString& heading, int format,
525 int width)
526{
527 wxListItem item;
528 item.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_FORMAT;
529 item.m_text = heading;
530 if ( width > -1 )
531 {
532 item.m_mask |= wxLIST_MASK_WIDTH;
533 item.m_width = width;
534 }
535 item.m_format = format;
536
537 return InsertColumn(col, item);
538}
539
540// Scrolls the list control. If in icon, small icon or report view mode,
541// x specifies the number of pixels to scroll. If in list view mode, x
542// specifies the number of columns to scroll.
543// If in icon, small icon or list view mode, y specifies the number of pixels
544// to scroll. If in report view mode, y specifies the number of lines to scroll.
545bool wxListCtrl::ScrollList(int dx, int dy)
546{
547 // TODO
548 return FALSE;
549}
550
551// Sort items.
552
553// fn is a function which takes 3 long arguments: item1, item2, data.
554// item1 is the long data associated with a first item (NOT the index).
555// item2 is the long data associated with a second item (NOT the index).
556// data is the same value as passed to SortItems.
557// The return value is a negative number if the first item should precede the second
558// item, a positive number of the second item should precede the first,
559// or zero if the two items are equivalent.
560
561// data is arbitrary data to be passed to the sort function.
562bool wxListCtrl::SortItems(wxListCtrlCompare fn, long data)
563{
564 // TODO
565 return FALSE;
566}
567
568// List item structure
569wxListItem::wxListItem()
570{
571 m_mask = 0;
572 m_itemId = 0;
573 m_col = 0;
574 m_state = 0;
575 m_stateMask = 0;
576 m_image = 0;
577 m_data = 0;
578
579 m_format = wxLIST_FORMAT_CENTRE;
580 m_width = 0;
581}
582
583// List event
584IMPLEMENT_DYNAMIC_CLASS(wxListEvent, wxCommandEvent)
585
586wxListEvent::wxListEvent(wxEventType commandType, int id):
587 wxCommandEvent(commandType, id)
588{
589 m_code = 0;
590 m_itemIndex = 0;
591 m_col = 0;
592 m_cancelled = FALSE;
593}
594