Merge branch 'wxlistctrl-virtual-checkboxes' of https://github.com/MaartenBent/wxWidgets

Add support for checkboxes to virtual wxListCtrl too.

See https://github.com/wxWidgets/wxWidgets/pull/1315
This commit is contained in:
Vadim Zeitlin
2019-05-10 01:39:33 +02:00
16 changed files with 164 additions and 539 deletions

View File

@@ -3341,7 +3341,6 @@ COND_TOOLKIT_OSX_COCOA_GUI_HDR = \
wx/osx/frame.h \
wx/osx/gauge.h \
wx/osx/listbox.h \
wx/osx/listctrl.h \
wx/osx/mdi.h \
wx/osx/menu.h \
wx/osx/menuitem.h \
@@ -3451,7 +3450,6 @@ COND_TOOLKIT_OSX_IPHONE_GUI_HDR = \
wx/osx/frame.h \
wx/osx/gauge.h \
wx/osx/listbox.h \
wx/osx/listctrl.h \
wx/osx/mdi.h \
wx/osx/menu.h \
wx/osx/menuitem.h \

View File

@@ -2541,7 +2541,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/osx/frame.h
wx/osx/gauge.h
wx/osx/listbox.h
wx/osx/listctrl.h
wx/osx/mdi.h
wx/osx/menu.h
wx/osx/menuitem.h

View File

@@ -2417,7 +2417,6 @@ set(OSX_SHARED_HDR
wx/osx/frame.h
wx/osx/gauge.h
wx/osx/listbox.h
wx/osx/listctrl.h
wx/osx/mdi.h
wx/osx/menu.h
wx/osx/menuitem.h

View File

@@ -2396,7 +2396,6 @@ OSX_SHARED_HDR =
wx/osx/frame.h
wx/osx/gauge.h
wx/osx/listbox.h
wx/osx/listctrl.h
wx/osx/mdi.h
wx/osx/menu.h
wx/osx/menuitem.h

View File

@@ -213,17 +213,6 @@ protected:
virtual wxSize DoGetBestClientSize() const wxOVERRIDE;
// return the text for the given column of the given item
virtual wxString OnGetItemText(long item, long column) 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 item) const;
// return the icon for the given item and column.
virtual int OnGetItemColumnImage(long item, long column) const;
// it calls our OnGetXXX() functions
friend class WXDLLIMPEXP_FWD_CORE wxListMainWindow;

View File

@@ -393,9 +393,6 @@ public:
virtual int GetColumnWidth(int col) const = 0;
virtual bool SetColumnWidth(int col, int width) = 0;
// return the attribute for the item (may return NULL if none)
virtual wxItemAttr *OnGetItemAttr(long item) const;
// Other miscellaneous accessors.
// ------------------------------
@@ -427,6 +424,29 @@ protected:
// Overridden methods of the base class.
virtual wxSize DoGetBestClientSize() const wxOVERRIDE;
// these functions are only used for virtual list view controls, i.e. the
// ones with wxLC_VIRTUAL style
// return the attribute for the item (may return NULL if none)
virtual wxItemAttr* OnGetItemAttr(long item) const;
// return the text for the given column of the given item
virtual wxString OnGetItemText(long item, long column) const;
// return whether the given item is checked
virtual bool OnGetItemIsChecked(long item) 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 item) const;
// return the icon for the given item and column.
virtual int OnGetItemColumnImage(long item, long column) const;
// return the attribute for the given item and column (may return NULL if none)
virtual wxItemAttr* OnGetItemColumnAttr(long item, long column) const;
private:
// user defined color to draw row lines, may be invalid
wxItemAttr m_alternateRowColour;

View File

@@ -421,26 +421,6 @@ protected:
// true if we have any items with custom attributes
bool m_hasAnyAttr;
// 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 item, long column) 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 item) const;
// return the icon for the given item and column.
virtual int OnGetItemColumnImage(long item, long column) const;
// return the attribute for the given item and column (may return NULL if none)
virtual wxItemAttr *OnGetItemColumnAttr(long item, long WXUNUSED(column)) const
{
return OnGetItemAttr(item);
}
private:
// process NM_CUSTOMDRAW notification message
WXLPARAM OnCustomDraw(WXLPARAM lParam);

View File

