1. regenerated the makefiles to include menucmn.cpp
2. more compilation fixes for DW changes 3. implemented dynamic menu support for wxMSW 4. added code to the toolbar sample to test it git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4206 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -128,7 +128,6 @@ public:
|
|||||||
|
|
||||||
bool ProcessCommand(wxCommandEvent& event);
|
bool ProcessCommand(wxCommandEvent& event);
|
||||||
|
|
||||||
virtual void SetParent(wxEvtHandler *parent) { m_parent = parent; }
|
|
||||||
void SetEventHandler(wxEvtHandler *handler) { m_eventHandler = handler; }
|
void SetEventHandler(wxEvtHandler *handler) { m_eventHandler = handler; }
|
||||||
wxEvtHandler *GetEventHandler() const { return m_eventHandler; }
|
wxEvtHandler *GetEventHandler() const { return m_eventHandler; }
|
||||||
|
|
||||||
@@ -182,7 +181,6 @@ private:
|
|||||||
wxMenu * m_topLevelMenu;
|
wxMenu * m_topLevelMenu;
|
||||||
wxMenuBar * m_menuBar;
|
wxMenuBar * m_menuBar;
|
||||||
wxList m_menuItems;
|
wxList m_menuItems;
|
||||||
wxEvtHandler * m_parent;
|
|
||||||
wxEvtHandler * m_eventHandler;
|
wxEvtHandler * m_eventHandler;
|
||||||
wxWindow *m_pInvokingWindow;
|
wxWindow *m_pInvokingWindow;
|
||||||
void* m_clientData;
|
void* m_clientData;
|
||||||
@@ -223,11 +221,6 @@ public:
|
|||||||
virtual void SetLabelTop( size_t pos, const wxString& label );
|
virtual void SetLabelTop( size_t pos, const wxString& label );
|
||||||
virtual wxString GetLabelTop( size_t pos ) const;
|
virtual wxString GetLabelTop( size_t pos ) const;
|
||||||
|
|
||||||
// notifications: return FALSE to prevent the menu from being
|
|
||||||
// appended/deleted
|
|
||||||
virtual bool OnAppend(wxMenu *menu, const wxChar *title);
|
|
||||||
virtual bool OnDelete(wxMenu *menu, int index);
|
|
||||||
|
|
||||||
// compatibility: these functions are deprecated
|
// compatibility: these functions are deprecated
|
||||||
#ifdef WXWIN_COMPATIBILITY
|
#ifdef WXWIN_COMPATIBILITY
|
||||||
void SetEventHandler(wxEvtHandler *handler) { m_eventHandler = handler; }
|
void SetEventHandler(wxEvtHandler *handler) { m_eventHandler = handler; }
|
||||||
|
@@ -9,34 +9,143 @@
|
|||||||
// Licence: wxWindows licence
|
// Licence: wxWindows licence
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// For compilers that support precompilation, includes "wx/wx.h".
|
// For compilers that support precompilation, includes "wx/wx.h".
|
||||||
#include "wx/wxprec.h"
|
#include <wx/wxprec.h>
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
#pragma hdrstop
|
#pragma hdrstop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/wx.h"
|
#include <wx/wx.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/toolbar.h"
|
#include <wx/toolbar.h>
|
||||||
#include <wx/log.h>
|
#include <wx/log.h>
|
||||||
|
|
||||||
#include "test.h"
|
// ----------------------------------------------------------------------------
|
||||||
|
// resources
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#if defined(__WXGTK__) || defined(__WXMOTIF__)
|
#if defined(__WXGTK__) || defined(__WXMOTIF__)
|
||||||
#include "mondrian.xpm"
|
#include "mondrian.xpm"
|
||||||
#include "bitmaps/new.xpm"
|
#include "bitmaps/new.xpm"
|
||||||
#include "bitmaps/open.xpm"
|
#include "bitmaps/open.xpm"
|
||||||
#include "bitmaps/save.xpm"
|
#include "bitmaps/save.xpm"
|
||||||
#include "bitmaps/copy.xpm"
|
#include "bitmaps/copy.xpm"
|
||||||
#include "bitmaps/cut.xpm"
|
#include "bitmaps/cut.xpm"
|
||||||
// #include "bitmaps/paste.xpm"
|
// #include "bitmaps/paste.xpm"
|
||||||
#include "bitmaps/print.xpm"
|
#include "bitmaps/print.xpm"
|
||||||
#include "bitmaps/preview.xpm"
|
#include "bitmaps/preview.xpm"
|
||||||
#include "bitmaps/help.xpm"
|
#include "bitmaps/help.xpm"
|
||||||
#endif
|
#endif // GTK or Motif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// classes
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Define a new application
|
||||||
|
class MyApp: public wxApp
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool OnInit();
|
||||||
|
bool InitToolbar(wxToolBar* toolBar, bool smallicons = FALSE);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Define a new frame
|
||||||
|
class MyFrame: public wxFrame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MyFrame(wxFrame *parent,
|
||||||
|
wxWindowID id = -1,
|
||||||
|
const wxString& title = "wxToolBar Sample",
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDEFAULT_FRAME_STYLE);
|
||||||
|
|
||||||
|
virtual ~MyFrame() { delete m_menu; }
|
||||||
|
|
||||||
|
void OnQuit(wxCommandEvent& event);
|
||||||
|
void OnAbout(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void OnToggleToolbar(wxCommandEvent& event);
|
||||||
|
void OnEnablePrint(wxCommandEvent& event) { DoEnablePrint(); }
|
||||||
|
void OnToggleHelp(wxCommandEvent& event) { DoToggleHelp(); }
|
||||||
|
|
||||||
|
void OnAppendMenu(wxCommandEvent& event);
|
||||||
|
void OnDeleteMenu(wxCommandEvent& event);
|
||||||
|
void OnToggleMenu(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void OnToolLeftClick(wxCommandEvent& event);
|
||||||
|
void OnToolEnter(wxCommandEvent& event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void DoEnablePrint();
|
||||||
|
void DoToggleHelp();
|
||||||
|
|
||||||
|
bool m_smallToolbar;
|
||||||
|
wxTextCtrl* m_textWindow;
|
||||||
|
|
||||||
|
wxMenu *m_menu;
|
||||||
|
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// constants
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
const int ID_TOOLBAR = 500;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
IDM_TOOLBAR_TOGGLETOOLBAR = 200,
|
||||||
|
IDM_TOOLBAR_ENABLEPRINT,
|
||||||
|
IDM_TOOLBAR_TOGGLEHELP,
|
||||||
|
IDM_MENU_TOGGLE,
|
||||||
|
IDM_MENU_APPEND,
|
||||||
|
IDM_MENU_DELETE
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// event tables
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Notice that wxID_HELP will be processed for the 'About' menu and the toolbar
|
||||||
|
// help button.
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||||||
|
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
|
||||||
|
EVT_MENU(wxID_HELP, MyFrame::OnAbout)
|
||||||
|
|
||||||
|
EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBAR, MyFrame::OnToggleToolbar)
|
||||||
|
EVT_MENU(IDM_TOOLBAR_ENABLEPRINT, MyFrame::OnEnablePrint)
|
||||||
|
EVT_MENU(IDM_TOOLBAR_TOGGLEHELP, MyFrame::OnToggleHelp)
|
||||||
|
|
||||||
|
EVT_MENU(IDM_MENU_TOGGLE, MyFrame::OnToggleMenu)
|
||||||
|
EVT_MENU(IDM_MENU_APPEND, MyFrame::OnAppendMenu)
|
||||||
|
EVT_MENU(IDM_MENU_DELETE, MyFrame::OnDeleteMenu)
|
||||||
|
|
||||||
|
EVT_MENU(-1, MyFrame::OnToolLeftClick)
|
||||||
|
|
||||||
|
EVT_TOOL_ENTER(ID_TOOLBAR, MyFrame::OnToolEnter)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// MyApp
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
IMPLEMENT_APP(MyApp)
|
IMPLEMENT_APP(MyApp)
|
||||||
|
|
||||||
@@ -45,47 +154,18 @@ IMPLEMENT_APP(MyApp)
|
|||||||
bool MyApp::OnInit()
|
bool MyApp::OnInit()
|
||||||
{
|
{
|
||||||
// Create the main frame window
|
// Create the main frame window
|
||||||
MyFrame* frame = new MyFrame((wxFrame *) NULL, -1, (const wxString) "wxToolBar Sample",
|
MyFrame* frame = new MyFrame((wxFrame *) NULL, -1,
|
||||||
|
"wxToolBar Sample",
|
||||||
wxPoint(100, 100), wxSize(450, 300));
|
wxPoint(100, 100), wxSize(450, 300));
|
||||||
|
|
||||||
// Give it a status line
|
// VZ: what's this for??
|
||||||
frame->CreateStatusBar();
|
#if 0
|
||||||
|
|
||||||
// Give it an icon
|
|
||||||
frame->SetIcon(wxICON(mondrian));
|
|
||||||
|
|
||||||
// Make a menubar
|
|
||||||
wxMenu *tbarMenu = new wxMenu;
|
|
||||||
tbarMenu->Append(IDM_TOOLBAR_TOGGLETOOLBAR, "&Toggle toolbar", "Change the toolbar kind");
|
|
||||||
tbarMenu->Append(IDM_TOOLBAR_ENABLEPRINT, "&Enable print button", "");
|
|
||||||
tbarMenu->Append(IDM_TOOLBAR_TOGGLEHELP, "Toggle &help button", "");
|
|
||||||
|
|
||||||
wxMenu *fileMenu = new wxMenu;
|
|
||||||
fileMenu->Append(wxID_EXIT, "E&xit", "Quit toolbar sample" );
|
|
||||||
|
|
||||||
wxMenu *helpMenu = new wxMenu;
|
|
||||||
helpMenu->Append(wxID_HELP, "&About", "About toolbar sample");
|
|
||||||
|
|
||||||
wxMenuBar* menuBar = new wxMenuBar( wxMB_DOCKABLE );
|
|
||||||
|
|
||||||
menuBar->Append(fileMenu, "&File");
|
|
||||||
menuBar->Append(tbarMenu, "&Toolbar");
|
|
||||||
menuBar->Append(helpMenu, "&Help");
|
|
||||||
|
|
||||||
// Associate the menu bar with the frame
|
|
||||||
frame->SetMenuBar(menuBar);
|
|
||||||
|
|
||||||
// Create the toolbar
|
|
||||||
frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT|wxTB_DOCKABLE, ID_TOOLBAR);
|
|
||||||
|
|
||||||
frame->GetToolBar()->SetMargins( 2, 2 );
|
|
||||||
|
|
||||||
InitToolbar(frame->GetToolBar());
|
|
||||||
|
|
||||||
// Force a resize. This should probably be replaced by a call to a wxFrame
|
// Force a resize. This should probably be replaced by a call to a wxFrame
|
||||||
// function that lays out default decorations and the remaining content window.
|
// function that lays out default decorations and the remaining content window.
|
||||||
wxSizeEvent event(wxSize(-1, -1), frame->GetId());
|
wxSizeEvent event(wxSize(-1, -1), frame->GetId());
|
||||||
frame->OnSize(event);
|
frame->OnSize(event);
|
||||||
|
#endif // 0
|
||||||
|
|
||||||
frame->Show(TRUE);
|
frame->Show(TRUE);
|
||||||
|
|
||||||
frame->SetStatusText("Hello, wxWindows");
|
frame->SetStatusText("Hello, wxWindows");
|
||||||
@@ -168,19 +248,9 @@ bool MyApp::InitToolbar(wxToolBar* toolBar, bool smallicons)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// wxID_HELP will be processed for the 'About' menu and the toolbar help button.
|
// ----------------------------------------------------------------------------
|
||||||
|
// MyFrame
|
||||||
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
// ----------------------------------------------------------------------------
|
||||||
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
|
|
||||||
EVT_MENU(wxID_HELP, MyFrame::OnAbout)
|
|
||||||
|
|
||||||
EVT_MENU(IDM_TOOLBAR_TOGGLETOOLBAR, MyFrame::OnToggleToolbar)
|
|
||||||
EVT_MENU(IDM_TOOLBAR_ENABLEPRINT, MyFrame::OnEnablePrint)
|
|
||||||
EVT_MENU(IDM_TOOLBAR_TOGGLEHELP, MyFrame::OnToggleHelp)
|
|
||||||
|
|
||||||
EVT_MENU(-1, MyFrame::OnToolLeftClick)
|
|
||||||
EVT_TOOL_ENTER(ID_TOOLBAR, MyFrame::OnToolEnter)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
// Define my frame constructor
|
// Define my frame constructor
|
||||||
MyFrame::MyFrame(wxFrame* parent,
|
MyFrame::MyFrame(wxFrame* parent,
|
||||||
@@ -191,18 +261,66 @@ MyFrame::MyFrame(wxFrame* parent,
|
|||||||
long style)
|
long style)
|
||||||
: wxFrame(parent, id, title, pos, size, style)
|
: wxFrame(parent, id, title, pos, size, style)
|
||||||
{
|
{
|
||||||
|
m_menu = NULL;
|
||||||
m_textWindow = new wxTextCtrl(this, -1, "", wxPoint(0, 0), wxSize(-1, -1), wxTE_MULTILINE);
|
m_textWindow = new wxTextCtrl(this, -1, "", wxPoint(0, 0), wxSize(-1, -1), wxTE_MULTILINE);
|
||||||
m_smallToolbar = FALSE;
|
m_smallToolbar = FALSE;
|
||||||
|
|
||||||
|
// Give it a status line
|
||||||
|
CreateStatusBar();
|
||||||
|
|
||||||
|
// Give it an icon
|
||||||
|
SetIcon(wxICON(mondrian));
|
||||||
|
|
||||||
|
// Make a menubar
|
||||||
|
wxMenu *tbarMenu = new wxMenu;
|
||||||
|
tbarMenu->Append(IDM_TOOLBAR_TOGGLETOOLBAR, "&Toggle toolbar", "Change the toolbar kind");
|
||||||
|
tbarMenu->Append(IDM_TOOLBAR_ENABLEPRINT, "&Enable print button", "");
|
||||||
|
tbarMenu->Append(IDM_TOOLBAR_TOGGLEHELP, "Toggle &help button", "");
|
||||||
|
|
||||||
|
wxMenu *fileMenu = new wxMenu;
|
||||||
|
fileMenu->Append(wxID_EXIT, "E&xit", "Quit toolbar sample" );
|
||||||
|
|
||||||
|
wxMenu *menuMenu = new wxMenu;
|
||||||
|
menuMenu->Append(IDM_MENU_APPEND, "&Append menu");
|
||||||
|
menuMenu->Append(IDM_MENU_DELETE, "&Delete menu");
|
||||||
|
menuMenu->Append(IDM_MENU_TOGGLE, "&Toggle menu", "", TRUE);
|
||||||
|
|
||||||
|
wxMenu *helpMenu = new wxMenu;
|
||||||
|
helpMenu->Append(wxID_HELP, "&About", "About toolbar sample");
|
||||||
|
|
||||||
|
wxMenuBar* menuBar = new wxMenuBar( wxMB_DOCKABLE );
|
||||||
|
|
||||||
|
menuBar->Append(fileMenu, "&File");
|
||||||
|
menuBar->Append(tbarMenu, "&Toolbar");
|
||||||
|
menuBar->Append(menuMenu, "&Menubar");
|
||||||
|
menuBar->Append(helpMenu, "&Help");
|
||||||
|
|
||||||
|
// Associate the menu bar with the frame
|
||||||
|
SetMenuBar(menuBar);
|
||||||
|
|
||||||
|
// Create the toolbar
|
||||||
|
wxToolBar *tbar = CreateToolBar(wxNO_BORDER | wxTB_HORIZONTAL |
|
||||||
|
wxTB_FLAT | wxTB_DOCKABLE,
|
||||||
|
ID_TOOLBAR);
|
||||||
|
|
||||||
|
tbar->SetMargins( 2, 2 );
|
||||||
|
|
||||||
|
wxGetApp().InitToolbar(tbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyFrame::OnToggleToolbar(wxCommandEvent& event)
|
void MyFrame::OnToggleToolbar(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
delete GetToolBar();
|
// delete and recreate the toolbar
|
||||||
|
wxToolBar *tbar = GetToolBar();
|
||||||
|
delete tbar;
|
||||||
|
|
||||||
SetToolBar(NULL);
|
SetToolBar(NULL);
|
||||||
CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT|wxTB_DOCKABLE, ID_TOOLBAR);
|
tbar = CreateToolBar(wxNO_BORDER | wxTB_HORIZONTAL |
|
||||||
|
wxTB_FLAT | wxTB_DOCKABLE,
|
||||||
|
ID_TOOLBAR);
|
||||||
|
|
||||||
m_smallToolbar = !m_smallToolbar;
|
m_smallToolbar = !m_smallToolbar;
|
||||||
wxGetApp().InitToolbar(GetToolBar(), m_smallToolbar);
|
wxGetApp().InitToolbar(tbar, m_smallToolbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
|
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
|
||||||
@@ -215,6 +333,53 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
|
|||||||
(void)wxMessageBox("wxWindows toolbar sample", "About wxToolBar");
|
(void)wxMessageBox("wxWindows toolbar sample", "About wxToolBar");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnDeleteMenu(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
wxMenuBar *mbar = GetMenuBar();
|
||||||
|
|
||||||
|
size_t count = mbar->GetMenuCount();
|
||||||
|
if ( count == 3 )
|
||||||
|
{
|
||||||
|
// don't let delete the first 3 menus
|
||||||
|
wxLogError("Can't delete any more menus");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete mbar->Remove(count - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnAppendMenu(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
static s_count = 0;
|
||||||
|
|
||||||
|
wxMenu *menu = new wxMenu;
|
||||||
|
menu->Append(0, "First item");
|
||||||
|
menu->AppendSeparator();
|
||||||
|
menu->Append(0, "Second item");
|
||||||
|
|
||||||
|
wxString title;
|
||||||
|
title.Printf("Dummy menu &%d", ++s_count);
|
||||||
|
|
||||||
|
GetMenuBar()->Append(menu, title);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnToggleMenu(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
wxMenuBar *mbar = GetMenuBar();
|
||||||
|
if ( !m_menu )
|
||||||
|
{
|
||||||
|
// hide the menu
|
||||||
|
m_menu = mbar->Remove(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// restore it
|
||||||
|
mbar->Insert(1, m_menu, "&Toolbar");
|
||||||
|
m_menu = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MyFrame::OnToolLeftClick(wxCommandEvent& event)
|
void MyFrame::OnToolLeftClick(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
wxString str;
|
wxString str;
|
||||||
@@ -223,7 +388,7 @@ void MyFrame::OnToolLeftClick(wxCommandEvent& event)
|
|||||||
|
|
||||||
if (event.GetId() == wxID_HELP)
|
if (event.GetId() == wxID_HELP)
|
||||||
{
|
{
|
||||||
if ((bool)event.GetExtraLong())
|
if ( event.GetExtraLong() != 0 )
|
||||||
m_textWindow->WriteText( _T("Help button down now.\n") );
|
m_textWindow->WriteText( _T("Help button down now.\n") );
|
||||||
else
|
else
|
||||||
m_textWindow->WriteText( _T("Help button up now.\n") );
|
m_textWindow->WriteText( _T("Help button up now.\n") );
|
||||||
|
@@ -1,62 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Name: test.h
|
|
||||||
// Purpose: wxToolBar sample
|
|
||||||
// Author: Julian Smart
|
|
||||||
// Modified by:
|
|
||||||
// Created: 23/07/98
|
|
||||||
// RCS-ID: $Id$
|
|
||||||
// Copyright: (c) Julian Smart
|
|
||||||
// Licence: wxWindows licence
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// Define a new application
|
|
||||||
class MyApp: public wxApp
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool OnInit();
|
|
||||||
bool InitToolbar(wxToolBar* toolBar, bool smallicons = FALSE);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Define a new frame
|
|
||||||
class MyFrame: public wxFrame
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
MyFrame(wxFrame *parent,
|
|
||||||
wxWindowID id = -1,
|
|
||||||
const wxString& title = "wxToolBar Sample",
|
|
||||||
const wxPoint& pos = wxDefaultPosition,
|
|
||||||
const wxSize& size = wxDefaultSize,
|
|
||||||
long style = wxDEFAULT_FRAME_STYLE);
|
|
||||||
|
|
||||||
void OnQuit(wxCommandEvent& event);
|
|
||||||
void OnAbout(wxCommandEvent& event);
|
|
||||||
|
|
||||||
void OnToggleToolbar(wxCommandEvent& event);
|
|
||||||
void OnEnablePrint(wxCommandEvent& event) { DoEnablePrint(); }
|
|
||||||
void OnToggleHelp(wxCommandEvent& event) { DoToggleHelp(); }
|
|
||||||
|
|
||||||
void OnToolLeftClick(wxCommandEvent& event);
|
|
||||||
void OnToolEnter(wxCommandEvent& event);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void DoEnablePrint();
|
|
||||||
void DoToggleHelp();
|
|
||||||
|
|
||||||
bool m_smallToolbar;
|
|
||||||
wxTextCtrl* m_textWindow;
|
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
};
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// constants
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
const int ID_TOOLBAR = 500;
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
IDM_TOOLBAR_TOGGLETOOLBAR = 200,
|
|
||||||
IDM_TOOLBAR_ENABLEPRINT,
|
|
||||||
IDM_TOOLBAR_TOGGLEHELP
|
|
||||||
};
|
|
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
# This file was automatically generated by tmake at 14:33, 1999/10/23
|
# This file was automatically generated by tmake at 01:16, 1999/10/27
|
||||||
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE B32.T!
|
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE B32.T!
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -159,6 +159,7 @@ COMMONOBJS = \
|
|||||||
$(MSWDIR)\list.obj \
|
$(MSWDIR)\list.obj \
|
||||||
$(MSWDIR)\log.obj \
|
$(MSWDIR)\log.obj \
|
||||||
$(MSWDIR)\memory.obj \
|
$(MSWDIR)\memory.obj \
|
||||||
|
$(MSWDIR)\menucmn.obj \
|
||||||
$(MSWDIR)\mimetype.obj \
|
$(MSWDIR)\mimetype.obj \
|
||||||
$(MSWDIR)\module.obj \
|
$(MSWDIR)\module.obj \
|
||||||
$(MSWDIR)\mstream.obj \
|
$(MSWDIR)\mstream.obj \
|
||||||
@@ -630,6 +631,8 @@ $(MSWDIR)\log.obj: $(COMMDIR)\log.$(SRCSUFF)
|
|||||||
|
|
||||||
$(MSWDIR)\memory.obj: $(COMMDIR)\memory.$(SRCSUFF)
|
$(MSWDIR)\memory.obj: $(COMMDIR)\memory.$(SRCSUFF)
|
||||||
|
|
||||||
|
$(MSWDIR)\menucmn.obj: $(COMMDIR)\menucmn.$(SRCSUFF)
|
||||||
|
|
||||||
$(MSWDIR)\mimetype.obj: $(COMMDIR)\mimetype.$(SRCSUFF)
|
$(MSWDIR)\mimetype.obj: $(COMMDIR)\mimetype.$(SRCSUFF)
|
||||||
|
|
||||||
$(MSWDIR)\module.obj: $(COMMDIR)\module.$(SRCSUFF)
|
$(MSWDIR)\module.obj: $(COMMDIR)\module.$(SRCSUFF)
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
# This file was automatically generated by tmake at 09:40, 1999/10/25
|
# This file was automatically generated by tmake at 01:16, 1999/10/27
|
||||||
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE BCC.T!
|
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE BCC.T!
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -144,6 +144,7 @@ COMMONOBJS = \
|
|||||||
$(MSWDIR)\list.obj \
|
$(MSWDIR)\list.obj \
|
||||||
$(MSWDIR)\log.obj \
|
$(MSWDIR)\log.obj \
|
||||||
$(MSWDIR)\memory.obj \
|
$(MSWDIR)\memory.obj \
|
||||||
|
$(MSWDIR)\menucmn.obj \
|
||||||
$(MSWDIR)\module.obj \
|
$(MSWDIR)\module.obj \
|
||||||
$(MSWDIR)\mstream.obj \
|
$(MSWDIR)\mstream.obj \
|
||||||
$(MSWDIR)\object.obj \
|
$(MSWDIR)\object.obj \
|
||||||
@@ -529,6 +530,8 @@ $(MSWDIR)\log.obj: $(COMMDIR)\log.$(SRCSUFF)
|
|||||||
|
|
||||||
$(MSWDIR)\memory.obj: $(COMMDIR)\memory.$(SRCSUFF)
|
$(MSWDIR)\memory.obj: $(COMMDIR)\memory.$(SRCSUFF)
|
||||||
|
|
||||||
|
$(MSWDIR)\menucmn.obj: $(COMMDIR)\menucmn.$(SRCSUFF)
|
||||||
|
|
||||||
$(MSWDIR)\module.obj: $(COMMDIR)\module.$(SRCSUFF)
|
$(MSWDIR)\module.obj: $(COMMDIR)\module.$(SRCSUFF)
|
||||||
|
|
||||||
$(MSWDIR)\mstream.obj: $(COMMDIR)\mstream.$(SRCSUFF)
|
$(MSWDIR)\mstream.obj: $(COMMDIR)\mstream.$(SRCSUFF)
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# This file was automatically generated by tmake at 09:37, 1999/10/25
|
# This file was automatically generated by tmake at 01:16, 1999/10/27
|
||||||
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE DOS.T!
|
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE DOS.T!
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -129,6 +129,7 @@ COMMONOBJS = \
|
|||||||
$(COMMDIR)\list.obj \
|
$(COMMDIR)\list.obj \
|
||||||
$(COMMDIR)\log.obj \
|
$(COMMDIR)\log.obj \
|
||||||
$(COMMDIR)\memory.obj \
|
$(COMMDIR)\memory.obj \
|
||||||
|
$(COMMDIR)\menucmn.obj \
|
||||||
$(COMMDIR)\module.obj \
|
$(COMMDIR)\module.obj \
|
||||||
$(COMMDIR)\mstream.obj \
|
$(COMMDIR)\mstream.obj \
|
||||||
$(COMMDIR)\object.obj \
|
$(COMMDIR)\object.obj \
|
||||||
@@ -901,6 +902,11 @@ $(COMMDIR)/memory.obj: $*.$(SRCSUFF)
|
|||||||
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
|
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
|
||||||
<<
|
<<
|
||||||
|
|
||||||
|
$(COMMDIR)/menucmn.obj: $*.$(SRCSUFF)
|
||||||
|
cl @<<
|
||||||
|
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
|
||||||
|
<<
|
||||||
|
|
||||||
$(COMMDIR)/module.obj: $*.$(SRCSUFF)
|
$(COMMDIR)/module.obj: $*.$(SRCSUFF)
|
||||||
cl @<<
|
cl @<<
|
||||||
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
|
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# This file was automatically generated by tmake at 18:37, 1999/10/22
|
# This file was automatically generated by tmake at 01:16, 1999/10/27
|
||||||
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE G95.T!
|
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE G95.T!
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -109,6 +109,7 @@ COMMONOBJS = \
|
|||||||
$(COMMDIR)/list.$(OBJSUFF) \
|
$(COMMDIR)/list.$(OBJSUFF) \
|
||||||
$(COMMDIR)/log.$(OBJSUFF) \
|
$(COMMDIR)/log.$(OBJSUFF) \
|
||||||
$(COMMDIR)/memory.$(OBJSUFF) \
|
$(COMMDIR)/memory.$(OBJSUFF) \
|
||||||
|
$(COMMDIR)/menucmn.$(OBJSUFF) \
|
||||||
$(COMMDIR)/mimetype.$(OBJSUFF) \
|
$(COMMDIR)/mimetype.$(OBJSUFF) \
|
||||||
$(COMMDIR)/module.$(OBJSUFF) \
|
$(COMMDIR)/module.$(OBJSUFF) \
|
||||||
$(COMMDIR)/mstream.$(OBJSUFF) \
|
$(COMMDIR)/mstream.$(OBJSUFF) \
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
# This file was automatically generated by tmake at 09:21, 1999/10/25
|
# This file was automatically generated by tmake at 01:16, 1999/10/27
|
||||||
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE SC.T!
|
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE SC.T!
|
||||||
|
|
||||||
# Symantec C++ makefile for the msw objects
|
# Symantec C++ makefile for the msw objects
|
||||||
@@ -98,6 +98,7 @@ COMMONOBJS = \
|
|||||||
$(COMMDIR)\list.obj \
|
$(COMMDIR)\list.obj \
|
||||||
$(COMMDIR)\log.obj \
|
$(COMMDIR)\log.obj \
|
||||||
$(COMMDIR)\memory.obj \
|
$(COMMDIR)\memory.obj \
|
||||||
|
$(COMMDIR)\menucmn.obj \
|
||||||
$(COMMDIR)\mimetype.obj \
|
$(COMMDIR)\mimetype.obj \
|
||||||
$(COMMDIR)\module.obj \
|
$(COMMDIR)\module.obj \
|
||||||
$(COMMDIR)\mstream.obj \
|
$(COMMDIR)\mstream.obj \
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# This file was automatically generated by tmake at 18:37, 1999/10/22
|
# This file was automatically generated by tmake at 01:16, 1999/10/27
|
||||||
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE VC.T!
|
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE VC.T!
|
||||||
|
|
||||||
# File: makefile.vc
|
# File: makefile.vc
|
||||||
@@ -176,6 +176,7 @@ COMMONOBJS = \
|
|||||||
..\common\$D\list.obj \
|
..\common\$D\list.obj \
|
||||||
..\common\$D\log.obj \
|
..\common\$D\log.obj \
|
||||||
..\common\$D\memory.obj \
|
..\common\$D\memory.obj \
|
||||||
|
..\common\$D\menucmn.obj \
|
||||||
..\common\$D\mimetype.obj \
|
..\common\$D\mimetype.obj \
|
||||||
..\common\$D\module.obj \
|
..\common\$D\module.obj \
|
||||||
..\common\$D\mstream.obj \
|
..\common\$D\mstream.obj \
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/binb/wmake.exe
|
#!/binb/wmake.exe
|
||||||
|
|
||||||
# This file was automatically generated by tmake at 09:14, 1999/10/25
|
# This file was automatically generated by tmake at 01:16, 1999/10/27
|
||||||
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE WAT.T!
|
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE WAT.T!
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -131,6 +131,7 @@ COMMONOBJS = &
|
|||||||
list.obj &
|
list.obj &
|
||||||
log.obj &
|
log.obj &
|
||||||
memory.obj &
|
memory.obj &
|
||||||
|
menucmn.obj &
|
||||||
mimetype.obj &
|
mimetype.obj &
|
||||||
module.obj &
|
module.obj &
|
||||||
mstream.obj &
|
mstream.obj &
|
||||||
@@ -716,6 +717,9 @@ log.obj: $(COMMDIR)\log.cpp
|
|||||||
memory.obj: $(COMMDIR)\memory.cpp
|
memory.obj: $(COMMDIR)\memory.cpp
|
||||||
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
|
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
|
||||||
|
|
||||||
|
menucmn.obj: $(COMMDIR)\menucmn.cpp
|
||||||
|
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
|
||||||
|
|
||||||
mimetype.obj: $(COMMDIR)\mimetype.cpp
|
mimetype.obj: $(COMMDIR)\mimetype.cpp
|
||||||
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
|
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
|
||||||
|
|
||||||
|
190
src/msw/menu.cpp
190
src/msw/menu.cpp
@@ -81,21 +81,20 @@ static const int idMenuTitle = -2;
|
|||||||
void wxMenu::Init(const wxString& title, const wxFunction func )
|
void wxMenu::Init(const wxString& title, const wxFunction func )
|
||||||
{
|
{
|
||||||
m_title = title;
|
m_title = title;
|
||||||
m_parent = NULL;
|
|
||||||
m_eventHandler = this;
|
m_eventHandler = this;
|
||||||
m_pInvokingWindow = NULL;
|
m_pInvokingWindow = NULL;
|
||||||
m_doBreak = FALSE ;
|
m_doBreak = FALSE;
|
||||||
m_noItems = 0;
|
m_noItems = 0;
|
||||||
m_menuBar = NULL;
|
m_menuBar = NULL;
|
||||||
m_hMenu = (WXHMENU) CreatePopupMenu();
|
m_hMenu = (WXHMENU) CreatePopupMenu();
|
||||||
m_savehMenu = 0 ;
|
m_savehMenu = 0;
|
||||||
m_topLevelMenu = this;
|
m_topLevelMenu = this;
|
||||||
m_clientData = (void*) NULL;
|
m_clientData = (void*) NULL;
|
||||||
|
|
||||||
if ( !!m_title )
|
if ( !!m_title )
|
||||||
{
|
{
|
||||||
Append(idMenuTitle, m_title) ;
|
Append(idMenuTitle, m_title);
|
||||||
AppendSeparator() ;
|
AppendSeparator();
|
||||||
}
|
}
|
||||||
|
|
||||||
Callback(func);
|
Callback(func);
|
||||||
@@ -107,8 +106,10 @@ wxMenu::~wxMenu()
|
|||||||
// free Windows resources
|
// free Windows resources
|
||||||
if ( m_hMenu )
|
if ( m_hMenu )
|
||||||
{
|
{
|
||||||
::DestroyMenu((HMENU)m_hMenu);
|
if ( !::DestroyMenu(GetHmenu()) )
|
||||||
m_hMenu = 0;
|
{
|
||||||
|
wxLogLastError("DestroyMenu");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete submenus
|
// delete submenus
|
||||||
@@ -128,6 +129,11 @@ wxMenu::~wxMenu()
|
|||||||
delete node;
|
delete node;
|
||||||
node = next;
|
node = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if wxUSE_ACCEL
|
||||||
|
// delete accels
|
||||||
|
WX_CLEAR_ARRAY(m_accels);
|
||||||
|
#endif // wxUSE_ACCEL
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenu::Break()
|
void wxMenu::Break()
|
||||||
@@ -169,7 +175,6 @@ void wxMenu::Append(wxMenuItem *pItem)
|
|||||||
|
|
||||||
id = (UINT)submenu->GetHMenu();
|
id = (UINT)submenu->GetHMenu();
|
||||||
submenu->m_topLevelMenu = m_topLevelMenu;
|
submenu->m_topLevelMenu = m_topLevelMenu;
|
||||||
submenu->m_parent = this;
|
|
||||||
submenu->m_savehMenu = (WXHMENU)id;
|
submenu->m_savehMenu = (WXHMENU)id;
|
||||||
submenu->m_hMenu = 0;
|
submenu->m_hMenu = 0;
|
||||||
|
|
||||||
@@ -269,7 +274,6 @@ void wxMenu::Delete(int id)
|
|||||||
RemoveMenu(menu, (UINT)pos, MF_BYPOSITION);
|
RemoveMenu(menu, (UINT)pos, MF_BYPOSITION);
|
||||||
pSubMenu->m_hMenu = pSubMenu->m_savehMenu;
|
pSubMenu->m_hMenu = pSubMenu->m_savehMenu;
|
||||||
pSubMenu->m_savehMenu = 0;
|
pSubMenu->m_savehMenu = 0;
|
||||||
pSubMenu->m_parent = NULL;
|
|
||||||
// RemoveChild(item->subMenu);
|
// RemoveChild(item->subMenu);
|
||||||
pSubMenu->m_topLevelMenu = NULL;
|
pSubMenu->m_topLevelMenu = NULL;
|
||||||
// TODO: Why isn't subMenu deleted here???
|
// TODO: Why isn't subMenu deleted here???
|
||||||
@@ -344,7 +348,7 @@ bool wxMenu::IsChecked(int id) const
|
|||||||
|
|
||||||
void wxMenu::SetLabel(int id, const wxString& label)
|
void wxMenu::SetLabel(int id, const wxString& label)
|
||||||
{
|
{
|
||||||
wxMenuItem *item = FindItemForId(id) ;
|
wxMenuItem *item = FindItemForId(id);
|
||||||
wxCHECK_RET( item, wxT("wxMenu::SetLabel: no such item") );
|
wxCHECK_RET( item, wxT("wxMenu::SetLabel: no such item") );
|
||||||
|
|
||||||
item->SetText(label);
|
item->SetText(label);
|
||||||
@@ -353,9 +357,9 @@ void wxMenu::SetLabel(int id, const wxString& label)
|
|||||||
wxString wxMenu::GetLabel(int id) const
|
wxString wxMenu::GetLabel(int id) const
|
||||||
{
|
{
|
||||||
wxString label;
|
wxString label;
|
||||||
wxMenuItem *pItem = FindItemForId(id) ;
|
wxMenuItem *pItem = FindItemForId(id);
|
||||||
if (pItem)
|
if (pItem)
|
||||||
label = pItem->GetText() ;
|
label = pItem->GetText();
|
||||||
else
|
else
|
||||||
wxFAIL_MSG(wxT("wxMenu::GetLabel: item doesn't exist"));
|
wxFAIL_MSG(wxT("wxMenu::GetLabel: item doesn't exist"));
|
||||||
|
|
||||||
@@ -574,6 +578,7 @@ void wxMenu::Detach()
|
|||||||
{
|
{
|
||||||
wxASSERT_MSG( m_menuBar, wxT("can't detach menu if it's not attached") );
|
wxASSERT_MSG( m_menuBar, wxT("can't detach menu if it's not attached") );
|
||||||
|
|
||||||
|
m_menuBar = NULL;
|
||||||
m_hMenu = m_savehMenu;
|
m_hMenu = m_savehMenu;
|
||||||
m_savehMenu = 0;
|
m_savehMenu = 0;
|
||||||
}
|
}
|
||||||
@@ -585,7 +590,6 @@ void wxMenu::Detach()
|
|||||||
void wxMenuBar::Init()
|
void wxMenuBar::Init()
|
||||||
{
|
{
|
||||||
m_eventHandler = this;
|
m_eventHandler = this;
|
||||||
m_titles = NULL;
|
|
||||||
m_menuBarFrame = NULL;
|
m_menuBarFrame = NULL;
|
||||||
m_hMenu = 0;
|
m_hMenu = 0;
|
||||||
}
|
}
|
||||||
@@ -625,9 +629,9 @@ wxMenuBar::~wxMenuBar()
|
|||||||
|
|
||||||
void wxMenuBar::Refresh()
|
void wxMenuBar::Refresh()
|
||||||
{
|
{
|
||||||
wxCHECK_RET( m_menuBarFrame, wxT("can't refresh a menubar withotu a frame") );
|
wxCHECK_RET( IsAttached(), wxT("can't refresh unatteched menubar") );
|
||||||
|
|
||||||
DrawMenuBar((HWND)m_menuBarFrame->GetHWND()) ;
|
DrawMenuBar(GetHwndOf(m_menuBarFrame));
|
||||||
}
|
}
|
||||||
|
|
||||||
WXHMENU wxMenuBar::Create()
|
WXHMENU wxMenuBar::Create()
|
||||||
@@ -690,8 +694,8 @@ void wxMenuBar::SetLabelTop(size_t pos, const wxString& label)
|
|||||||
if ( flagsOld & MF_POPUP )
|
if ( flagsOld & MF_POPUP )
|
||||||
{
|
{
|
||||||
// HIBYTE contains the number of items in the submenu in this case
|
// HIBYTE contains the number of items in the submenu in this case
|
||||||
flagsOld &= 0xff ;
|
flagsOld &= 0xff;
|
||||||
id = (UINT)::GetSubMenu((HMENU)m_hMenu, pos) ;
|
id = (UINT)::GetSubMenu((HMENU)m_hMenu, pos);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -717,61 +721,6 @@ wxString wxMenuBar::GetLabelTop(size_t pos) const
|
|||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
// wxMenuBar notifications
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
bool wxMenuBar::OnDelete(wxMenu *a_menu, int pos)
|
|
||||||
{
|
|
||||||
if ( !m_menuBarFrame )
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
if ( ::RemoveMenu((HMENU)m_hMenu, (UINT)pos, MF_BYPOSITION) )
|
|
||||||
{
|
|
||||||
// VZ: I'm not sure about what's going on here, so I leave an assert
|
|
||||||
wxASSERT_MSG( m_menus[pos] == a_menu, wxT("what is this parameter for??") );
|
|
||||||
|
|
||||||
a_menu->Detach();
|
|
||||||
|
|
||||||
if ( m_menuBarFrame )
|
|
||||||
Refresh();
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wxLogLastError("RemoveMenu");
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxMenuBar::OnAppend(wxMenu *a_menu, const wxChar *title)
|
|
||||||
{
|
|
||||||
WXHMENU submenu = a_menu->GetHMenu();
|
|
||||||
if ( !submenu )
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if ( !m_menuBarFrame )
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
a_menu->Attach(this);
|
|
||||||
|
|
||||||
if ( !::AppendMenu(GetHmenu(), MF_POPUP | MF_STRING,
|
|
||||||
(UINT)submenu, title) )
|
|
||||||
{
|
|
||||||
wxLogLastError(wxT("AppendMenu"));
|
|
||||||
}
|
|
||||||
|
|
||||||
Refresh();
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
// wxMenuBar construction
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
int wxMenuBar::FindMenu(const wxString& title)
|
int wxMenuBar::FindMenu(const wxString& title)
|
||||||
{
|
{
|
||||||
wxString menuTitle = wxStripMenuCodes(title);
|
wxString menuTitle = wxStripMenuCodes(title);
|
||||||
@@ -788,57 +737,84 @@ int wxMenuBar::FindMenu(const wxString& title)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// wxMenuBar construction
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
|
wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
|
||||||
{
|
{
|
||||||
if ( m_menuBarFrame )
|
|
||||||
{
|
|
||||||
wxFAIL_MSG(wxT("not implemented"));
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wxMenu *menuOld = wxMenuBarBase::Replace(pos, menu, title);
|
wxMenu *menuOld = wxMenuBarBase::Replace(pos, menu, title);
|
||||||
if ( menuOld )
|
if ( !menuOld )
|
||||||
{
|
return FALSE;
|
||||||
m_titles[pos] = title;
|
m_titles[pos] = title;
|
||||||
|
|
||||||
|
if ( IsAttached() )
|
||||||
|
{
|
||||||
|
// can't use ModifyMenu() because it deletes the submenu it replaces
|
||||||
|
if ( !::RemoveMenu(GetHmenu(), (UINT)pos, MF_BYPOSITION) )
|
||||||
|
{
|
||||||
|
wxLogLastError("RemoveMenu");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !::InsertMenu(GetHmenu(), (UINT)pos,
|
||||||
|
MF_BYPOSITION | MF_POPUP | MF_STRING,
|
||||||
|
(UINT)GetHmenuOf(menu), title) )
|
||||||
|
{
|
||||||
|
wxLogLastError("InsertMenu");
|
||||||
|
}
|
||||||
|
|
||||||
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
return menuOld;
|
return menuOld;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
|
bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
|
||||||
{
|
{
|
||||||
if ( m_menuBarFrame )
|
|
||||||
{
|
|
||||||
wxFAIL_MSG(wxT("not implemented"));
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( !wxMenuBarBase::Insert(pos, menu, title) )
|
if ( !wxMenuBarBase::Insert(pos, menu, title) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
m_titles.Insert(title, pos);
|
m_titles.Insert(title, pos);
|
||||||
|
|
||||||
return TRUE;
|
menu->Attach(this);
|
||||||
|
|
||||||
|
if ( IsAttached() )
|
||||||
|
{
|
||||||
|
if ( !::InsertMenu(GetHmenu(), pos,
|
||||||
|
MF_BYPOSITION | MF_POPUP | MF_STRING,
|
||||||
|
(UINT)GetHmenuOf(menu), title) )
|
||||||
|
{
|
||||||
|
wxLogLastError("InsertMenu");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxMenuBar::Append(wxMenu * menu, const wxString& title)
|
bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
|
||||||
{
|
{
|
||||||
if ( !wxMenuBarBase::Append(menu, title) )
|
WXHMENU submenu = menu ? menu->GetHMenu() : 0;
|
||||||
return FALSE;
|
wxCHECK_MSG( submenu, FALSE, wxT("can't append invalid menu to menubar") );
|
||||||
|
|
||||||
// menu is already appended, ignore errors
|
menu->Attach(this);
|
||||||
(void)OnAppend(menu, title);
|
|
||||||
|
if ( IsAttached() )
|
||||||
|
{
|
||||||
|
if ( !::AppendMenu(GetHmenu(), MF_POPUP | MF_STRING,
|
||||||
|
(UINT)submenu, title) )
|
||||||
|
{
|
||||||
|
wxLogLastError(wxT("AppendMenu"));
|
||||||
|
}
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenuBarBase::Append(menu, title);
|
||||||
|
|
||||||
m_titles.Add(title);
|
m_titles.Add(title);
|
||||||
|
|
||||||
menu->SetParent(this);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -848,11 +824,17 @@ wxMenu *wxMenuBar::Remove(size_t pos)
|
|||||||
if ( !menu )
|
if ( !menu )
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
menu->SetParent(NULL);
|
if ( IsAttached() )
|
||||||
|
{
|
||||||
|
if ( !::RemoveMenu(GetHmenu(), (UINT)pos, MF_BYPOSITION) )
|
||||||
|
{
|
||||||
|
wxLogLastError("RemoveMenu");
|
||||||
|
}
|
||||||
|
|
||||||
// the menu is deleted from the list anyhow, so we have to ignore all
|
menu->Detach();
|
||||||
// possible errors here
|
|
||||||
(void)OnDelete(menu, pos);
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
m_titles.Remove(pos);
|
m_titles.Remove(pos);
|
||||||
|
|
||||||
@@ -861,7 +843,7 @@ wxMenu *wxMenuBar::Remove(size_t pos)
|
|||||||
|
|
||||||
void wxMenuBar::Attach(wxFrame *frame)
|
void wxMenuBar::Attach(wxFrame *frame)
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( !m_menuBarFrame, wxT("menubar already attached!") );
|
wxASSERT_MSG( !IsAttached(), wxT("menubar already attached!") );
|
||||||
|
|
||||||
m_menuBarFrame = frame;
|
m_menuBarFrame = frame;
|
||||||
|
|
||||||
|
@@ -260,14 +260,11 @@ STDMETHODIMP wxIDropTarget::Drop(IDataObject *pIDataSource,
|
|||||||
|
|
||||||
// and now it has the data
|
// and now it has the data
|
||||||
wxDragResult rc = ConvertDragEffectToResult(GetDropEffect(grfKeyState));
|
wxDragResult rc = ConvertDragEffectToResult(GetDropEffect(grfKeyState));
|
||||||
m_pTarget->OnData(pt.x, pt.y);//, rc);
|
m_pTarget->OnData(pt.x, pt.y, rc);
|
||||||
/*
|
|
||||||
if ( wxIsDragResultOk(rc) ) {
|
if ( wxIsDragResultOk(rc) ) {
|
||||||
// operation succeeded
|
// operation succeeded
|
||||||
*pdwEffect = ConvertDragResultToEffect(rc);
|
*pdwEffect = ConvertDragResultToEffect(rc);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
//else: *pdwEffect is already DROPEFFECT_NONE
|
//else: *pdwEffect is already DROPEFFECT_NONE
|
||||||
}
|
}
|
||||||
//else: OnDrop() returned FALSE, no need to copy data
|
//else: OnDrop() returned FALSE, no need to copy data
|
||||||
|
Reference in New Issue
Block a user