Send EVT_DATAVIEW_ITEM_CONTEXT_MENU events even when not clicking on an item.
Always send this event, even if the user right clicked outside of the client area. This is useful for showing item-independent commands in the context menu. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69177 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -460,6 +460,7 @@ All (GUI):
|
||||
- Support float, double and file name values in wxGenericValidator (troelsk).
|
||||
- Fix keyboard navigation in wxGrid with hidden columns (ivan_14_32).
|
||||
- Add wxDataViewEvent::IsEditCancelled() (Allonii).
|
||||
- Send EVT_DATAVIEW_ITEM_CONTEXT_MENU events even when not clicking on an item.
|
||||
- Allow marking wxTreeBook nodes to expand initially in XRC (RedTide).
|
||||
- Added customizable wxDocManager::OnMRUFileNotExist() virtual method.
|
||||
- Fix stock labels when not using mnemonics for Chinese (cw.ahbong).
|
||||
|
@@ -735,7 +735,11 @@ public:
|
||||
@event{EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, func)}
|
||||
Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED event.
|
||||
@event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)}
|
||||
Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event.
|
||||
Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU event
|
||||
generated when the user right clicks inside the control. Notice that
|
||||
this menu is generated even if the click didn't occur on any valid
|
||||
item, in this case wxDataViewEvent::GetItem() simply returns an
|
||||
invalid item.
|
||||
@event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
|
||||
Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICKED event.
|
||||
@event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)}
|
||||
|
@@ -3555,6 +3555,37 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
||||
}
|
||||
xpos += c->GetWidth();
|
||||
}
|
||||
|
||||
wxDataViewModel* const model = GetModel();
|
||||
|
||||
const unsigned int current = GetLineAt( y );
|
||||
const wxDataViewItem item = GetItemByRow(current);
|
||||
|
||||
// Handle right clicking here, before everything else as context menu
|
||||
// events should be sent even when we click outside of any item, unlike all
|
||||
// the other ones.
|
||||
if (event.RightUp())
|
||||
{
|
||||
wxWindow *parent = GetParent();
|
||||
wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, parent->GetId());
|
||||
le.SetEventObject(parent);
|
||||
le.SetModel(model);
|
||||
|
||||
if ( item.IsOk() && col )
|
||||
{
|
||||
le.SetItem( item );
|
||||
le.SetColumn( col->GetModelColumn() );
|
||||
le.SetDataViewColumn( col );
|
||||
|
||||
wxVariant value;
|
||||
model->GetValue( value, item, col->GetModelColumn() );
|
||||
le.SetValue(value);
|
||||
}
|
||||
|
||||
parent->ProcessWindowEvent(le);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!col)
|
||||
{
|
||||
event.Skip();
|
||||
@@ -3562,7 +3593,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
||||
}
|
||||
|
||||
wxDataViewRenderer *cell = col->GetRenderer();
|
||||
unsigned int current = GetLineAt( y );
|
||||
if ((current >= GetRowCount()) || (x > GetEndOfLastCol()))
|
||||
{
|
||||
// Unselect all if below the last row ?
|
||||
@@ -3625,8 +3655,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
||||
}
|
||||
}
|
||||
|
||||
wxDataViewModel *model = GetModel();
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
if (event.Dragging())
|
||||
{
|
||||
@@ -3648,12 +3676,12 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
||||
m_owner->CalcUnscrolledPosition( m_dragStart.x, m_dragStart.y,
|
||||
&m_dragStart.x, &m_dragStart.y );
|
||||
unsigned int drag_item_row = GetLineAt( m_dragStart.y );
|
||||
wxDataViewItem item = GetItemByRow( drag_item_row );
|
||||
wxDataViewItem itemDragged = GetItemByRow( drag_item_row );
|
||||
|
||||
// Notify cell about drag
|
||||
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, m_owner->GetId() );
|
||||
event.SetEventObject( m_owner );
|
||||
event.SetItem( item );
|
||||
event.SetItem( itemDragged );
|
||||
event.SetModel( model );
|
||||
if (!m_owner->HandleWindowEvent( event ))
|
||||
return;
|
||||
@@ -3686,7 +3714,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
||||
m_lastOnSame = false;
|
||||
}
|
||||
|
||||
wxDataViewItem item = GetItemByRow(current);
|
||||
bool ignore_other_columns =
|
||||
((expander != col) &&
|
||||
(model->IsContainer(item)) &&
|
||||
@@ -3786,20 +3813,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
||||
SendSelectionChangedEvent(GetItemByRow( m_currentRow ) );
|
||||
}
|
||||
}
|
||||
else if (event.RightUp())
|
||||
{
|
||||
wxVariant value;
|
||||
model->GetValue( value, item, col->GetModelColumn() );
|
||||
wxWindow *parent = GetParent();
|
||||
wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, parent->GetId());
|
||||
le.SetItem( item );
|
||||
le.SetColumn( col->GetModelColumn() );
|
||||
le.SetDataViewColumn( col );
|
||||
le.SetEventObject(parent);
|
||||
le.SetModel(GetModel());
|
||||
le.SetValue(value);
|
||||
parent->ProcessWindowEvent(le);
|
||||
}
|
||||
else if (event.MiddleDown())
|
||||
{
|
||||
}
|
||||
|
@@ -4536,23 +4536,22 @@ gtk_dataview_button_press_callback( GtkWidget *WXUNUSED(widget),
|
||||
GtkTreeViewColumn *column = NULL;
|
||||
gint cell_x = 0;
|
||||
gint cell_y = 0;
|
||||
if (gtk_tree_view_get_path_at_pos(
|
||||
gtk_tree_view_get_path_at_pos
|
||||
(
|
||||
GTK_TREE_VIEW(dv->GtkGetTreeView()),
|
||||
(int) gdk_event->x, (int) gdk_event->y,
|
||||
path.ByRef(),
|
||||
&column,
|
||||
&cell_x,
|
||||
&cell_y))
|
||||
{
|
||||
if (path)
|
||||
{
|
||||
&cell_y
|
||||
);
|
||||
|
||||
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, dv->GetId() );
|
||||
if (path)
|
||||
event.SetItem(dv->GTKPathToItem(path));
|
||||
event.SetModel( dv->GetModel() );
|
||||
return dv->HandleWindowEvent( event );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user