wxMenu and wxUpdateUIEvent
Patrik Mueller
paddi.m at gmx.net
Tue Feb 5 12:25:54 PST 2008
Hi,
I'm a newbie with wxWidgets - so I have a problem:
I have derived a class fromwxMenu (code attached at the end of this
question. The connection for the selection of a wxMenuItem is ok - but I
don't receive an update event. Where's my mistake?
Thanks in advance,
Patrik
#pragma once
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "Im_Entity3D.h"
class Im_Entity3DMenu : public wxMenu
{
public:
void SetEntity(Im_Entity3DPtr theEntity);
void BuildItems();
Im_Entity3DMenu();
virtual ~Im_Entity3DMenu(void);
protected:
void SetPointStyle( wxCommandEvent& event );
void SetCheckPointStyle(wxUpdateUIEvent& event);
void SetBoxStyle( wxCommandEvent& event );
void SetCheckBoxStyle(wxUpdateUIEvent& event);
void SetWireframeStyle( wxCommandEvent& event );
void SetCheckWireframeStyle(wxUpdateUIEvent& event);
void SetShadedStyle( wxCommandEvent& event );
void SetCheckShadedStyle(wxUpdateUIEvent& event);
void ChangeMaterial( wxCommandEvent& event );
void ChangeLayer( wxCommandEvent& event );
void SetVisibility( wxCommandEvent& event );
void SetCheckVisibility(wxUpdateUIEvent& event);
void RenameEntity( wxCommandEvent& event );
void DeleteEntity( wxCommandEvent& event );
void Triangulate( wxCommandEvent& event );
void ToShape( wxCommandEvent& event );
void Decimate( wxCommandEvent& event );
void Smooth( wxCommandEvent& event );
protected:
wxMenu* m_appearance;
wxMenu* m_viewstyle;
wxMenu* m_actions;
Im_Entity3DPtr m_entity;
};
#include "Im_Entity3DMenu.h"
#include "Im_Group3D.h"
#include "Im_Mesh.h"
#include "Im_Shape3D.h"
Im_Entity3DMenu::Im_Entity3DMenu() : wxMenu()
{
}
Im_Entity3DMenu::~Im_Entity3DMenu(void)
{
if (m_entity)
{
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetPointStyle));
Disconnect( wxID_ANY, wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckPointStyle));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetBoxStyle));
Disconnect( wxID_ANY, wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckBoxStyle));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetWireframeStyle));
Disconnect( wxID_ANY, wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckWireframeStyle));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetShadedStyle));
Disconnect( wxID_ANY, wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckShadedStyle));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::ChangeMaterial));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetVisibility));
Disconnect( wxID_ANY, wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckVisibility));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::RenameEntity));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::DeleteEntity));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::Triangulate));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::ToShape));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::Decimate));
Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::Smooth));
}
}
void Im_Entity3DMenu::SetEntity(Im_Entity3DPtr theEntity)
{
m_entity = theEntity;
}
void Im_Entity3DMenu::BuildItems()
{
if (m_entity)
{
Im_Group3DPtr tmpGroup =
boost::dynamic_pointer_cast<Im_Group3D>(m_entity);
Im_MeshPtr tmpMesh = boost::dynamic_pointer_cast<Im_Mesh>(m_entity);
Im_Shape3DPtr tmpShape =
boost::dynamic_pointer_cast<Im_Shape3D>(m_entity);
m_appearance = new wxMenu();
m_viewstyle = new wxMenu();
wxMenuItem* m_points;
m_points = new wxMenuItem( m_viewstyle, wxID_ANY, wxString(
_("Points") ) , wxEmptyString, wxITEM_CHECK );
m_viewstyle->Append( m_points );
wxMenuItem* m_box;
m_box = new wxMenuItem( m_viewstyle, wxID_ANY, wxString( _("Box") ) ,
wxEmptyString, wxITEM_CHECK );
m_viewstyle->Append( m_box );
wxMenuItem* m_wireframe;
m_wireframe = new wxMenuItem( m_viewstyle, wxID_ANY, wxString( _("Wire
frame") ) , wxEmptyString, wxITEM_CHECK );
m_viewstyle->Append( m_wireframe );
wxMenuItem* m_shaded;
m_shaded = new wxMenuItem( m_viewstyle, wxID_ANY, wxString(
_("Shaded") ) , wxEmptyString, wxITEM_CHECK );
m_viewstyle->Append( m_shaded );
m_appearance->Append( -1, _("View style"), m_viewstyle );
if (!tmpGroup)
{
wxMenuItem* m_material;
m_material = new wxMenuItem( m_appearance, wxID_ANY, wxString(
_("Material...") ) , wxEmptyString, wxITEM_NORMAL );
m_appearance->Append( m_material );
Connect( m_material->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::ChangeMaterial));
}
wxMenuItem* m_layer;
m_layer = new wxMenuItem( m_appearance, wxID_ANY, wxString(
_("Layer...") ) , wxEmptyString, wxITEM_NORMAL );
m_appearance->Append( m_layer );
wxMenuItem* m_visible;
m_visible = new wxMenuItem( m_appearance, wxID_ANY, wxString(
_("Visible") ) , wxEmptyString, wxITEM_CHECK );
m_appearance->Append( m_visible );
Append( -1, _("Appearance"), m_appearance );
m_actions = new wxMenu();
wxMenuItem* m_rename;
m_rename = new wxMenuItem( m_actions, wxID_ANY, wxString(
_("Rename...") ) , wxEmptyString, wxITEM_NORMAL );
m_actions->Append( m_rename );
wxMenuItem* m_delete;
m_delete = new wxMenuItem( m_actions, wxID_ANY, wxString(
_("Delete...") ) , wxEmptyString, wxITEM_NORMAL );
m_actions->Append( m_delete );
if (tmpGroup)
{
wxMenuItem* m_import;
m_import = new wxMenuItem( m_actions, wxID_ANY, wxString(
_("Import...") ) , wxEmptyString, wxITEM_NORMAL );
m_actions->Append( m_import );
}
wxMenuItem* m_export;
m_export = new wxMenuItem( m_actions, wxID_ANY, wxString(
_("Export...") ) , wxEmptyString, wxITEM_NORMAL );
m_actions->Append( m_export );
if (tmpShape)
{
wxMenuItem* triangulate;
triangulate = new wxMenuItem( m_actions, wxID_ANY, wxString(
_("Triangulate...") ) , wxEmptyString, wxITEM_NORMAL );
m_actions->Append( triangulate );
Connect( triangulate->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::Triangulate));
}
if (tmpMesh)
{
wxMenuItem* m_toshape;
m_toshape = new wxMenuItem( m_actions, wxID_ANY, wxString( _("To
shape...") ) , wxEmptyString, wxITEM_NORMAL );
m_actions->Append( m_toshape );
wxMenuItem* m_decimate;
m_decimate = new wxMenuItem( m_actions, wxID_ANY, wxString(
_("Decimate...") ) , wxEmptyString, wxITEM_NORMAL );
m_actions->Append( m_decimate );
wxMenuItem* m_smooth;
m_smooth = new wxMenuItem( m_actions, wxID_ANY, wxString(
_("Smooth...") ) , wxEmptyString, wxITEM_NORMAL );
m_actions->Append( m_smooth );
Connect( m_toshape->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::ToShape));
Connect( m_decimate->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::Decimate));
Connect( m_smooth->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::Smooth));
}
Append( -1, _("Actions"), m_actions );
Connect( m_points->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetPointStyle));
Connect( m_points->GetId(), wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckPointStyle));
Connect( m_box->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetBoxStyle));
Connect( m_box->GetId(), wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckBoxStyle));
Connect( m_wireframe->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetWireframeStyle));
Connect( m_wireframe->GetId(), wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckWireframeStyle));
Connect( m_shaded->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetShadedStyle));
Connect( m_shaded->GetId(), wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckShadedStyle));
Connect( m_visible->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::SetVisibility));
Connect( m_visible->GetId(), wxEVT_UPDATE_UI,
wxUpdateUIEventHandler(Im_Entity3DMenu::SetCheckVisibility));
Connect( m_layer->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::ChangeLayer));
Connect( m_rename->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::RenameEntity));
Connect( m_delete->GetId(), wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Im_Entity3DMenu::DeleteEntity));
}
}
void Im_Entity3DMenu::SetCheckVisibility( wxUpdateUIEvent& event )
{
event.Check(m_entity->GetIsVisible());
}
void Im_Entity3DMenu::SetCheckPointStyle( wxUpdateUIEvent& event )
{
event.Check(Im_Entity3D::Im_Points == m_entity->GetDisplayMode());
}
void Im_Entity3DMenu::SetCheckBoxStyle( wxUpdateUIEvent& event )
{
event.Check(Im_Entity3D::Im_Box == m_entity->GetDisplayMode());
}
void Im_Entity3DMenu::SetCheckWireframeStyle( wxUpdateUIEvent& event )
{
event.Check(Im_Entity3D::Im_WireFrame == m_entity->GetDisplayMode());
}
void Im_Entity3DMenu::SetCheckShadedStyle( wxUpdateUIEvent& event )
{
event.Check(Im_Entity3D::Im_Shading == m_entity->GetDisplayMode());
}
void Im_Entity3DMenu::SetPointStyle( wxCommandEvent& event )
{
wxMessageBox(L"SetPointStyle",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::SetBoxStyle( wxCommandEvent& event )
{
wxMessageBox(L"SetBoxStyle",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::SetWireframeStyle( wxCommandEvent& event )
{
wxMessageBox(L"SetWireframeStyle",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::SetShadedStyle( wxCommandEvent& event )
{
wxMessageBox(L"SetShadedStyle",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::ChangeMaterial( wxCommandEvent& event )
{
wxMessageBox(L"ChangeMaterial",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::ChangeLayer( wxCommandEvent& event )
{
wxMessageBox(L"ChangeLayer",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::SetVisibility( wxCommandEvent& event )
{
wxMessageBox(L"SetVisibility",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::RenameEntity( wxCommandEvent& event )
{
wxMessageBox(L"RenameEntity",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::DeleteEntity( wxCommandEvent& event )
{
wxMessageBox(L"DeleteEntity",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::Triangulate( wxCommandEvent& event )
{
wxMessageBox(L"Triangulate",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::ToShape( wxCommandEvent& event )
{
wxMessageBox(L"ToShape",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::Decimate( wxCommandEvent& event )
{
wxMessageBox(L"Decimate",L"Im_Entity3DMenu");
}
void Im_Entity3DMenu::Smooth( wxCommandEvent& event )
{
wxMessageBox(L"Smooth",L"Im_Entity3DMenu");
}
More information about the wx-users
mailing list