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