Change a Popup menu from using a callback to using events. Can't test

it right now but it compiles.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4365 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
1999-11-05 06:56:53 +00:00
parent cd77c08509
commit 20f2deb3cf
3 changed files with 41 additions and 32 deletions

View File

@@ -37,8 +37,6 @@
// construct themselves.
wxExprDatabase *GlobalwxExprDatabase = NULL;
// Popup menu for editing divisions
wxMenu *oglPopupDivisionMenu = NULL;
/*
* Division control point
@@ -1572,10 +1570,32 @@ bool wxDivisionShape::ResizeAdjoining(int side, double newPos, bool test)
* Popup menu for editing divisions
*
*/
class OGLPopupDivisionMenu : public wxMenu {
public:
OGLPopupDivisionMenu() : wxMenu() {
Append(DIVISION_MENU_SPLIT_HORIZONTALLY, "Split horizontally");
Append(DIVISION_MENU_SPLIT_VERTICALLY, "Split vertically");
AppendSeparator();
Append(DIVISION_MENU_EDIT_LEFT_EDGE, "Edit left edge");
Append(DIVISION_MENU_EDIT_TOP_EDGE, "Edit top edge");
}
void oglGraphicsDivisionMenuProc(wxMenu& menu, wxCommandEvent& event)
void OnMenu(wxCommandEvent& event);
DECLARE_EVENT_TABLE();
};
BEGIN_EVENT_TABLE(OGLPopupDivisionMenu, wxMenu)
EVT_CUSTOM_RANGE(wxEVT_COMMAND_MENU_SELECTED,
DIVISION_MENU_SPLIT_HORIZONTALLY,
DIVISION_MENU_EDIT_BOTTOM_EDGE,
OGLPopupDivisionMenu::OnMenu)
END_EVENT_TABLE()
void OGLPopupDivisionMenu::OnMenu(wxCommandEvent& event)
{
wxDivisionShape *division = (wxDivisionShape *)menu.GetClientData();
wxDivisionShape *division = (wxDivisionShape *)GetClientData();
switch (event.GetInt())
{
case DIVISION_MENU_SPLIT_HORIZONTALLY:
@@ -1714,6 +1734,8 @@ void wxDivisionShape::EditEdge(int side)
// Popup menu
void wxDivisionShape::PopupMenu(double x, double y)
{
wxMenu* oglPopupDivisionMenu = new OGLPopupDivisionMenu;
oglPopupDivisionMenu->SetClientData((void *)this);
if (m_leftSide)
oglPopupDivisionMenu->Enable(DIVISION_MENU_EDIT_LEFT_EDGE, TRUE);
@@ -1737,6 +1759,7 @@ void wxDivisionShape::PopupMenu(double x, double y)
int mouse_y = (int)(dc.LogicalToDeviceY((long)(y - y1*unit_y)));
m_canvas->PopupMenu(oglPopupDivisionMenu, mouse_x, mouse_y);
delete oglPopupDivisionMenu;
}
void wxDivisionShape::SetLeftSideColour(const wxString& colour)

View File

@@ -225,8 +225,6 @@ class wxDivisionShape: public wxCompositeShape
wxString m_topSideStyle;
};
extern wxMenu *oglPopupDivisionMenu;
extern void oglGraphicsDivisionMenuProc(wxMenu& menu, wxCommandEvent& event);
#define DIVISION_MENU_SPLIT_HORIZONTALLY 1
#define DIVISION_MENU_SPLIT_VERTICALLY 2

View File

@@ -55,6 +55,8 @@ char* oglBuffer = NULL;
wxList oglObjectCopyMapping(wxKEY_INTEGER);
void wxOGLInitialize()
{
g_oglBullseyeCursor = new wxCursor(wxCURSOR_BULLSEYE);
@@ -73,15 +75,6 @@ void wxOGLInitialize()
// Initialize big buffer used when writing images
oglBuffer = new char[3000];
if (!oglPopupDivisionMenu)
{
oglPopupDivisionMenu = new wxMenu("", (wxFunction)oglGraphicsDivisionMenuProc);
oglPopupDivisionMenu->Append(DIVISION_MENU_SPLIT_HORIZONTALLY, "Split horizontally");
oglPopupDivisionMenu->Append(DIVISION_MENU_SPLIT_VERTICALLY, "Split vertically");
oglPopupDivisionMenu->AppendSeparator();
oglPopupDivisionMenu->Append(DIVISION_MENU_EDIT_LEFT_EDGE, "Edit left edge");
oglPopupDivisionMenu->Append(DIVISION_MENU_EDIT_TOP_EDGE, "Edit top edge");
}
}
void wxOGLCleanUp()
@@ -92,11 +85,6 @@ void wxOGLCleanUp()
oglBuffer = NULL;
}
oglBuffer = NULL;
if (oglPopupDivisionMenu)
{
delete oglPopupDivisionMenu;
oglPopupDivisionMenu = NULL;
}
if (g_oglBullseyeCursor)
{
delete g_oglBullseyeCursor;