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).
|
- Support float, double and file name values in wxGenericValidator (troelsk).
|
||||||
- Fix keyboard navigation in wxGrid with hidden columns (ivan_14_32).
|
- Fix keyboard navigation in wxGrid with hidden columns (ivan_14_32).
|
||||||
- Add wxDataViewEvent::IsEditCancelled() (Allonii).
|
- 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).
|
- Allow marking wxTreeBook nodes to expand initially in XRC (RedTide).
|
||||||
- Added customizable wxDocManager::OnMRUFileNotExist() virtual method.
|
- Added customizable wxDocManager::OnMRUFileNotExist() virtual method.
|
||||||
- Fix stock labels when not using mnemonics for Chinese (cw.ahbong).
|
- Fix stock labels when not using mnemonics for Chinese (cw.ahbong).
|
||||||
|
@@ -735,7 +735,11 @@ public:
|
|||||||
@event{EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, func)}
|
@event{EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, func)}
|
||||||
Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED event.
|
Process a @c wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED event.
|
||||||
@event{EVT_DATAVIEW_ITEM_CONTEXT_MENU(id, func)}
|
@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)}
|
@event{EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, func)}
|
||||||
Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICKED event.
|
Process a @c wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICKED event.
|
||||||
@event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)}
|
@event{EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK(id, func)}
|
||||||
|
@@ -3555,6 +3555,37 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
}
|
}
|
||||||
xpos += c->GetWidth();
|
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)
|
if (!col)
|
||||||
{
|
{
|
||||||
event.Skip();
|
event.Skip();
|
||||||
@@ -3562,7 +3593,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
}
|
}
|
||||||
|
|
||||||
wxDataViewRenderer *cell = col->GetRenderer();
|
wxDataViewRenderer *cell = col->GetRenderer();
|
||||||
unsigned int current = GetLineAt( y );
|
|
||||||
if ((current >= GetRowCount()) || (x > GetEndOfLastCol()))
|
if ((current >= GetRowCount()) || (x > GetEndOfLastCol()))
|
||||||
{
|
{
|
||||||
// Unselect all if below the last row ?
|
// 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 wxUSE_DRAG_AND_DROP
|
||||||
if (event.Dragging())
|
if (event.Dragging())
|
||||||
{
|
{
|
||||||
@@ -3648,12 +3676,12 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
m_owner->CalcUnscrolledPosition( m_dragStart.x, m_dragStart.y,
|
m_owner->CalcUnscrolledPosition( m_dragStart.x, m_dragStart.y,
|
||||||
&m_dragStart.x, &m_dragStart.y );
|
&m_dragStart.x, &m_dragStart.y );
|
||||||
unsigned int drag_item_row = GetLineAt( 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
|
// Notify cell about drag
|
||||||
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, m_owner->GetId() );
|
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG, m_owner->GetId() );
|
||||||
event.SetEventObject( m_owner );
|
event.SetEventObject( m_owner );
|
||||||
event.SetItem( item );
|
event.SetItem( itemDragged );
|
||||||
event.SetModel( model );
|
event.SetModel( model );
|
||||||
if (!m_owner->HandleWindowEvent( event ))
|
if (!m_owner->HandleWindowEvent( event ))
|
||||||
return;
|
return;
|
||||||
@@ -3686,7 +3714,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
m_lastOnSame = false;
|
m_lastOnSame = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDataViewItem item = GetItemByRow(current);
|
|
||||||
bool ignore_other_columns =
|
bool ignore_other_columns =
|
||||||
((expander != col) &&
|
((expander != col) &&
|
||||||
(model->IsContainer(item)) &&
|
(model->IsContainer(item)) &&
|
||||||
@@ -3786,20 +3813,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
SendSelectionChangedEvent(GetItemByRow( m_currentRow ) );
|
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())
|
else if (event.MiddleDown())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@@ -4536,23 +4536,22 @@ gtk_dataview_button_press_callback( GtkWidget *WXUNUSED(widget),
|
|||||||
GtkTreeViewColumn *column = NULL;
|
GtkTreeViewColumn *column = NULL;
|
||||||
gint cell_x = 0;
|
gint cell_x = 0;
|
||||||
gint cell_y = 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()),
|
GTK_TREE_VIEW(dv->GtkGetTreeView()),
|
||||||
(int) gdk_event->x, (int) gdk_event->y,
|
(int) gdk_event->x, (int) gdk_event->y,
|
||||||
path.ByRef(),
|
path.ByRef(),
|
||||||
&column,
|
&column,
|
||||||
&cell_x,
|
&cell_x,
|
||||||
&cell_y))
|
&cell_y
|
||||||
{
|
);
|
||||||
if (path)
|
|
||||||
{
|
|
||||||
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, dv->GetId() );
|
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, dv->GetId() );
|
||||||
|
if (path)
|
||||||
event.SetItem(dv->GTKPathToItem(path));
|
event.SetItem(dv->GTKPathToItem(path));
|
||||||
event.SetModel( dv->GetModel() );
|
event.SetModel( dv->GetModel() );
|
||||||
return dv->HandleWindowEvent( event );
|
return dv->HandleWindowEvent( event );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user