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:
@@ -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 \
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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_
|
@@ -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:
|
||||
|
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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();
|
||||
|
@@ -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
|
||||
|
@@ -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") );
|
||||
|
@@ -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() )
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user