@@ -1,398 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/listctrl.h
// Purpose: wxListCtrl class
// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_LISTCTRL_H_
#define _WX_LISTCTRL_H_
#include "wx/defs.h"
#include "wx/generic/listctrl.h"
#define wxMAC_ALWAYS_USE_GENERIC_LISTCTRL wxT("mac.listctrl.always_use_generic")
class wxMacDataBrowserListCtrlControl;
class wxListCtrlTextCtrlWrapper;
class wxListCtrlRenameTimer;
WX_DECLARE_EXPORTED_LIST(wxListItem, wxColumnList);
class WXDLLIMPEXP_CORE wxListCtrl: public wxListCtrlBase
{
wxDECLARE_DYNAMIC_CLASS(wxListCtrl);
public:
/*
* Public interface
*/
wxListCtrl() { Init(); }
wxListCtrl(wxWindow *parent,
wxWindowID id = wxID_ANY,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxLC_ICON,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxListCtrlNameStr)
{
Init();
Create(parent, id, pos, size, style, validator, name);
}
virtual ~wxListCtrl();
bool Create(wxWindow *parent,
wxWindowID id = wxID_ANY,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxLC_ICON,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxListCtrlNameStr);
// Attributes
////////////////////////////////////////////////////////////////////////////
// Gets information about this column
bool GetColumn(int col, wxListItem& item) const;
// Sets information about this column
bool SetColumn(int col, const wxListItem& item) ;
// Gets the column width
int GetColumnWidth(int col) const;
// Sets the column width
bool SetColumnWidth(int col, int width) ;
// 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() const;
// Gets the edit control for editing labels.
wxTextCtrl* GetEditControl() const;
// Gets information about the item
bool GetItem(wxListItem& info) const ;
// Sets information about the item
bool SetItem(wxListItem& info) ;
// Sets a string field at a particular column
long SetItem(long index, int col, const wxString& label, int imageId = -1);
// Gets the item state
int GetItemState(long item, long stateMask) const ;
// Sets the item state
bool SetItemState(long item, long state, long stateMask) ;
void AssignImageList(wxImageList *imageList, int which);
// Sets the item image
bool SetItemImage(long item, int image, int selImage = -1) ;
bool SetItemColumnImage(long item, long column, int image);
// Gets the item text
wxString GetItemText(long item, int col = 0) const ;
// Sets the item text
void SetItemText(long item, const wxString& str) ;
void SetItemTextColour(long item, const wxColour& colour) ;
wxColour GetItemTextColour(long item) const;
void SetItemBackgroundColour(long item, const wxColour& colour) ;
wxColour GetItemBackgroundColour(long item) const;
void SetItemFont( long item, const wxFont &f);
wxFont GetItemFont( long item ) const;
// Gets the item data
long GetItemData(long item) const ;
// Sets the item data
bool SetItemPtrData(long item, wxUIntPtr data);
bool SetItemData(long item, long data) { return SetItemPtrData(item, data); }
// Gets the item rectangle
bool GetItemRect(long item, wxRect& rect, int code = wxLIST_RECT_BOUNDS) const ;
// Gets the item rectangle of a subitem
bool GetSubItemRect( long item, long subItem, wxRect& rect, int code = wxLIST_RECT_BOUNDS ) const;
// Gets the item position
bool GetItemPosition(long item, wxPoint& pos) const ;
// Sets the item position
bool SetItemPosition(long item, const wxPoint& pos) ;
// Gets the number of items in the list control
int GetItemCount() const;
// Gets the number of columns in the list control
int GetColumnCount() const;
void SetItemSpacing( int spacing, bool isSmall = false );
wxSize GetItemSpacing() const;
// Gets the number of selected items in the list control
int GetSelectedItemCount() const;
wxRect GetViewRect() const;
// Gets the text colour of the listview
wxColour GetTextColour() const;
// Sets the text colour of the listview
void SetTextColour(const wxColour& col);
// Gets the index of the topmost visible item when in
// list or report view
long GetTopItem() const ;
// Add or remove a single window style
void SetSingleStyle(long style, bool add = true) ;
// Set the whole window style
void SetWindowStyleFlag(long style) ;
// 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 item, int geometry = wxLIST_NEXT_ALL, int state = wxLIST_STATE_DONTCARE) const ;
// Gets one of the three image lists
wxImageList *GetImageList(int which) const ;
// Sets the image list
void SetImageList(wxImageList *imageList, int which) ;
// Operations
////////////////////////////////////////////////////////////////////////////
// Arranges the items
bool Arrange(int flag = wxLIST_ALIGN_DEFAULT);
// Deletes an item
bool DeleteItem(long item);
// Deletes all items
bool DeleteAllItems() ;
// Deletes a column
bool DeleteColumn(int col);
// Deletes all columns
bool DeleteAllColumns();
// Clears items, and columns if there are any.
void ClearAll();
// Edit the label
wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = wxCLASSINFO(wxTextCtrl));
// End label editing, optionally cancelling the edit
bool EndEditLabel(bool cancel);
// Ensures this item is visible
bool EnsureVisible(long item) ;
// Find an item whose label matches this string, starting from the item after 'start'
// or the beginning if 'start' is -1.
long FindItem(long start, const wxString& str, bool partial = 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 start, long data);
// 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 start, const wxPoint& pt, int direction);
// Determines which item (if any) is at the specified point,
// giving details in 'flags' (see wxLIST_HITTEST_... flags above)
// Request the subitem number as well at the given coordinate.
long HitTest(const wxPoint& point, int& flags, long* ptrSubItem = NULL) const;
// Inserts an item, returning the index of the new item if successful,
// -1 otherwise.
// TOD: Should also have some further convenience functions
// which don't require setting a wxListItem object
long InsertItem(wxListItem& info);
// Insert a string item
long InsertItem(long index, const wxString& label);
// Insert an image item
long InsertItem(long index, int imageIndex);
// Insert an image/string item
long InsertItem(long index, const wxString& label, int imageIndex);
// 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 dx, int dy);
// 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, wxIntPtr data);
wxMacDataBrowserListCtrlControl* GetListPeer() const;
// these functions are only used for virtual list view controls, i.e. the
// ones with wxLC_VIRTUAL style
void SetItemCount(long count);
void RefreshItem(long item);
void RefreshItems(long itemFrom, long itemTo);
// return the text for the given column of the given item
virtual wxString OnGetItemText(long item, long column) 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 item) const;
// return the icon for the given item and column.
virtual int OnGetItemColumnImage(long item, long column) const;
/* Why should we need this function? Leave for now.
* We might need it because item data may have changed,
* but the display needs refreshing (in string callback mode)
// Updates an item. If the list control has the wxLI_AUTO_ARRANGE style,
// the items will be rearranged.
bool Update(long item);
*/
void Command(wxCommandEvent& event) { ProcessCommand(event); }
wxListCtrlCompare GetCompareFunc() { return m_compareFunc; }
wxIntPtr GetCompareFuncData() { return m_compareFuncData; }
// public overrides needed for pimpl approach
virtual bool SetFont(const wxFont& font);
virtual bool SetForegroundColour(const wxColour& colour);
virtual bool SetBackgroundColour(const wxColour& colour);
virtual wxColour GetBackgroundColour() const;
virtual void Freeze ();
virtual void Thaw ();
virtual void Update ();
// functions for editing/timer
void OnRenameTimer();
bool OnRenameAccept(long itemEdit, const wxString& value);
void OnRenameCancelled(long itemEdit);
void ChangeCurrent(long current);
void ResetCurrent() { ChangeCurrent((long)-1); }
bool HasCurrent() const { return m_current != (long)-1; }
void OnLeftDown(wxMouseEvent& event);
void OnDblClick(wxMouseEvent& event);
void FinishEditing(wxTextCtrl *text)
{
delete text;
m_textctrlWrapper = NULL;
SetFocus();
}
virtual int GetScrollPos(int orient) const;
void OnRightDown(wxMouseEvent& event);
void OnMiddleDown(wxMouseEvent& event);
void OnChar(wxKeyEvent& event);
virtual void SetFocus();
void FireMouseEvent(wxEventType eventType, wxPoint position);
virtual void SetDropTarget( wxDropTarget *dropTarget );
virtual wxDropTarget* GetDropTarget() const;
// with CG, we need to get the context from an kEventControlDraw event
// unfortunately, the DataBrowser callbacks don't provide the context
// and we need it, so we need to set/remove it before and after draw
// events so we can access it in the callbacks.
void MacSetDrawingContext(void* context) { m_cgContext = context; }
void* MacGetDrawingContext() { return m_cgContext; }
virtual wxVisualAttributes GetDefaultAttributes() const
{
return GetClassDefaultAttributes(GetWindowVariant());
}
static wxVisualAttributes
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
protected:
// Implement base class pure virtual methods.
long DoInsertColumn(long col, const wxListItem& info);
// protected overrides needed for pimpl approach
virtual void DoSetSize(int x, int y,
int width, int height,
int sizeFlags = wxSIZE_AUTO);
long m_current;
wxListCtrlTextCtrlWrapper *m_textctrlWrapper;
wxListCtrlRenameTimer *m_renameTimer;
// common part of all ctors
void Init();
wxGenericListCtrl* m_genericImpl; // allow use of the generic impl.
wxMacDataBrowserListCtrlControl* m_dbImpl;
void* m_macListCtrlEventHandler;
void* m_cgContext;
wxListCtrlCompare m_compareFunc;
wxIntPtr m_compareFuncData;
wxTextCtrl* m_textCtrl; // The control used for editing a label
wxImageList * m_imageListNormal; // The image list for normal icons
wxImageList * m_imageListSmall; // The image list for small icons
wxImageList * m_imageListState; // The image list state icons (not implemented yet)
wxColumnList m_colsInfo; // for storing info about each column
wxColour m_textColor;
wxColour m_bgColor;
// keep track of whether or not we should delete the image list ourselves.
bool m_ownsImageListNormal,
m_ownsImageListSmall,
m_ownsImageListState;
long m_baseStyle; // Basic Windows style flags, for recreation purposes
int m_colCount; // Windows doesn't have GetColumnCount so must
// keep track of inserted/deleted columns
int m_count; // for virtual lists, store item count
private:
int CalcColumnAutoWidth(int col) const;
};
#endif
// _WX_LISTCTRL_H_

