added a bunch of new wxListCtrl messages: column right click and
start/continue/end dragging column divider git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11530 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -72,15 +72,19 @@ functions that take a \helpref{wxListEvent}{wxlistevent} argument.
|
|||||||
\twocolitem{{\bf EVT\_LIST\_END\_LABEL\_EDIT(id, func)}}{Finish editing a label. This can be prevented by calling \helpref{Veto()}{wxnotifyeventveto}.}
|
\twocolitem{{\bf EVT\_LIST\_END\_LABEL\_EDIT(id, func)}}{Finish editing a label. This can be prevented by calling \helpref{Veto()}{wxnotifyeventveto}.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_DELETE\_ITEM(id, func)}}{Delete an item.}
|
\twocolitem{{\bf EVT\_LIST\_DELETE\_ITEM(id, func)}}{Delete an item.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_DELETE\_ALL\_ITEMS(id, func)}}{Delete all items.}
|
\twocolitem{{\bf EVT\_LIST\_DELETE\_ALL\_ITEMS(id, func)}}{Delete all items.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_GET\_INFO(id, func)}}{Request information from the application, usually the item text.}
|
%\twocolitem{{\bf EVT\_LIST\_GET\_INFO(id, func)}}{Request information from the application, usually the item text.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_SET\_INFO(id, func)}}{Information is being supplied (not implemented).}
|
%\twocolitem{{\bf EVT\_LIST\_SET\_INFO(id, func)}}{Information is being supplied (not implemented).}
|
||||||
\twocolitem{{\bf EVT\_LIST\_ITEM\_SELECTED(id, func)}}{The item has been selected.}
|
\twocolitem{{\bf EVT\_LIST\_ITEM\_SELECTED(id, func)}}{The item has been selected.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_ITEM\_DESELECTED(id, func)}}{The item has been deselected.}
|
\twocolitem{{\bf EVT\_LIST\_ITEM\_DESELECTED(id, func)}}{The item has been deselected.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_ITEM\_ACTIVATED(id, func)}}{The item has been activated (ENTER or double click).}
|
\twocolitem{{\bf EVT\_LIST\_ITEM\_ACTIVATED(id, func)}}{The item has been activated (ENTER or double click).}
|
||||||
|
\twocolitem{{\bf EVT\_LIST\_ITEM\_RIGHT\_CLICK(id, func)}}{An item has been right-clicked.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_KEY\_DOWN(id, func)}}{A key has been pressed.}
|
\twocolitem{{\bf EVT\_LIST\_KEY\_DOWN(id, func)}}{A key has been pressed.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_INSERT\_ITEM(id, func)}}{An item has been inserted.}
|
\twocolitem{{\bf EVT\_LIST\_INSERT\_ITEM(id, func)}}{An item has been inserted.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_COL\_CLICK(id, func)}}{A column ({\bf m\_col}) has been left-clicked.}
|
\twocolitem{{\bf EVT\_LIST\_COL\_CLICK(id, func)}}{A column ({\bf m\_col}) has been left-clicked.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_ITEM\_RIGHT\_CLICK(id, func)}}{An item has been right-clicked.}
|
\twocolitem{{\bf EVT\_LIST\_COL\_RIGHT\_CLICK(id, func)}}{A column ({\bf m\_col}) has been right-clicked.}
|
||||||
|
\twocolitem{{\bf EVT\_LIST\_COL\_BEGIN\_DRAG(id, func)}}{The user started resizing a column - can be vetoed.}
|
||||||
|
\twocolitem{{\bf EVT\_LIST\_COL\_DRAGGING(id, func)}}{The divider between columns is being dragged.}
|
||||||
|
\twocolitem{{\bf EVT\_LIST\_COL\_END\_DRAG(id, func)}}{A column has been resized by the user.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_CACHE\_HINT(id, func)}}{Prepare cache for a virtual list control}
|
\twocolitem{{\bf EVT\_LIST\_CACHE\_HINT(id, func)}}{Prepare cache for a virtual list control}
|
||||||
\end{twocollist}%
|
\end{twocollist}%
|
||||||
|
|
||||||
|
@@ -26,14 +26,19 @@ functions that take a wxListEvent argument.
|
|||||||
\twocolitem{{\bf EVT\_LIST\_END\_LABEL\_EDIT(id, func)}}{Finish editing a label. This can be prevented by calling \helpref{Veto()}{wxnotifyeventveto}.}
|
\twocolitem{{\bf EVT\_LIST\_END\_LABEL\_EDIT(id, func)}}{Finish editing a label. This can be prevented by calling \helpref{Veto()}{wxnotifyeventveto}.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_DELETE\_ITEM(id, func)}}{Delete an item.}
|
\twocolitem{{\bf EVT\_LIST\_DELETE\_ITEM(id, func)}}{Delete an item.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_DELETE\_ALL\_ITEMS(id, func)}}{Delete all items.}
|
\twocolitem{{\bf EVT\_LIST\_DELETE\_ALL\_ITEMS(id, func)}}{Delete all items.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_GET\_INFO(id, func)}}{Request information from the application, usually the item text.}
|
%\twocolitem{{\bf EVT\_LIST\_GET\_INFO(id, func)}}{Request information from the application, usually the item text.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_SET\_INFO(id, func)}}{Information is being supplied (not implemented).}
|
%\twocolitem{{\bf EVT\_LIST\_SET\_INFO(id, func)}}{Information is being supplied (not implemented).}
|
||||||
\twocolitem{{\bf EVT\_LIST\_ITEM\_SELECTED(id, func)}}{The item has been selected.}
|
\twocolitem{{\bf EVT\_LIST\_ITEM\_SELECTED(id, func)}}{The item has been selected.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_ITEM\_DESELECTED(id, func)}}{The item has been deselected.}
|
\twocolitem{{\bf EVT\_LIST\_ITEM\_DESELECTED(id, func)}}{The item has been deselected.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_ITEM\_ACTIVATED(id, func)}}{The item has been activated (ENTER or double click).}
|
\twocolitem{{\bf EVT\_LIST\_ITEM\_ACTIVATED(id, func)}}{The item has been activated (ENTER or double click).}
|
||||||
|
\twocolitem{{\bf EVT\_LIST\_ITEM\_RIGHT\_CLICK(id, func)}}{An item has been right-clicked.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_KEY\_DOWN(id, func)}}{A key has been pressed.}
|
\twocolitem{{\bf EVT\_LIST\_KEY\_DOWN(id, func)}}{A key has been pressed.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_INSERT\_ITEM(id, func)}}{An item has been inserted.}
|
\twocolitem{{\bf EVT\_LIST\_INSERT\_ITEM(id, func)}}{An item has been inserted.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_COL\_CLICK(id, func)}}{A column ({\bf m\_col}) has been left-clicked.}
|
\twocolitem{{\bf EVT\_LIST\_COL\_CLICK(id, func)}}{A column ({\bf m\_col}) has been left-clicked.}
|
||||||
|
\twocolitem{{\bf EVT\_LIST\_COL\_RIGHT\_CLICK(id, func)}}{A column ({\bf m\_col}) has been right-clicked.}
|
||||||
|
\twocolitem{{\bf EVT\_LIST\_COL\_BEGIN\_DRAG(id, func)}}{The user started resizing a column - can be vetoed.}
|
||||||
|
\twocolitem{{\bf EVT\_LIST\_COL\_DRAGGING(id, func)}}{The divider between columns is being dragged.}
|
||||||
|
\twocolitem{{\bf EVT\_LIST\_COL\_END\_DRAG(id, func)}}{A column has been resized by the user.}
|
||||||
\twocolitem{{\bf EVT\_LIST\_CACHE\_HINT(id, func)}}{Prepare cache for a virtual list control}
|
\twocolitem{{\bf EVT\_LIST\_CACHE\_HINT(id, func)}}{Prepare cache for a virtual list control}
|
||||||
\end{twocollist}%
|
\end{twocollist}%
|
||||||
|
|
||||||
@@ -85,7 +90,10 @@ The old item index.
|
|||||||
|
|
||||||
\constfunc{int}{GetColumn}{\void}
|
\constfunc{int}{GetColumn}{\void}
|
||||||
|
|
||||||
The column position.
|
The column position: it is only used with {\tt COL} events. For the column
|
||||||
|
dragging events, it is the column to the left of the divider being dragged, for
|
||||||
|
the column click events it may be $-1$ if the user clicked in the list control
|
||||||
|
header outside any column.
|
||||||
|
|
||||||
\membersection{wxListEvent::Cancelled}\label{wxlisteventcancelled}
|
\membersection{wxListEvent::Cancelled}\label{wxlisteventcancelled}
|
||||||
|
|
||||||
|
@@ -399,6 +399,10 @@ BEGIN_DECLARE_EVENT_TYPES()
|
|||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK, 714)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK, 714)
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED, 715)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED, 715)
|
||||||
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_CACHE_HINT, 716)
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_CACHE_HINT, 716)
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK, 717)
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, 718)
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_DRAGGING, 719)
|
||||||
|
DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_END_DRAG, 720)
|
||||||
END_DECLARE_EVENT_TYPES()
|
END_DECLARE_EVENT_TYPES()
|
||||||
|
|
||||||
typedef void (wxEvtHandler::*wxListEventFunction)(wxListEvent&);
|
typedef void (wxEvtHandler::*wxListEventFunction)(wxListEvent&);
|
||||||
@@ -411,14 +415,21 @@ typedef void (wxEvtHandler::*wxListEventFunction)(wxListEvent&);
|
|||||||
#define EVT_LIST_DELETE_ALL_ITEMS(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
#define EVT_LIST_DELETE_ALL_ITEMS(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
#define EVT_LIST_GET_INFO(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_GET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
#define EVT_LIST_GET_INFO(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_GET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
#define EVT_LIST_SET_INFO(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_SET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
#define EVT_LIST_SET_INFO(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_SET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
#define EVT_LIST_ITEM_SELECTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
|
||||||
#define EVT_LIST_ITEM_DESELECTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_DESELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
|
||||||
#define EVT_LIST_KEY_DOWN(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_KEY_DOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
#define EVT_LIST_KEY_DOWN(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_KEY_DOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
#define EVT_LIST_INSERT_ITEM(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_INSERT_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
#define EVT_LIST_INSERT_ITEM(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_INSERT_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
|
|
||||||
#define EVT_LIST_COL_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_COL_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
#define EVT_LIST_COL_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_COL_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
|
#define EVT_LIST_COL_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_COL_RIGHT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
|
#define EVT_LIST_COL_BEGIN_DRAG(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
|
#define EVT_LIST_COL_DRAGGING(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_COL_DRAGGING, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
|
#define EVT_LIST_COL_END_DRAG(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_COL_END_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
|
|
||||||
|
#define EVT_LIST_ITEM_SELECTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
|
#define EVT_LIST_ITEM_DESELECTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_DESELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL ),
|
||||||
#define EVT_LIST_ITEM_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_LIST_ITEM_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL ),
|
||||||
#define EVT_LIST_ITEM_MIDDLE_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_LIST_ITEM_MIDDLE_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL ),
|
||||||
#define EVT_LIST_ITEM_ACTIVATED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_LIST_ITEM_ACTIVATED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL ),
|
||||||
|
|
||||||
#define EVT_LIST_CACHE_HINT(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_CACHE_HINT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL ),
|
#define EVT_LIST_CACHE_HINT(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_LIST_CACHE_HINT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL ),
|
||||||
|
|
||||||
#endif // wxUSE_LISTCTRL
|
#endif // wxUSE_LISTCTRL
|
||||||
|
@@ -90,7 +90,13 @@ BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
|
|||||||
EVT_LIST_ITEM_DESELECTED(LIST_CTRL, MyListCtrl::OnDeselected)
|
EVT_LIST_ITEM_DESELECTED(LIST_CTRL, MyListCtrl::OnDeselected)
|
||||||
EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
|
EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
|
||||||
EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated)
|
EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated)
|
||||||
|
|
||||||
EVT_LIST_COL_CLICK(LIST_CTRL, MyListCtrl::OnColClick)
|
EVT_LIST_COL_CLICK(LIST_CTRL, MyListCtrl::OnColClick)
|
||||||
|
EVT_LIST_COL_RIGHT_CLICK(LIST_CTRL, MyListCtrl::OnColRightClick)
|
||||||
|
EVT_LIST_COL_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnColBeginDrag)
|
||||||
|
EVT_LIST_COL_DRAGGING(LIST_CTRL, MyListCtrl::OnColDragging)
|
||||||
|
EVT_LIST_COL_END_DRAG(LIST_CTRL, MyListCtrl::OnColEndDrag)
|
||||||
|
|
||||||
EVT_LIST_CACHE_HINT(LIST_CTRL, MyListCtrl::OnCacheHint)
|
EVT_LIST_CACHE_HINT(LIST_CTRL, MyListCtrl::OnCacheHint)
|
||||||
|
|
||||||
EVT_CHAR(MyListCtrl::OnChar)
|
EVT_CHAR(MyListCtrl::OnChar)
|
||||||
@@ -577,6 +583,26 @@ void MyListCtrl::OnColClick(wxListEvent& event)
|
|||||||
wxLogMessage( wxT("OnColumnClick at %d."), event.GetColumn() );
|
wxLogMessage( wxT("OnColumnClick at %d."), event.GetColumn() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyListCtrl::OnColRightClick(wxListEvent& event)
|
||||||
|
{
|
||||||
|
wxLogMessage( wxT("OnColumnRightClick at %d."), event.GetColumn() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyListCtrl::OnColBeginDrag(wxListEvent& event)
|
||||||
|
{
|
||||||
|
wxLogMessage( wxT("OnColBeginDrag: column %d."), event.GetColumn() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyListCtrl::OnColDragging(wxListEvent& event)
|
||||||
|
{
|
||||||
|
wxLogMessage( wxT("OnColDragging: column %d."), event.GetColumn() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyListCtrl::OnColEndDrag(wxListEvent& event)
|
||||||
|
{
|
||||||
|
wxLogMessage( wxT("OnColEndDrag: column %d."), event.GetColumn() );
|
||||||
|
}
|
||||||
|
|
||||||
void MyListCtrl::OnBeginDrag(wxListEvent& event)
|
void MyListCtrl::OnBeginDrag(wxListEvent& event)
|
||||||
{
|
{
|
||||||
const wxPoint& pt = event.m_pointDrag;
|
const wxPoint& pt = event.m_pointDrag;
|
||||||
|
@@ -33,6 +33,10 @@ public:
|
|||||||
void InsertItemInReportView(int i);
|
void InsertItemInReportView(int i);
|
||||||
|
|
||||||
void OnColClick(wxListEvent& event);
|
void OnColClick(wxListEvent& event);
|
||||||
|
void OnColRightClick(wxListEvent& event);
|
||||||
|
void OnColBeginDrag(wxListEvent& event);
|
||||||
|
void OnColDragging(wxListEvent& event);
|
||||||
|
void OnColEndDrag(wxListEvent& event);
|
||||||
void OnBeginDrag(wxListEvent& event);
|
void OnBeginDrag(wxListEvent& event);
|
||||||
void OnBeginRDrag(wxListEvent& event);
|
void OnBeginRDrag(wxListEvent& event);
|
||||||
void OnBeginLabelEdit(wxListEvent& event);
|
void OnBeginLabelEdit(wxListEvent& event);
|
||||||
|
@@ -65,6 +65,10 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_DESELECTED)
|
|||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_KEY_DOWN)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_KEY_DOWN)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_INSERT_ITEM)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_INSERT_ITEM)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_CLICK)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_CLICK)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_DRAGGING)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_END_DRAG)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED)
|
||||||
@@ -1973,19 +1977,22 @@ void wxListHeaderWindow::OnMouse( wxMouseEvent &event )
|
|||||||
m_minX = xpos;
|
m_minX = xpos;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.LeftDown())
|
if (event.LeftDown() || event.RightUp())
|
||||||
{
|
{
|
||||||
if (hit_border)
|
if (hit_border && event.LeftDown())
|
||||||
{
|
{
|
||||||
m_isDragging = TRUE;
|
m_isDragging = TRUE;
|
||||||
m_currentX = x;
|
m_currentX = x;
|
||||||
DrawCurrent();
|
DrawCurrent();
|
||||||
CaptureMouse();
|
CaptureMouse();
|
||||||
}
|
}
|
||||||
else
|
else // click on a column
|
||||||
{
|
{
|
||||||
wxWindow *parent = GetParent();
|
wxWindow *parent = GetParent();
|
||||||
wxListEvent le( wxEVT_COMMAND_LIST_COL_CLICK, parent->GetId() );
|
wxListEvent le( event.LeftDown()
|
||||||
|
? wxEVT_COMMAND_LIST_COL_CLICK
|
||||||
|
: wxEVT_COMMAND_LIST_COL_RIGHT_CLICK,
|
||||||
|
parent->GetId() );
|
||||||
le.SetEventObject( parent );
|
le.SetEventObject( parent );
|
||||||
le.m_col = m_column;
|
le.m_col = m_column;
|
||||||
parent->GetEventHandler()->ProcessEvent( le );
|
parent->GetEventHandler()->ProcessEvent( le );
|
||||||
|
@@ -117,6 +117,10 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_DESELECTED)
|
|||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_KEY_DOWN)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_KEY_DOWN)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_INSERT_ITEM)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_INSERT_ITEM)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_CLICK)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_CLICK)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_DRAGGING)
|
||||||
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_END_DRAG)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK)
|
||||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED)
|
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED)
|
||||||
@@ -1478,172 +1482,249 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
|
|
||||||
NMHDR *nmhdr = (NMHDR *)lParam;
|
NMHDR *nmhdr = (NMHDR *)lParam;
|
||||||
|
|
||||||
// almost all messages use NM_LISTVIEW
|
// check for messages from the header (in report view)
|
||||||
NM_LISTVIEW *nmLV = (NM_LISTVIEW *)nmhdr;
|
HWND hwndHdr = ListView_GetHeader(GetHwnd());
|
||||||
|
|
||||||
// this is true for almost all events
|
// is it a message from the header?
|
||||||
event.m_item.m_data = nmLV->lParam;
|
if ( nmhdr->hwndFrom == hwndHdr )
|
||||||
|
|
||||||
switch ( nmhdr->code )
|
|
||||||
{
|
{
|
||||||
case LVN_BEGINRDRAG:
|
NMHEADER *nmHDR = (NMHEADER *)nmhdr;
|
||||||
eventType = wxEVT_COMMAND_LIST_BEGIN_RDRAG;
|
event.m_itemIndex = -1;
|
||||||
// fall through
|
|
||||||
|
|
||||||
case LVN_BEGINDRAG:
|
switch ( nmhdr->code )
|
||||||
if ( eventType == wxEVT_NULL )
|
{
|
||||||
{
|
// yet another comctl32.dll bug: under NT/W2K it sends Unicode
|
||||||
eventType = wxEVT_COMMAND_LIST_BEGIN_DRAG;
|
// TRACK messages even to ANSI programs: on my system I get
|
||||||
}
|
// HDN_BEGINTRACKW and HDN_ENDTRACKA and no HDN_TRACK at all!
|
||||||
|
//
|
||||||
|
// work around is to simply catch both versions and hope that it
|
||||||
|
// works (why should this message exist in ANSI and Unicode is
|
||||||
|
// beyond me as it doesn't deal with strings at all...)
|
||||||
|
case HDN_BEGINTRACKA:
|
||||||
|
case HDN_BEGINTRACKW:
|
||||||
|
eventType = wxEVT_COMMAND_LIST_COL_BEGIN_DRAG;
|
||||||
|
// fall through
|
||||||
|
|
||||||
event.m_itemIndex = nmLV->iItem;
|
case HDN_TRACKA:
|
||||||
event.m_pointDrag.x = nmLV->ptAction.x;
|
case HDN_TRACKW:
|
||||||
event.m_pointDrag.y = nmLV->ptAction.y;
|
if ( eventType == wxEVT_NULL )
|
||||||
break;
|
eventType = wxEVT_COMMAND_LIST_COL_DRAGGING;
|
||||||
|
// fall through
|
||||||
|
|
||||||
case LVN_BEGINLABELEDIT:
|
case HDN_ENDTRACKA:
|
||||||
{
|
case HDN_ENDTRACKW:
|
||||||
eventType = wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
|
if ( eventType == wxEVT_NULL )
|
||||||
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
eventType = wxEVT_COMMAND_LIST_COL_END_DRAG;
|
||||||
wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
|
event.m_col = nmHDR->iItem;
|
||||||
event.m_itemIndex = event.m_item.m_itemId;
|
break;
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_COLUMNCLICK:
|
case NM_RCLICK:
|
||||||
eventType = wxEVT_COMMAND_LIST_COL_CLICK;
|
|
||||||
event.m_itemIndex = -1;
|
|
||||||
event.m_col = nmLV->iSubItem;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_DELETEALLITEMS:
|
|
||||||
eventType = wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
|
|
||||||
event.m_itemIndex = -1;
|
|
||||||
|
|
||||||
FreeAllAttrs();
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_DELETEITEM:
|
|
||||||
eventType = wxEVT_COMMAND_LIST_DELETE_ITEM;
|
|
||||||
event.m_itemIndex = nmLV->iItem;
|
|
||||||
|
|
||||||
if ( m_hasAnyAttr )
|
|
||||||
{
|
|
||||||
delete (wxListItemAttr *)m_attrs.Delete(nmLV->iItem);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_ENDLABELEDIT:
|
|
||||||
{
|
|
||||||
eventType = wxEVT_COMMAND_LIST_END_LABEL_EDIT;
|
|
||||||
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
|
||||||
wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
|
|
||||||
if ( info->item.pszText == NULL || info->item.iItem == -1 )
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
event.m_itemIndex = event.m_item.m_itemId;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_SETDISPINFO:
|
|
||||||
{
|
|
||||||
eventType = wxEVT_COMMAND_LIST_SET_INFO;
|
|
||||||
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
|
||||||
wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_INSERTITEM:
|
|
||||||
eventType = wxEVT_COMMAND_LIST_INSERT_ITEM;
|
|
||||||
event.m_itemIndex = nmLV->iItem;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_ITEMCHANGED:
|
|
||||||
// This needs to be sent to wxListCtrl as a rather more concrete
|
|
||||||
// event. For now, just detect a selection or deselection.
|
|
||||||
if ( (nmLV->uNewState & LVIS_SELECTED) && !(nmLV->uOldState & LVIS_SELECTED) )
|
|
||||||
{
|
|
||||||
eventType = wxEVT_COMMAND_LIST_ITEM_SELECTED;
|
|
||||||
event.m_itemIndex = nmLV->iItem;
|
|
||||||
}
|
|
||||||
else if ( !(nmLV->uNewState & LVIS_SELECTED) && (nmLV->uOldState & LVIS_SELECTED) )
|
|
||||||
{
|
|
||||||
eventType = wxEVT_COMMAND_LIST_ITEM_DESELECTED;
|
|
||||||
event.m_itemIndex = nmLV->iItem;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_KEYDOWN:
|
|
||||||
{
|
|
||||||
LV_KEYDOWN *info = (LV_KEYDOWN *)lParam;
|
|
||||||
WORD wVKey = info->wVKey;
|
|
||||||
|
|
||||||
// get the current selection
|
|
||||||
long lItem = GetNextItem(-1,
|
|
||||||
wxLIST_NEXT_ALL,
|
|
||||||
wxLIST_STATE_SELECTED);
|
|
||||||
|
|
||||||
// <Enter> or <Space> activate the selected item if any (but
|
|
||||||
// not with Shift and/or Ctrl as then they have a predefined
|
|
||||||
// meaning for the list view)
|
|
||||||
if ( lItem != -1 &&
|
|
||||||
(wVKey == VK_RETURN || wVKey == VK_SPACE) &&
|
|
||||||
!(wxIsShiftDown() || wxIsCtrlDown()) )
|
|
||||||
{
|
{
|
||||||
eventType = wxEVT_COMMAND_LIST_ITEM_ACTIVATED;
|
eventType = wxEVT_COMMAND_LIST_COL_RIGHT_CLICK;
|
||||||
|
event.m_col = -1;
|
||||||
|
|
||||||
|
// find the column clicked: we have to search for it
|
||||||
|
// ourselves as the notification message doesn't provide
|
||||||
|
// this info
|
||||||
|
|
||||||
|
// where did the click occur?
|
||||||
|
POINT ptClick;
|
||||||
|
if ( !::GetCursorPos(&ptClick) )
|
||||||
|
{
|
||||||
|
wxLogLastError(_T("GetCursorPos"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !::ScreenToClient(hwndHdr, &ptClick) )
|
||||||
|
{
|
||||||
|
wxLogLastError(_T("ScreenToClient(listctrl header)"));
|
||||||
|
}
|
||||||
|
|
||||||
|
event.m_pointDrag.x = ptClick.x;
|
||||||
|
event.m_pointDrag.y = ptClick.y;
|
||||||
|
|
||||||
|
int colCount = Header_GetItemCount(hwndHdr);
|
||||||
|
|
||||||
|
RECT rect;
|
||||||
|
for ( int col = 0; col < colCount; col++ )
|
||||||
|
{
|
||||||
|
if ( Header_GetItemRect(hwndHdr, col, &rect) )
|
||||||
|
{
|
||||||
|
if ( ::PtInRect(&rect, ptClick) )
|
||||||
|
{
|
||||||
|
event.m_col = col;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return wxControl::MSWOnNotify(idCtrl, lParam, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( nmhdr->hwndFrom == GetHwnd() )
|
||||||
|
{
|
||||||
|
// almost all messages use NM_LISTVIEW
|
||||||
|
NM_LISTVIEW *nmLV = (NM_LISTVIEW *)nmhdr;
|
||||||
|
|
||||||
|
// this is true for almost all events
|
||||||
|
event.m_item.m_data = nmLV->lParam;
|
||||||
|
|
||||||
|
switch ( nmhdr->code )
|
||||||
|
{
|
||||||
|
case LVN_BEGINRDRAG:
|
||||||
|
eventType = wxEVT_COMMAND_LIST_BEGIN_RDRAG;
|
||||||
|
// fall through
|
||||||
|
|
||||||
|
case LVN_BEGINDRAG:
|
||||||
|
if ( eventType == wxEVT_NULL )
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_BEGIN_DRAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.m_itemIndex = nmLV->iItem;
|
||||||
|
event.m_pointDrag.x = nmLV->ptAction.x;
|
||||||
|
event.m_pointDrag.y = nmLV->ptAction.y;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_BEGINLABELEDIT:
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
|
||||||
|
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
||||||
|
wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
|
||||||
|
event.m_itemIndex = event.m_item.m_itemId;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_COLUMNCLICK:
|
||||||
|
eventType = wxEVT_COMMAND_LIST_COL_CLICK;
|
||||||
|
event.m_itemIndex = -1;
|
||||||
|
event.m_col = nmLV->iSubItem;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_DELETEALLITEMS:
|
||||||
|
eventType = wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
|
||||||
|
event.m_itemIndex = -1;
|
||||||
|
|
||||||
|
FreeAllAttrs();
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_DELETEITEM:
|
||||||
|
eventType = wxEVT_COMMAND_LIST_DELETE_ITEM;
|
||||||
|
event.m_itemIndex = nmLV->iItem;
|
||||||
|
|
||||||
|
if ( m_hasAnyAttr )
|
||||||
|
{
|
||||||
|
delete (wxListItemAttr *)m_attrs.Delete(nmLV->iItem);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_ENDLABELEDIT:
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_END_LABEL_EDIT;
|
||||||
|
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
||||||
|
wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
|
||||||
|
if ( info->item.pszText == NULL || info->item.iItem == -1 )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
event.m_itemIndex = event.m_item.m_itemId;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_SETDISPINFO:
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_SET_INFO;
|
||||||
|
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
||||||
|
wxConvertFromMSWListItem(GetHwnd(), event.m_item, info->item);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_INSERTITEM:
|
||||||
|
eventType = wxEVT_COMMAND_LIST_INSERT_ITEM;
|
||||||
|
event.m_itemIndex = nmLV->iItem;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_ITEMCHANGED:
|
||||||
|
// This needs to be sent to wxListCtrl as a rather more concrete
|
||||||
|
// event. For now, just detect a selection or deselection.
|
||||||
|
if ( (nmLV->uNewState & LVIS_SELECTED) && !(nmLV->uOldState & LVIS_SELECTED) )
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_ITEM_SELECTED;
|
||||||
|
event.m_itemIndex = nmLV->iItem;
|
||||||
|
}
|
||||||
|
else if ( !(nmLV->uNewState & LVIS_SELECTED) && (nmLV->uOldState & LVIS_SELECTED) )
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_ITEM_DESELECTED;
|
||||||
|
event.m_itemIndex = nmLV->iItem;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
eventType = wxEVT_COMMAND_LIST_KEY_DOWN;
|
return FALSE;
|
||||||
event.m_code = wxCharCodeMSWToWX(wVKey);
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
event.m_itemIndex =
|
case LVN_KEYDOWN:
|
||||||
event.m_item.m_itemId = lItem;
|
|
||||||
|
|
||||||
if ( lItem != -1 )
|
|
||||||
{
|
{
|
||||||
// fill the other fields too
|
LV_KEYDOWN *info = (LV_KEYDOWN *)lParam;
|
||||||
event.m_item.m_text = GetItemText(lItem);
|
WORD wVKey = info->wVKey;
|
||||||
event.m_item.m_data = GetItemData(lItem);
|
|
||||||
|
// get the current selection
|
||||||
|
long lItem = GetNextItem(-1,
|
||||||
|
wxLIST_NEXT_ALL,
|
||||||
|
wxLIST_STATE_SELECTED);
|
||||||
|
|
||||||
|
// <Enter> or <Space> activate the selected item if any (but
|
||||||
|
// not with Shift and/or Ctrl as then they have a predefined
|
||||||
|
// meaning for the list view)
|
||||||
|
if ( lItem != -1 &&
|
||||||
|
(wVKey == VK_RETURN || wVKey == VK_SPACE) &&
|
||||||
|
!(wxIsShiftDown() || wxIsCtrlDown()) )
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_ITEM_ACTIVATED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eventType = wxEVT_COMMAND_LIST_KEY_DOWN;
|
||||||
|
event.m_code = wxCharCodeMSWToWX(wVKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
event.m_itemIndex =
|
||||||
|
event.m_item.m_itemId = lItem;
|
||||||
|
|
||||||
|
if ( lItem != -1 )
|
||||||
|
{
|
||||||
|
// fill the other fields too
|
||||||
|
event.m_item.m_text = GetItemText(lItem);
|
||||||
|
event.m_item.m_data = GetItemData(lItem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case NM_DBLCLK:
|
case NM_DBLCLK:
|
||||||
// if the user processes it in wxEVT_COMMAND_LEFT_CLICK(), don't do
|
// if the user processes it in wxEVT_COMMAND_LEFT_CLICK(), don't do
|
||||||
// anything else
|
// anything else
|
||||||
if ( wxControl::MSWOnNotify(idCtrl, lParam, result) )
|
if ( wxControl::MSWOnNotify(idCtrl, lParam, result) )
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// else translate it into wxEVT_COMMAND_LIST_ITEM_ACTIVATED event
|
// else translate it into wxEVT_COMMAND_LIST_ITEM_ACTIVATED event
|
||||||
// if it happened on an item (and not on empty place)
|
// if it happened on an item (and not on empty place)
|
||||||
if ( nmLV->iItem == -1 )
|
if ( nmLV->iItem == -1 )
|
||||||
{
|
{
|
||||||
// not on item
|
// not on item
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
eventType = wxEVT_COMMAND_LIST_ITEM_ACTIVATED;
|
eventType = wxEVT_COMMAND_LIST_ITEM_ACTIVATED;
|
||||||
event.m_itemIndex = nmLV->iItem;
|
event.m_itemIndex = nmLV->iItem;
|
||||||
event.m_item.m_text = GetItemText(nmLV->iItem);
|
event.m_item.m_text = GetItemText(nmLV->iItem);
|
||||||
event.m_item.m_data = GetItemData(nmLV->iItem);
|
event.m_item.m_data = GetItemData(nmLV->iItem);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NM_RCLICK:
|
case NM_RCLICK:
|
||||||
/* TECH NOTE: NM_RCLICK isn't really good enough here. We want to
|
|
||||||
subclass and check for the actual WM_RBUTTONDOWN message,
|
|
||||||
because NM_RCLICK waits for the WM_RBUTTONUP message as well
|
|
||||||
before firing off. We want to have notify events for both down
|
|
||||||
-and- up. */
|
|
||||||
{
|
|
||||||
// if the user processes it in wxEVT_COMMAND_RIGHT_CLICK(),
|
// if the user processes it in wxEVT_COMMAND_RIGHT_CLICK(),
|
||||||
// don't do anything else
|
// don't do anything else
|
||||||
if ( wxControl::MSWOnNotify(idCtrl, lParam, result) )
|
if ( wxControl::MSWOnNotify(idCtrl, lParam, result) )
|
||||||
@@ -1667,89 +1748,76 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
event.m_pointDrag.y = lvhti.pt.y;
|
event.m_pointDrag.y = lvhti.pt.y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
case NM_MCLICK: // ***** THERE IS NO NM_MCLICK. Subclass anyone? ******
|
|
||||||
{
|
|
||||||
// if the user processes it in wxEVT_COMMAND_MIDDLE_CLICK(), don't do
|
|
||||||
// anything else
|
|
||||||
if ( wxControl::MSWOnNotify(idCtrl, lParam, result) )
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// else translate it into wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK event
|
|
||||||
eventType = wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK;
|
|
||||||
NMITEMACTIVATE* hdr = (NMITEMACTIVATE*)lParam;
|
|
||||||
event.m_itemIndex = hdr->iItem;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif // 0
|
|
||||||
|
|
||||||
#if defined(_WIN32_IE) && _WIN32_IE >= 0x300 \
|
#if defined(_WIN32_IE) && _WIN32_IE >= 0x300 \
|
||||||
&& !( defined(__GNUWIN32__) && !wxCHECK_W32API_VERSION( 1, 0 ) )
|
&& !( defined(__GNUWIN32__) && !wxCHECK_W32API_VERSION( 1, 0 ) )
|
||||||
case NM_CUSTOMDRAW:
|
case NM_CUSTOMDRAW:
|
||||||
*result = OnCustomDraw(lParam);
|
*result = OnCustomDraw(lParam);
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
#endif // _WIN32_IE >= 0x300
|
|
||||||
|
|
||||||
case LVN_ODCACHEHINT:
|
|
||||||
{
|
|
||||||
const NM_CACHEHINT *cacheHint = (NM_CACHEHINT *)lParam;
|
|
||||||
|
|
||||||
eventType = wxEVT_COMMAND_LIST_CACHE_HINT;
|
|
||||||
|
|
||||||
// we get some really stupid cache hints like ones for items in
|
|
||||||
// range 0..0 for an empty control or, after deleting an item,
|
|
||||||
// for items in invalid range - filter this garbage out
|
|
||||||
if ( cacheHint->iFrom < cacheHint->iTo )
|
|
||||||
{
|
|
||||||
event.m_oldItemIndex = cacheHint->iFrom;
|
|
||||||
|
|
||||||
long iMax = GetItemCount();
|
|
||||||
event.m_itemIndex = cacheHint->iTo < iMax ? cacheHint->iTo
|
|
||||||
: iMax - 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LVN_GETDISPINFO:
|
|
||||||
if ( IsVirtual() )
|
|
||||||
{
|
|
||||||
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
|
||||||
|
|
||||||
LV_ITEM& lvi = info->item;
|
|
||||||
long item = lvi.iItem;
|
|
||||||
|
|
||||||
if ( lvi.mask & LVIF_TEXT )
|
|
||||||
{
|
|
||||||
wxString text = OnGetItemText(item, lvi.iSubItem);
|
|
||||||
wxStrncpy(lvi.pszText, text, lvi.cchTextMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( lvi.mask & LVIF_IMAGE )
|
|
||||||
{
|
|
||||||
lvi.iImage = OnGetItemImage(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
// a little dose of healthy paranoia: as we never use
|
|
||||||
// LVM_SETCALLBACKMASK we're not supposed to get these ones
|
|
||||||
wxASSERT_MSG( !(lvi.mask & LVIF_STATE),
|
|
||||||
_T("we don't support state callbacks yet!") );
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
#endif // _WIN32_IE >= 0x300
|
||||||
// fall through
|
|
||||||
|
|
||||||
default:
|
case LVN_ODCACHEHINT:
|
||||||
return wxControl::MSWOnNotify(idCtrl, lParam, result);
|
{
|
||||||
|
const NM_CACHEHINT *cacheHint = (NM_CACHEHINT *)lParam;
|
||||||
|
|
||||||
|
eventType = wxEVT_COMMAND_LIST_CACHE_HINT;
|
||||||
|
|
||||||
|
// we get some really stupid cache hints like ones for items in
|
||||||
|
// range 0..0 for an empty control or, after deleting an item,
|
||||||
|
// for items in invalid range - filter this garbage out
|
||||||
|
if ( cacheHint->iFrom < cacheHint->iTo )
|
||||||
|
{
|
||||||
|
event.m_oldItemIndex = cacheHint->iFrom;
|
||||||
|
|
||||||
|
long iMax = GetItemCount();
|
||||||
|
event.m_itemIndex = cacheHint->iTo < iMax ? cacheHint->iTo
|
||||||
|
: iMax - 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LVN_GETDISPINFO:
|
||||||
|
if ( IsVirtual() )
|
||||||
|
{
|
||||||
|
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
|
||||||
|
|
||||||
|
LV_ITEM& lvi = info->item;
|
||||||
|
long item = lvi.iItem;
|
||||||
|
|
||||||
|
if ( lvi.mask & LVIF_TEXT )
|
||||||
|
{
|
||||||
|
wxString text = OnGetItemText(item, lvi.iSubItem);
|
||||||
|
wxStrncpy(lvi.pszText, text, lvi.cchTextMax);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( lvi.mask & LVIF_IMAGE )
|
||||||
|
{
|
||||||
|
lvi.iImage = OnGetItemImage(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
// a little dose of healthy paranoia: as we never use
|
||||||
|
// LVM_SETCALLBACKMASK we're not supposed to get these ones
|
||||||
|
wxASSERT_MSG( !(lvi.mask & LVIF_STATE),
|
||||||
|
_T("we don't support state callbacks yet!") );
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
// fall through
|
||||||
|
|
||||||
|
default:
|
||||||
|
return wxControl::MSWOnNotify(idCtrl, lParam, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// where did this one come from?
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// process the event
|
// process the event
|
||||||
|
Reference in New Issue
Block a user