Send events from port-specific code, not common code, tested in samples
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47694 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -576,7 +576,7 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&);
|
|||||||
#define EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_RIGHT_CLICK, id, fn)
|
#define EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_RIGHT_CLICK, id, fn)
|
||||||
#define EVT_DATAVIEW_COLUMN_SORTED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_SORTED, id, fn)
|
#define EVT_DATAVIEW_COLUMN_SORTED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_SORTED, id, fn)
|
||||||
|
|
||||||
#define EVT_DATAVIEW_MODEL_ITEM_ADDED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_APPENDED, id, fn)
|
#define EVT_DATAVIEW_MODEL_ITEM_ADDED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_ADDED, id, fn)
|
||||||
#define EVT_DATAVIEW_MODEL_ITEM_DELETED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_DELETED, id, fn)
|
#define EVT_DATAVIEW_MODEL_ITEM_DELETED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_DELETED, id, fn)
|
||||||
#define EVT_DATAVIEW_MODEL_ITEM_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_CHANGED, id, fn)
|
#define EVT_DATAVIEW_MODEL_ITEM_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_CHANGED, id, fn)
|
||||||
#define EVT_DATAVIEW_MODEL_VALUE_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_VALUE_CHANGED, id, fn)
|
#define EVT_DATAVIEW_MODEL_VALUE_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_VALUE_CHANGED, id, fn)
|
||||||
|
@@ -412,6 +412,10 @@ public:
|
|||||||
void OnPrependList(wxCommandEvent& event);
|
void OnPrependList(wxCommandEvent& event);
|
||||||
void OnDeleteList(wxCommandEvent& event);
|
void OnDeleteList(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void OnValueChanged( wxDataViewEvent &event );
|
||||||
|
void OnItemAdded( wxDataViewEvent &event );
|
||||||
|
void OnItemDeleted( wxDataViewEvent &event );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxDataViewCtrl* m_musicCtrl;
|
wxDataViewCtrl* m_musicCtrl;
|
||||||
wxObjectDataPtr<MyMusicModel> m_music_model;
|
wxObjectDataPtr<MyMusicModel> m_music_model;
|
||||||
@@ -461,6 +465,8 @@ enum
|
|||||||
ID_ABOUT = wxID_ABOUT,
|
ID_ABOUT = wxID_ABOUT,
|
||||||
ID_EXIT = wxID_EXIT,
|
ID_EXIT = wxID_EXIT,
|
||||||
|
|
||||||
|
ID_MUSIC_CTRL = 50,
|
||||||
|
|
||||||
ID_ADD_MOZART = 100,
|
ID_ADD_MOZART = 100,
|
||||||
ID_DELETE_MUSIC = 101,
|
ID_DELETE_MUSIC = 101,
|
||||||
|
|
||||||
@@ -475,11 +481,16 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_BUTTON( ID_DELETE_MUSIC, MyFrame::OnDeleteMusic )
|
EVT_BUTTON( ID_DELETE_MUSIC, MyFrame::OnDeleteMusic )
|
||||||
EVT_BUTTON( ID_PREPEND_LIST, MyFrame::OnPrependList )
|
EVT_BUTTON( ID_PREPEND_LIST, MyFrame::OnPrependList )
|
||||||
EVT_BUTTON( ID_DELETE_LIST, MyFrame::OnDeleteList )
|
EVT_BUTTON( ID_DELETE_LIST, MyFrame::OnDeleteList )
|
||||||
|
EVT_DATAVIEW_MODEL_ITEM_ADDED( ID_MUSIC_CTRL, MyFrame::OnItemAdded )
|
||||||
|
EVT_DATAVIEW_MODEL_ITEM_DELETED( ID_MUSIC_CTRL, MyFrame::OnItemDeleted )
|
||||||
|
EVT_DATAVIEW_MODEL_VALUE_CHANGED( ID_MUSIC_CTRL, MyFrame::OnValueChanged )
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
|
MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
|
||||||
wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
|
wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
|
||||||
{
|
{
|
||||||
|
m_log = NULL;
|
||||||
|
|
||||||
SetIcon(wxICON(sample));
|
SetIcon(wxICON(sample));
|
||||||
|
|
||||||
// build the menus:
|
// build the menus:
|
||||||
@@ -501,7 +512,7 @@ MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
|
|||||||
|
|
||||||
// MyMusic
|
// MyMusic
|
||||||
|
|
||||||
m_musicCtrl = new wxDataViewCtrl( this, wxID_ANY, wxDefaultPosition,
|
m_musicCtrl = new wxDataViewCtrl( this, ID_MUSIC_CTRL, wxDefaultPosition,
|
||||||
wxDefaultSize );
|
wxDefaultSize );
|
||||||
|
|
||||||
m_music_model = new MyMusicModel;
|
m_music_model = new MyMusicModel;
|
||||||
@@ -581,6 +592,30 @@ void MyFrame::OnDeleteList( wxCommandEvent& WXUNUSED(event) )
|
|||||||
m_list_model->DeleteItem( item );
|
m_list_model->DeleteItem( item );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnItemAdded( wxDataViewEvent &event )
|
||||||
|
{
|
||||||
|
if (!m_log)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_log->AppendText( "EVT_DATAVIEW_MODEL_ITEM_ADDED\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnItemDeleted( wxDataViewEvent &event )
|
||||||
|
{
|
||||||
|
if (!m_log)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_log->AppendText( "EVT_DATAVIEW_MODEL_ITEM_DELETED\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnValueChanged( wxDataViewEvent &event )
|
||||||
|
{
|
||||||
|
if (!m_log)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_log->AppendText( "EVT_DATAVIEW_MODEL_VALUE_CHANGED\n" );
|
||||||
|
}
|
||||||
|
|
||||||
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
|
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
|
||||||
{
|
{
|
||||||
wxAboutDialogInfo info;
|
wxAboutDialogInfo info;
|
||||||
|
@@ -528,42 +528,6 @@ void wxDataViewColumnBase::SetFlags(int flags)
|
|||||||
SetHidden((flags & wxDATAVIEW_COL_HIDDEN) != 0);
|
SetHidden((flags & wxDATAVIEW_COL_HIDDEN) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
// wxDataViewEventModelNotifier
|
|
||||||
// ---------------------------------------------------------
|
|
||||||
|
|
||||||
class WXDLLIMPEXP_ADV wxDataViewEventModelNotifier: public wxDataViewModelNotifier
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
wxDataViewEventModelNotifier( wxDataViewCtrl *ctrl ) { m_ctrl = ctrl; }
|
|
||||||
|
|
||||||
bool SendEvent( wxEventType event_type, const wxDataViewItem &item, unsigned int col = 0 )
|
|
||||||
{
|
|
||||||
wxDataViewEvent event( event_type, m_ctrl->GetId() );
|
|
||||||
event.SetEventObject( m_ctrl );
|
|
||||||
event.SetModel( m_ctrl->GetModel() );
|
|
||||||
event.SetItem( item );
|
|
||||||
event.SetColumn( col );
|
|
||||||
m_ctrl->GetEventHandler()->ProcessEvent( event );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item )
|
|
||||||
{ return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, item ); }
|
|
||||||
virtual bool ItemDeleted( const wxDataViewItem &item )
|
|
||||||
{ return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED, item ); }
|
|
||||||
virtual bool ItemChanged( const wxDataViewItem &item )
|
|
||||||
{ return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_CHANGED, item ); }
|
|
||||||
virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col )
|
|
||||||
{ return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED, item, col ); }
|
|
||||||
virtual bool Cleared()
|
|
||||||
{ return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED, wxDataViewItem(0) ); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
wxDataViewCtrl *m_ctrl;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
// wxDataViewCtrlBase
|
// wxDataViewCtrlBase
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
@@ -574,7 +538,6 @@ wxDataViewCtrlBase::wxDataViewCtrlBase()
|
|||||||
{
|
{
|
||||||
m_model = NULL;
|
m_model = NULL;
|
||||||
m_cols.DeleteContents( true );
|
m_cols.DeleteContents( true );
|
||||||
m_eventNotifier = NULL;
|
|
||||||
m_expander_column = 0;
|
m_expander_column = 0;
|
||||||
m_indent = 8;
|
m_indent = 8;
|
||||||
}
|
}
|
||||||
@@ -588,10 +551,6 @@ wxDataViewCtrlBase::~wxDataViewCtrlBase()
|
|||||||
|
|
||||||
if (m_model)
|
if (m_model)
|
||||||
{
|
{
|
||||||
if (m_eventNotifier)
|
|
||||||
m_model->RemoveNotifier( m_eventNotifier );
|
|
||||||
m_eventNotifier = NULL;
|
|
||||||
|
|
||||||
m_model->DecRef();
|
m_model->DecRef();
|
||||||
m_model = NULL;
|
m_model = NULL;
|
||||||
}
|
}
|
||||||
@@ -601,10 +560,6 @@ bool wxDataViewCtrlBase::AssociateModel( wxDataViewModel *model )
|
|||||||
{
|
{
|
||||||
if (m_model)
|
if (m_model)
|
||||||
{
|
{
|
||||||
if (m_eventNotifier)
|
|
||||||
m_model->RemoveNotifier( m_eventNotifier );
|
|
||||||
m_eventNotifier = NULL;
|
|
||||||
|
|
||||||
m_model->DecRef(); // discard old model, if any
|
m_model->DecRef(); // discard old model, if any
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -613,8 +568,6 @@ bool wxDataViewCtrlBase::AssociateModel( wxDataViewModel *model )
|
|||||||
if (m_model)
|
if (m_model)
|
||||||
{
|
{
|
||||||
m_model->IncRef();
|
m_model->IncRef();
|
||||||
m_eventNotifier = new wxDataViewEventModelNotifier( (wxDataViewCtrl*) this );
|
|
||||||
m_model->AddNotifier( m_eventNotifier );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@@ -75,7 +75,9 @@ public:
|
|||||||
|
|
||||||
bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item );
|
bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item );
|
||||||
bool ItemDeleted( const wxDataViewItem &item );
|
bool ItemDeleted( const wxDataViewItem &item );
|
||||||
|
bool ItemChanged( const wxDataViewItem &item );
|
||||||
|
bool ValueChanged( const wxDataViewItem &item, unsigned int col );
|
||||||
|
bool Cleared();
|
||||||
void Resort();
|
void Resort();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -1096,6 +1098,8 @@ bool wxGtkDataViewModelNotifier::ItemChanged( const wxDataViewItem &item )
|
|||||||
GTK_TREE_MODEL(m_wxgtk_model), path, &iter );
|
GTK_TREE_MODEL(m_wxgtk_model), path, &iter );
|
||||||
gtk_tree_path_free (path);
|
gtk_tree_path_free (path);
|
||||||
|
|
||||||
|
m_owner->GtkGetInternal()->ItemChanged( item );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1129,14 +1133,22 @@ bool wxGtkDataViewModelNotifier::ValueChanged( const wxDataViewItem &item, unsig
|
|||||||
// Redraw
|
// Redraw
|
||||||
gtk_widget_queue_draw_area( GTK_WIDGET(widget),
|
gtk_widget_queue_draw_area( GTK_WIDGET(widget),
|
||||||
cell_area.x - xdiff, ydiff + cell_area.y, cell_area.width, cell_area.height );
|
cell_area.x - xdiff, ydiff + cell_area.y, cell_area.width, cell_area.height );
|
||||||
|
|
||||||
|
m_owner->GtkGetInternal()->ValueChanged( item, model_col );
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxGtkDataViewModelNotifier::Cleared()
|
bool wxGtkDataViewModelNotifier::Cleared()
|
||||||
{
|
{
|
||||||
|
// TODO: delete everything
|
||||||
|
|
||||||
|
m_owner->GtkGetInternal()->Cleared();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2240,6 +2252,10 @@ void wxDataViewCtrlInternal::InitTree()
|
|||||||
|
|
||||||
void wxDataViewCtrlInternal::BuildBranch( wxGtkTreeModelNode *node )
|
void wxDataViewCtrlInternal::BuildBranch( wxGtkTreeModelNode *node )
|
||||||
{
|
{
|
||||||
|
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, m_owner->GetId() );
|
||||||
|
event.SetEventObject( m_owner );
|
||||||
|
event.SetModel( m_owner->GetModel() );
|
||||||
|
|
||||||
if (node->GetChildCount() == 0)
|
if (node->GetChildCount() == 0)
|
||||||
{
|
{
|
||||||
wxDataViewItem child = m_wx_model->GetFirstChild( node->GetItem() );
|
wxDataViewItem child = m_wx_model->GetFirstChild( node->GetItem() );
|
||||||
@@ -2249,6 +2265,10 @@ void wxDataViewCtrlInternal::BuildBranch( wxGtkTreeModelNode *node )
|
|||||||
node->AddNode( new wxGtkTreeModelNode( node, child, this ) );
|
node->AddNode( new wxGtkTreeModelNode( node, child, this ) );
|
||||||
else
|
else
|
||||||
node->AddLeave( child.GetID() );
|
node->AddLeave( child.GetID() );
|
||||||
|
|
||||||
|
event.SetItem( child );
|
||||||
|
m_owner->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
child = m_wx_model->GetNextSibling( child );
|
child = m_wx_model->GetNextSibling( child );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2266,6 +2286,13 @@ bool wxDataViewCtrlInternal::ItemAdded( const wxDataViewItem &parent, const wxDa
|
|||||||
parent_node->AddNode( new wxGtkTreeModelNode( parent_node, item, this ) );
|
parent_node->AddNode( new wxGtkTreeModelNode( parent_node, item, this ) );
|
||||||
else
|
else
|
||||||
parent_node->AddLeave( item.GetID() );
|
parent_node->AddLeave( item.GetID() );
|
||||||
|
|
||||||
|
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, m_owner->GetId() );
|
||||||
|
event.SetEventObject( m_owner );
|
||||||
|
event.SetModel( m_owner->GetModel() );
|
||||||
|
event.SetItem( item );
|
||||||
|
m_owner->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2273,6 +2300,46 @@ bool wxDataViewCtrlInternal::ItemDeleted( const wxDataViewItem &item )
|
|||||||
{
|
{
|
||||||
wxGtkTreeModelNode *parent = FindParentNode( item );
|
wxGtkTreeModelNode *parent = FindParentNode( item );
|
||||||
parent->DeleteChild( item.GetID() );
|
parent->DeleteChild( item.GetID() );
|
||||||
|
|
||||||
|
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED, m_owner->GetId() );
|
||||||
|
event.SetEventObject( m_owner );
|
||||||
|
event.SetModel( m_owner->GetModel() );
|
||||||
|
event.SetItem( item );
|
||||||
|
m_owner->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDataViewCtrlInternal::ItemChanged( const wxDataViewItem &item )
|
||||||
|
{
|
||||||
|
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_CHANGED, m_owner->GetId() );
|
||||||
|
event.SetEventObject( m_owner );
|
||||||
|
event.SetModel( m_owner->GetModel() );
|
||||||
|
event.SetItem( item );
|
||||||
|
m_owner->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned int col )
|
||||||
|
{
|
||||||
|
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED, m_owner->GetId() );
|
||||||
|
event.SetEventObject( m_owner );
|
||||||
|
event.SetModel( m_owner->GetModel() );
|
||||||
|
event.SetColumn( col );
|
||||||
|
event.SetItem( item );
|
||||||
|
m_owner->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDataViewCtrlInternal::Cleared()
|
||||||
|
{
|
||||||
|
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED, m_owner->GetId() );
|
||||||
|
event.SetEventObject( m_owner );
|
||||||
|
event.SetModel( m_owner->GetModel() );
|
||||||
|
m_owner->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user