View File

@@ -265,27 +265,6 @@ public:
// data is arbitrary data to be passed to the sort function.
bool SortItems(wxListCtrlCompare fn, wxIntPtr data);
// these functions are only used for virtual list view controls, i.e. the
// ones with wxLC_VIRTUAL style (not currently implemented in wxQT)
// return the text for the given column of the given item
virtual wxString OnGetItemText(long item, long column) 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 item) const;
// return the icon for the given item and column.
virtual int OnGetItemColumnImage(long item, long column) const;
// return the attribute for the given item and column (may return NULL if none)
virtual wxItemAttr *OnGetItemColumnAttr(long item, long WXUNUSED(column)) const
{
return OnGetItemAttr(item);
}
virtual QWidget *GetHandle() const wxOVERRIDE;
protected:

View File

@@ -1271,6 +1271,13 @@ public:
@param enable If @true, enable checkboxes, otherwise disable checkboxes.
@return @true if checkboxes are supported, @false otherwise.
In a list control with wxLC_VIRTUAL style you have to keep track of the
checkbox state. When a checkbox is clicked (EVT_LIST_ITEM_CHECKED
or EVT_LIST_ITEM_UNCHECKED) you have to update the state and refresh
the item yourself.
@see OnGetItemIsChecked() RefreshItem()
@since 3.1.0
*/
bool EnableCheckBoxes(bool enable = true);
@@ -1312,7 +1319,7 @@ protected:
The base class version always returns @NULL.
@see OnGetItemImage(), OnGetItemColumnImage(), OnGetItemText(),
OnGetItemColumnAttr()
OnGetItemColumnAttr(), OnGetItemIsChecked()
*/
virtual wxItemAttr* OnGetItemAttr(long item) const;
@@ -1370,6 +1377,17 @@ protected:
@see SetItemCount(), OnGetItemImage(), OnGetItemColumnImage(), OnGetItemAttr()
*/
virtual wxString OnGetItemText(long item, long column) const;
/**
This function @b must be overridden in the derived class for a control with
@c wxLC_VIRTUAL style that uses checkboxes. It should return whether the
checkbox of the specified @c item is checked.
@see EnableCheckBoxes(), OnGetItemText()
@since 3.1.2
*/
virtual bool OnGetItemIsChecked(long item) const;
};

View File

@@ -44,6 +44,7 @@
#include "wx/sizer.h"
#include "wx/sysopt.h"
#include "wx/numdlg.h"
#include "wx/selstore.h"
#include "listtest.h"
@@ -1204,6 +1205,11 @@ void MyListCtrl::OnChecked(wxListEvent& event)
{
LogEvent(event, "OnChecked");
if ( IsVirtual() )
{
CheckItem(event.GetIndex(), true);
}
event.Skip();
}
@@ -1211,6 +1217,11 @@ void MyListCtrl::OnUnChecked(wxListEvent& event)
{
LogEvent(event, "OnUnChecked");
if ( IsVirtual() )
{
CheckItem(event.GetIndex(), false);
}
event.Skip();
}
@@ -1419,6 +1430,36 @@ wxString MyListCtrl::OnGetItemText(long item, long column) const
}
}
void MyListCtrl::CheckItem(long item, bool check)
{
if ( IsVirtual() )
{
m_checked.SelectItem(item, check);
RefreshItem(item);
}
else
{
wxListCtrl::CheckItem(item, check);
}
}
bool MyListCtrl::IsItemChecked(long item) const
{
if ( IsVirtual() )
{
return m_checked.IsSelected(item);
}
else
{
return wxListCtrl::IsItemChecked(item);
}
}
bool MyListCtrl::OnGetItemIsChecked(long item) const
{
return IsItemChecked(item);
}
int MyListCtrl::OnGetItemColumnImage(long item, long column) const
{
if (!column)

View File

@@ -74,6 +74,9 @@ public:
void OnRightClick(wxMouseEvent& event);
virtual void CheckItem(long item, bool check) wxOVERRIDE;
virtual bool IsItemChecked(long item) const wxOVERRIDE;
private:
void ShowContextMenu(const wxPoint& pos);
wxLog *m_logOld;
@@ -83,11 +86,14 @@ private:
void LogColEvent(const wxListEvent& event, const wxString& eventName);
virtual wxString OnGetItemText(long item, long column) const wxOVERRIDE;
virtual bool OnGetItemIsChecked(long item) const wxOVERRIDE;
virtual int OnGetItemColumnImage(long item, long column) const wxOVERRIDE;
virtual wxItemAttr *OnGetItemAttr(long item) const wxOVERRIDE;
long m_updated;
// checked boxes in virtual list
wxSelectionStore m_checked;
wxDECLARE_NO_COPY_CLASS(MyListCtrl);
wxDECLARE_EVENT_TABLE();

View File

@@ -25,6 +25,7 @@
#if wxUSE_LISTCTRL
#include "wx/listctrl.h"
#include "wx/imaglist.h"
#ifndef WX_PRECOMP
#include "wx/dcclient.h"
@@ -251,4 +252,43 @@ wxItemAttr *wxListCtrlBase::OnGetItemAttr(long item) const
: NULL; // no attributes by default
}
wxString wxListCtrlBase::OnGetItemText(long WXUNUSED(item), long WXUNUSED(col)) const
{
// this is a pure virtual function, in fact - which is not really pure
// because the controls which are not virtual don't need to implement it
wxFAIL_MSG("wxListCtrl::OnGetItemText not supposed to be called");
return wxEmptyString;
}
bool wxListCtrlBase::OnGetItemIsChecked(long WXUNUSED(item)) const
{
// this is a pure virtual function, in fact - which is not really pure
// because the controls which are not virtual don't need to implement it
wxFAIL_MSG("wxListCtrl::OnGetItemIsChecked not supposed to be called");
return false;
}
int wxListCtrlBase::OnGetItemImage(long WXUNUSED(item)) const
{
wxCHECK_MSG(!GetImageList(wxIMAGE_LIST_SMALL),
-1,
"List control has an image list, OnGetItemImage or OnGetItemColumnImage should be overridden.");
return -1;
}
int wxListCtrlBase::OnGetItemColumnImage(long item, long column) const
{
if ( !column )
return OnGetItemImage(item);
return -1;
}
wxItemAttr* wxListCtrlBase::OnGetItemColumnAttr(long item, long WXUNUSED(column)) const
{
return OnGetItemAttr(item);
}
#endif // wxUSE_LISTCTRL

View File

@@ -1681,6 +1681,7 @@ void wxListMainWindow::CacheLineData(size_t line)
ld->SetImage(col, listctrl->OnGetItemColumnImage(line, col));
}
ld->Check(listctrl->OnGetItemIsChecked(line));
ld->SetAttr(listctrl->OnGetItemAttr(line));
}
@@ -5533,31 +5534,6 @@ wxSize wxGenericListCtrl::DoGetBestClientSize() const
// virtual list control support
// ----------------------------------------------------------------------------
wxString wxGenericListCtrl::OnGetItemText(long WXUNUSED(item), long WXUNUSED(col)) const
{
// this is a pure virtual function, in fact - which is not really pure
// because the controls which are not virtual don't need to implement it
wxFAIL_MSG( wxT("wxGenericListCtrl::OnGetItemText not supposed to be called") );
return wxEmptyString;
}
int wxGenericListCtrl::OnGetItemImage(long WXUNUSED(item)) const
{
wxCHECK_MSG(!GetImageList(wxIMAGE_LIST_SMALL),
-1,
wxT("List control has an image list, OnGetItemImage or OnGetItemColumnImage should be overridden."));
return -1;
}
int wxGenericListCtrl::OnGetItemColumnImage(long item, long column) const
{
if (!column)
return OnGetItemImage(item);
return -1;
}
void wxGenericListCtrl::SetItemCount(long count)
{
wxASSERT_MSG( IsVirtual(), wxT("this is for virtual controls only") );

View File

@@ -2480,6 +2480,33 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
event.m_item.m_data = GetItemData(iItem);
break;
case NM_CLICK:
processed = false;
// In virtual mode, check if user clicks on a checkbox.
if ( IsVirtual() && HasCheckBoxes() )
{
LV_HITTESTINFO lvhti;
wxZeroMemory(lvhti);
wxGetCursorPosMSW(&(lvhti.pt));
::ScreenToClient(GetHwnd(), &lvhti.pt);
if ( ListView_SubItemHitTest(GetHwnd(), &lvhti) != -1 )
{
if ( (lvhti.flags & LVHT_ONITEMSTATEICON) && (lvhti.iSubItem == 0) )
{
event.m_itemIndex = lvhti.iItem;
if ( OnGetItemIsChecked(event.m_itemIndex) )
eventType = wxEVT_LIST_ITEM_UNCHECKED;
else
eventType = wxEVT_LIST_ITEM_CHECKED;
processed = true;
}
}
}
break;
case NM_RCLICK:
// if the user processes it in wxEVT_COMMAND_RIGHT_CLICK(),
// don't do anything else
@@ -2669,8 +2696,14 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
// can get messages with LVIF_STATE in lvi.mask under Vista
if ( lvi.mask & LVIF_STATE )
{
// we don't have anything to return from here...
lvi.stateMask = 0;
if ( HasCheckBoxes() && (lvi.iSubItem == 0) )
{
const bool checked = OnGetItemIsChecked(item);
lvi.state = INDEXTOSTATEIMAGEMASK(checked ? 2 : 1);
lvi.stateMask = LVIS_STATEIMAGEMASK;
}
}
return true;
@@ -3240,31 +3273,6 @@ wxListCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
// virtual list controls
// ----------------------------------------------------------------------------
wxString wxListCtrl::OnGetItemText(long WXUNUSED(item), long WXUNUSED(col)) const
{
// this is a pure virtual function, in fact - which is not really pure
// because the controls which are not virtual don't need to implement it
wxFAIL_MSG( wxT("wxListCtrl::OnGetItemText not supposed to be called") );
return wxEmptyString;
}
int wxListCtrl::OnGetItemImage(long WXUNUSED(item)) const
{
wxCHECK_MSG(!GetImageList(wxIMAGE_LIST_SMALL),
-1,
wxT("List control has an image list, OnGetItemImage or OnGetItemColumnImage should be overridden."));
return -1;
}
int wxListCtrl::OnGetItemColumnImage(long item, long column) const
{
if (!column)
return OnGetItemImage(item);
return -1;
}
wxItemAttr *wxListCtrl::DoGetItemColumnAttr(long item, long column) const
{
if ( IsVirtual() )

View File

@@ -1010,35 +1010,6 @@ bool wxListCtrl::SortItems(wxListCtrlCompare WXUNUSED(fn), wxIntPtr WXUNUSED(dat
return false;
}
// ----------------------------------------------------------------------------
// virtual list controls (not currently implemented in wxQT)
// ----------------------------------------------------------------------------
wxString wxListCtrl::OnGetItemText(long WXUNUSED(item), long WXUNUSED(col)) const
{
// this is a pure virtual function, in fact - which is not really pure
// because the controls which are not virtual don't need to implement it
wxFAIL_MSG( wxT("wxListCtrl::OnGetItemText not supposed to be called") );
return wxEmptyString;
}
int wxListCtrl::OnGetItemImage(long WXUNUSED(item)) const
{
wxCHECK_MSG(!GetImageList(wxIMAGE_LIST_SMALL),
-1,
wxT("List control has an image list, OnGetItemImage or OnGetItemColumnImage should be overridden."));
return -1;
}
int wxListCtrl::OnGetItemColumnImage(long item, long column) const
{
if (!column)
return OnGetItemImage(item);
return -1;
}
QWidget *wxListCtrl::GetHandle() const
{
return m_qtTreeWidget;