1. added wxMenuBarBase
2. corrected typo in gtk/menu.cpp when dealing with Fn accel keys git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4204 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
12
Makefile.in
12
Makefile.in
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# This file was automatically generated by tmake at 19:47, 1999/10/25
|
# This file was automatically generated by tmake at 20:51, 1999/10/26
|
||||||
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE UNX.T!
|
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE UNX.T!
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -736,6 +736,7 @@ GTK_COMMONOBJS = \
|
|||||||
list.o \
|
list.o \
|
||||||
log.o \
|
log.o \
|
||||||
memory.o \
|
memory.o \
|
||||||
|
menucmn.o \
|
||||||
mimetype.o \
|
mimetype.o \
|
||||||
module.o \
|
module.o \
|
||||||
mstream.o \
|
mstream.o \
|
||||||
@@ -830,6 +831,7 @@ GTK_COMMONDEPS = \
|
|||||||
list.d \
|
list.d \
|
||||||
log.d \
|
log.d \
|
||||||
memory.d \
|
memory.d \
|
||||||
|
menucmn.d \
|
||||||
mimetype.d \
|
mimetype.d \
|
||||||
module.d \
|
module.d \
|
||||||
mstream.d \
|
mstream.d \
|
||||||
@@ -1120,6 +1122,7 @@ MOTIF_COMMONOBJS = \
|
|||||||
list.o \
|
list.o \
|
||||||
log.o \
|
log.o \
|
||||||
memory.o \
|
memory.o \
|
||||||
|
menucmn.o \
|
||||||
mimetype.o \
|
mimetype.o \
|
||||||
module.o \
|
module.o \
|
||||||
mstream.o \
|
mstream.o \
|
||||||
@@ -1215,6 +1218,7 @@ MOTIF_COMMONDEPS = \
|
|||||||
list.d \
|
list.d \
|
||||||
log.d \
|
log.d \
|
||||||
memory.d \
|
memory.d \
|
||||||
|
menucmn.d \
|
||||||
mimetype.d \
|
mimetype.d \
|
||||||
module.d \
|
module.d \
|
||||||
mstream.d \
|
mstream.d \
|
||||||
@@ -1283,7 +1287,6 @@ MOTIF_GUIOBJS = \
|
|||||||
dialog.o \
|
dialog.o \
|
||||||
filedlg.o \
|
filedlg.o \
|
||||||
font.o \
|
font.o \
|
||||||
fontenum.o \
|
|
||||||
frame.o \
|
frame.o \
|
||||||
gauge.o \
|
gauge.o \
|
||||||
gdiobj.o \
|
gdiobj.o \
|
||||||
@@ -1339,7 +1342,6 @@ MOTIF_GUIDEPS = \
|
|||||||
dialog.d \
|
dialog.d \
|
||||||
filedlg.d \
|
filedlg.d \
|
||||||
font.d \
|
font.d \
|
||||||
fontenum.d \
|
|
||||||
frame.d \
|
frame.d \
|
||||||
gauge.d \
|
gauge.d \
|
||||||
gdiobj.d \
|
gdiobj.d \
|
||||||
@@ -1466,6 +1468,7 @@ MSW_COMMONOBJS = \
|
|||||||
list.o \
|
list.o \
|
||||||
log.o \
|
log.o \
|
||||||
memory.o \
|
memory.o \
|
||||||
|
menucmn.o \
|
||||||
mimetype.o \
|
mimetype.o \
|
||||||
module.o \
|
module.o \
|
||||||
mstream.o \
|
mstream.o \
|
||||||
@@ -1561,6 +1564,7 @@ MSW_COMMONDEPS = \
|
|||||||
list.d \
|
list.d \
|
||||||
log.d \
|
log.d \
|
||||||
memory.d \
|
memory.d \
|
||||||
|
menucmn.d \
|
||||||
mimetype.d \
|
mimetype.d \
|
||||||
module.d \
|
module.d \
|
||||||
mstream.d \
|
mstream.d \
|
||||||
@@ -1892,12 +1896,14 @@ HTMLDEPS = \
|
|||||||
|
|
||||||
UNIX_OBJS = \
|
UNIX_OBJS = \
|
||||||
dialup.o \
|
dialup.o \
|
||||||
|
fontenum.o \
|
||||||
gsocket.o \
|
gsocket.o \
|
||||||
threadpsx.o \
|
threadpsx.o \
|
||||||
utilsunx.o
|
utilsunx.o
|
||||||
|
|
||||||
UNIX_DEPS = \
|
UNIX_DEPS = \
|
||||||
dialup.d \
|
dialup.d \
|
||||||
|
fontenum.d \
|
||||||
gsocket.d \
|
gsocket.d \
|
||||||
threadpsx.d \
|
threadpsx.d \
|
||||||
utilsunx.d
|
utilsunx.d
|
||||||
|
@@ -143,6 +143,7 @@ lboxcmn.cpp C
|
|||||||
list.cpp C B
|
list.cpp C B
|
||||||
log.cpp C B
|
log.cpp C B
|
||||||
memory.cpp C
|
memory.cpp C
|
||||||
|
menucmn.cpp C
|
||||||
mimetype.cpp C 32,B
|
mimetype.cpp C 32,B
|
||||||
module.cpp C B
|
module.cpp C B
|
||||||
mstream.cpp C
|
mstream.cpp C
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: menu.h
|
// Name: wx/gtk/menu.h
|
||||||
// Purpose:
|
// Purpose:
|
||||||
// Author: Robert Roebling
|
// Author: Robert Roebling
|
||||||
// Id: $Id$
|
// Id: $Id$
|
||||||
@@ -7,95 +7,56 @@
|
|||||||
// Licence: wxWindows licence
|
// Licence: wxWindows licence
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
#ifndef __GTKMENUH__
|
#ifndef __GTKMENUH__
|
||||||
#define __GTKMENUH__
|
#define __GTKMENUH__
|
||||||
|
|
||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface "menu.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/defs.h"
|
|
||||||
#include "wx/object.h"
|
|
||||||
#include "wx/list.h"
|
|
||||||
#include "wx/window.h"
|
|
||||||
#include "wx/menuitem.h"
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// classes
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class wxMenuBar;
|
|
||||||
class wxMenuItem;
|
|
||||||
class wxMenu;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxMenuBar
|
// wxMenuBar
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
class wxMenuBar : public wxWindow
|
class wxMenuBar : public wxMenuBarBase
|
||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxMenuBar)
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// ctors
|
// ctors
|
||||||
wxMenuBar();
|
wxMenuBar();
|
||||||
wxMenuBar(long style);
|
wxMenuBar(long style);
|
||||||
wxMenuBar(int n, wxMenu *menus[], const wxString titles[]);
|
wxMenuBar(int n, wxMenu *menus[], const wxString titles[]);
|
||||||
~wxMenuBar();
|
virtual ~wxMenuBar();
|
||||||
|
|
||||||
// menubar construction
|
// implement base class (pure) virtuals
|
||||||
void Append( wxMenu *menu, const wxString &title );
|
virtual bool Append( wxMenu *menu, const wxString &title );
|
||||||
|
virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title);
|
||||||
|
virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title);
|
||||||
|
virtual wxMenu *Remove(size_t pos);
|
||||||
|
|
||||||
// item search
|
|
||||||
// by menu and item names, returns wxNOT_FOUND if not found
|
|
||||||
virtual int FindMenuItem(const wxString& menuString,
|
virtual int FindMenuItem(const wxString& menuString,
|
||||||
const wxString& itemString) const;
|
const wxString& itemString) const;
|
||||||
// returns NULL if not found
|
virtual wxMenuItem* FindItem( int id, wxMenu **menu = NULL ) const;
|
||||||
wxMenuItem* FindItem( int id ) const;
|
|
||||||
// returns NULL if not found, fills menuForItem if !NULL
|
|
||||||
wxMenuItem *FindItemForId(int itemId, wxMenu **menuForItem = NULL) const;
|
|
||||||
|
|
||||||
// state control
|
virtual void EnableTop( size_t pos, bool flag );
|
||||||
void Check( int id, bool check );
|
virtual void SetLabelTop( size_t pos, const wxString& label );
|
||||||
bool IsChecked( int id ) const;
|
virtual wxString GetLabelTop( size_t pos ) const;
|
||||||
void Enable( int id, bool enable );
|
|
||||||
bool IsEnabled( int id ) const;
|
|
||||||
|
|
||||||
void SetLabel( int id, const wxString &label );
|
|
||||||
wxString GetLabel( int id ) const;
|
|
||||||
wxString GetLabel() const { return wxWindow::GetLabel(); }
|
|
||||||
|
|
||||||
void EnableTop( int pos, bool flag );
|
|
||||||
void SetLabelTop( int pos, const wxString& label );
|
|
||||||
wxString GetLabelTop( int pos ) const;
|
|
||||||
|
|
||||||
virtual void SetHelpString( int id, const wxString& helpString );
|
|
||||||
virtual wxString GetHelpString( int id ) const;
|
|
||||||
|
|
||||||
int GetMenuCount() const { return m_menus.Number(); }
|
|
||||||
wxMenu *GetMenu( int n ) const { return (wxMenu *)m_menus.Nth(n)->Data(); }
|
|
||||||
|
|
||||||
#ifdef WXWIN_COMPATIBILITY
|
|
||||||
// compatibility: these functions are deprecated
|
|
||||||
bool Enabled(int id) const { return IsEnabled(id); }
|
|
||||||
bool Checked(int id) const { return IsChecked(id); }
|
|
||||||
|
|
||||||
wxMenuItem* FindMenuItemById( int id ) const { return FindItem(id); }
|
|
||||||
#endif // WXWIN_COMPATIBILITY
|
|
||||||
|
|
||||||
// implementation only
|
|
||||||
wxList& GetMenus() { return m_menus; }
|
|
||||||
|
|
||||||
|
// implementation only from now on
|
||||||
void SetInvokingWindow( wxWindow *win );
|
void SetInvokingWindow( wxWindow *win );
|
||||||
void UnsetInvokingWindow( wxWindow *win );
|
void UnsetInvokingWindow( wxWindow *win );
|
||||||
|
|
||||||
GtkAccelGroup *m_accel;
|
GtkAccelGroup *m_accel;
|
||||||
GtkItemFactory *m_factory;
|
GtkItemFactory *m_factory;
|
||||||
wxList m_menus;
|
|
||||||
GtkWidget *m_menubar;
|
GtkWidget *m_menubar;
|
||||||
long m_style;
|
long m_style;
|
||||||
wxWindow *m_invokingWindow;
|
wxWindow *m_invokingWindow;
|
||||||
|
|
||||||
|
#if 0 // seems to be unused (VZ)
|
||||||
|
wxMenuList& GetMenus() { return m_menus; }
|
||||||
|
#endif // 0
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxMenuBar)
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -125,7 +86,7 @@ public:
|
|||||||
// title
|
// title
|
||||||
void SetTitle(const wxString& label);
|
void SetTitle(const wxString& label);
|
||||||
const wxString GetTitle() const;
|
const wxString GetTitle() const;
|
||||||
|
|
||||||
// menu creation
|
// menu creation
|
||||||
void AppendSeparator();
|
void AppendSeparator();
|
||||||
void Append(int id, const wxString &item,
|
void Append(int id, const wxString &item,
|
||||||
@@ -201,7 +162,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
// common code for both constructors:
|
// common code for both constructors:
|
||||||
void Init( const wxString& title,
|
void Init( const wxString& title,
|
||||||
long style,
|
long style,
|
||||||
const wxFunction func = (wxFunction) NULL );
|
const wxFunction func = (wxFunction) NULL );
|
||||||
|
|
||||||
wxString m_title;
|
wxString m_title;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: menu.h
|
// Name: wx/gtk/menu.h
|
||||||
// Purpose:
|
// Purpose:
|
||||||
// Author: Robert Roebling
|
// Author: Robert Roebling
|
||||||
// Id: $Id$
|
// Id: $Id$
|
||||||
@@ -7,95 +7,56 @@
|
|||||||
// Licence: wxWindows licence
|
// Licence: wxWindows licence
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
#ifndef __GTKMENUH__
|
#ifndef __GTKMENUH__
|
||||||
#define __GTKMENUH__
|
#define __GTKMENUH__
|
||||||
|
|
||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface "menu.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/defs.h"
|
|
||||||
#include "wx/object.h"
|
|
||||||
#include "wx/list.h"
|
|
||||||
#include "wx/window.h"
|
|
||||||
#include "wx/menuitem.h"
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// classes
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class wxMenuBar;
|
|
||||||
class wxMenuItem;
|
|
||||||
class wxMenu;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxMenuBar
|
// wxMenuBar
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
class wxMenuBar : public wxWindow
|
class wxMenuBar : public wxMenuBarBase
|
||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxMenuBar)
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// ctors
|
// ctors
|
||||||
wxMenuBar();
|
wxMenuBar();
|
||||||
wxMenuBar(long style);
|
wxMenuBar(long style);
|
||||||
wxMenuBar(int n, wxMenu *menus[], const wxString titles[]);
|
wxMenuBar(int n, wxMenu *menus[], const wxString titles[]);
|
||||||
~wxMenuBar();
|
virtual ~wxMenuBar();
|
||||||
|
|
||||||
// menubar construction
|
// implement base class (pure) virtuals
|
||||||
void Append( wxMenu *menu, const wxString &title );
|
virtual bool Append( wxMenu *menu, const wxString &title );
|
||||||
|
virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title);
|
||||||
|
virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title);
|
||||||
|
virtual wxMenu *Remove(size_t pos);
|
||||||
|
|
||||||
// item search
|
|
||||||
// by menu and item names, returns wxNOT_FOUND if not found
|
|
||||||
virtual int FindMenuItem(const wxString& menuString,
|
virtual int FindMenuItem(const wxString& menuString,
|
||||||
const wxString& itemString) const;
|
const wxString& itemString) const;
|
||||||
// returns NULL if not found
|
virtual wxMenuItem* FindItem( int id, wxMenu **menu = NULL ) const;
|
||||||
wxMenuItem* FindItem( int id ) const;
|
|
||||||
// returns NULL if not found, fills menuForItem if !NULL
|
|
||||||
wxMenuItem *FindItemForId(int itemId, wxMenu **menuForItem = NULL) const;
|
|
||||||
|
|
||||||
// state control
|
virtual void EnableTop( size_t pos, bool flag );
|
||||||
void Check( int id, bool check );
|
virtual void SetLabelTop( size_t pos, const wxString& label );
|
||||||
bool IsChecked( int id ) const;
|
virtual wxString GetLabelTop( size_t pos ) const;
|
||||||
void Enable( int id, bool enable );
|
|
||||||
bool IsEnabled( int id ) const;
|
|
||||||
|
|
||||||
void SetLabel( int id, const wxString &label );
|
|
||||||
wxString GetLabel( int id ) const;
|
|
||||||
wxString GetLabel() const { return wxWindow::GetLabel(); }
|
|
||||||
|
|
||||||
void EnableTop( int pos, bool flag );
|
|
||||||
void SetLabelTop( int pos, const wxString& label );
|
|
||||||
wxString GetLabelTop( int pos ) const;
|
|
||||||
|
|
||||||
virtual void SetHelpString( int id, const wxString& helpString );
|
|
||||||
virtual wxString GetHelpString( int id ) const;
|
|
||||||
|
|
||||||
int GetMenuCount() const { return m_menus.Number(); }
|
|
||||||
wxMenu *GetMenu( int n ) const { return (wxMenu *)m_menus.Nth(n)->Data(); }
|
|
||||||
|
|
||||||
#ifdef WXWIN_COMPATIBILITY
|
|
||||||
// compatibility: these functions are deprecated
|
|
||||||
bool Enabled(int id) const { return IsEnabled(id); }
|
|
||||||
bool Checked(int id) const { return IsChecked(id); }
|
|
||||||
|
|
||||||
wxMenuItem* FindMenuItemById( int id ) const { return FindItem(id); }
|
|
||||||
#endif // WXWIN_COMPATIBILITY
|
|
||||||
|
|
||||||
// implementation only
|
|
||||||
wxList& GetMenus() { return m_menus; }
|
|
||||||
|
|
||||||
|
// implementation only from now on
|
||||||
void SetInvokingWindow( wxWindow *win );
|
void SetInvokingWindow( wxWindow *win );
|
||||||
void UnsetInvokingWindow( wxWindow *win );
|
void UnsetInvokingWindow( wxWindow *win );
|
||||||
|
|
||||||
GtkAccelGroup *m_accel;
|
GtkAccelGroup *m_accel;
|
||||||
GtkItemFactory *m_factory;
|
GtkItemFactory *m_factory;
|
||||||
wxList m_menus;
|
|
||||||
GtkWidget *m_menubar;
|
GtkWidget *m_menubar;
|
||||||
long m_style;
|
long m_style;
|
||||||
wxWindow *m_invokingWindow;
|
wxWindow *m_invokingWindow;
|
||||||
|
|
||||||
|
#if 0 // seems to be unused (VZ)
|
||||||
|
wxMenuList& GetMenus() { return m_menus; }
|
||||||
|
#endif // 0
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxMenuBar)
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -125,7 +86,7 @@ public:
|
|||||||
// title
|
// title
|
||||||
void SetTitle(const wxString& label);
|
void SetTitle(const wxString& label);
|
||||||
const wxString GetTitle() const;
|
const wxString GetTitle() const;
|
||||||
|
|
||||||
// menu creation
|
// menu creation
|
||||||
void AppendSeparator();
|
void AppendSeparator();
|
||||||
void Append(int id, const wxString &item,
|
void Append(int id, const wxString &item,
|
||||||
@@ -201,7 +162,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
// common code for both constructors:
|
// common code for both constructors:
|
||||||
void Init( const wxString& title,
|
void Init( const wxString& title,
|
||||||
long style,
|
long style,
|
||||||
const wxFunction func = (wxFunction) NULL );
|
const wxFunction func = (wxFunction) NULL );
|
||||||
|
|
||||||
wxString m_title;
|
wxString m_title;
|
||||||
|
@@ -1,21 +1,167 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/menu.h
|
||||||
|
// Purpose: wxMenu and wxMenuBar classes
|
||||||
|
// Author: Vadim Zeitlin
|
||||||
|
// Modified by:
|
||||||
|
// Created: 26.10.99
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) wxWindows team
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef _WX_MENU_H_BASE_
|
#ifndef _WX_MENU_H_BASE_
|
||||||
#define _WX_MENU_H_BASE_
|
#define _WX_MENU_H_BASE_
|
||||||
|
|
||||||
#if defined(__WXMSW__)
|
#ifdef __GNUG__
|
||||||
#include "wx/msw/menu.h"
|
#pragma interface "menubase.h"
|
||||||
#elif defined(__WXMOTIF__)
|
|
||||||
#include "wx/motif/menu.h"
|
|
||||||
#elif defined(__WXGTK__)
|
|
||||||
#include "wx/gtk/menu.h"
|
|
||||||
#elif defined(__WXQT__)
|
|
||||||
#include "wx/qt/menu.h"
|
|
||||||
#elif defined(__WXMAC__)
|
|
||||||
#include "wx/mac/menu.h"
|
|
||||||
#elif defined(__WXPM__)
|
|
||||||
#include "wx/os2/menu.h"
|
|
||||||
#elif defined(__WXSTUBS__)
|
|
||||||
#include "wx/stubs/menu.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/list.h" // for wxMenuList
|
||||||
|
#include "wx/window.h" // base class for wxMenuBar
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxMenu;
|
||||||
|
class WXDLLEXPORT wxMenuBar;
|
||||||
|
class WXDLLEXPORT wxMenuItem;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxMenu
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// for now, it's in platform-specific file
|
||||||
|
|
||||||
|
WX_DECLARE_LIST(wxMenu, wxMenuList);
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxMenuBar
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxMenuBarBase : public wxWindow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// default ctor
|
||||||
|
wxMenuBarBase();
|
||||||
|
|
||||||
|
// dtor will delete all menus we own
|
||||||
|
virtual ~wxMenuBarBase();
|
||||||
|
|
||||||
|
// menu bar construction
|
||||||
|
// ---------------------
|
||||||
|
|
||||||
|
// append a menu to the end of menubar, return TRUE if ok
|
||||||
|
virtual bool Append(wxMenu *menu, const wxString& title);
|
||||||
|
|
||||||
|
// insert a menu before the given position into the menubar, return TRUE
|
||||||
|
// if inserted ok
|
||||||
|
virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title);
|
||||||
|
|
||||||
|
// menu bar items access
|
||||||
|
// ---------------------
|
||||||
|
|
||||||
|
// get the number of menus in the menu bar
|
||||||
|
size_t GetMenuCount() const { return m_menus.GetCount(); }
|
||||||
|
|
||||||
|
// get the menu at given position
|
||||||
|
wxMenu *GetMenu(size_t pos) const;
|
||||||
|
|
||||||
|
// replace the menu at given position with another one, returns the
|
||||||
|
// previous menu (which should be deleted by the caller)
|
||||||
|
virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title);
|
||||||
|
|
||||||
|
// delete the menu at given position from the menu bar, return the pointer
|
||||||
|
// to the menu (which should be deleted by the caller)
|
||||||
|
virtual wxMenu *Remove(size_t pos);
|
||||||
|
|
||||||
|
// enable or disable a submenu
|
||||||
|
virtual void EnableTop(size_t pos, bool enable) = 0;
|
||||||
|
|
||||||
|
// get or change the label of the menu at given position
|
||||||
|
virtual void SetLabelTop(size_t pos, const wxString& label) = 0;
|
||||||
|
virtual wxString GetLabelTop(size_t pos) const = 0;
|
||||||
|
|
||||||
|
// item search
|
||||||
|
// -----------
|
||||||
|
|
||||||
|
// by menu and item names, returns wxNOT_FOUND if not found or id of the
|
||||||
|
// found item
|
||||||
|
virtual int FindMenuItem(const wxString& menuString,
|
||||||
|
const wxString& itemString) const = 0;
|
||||||
|
|
||||||
|
// find item by id (in any menu), returns NULL if not found
|
||||||
|
//
|
||||||
|
// if menu is !NULL, it will be filled with wxMenu this item belongs to
|
||||||
|
virtual wxMenuItem* FindItem(int id, wxMenu **menu = NULL) const = 0;
|
||||||
|
|
||||||
|
// item access
|
||||||
|
// -----------
|
||||||
|
|
||||||
|
// all these functions just use FindItem() and then call an appropriate
|
||||||
|
// method on it
|
||||||
|
//
|
||||||
|
// NB: under MSW, these methods can only be used after the menubar had
|
||||||
|
// been attached to the frame
|
||||||
|
|
||||||
|
void Enable(int id, bool enable);
|
||||||
|
void Check(int id, bool check);
|
||||||
|
bool IsChecked(int id) const;
|
||||||
|
bool IsEnabled(int id) const;
|
||||||
|
|
||||||
|
void SetLabel(int id, const wxString &label);
|
||||||
|
wxString GetLabel(int id) const;
|
||||||
|
|
||||||
|
void SetHelpString(int id, const wxString& helpString);
|
||||||
|
wxString GetHelpString(int id) const;
|
||||||
|
|
||||||
|
// need to override this one to avoid virtual function hiding
|
||||||
|
virtual wxString GetLabel() const { return wxWindow::GetLabel(); }
|
||||||
|
|
||||||
|
// compatibility only: these functions are deprecated, use the new ones
|
||||||
|
// instead
|
||||||
|
#ifdef WXWIN_COMPATIBILITY
|
||||||
|
bool Enabled(int id) const { return IsEnabled(id); }
|
||||||
|
bool Checked(int id) const { return IsChecked(id); }
|
||||||
|
|
||||||
|
wxMenuItem* FindMenuItemById(int id) const
|
||||||
|
{ return FindItem(id); }
|
||||||
|
wxMenuItem* FindItemForId(int id, wxMenu **menu = NULL) const
|
||||||
|
{ return FindItem(id, menu); }
|
||||||
|
#endif // WXWIN_COMPATIBILITY
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// the list of all our menus
|
||||||
|
wxMenuList m_menus;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// include the real class declaration
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifdef wxUSE_BASE_CLASSES_ONLY
|
||||||
|
#define wxMenuItem wxMenuItemBase
|
||||||
|
#else // !wxUSE_BASE_CLASSES_ONLY
|
||||||
|
#if defined(__WXMSW__)
|
||||||
|
#include "wx/msw/menu.h"
|
||||||
|
#elif defined(__WXMOTIF__)
|
||||||
|
#include "wx/motif/menu.h"
|
||||||
|
#elif defined(__WXGTK__)
|
||||||
|
#include "wx/gtk/menu.h"
|
||||||
|
#elif defined(__WXQT__)
|
||||||
|
#include "wx/qt/menu.h"
|
||||||
|
#elif defined(__WXMAC__)
|
||||||
|
#include "wx/mac/menu.h"
|
||||||
|
#elif defined(__WXPM__)
|
||||||
|
#include "wx/os2/menu.h"
|
||||||
|
#elif defined(__WXSTUBS__)
|
||||||
|
#include "wx/stubs/menu.h"
|
||||||
|
#endif
|
||||||
|
#endif // wxUSE_BASE_CLASSES_ONLY/!wxUSE_BASE_CLASSES_ONLY
|
||||||
|
|
||||||
|
// also include this one to ensure compatibility with old code which only
|
||||||
|
// included wx/menu.h
|
||||||
|
#include "wx/menuitem.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// _WX_MENU_H_BASE_
|
// _WX_MENU_H_BASE_
|
||||||
|
@@ -52,6 +52,9 @@ public:
|
|||||||
bool isCheckable = FALSE,
|
bool isCheckable = FALSE,
|
||||||
wxMenu *subMenu = (wxMenu *)NULL);
|
wxMenu *subMenu = (wxMenu *)NULL);
|
||||||
|
|
||||||
|
// the menu we're in
|
||||||
|
wxMenu *GetMenu() const { return m_parentMenu; }
|
||||||
|
|
||||||
// get/set id
|
// get/set id
|
||||||
void SetId(int id) { m_id = id; }
|
void SetId(int id) { m_id = id; }
|
||||||
int GetId() const { return m_id; }
|
int GetId() const { return m_id; }
|
||||||
|
@@ -49,6 +49,7 @@ public:
|
|||||||
|
|
||||||
virtual void Enable(bool bDoEnable = TRUE);
|
virtual void Enable(bool bDoEnable = TRUE);
|
||||||
virtual void Check(bool bDoCheck = TRUE);
|
virtual void Check(bool bDoCheck = TRUE);
|
||||||
|
virtual void IsChecked() const;
|
||||||
|
|
||||||
// unfortunately needed to resolve ambiguity between
|
// unfortunately needed to resolve ambiguity between
|
||||||
// wxMenuItemBase::IsCheckable() and wxOwnerDrawn::IsCheckable()
|
// wxMenuItemBase::IsCheckable() and wxOwnerDrawn::IsCheckable()
|
||||||
|
203
src/common/menucmn.cpp
Normal file
203
src/common/menucmn.cpp
Normal file
@@ -0,0 +1,203 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: common/menucmn.cpp
|
||||||
|
// Purpose: wxMenu and wxMenuBar methods common to all ports
|
||||||
|
// Author: Vadim Zeitlin
|
||||||
|
// Modified by:
|
||||||
|
// Created: 26.10.99
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) wxWindows team
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma implementation "menubase.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// For compilers that support precompilation, includes "wx.h".
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#pragma hdrstop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/menu.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// template lists
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/listimpl.cpp"
|
||||||
|
WX_DEFINE_LIST(wxMenuList);
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// ctor and dtor
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxMenuBarBase::wxMenuBarBase()
|
||||||
|
{
|
||||||
|
// we own the menus when we get them
|
||||||
|
m_menus.DeleteContents(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenuBarBase::~wxMenuBarBase()
|
||||||
|
{
|
||||||
|
// nothing to do, the list will delete the menus because of the call to
|
||||||
|
// DeleteContents() above
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxMenuBar item access: the base class versions manage m_menus list, the
|
||||||
|
// derived class should reflect the changes in the real menubar
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxMenu *wxMenuBarBase::GetMenu(size_t pos) const
|
||||||
|
{
|
||||||
|
wxMenuList::Node *node = m_menus.Item(pos);
|
||||||
|
wxCHECK_MSG( node, NULL, wxT("bad index in wxMenuBar::GetMenu()") );
|
||||||
|
|
||||||
|
return node->GetData();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenuBarBase::Append(wxMenu *menu, const wxString& WXUNUSED(title))
|
||||||
|
{
|
||||||
|
wxCHECK_MSG( menu, FALSE, wxT("can't append NULL menu") );
|
||||||
|
|
||||||
|
m_menus.Append(menu);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenuBarBase::Insert(size_t pos, wxMenu *menu,
|
||||||
|
const wxString& WXUNUSED(title))
|
||||||
|
{
|
||||||
|
wxCHECK_MSG( menu, FALSE, wxT("can't insert NULL menu") );
|
||||||
|
|
||||||
|
wxMenuList::Node *node = m_menus.Item(pos);
|
||||||
|
wxCHECK_MSG( node, FALSE, wxT("bad index in wxMenuBar::Insert()") );
|
||||||
|
|
||||||
|
m_menus.Insert(node, menu);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenu *wxMenuBarBase::Replace(size_t pos, wxMenu *menu,
|
||||||
|
const wxString& WXUNUSED(title))
|
||||||
|
{
|
||||||
|
wxCHECK_MSG( menu, NULL, wxT("can't insert NULL menu") );
|
||||||
|
|
||||||
|
wxMenuList::Node *node = m_menus.Item(pos);
|
||||||
|
wxCHECK_MSG( node, NULL, wxT("bad index in wxMenuBar::Replace()") );
|
||||||
|
|
||||||
|
wxMenu *menuOld = node->GetData();
|
||||||
|
node->SetData(menu);
|
||||||
|
|
||||||
|
return menuOld;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenu *wxMenuBarBase::Remove(size_t pos)
|
||||||
|
{
|
||||||
|
wxMenuList::Node *node = m_menus.Item(pos);
|
||||||
|
wxCHECK_MSG( node, NULL, wxT("bad index in wxMenuBar::Remove()") );
|
||||||
|
|
||||||
|
node = m_menus.DetachNode(node);
|
||||||
|
wxCHECK( node, NULL ); // unexpected
|
||||||
|
wxMenu *menu = node->GetData();
|
||||||
|
|
||||||
|
delete node;
|
||||||
|
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// wxMenuBar functions forwarded to wxMenuItem
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxMenuBarBase::Enable(int id, bool enable)
|
||||||
|
{
|
||||||
|
wxMenuItem *item = FindItem(id);
|
||||||
|
|
||||||
|
wxCHECK_RET( item, wxT("attempt to enable an item which doesn't exist") );
|
||||||
|
|
||||||
|
item->Enable(enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMenuBarBase::Check(int id, bool check)
|
||||||
|
{
|
||||||
|
wxMenuItem *item = FindItem(id);
|
||||||
|
|
||||||
|
wxCHECK_RET( item, wxT("attempt to check an item which doesn't exist") );
|
||||||
|
wxCHECK_RET( item->IsCheckable(), wxT("attempt to check an uncheckable item") );
|
||||||
|
|
||||||
|
item->Check(check);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenuBarBase::IsChecked(int id) const
|
||||||
|
{
|
||||||
|
wxMenuItem *item = FindItem(id);
|
||||||
|
|
||||||
|
wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsChecked(): no such item") );
|
||||||
|
|
||||||
|
return item->IsChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenuBarBase::IsEnabled(int id) const
|
||||||
|
{
|
||||||
|
wxMenuItem *item = FindItem(id);
|
||||||
|
|
||||||
|
wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsEnabled(): no such item") );
|
||||||
|
|
||||||
|
return item->IsEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMenuBarBase::SetLabel(int id, const wxString& label)
|
||||||
|
{
|
||||||
|
wxMenuItem *item = FindItem(id);
|
||||||
|
|
||||||
|
wxCHECK_RET( item, wxT("wxMenuBar::SetLabel(): no such item") );
|
||||||
|
|
||||||
|
item->SetText(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxMenuBarBase::GetLabel(int id) const
|
||||||
|
{
|
||||||
|
wxMenuItem *item = FindItem(id);
|
||||||
|
|
||||||
|
wxCHECK_MSG( item, wxEmptyString,
|
||||||
|
wxT("wxMenuBar::GetLabel(): no such item") );
|
||||||
|
|
||||||
|
return item->GetText();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMenuBarBase::SetHelpString(int id, const wxString& helpString)
|
||||||
|
{
|
||||||
|
wxMenuItem *item = FindItem(id);
|
||||||
|
|
||||||
|
wxCHECK_RET( item, wxT("wxMenuBar::SetHelpString(): no such item") );
|
||||||
|
|
||||||
|
item->SetHelp(helpString);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxMenuBarBase::GetHelpString(int id) const
|
||||||
|
{
|
||||||
|
wxMenuItem *item = FindItem(id);
|
||||||
|
|
||||||
|
wxCHECK_MSG( item, wxEmptyString,
|
||||||
|
wxT("wxMenuBar::GetHelpString(): no such item") );
|
||||||
|
|
||||||
|
return item->GetHelp();
|
||||||
|
}
|
||||||
|
|
147
src/gtk/menu.cpp
147
src/gtk/menu.cpp
@@ -12,10 +12,10 @@
|
|||||||
#pragma implementation "menuitem.h"
|
#pragma implementation "menuitem.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/menu.h"
|
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/intl.h"
|
#include "wx/intl.h"
|
||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
|
#include "wx/menu.h"
|
||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
#include "wx/accel.h"
|
#include "wx/accel.h"
|
||||||
@@ -199,7 +199,7 @@ void wxMenuBar::UnsetInvokingWindow( wxWindow *win )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
bool wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
||||||
{
|
{
|
||||||
m_menus.Append( menu );
|
m_menus.Append( menu );
|
||||||
|
|
||||||
@@ -283,6 +283,38 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
|||||||
// adding menu later on.
|
// adding menu later on.
|
||||||
if (m_invokingWindow)
|
if (m_invokingWindow)
|
||||||
wxMenubarSetInvokingWindow( menu, m_invokingWindow );
|
wxMenubarSetInvokingWindow( menu, m_invokingWindow );
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
|
||||||
|
{
|
||||||
|
if ( !wxMenuBarBase::Insert(pos, menu, title) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
wxFAIL_MSG(wxT("TODO"));
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
|
||||||
|
{
|
||||||
|
if ( !wxMenuBarBase::Replace(pos, menu, title) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
wxFAIL_MSG(wxT("TODO"));
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenu *wxMenuBar::Remove(size_t pos)
|
||||||
|
{
|
||||||
|
if ( !wxMenuBarBase::Remove(pos) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
wxFAIL_MSG(wxT("TODO"));
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
|
static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
|
||||||
@@ -307,18 +339,6 @@ static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString
|
|||||||
return wxNOT_FOUND;
|
return wxNOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem *wxMenuBar::FindItemForId(int itemId, wxMenu **menuForItem ) const
|
|
||||||
{
|
|
||||||
if ( menuForItem )
|
|
||||||
{
|
|
||||||
// TODO return the pointer to the menu
|
|
||||||
|
|
||||||
*menuForItem = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FindItem(itemId);
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
|
int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
|
||||||
{
|
{
|
||||||
wxNode *node = m_menus.First();
|
wxNode *node = m_menus.First();
|
||||||
@@ -351,7 +371,7 @@ static wxMenuItem* FindMenuItemByIdRecursive(const wxMenu* menu, int id)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem* wxMenuBar::FindItem( int id ) const
|
wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
|
||||||
{
|
{
|
||||||
wxMenuItem* result = 0;
|
wxMenuItem* result = 0;
|
||||||
wxNode *node = m_menus.First();
|
wxNode *node = m_menus.First();
|
||||||
@@ -362,115 +382,48 @@ wxMenuItem* wxMenuBar::FindItem( int id ) const
|
|||||||
node = node->Next();
|
node = node->Next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( menuForItem )
|
||||||
|
{
|
||||||
|
*menuForItem = result ? result->GetMenu() : (wxMenu *)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::Check( int id, bool check )
|
void wxMenuBar::EnableTop( size_t pos, bool flag )
|
||||||
{
|
{
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
wxMenuList::Node *node = m_menus.Item( pos );
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::Check: no such item") );
|
|
||||||
|
|
||||||
item->Check(check);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxMenuBar::IsChecked( int id ) const
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsChecked: no such item") );
|
|
||||||
|
|
||||||
return item->IsChecked();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMenuBar::Enable( int id, bool enable )
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::Enable: no such item") );
|
|
||||||
|
|
||||||
item->Enable(enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxMenuBar::IsEnabled( int id ) const
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsEnabled: no such item") );
|
|
||||||
|
|
||||||
return item->IsEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxMenuBar::GetLabel( int id ) const
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, wxT(""), wxT("wxMenuBar::GetLabel: no such item") );
|
|
||||||
|
|
||||||
return item->GetText();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMenuBar::SetLabel( int id, const wxString &label )
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::SetLabel: no such item") );
|
|
||||||
|
|
||||||
item->SetText( label );
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMenuBar::EnableTop( int pos, bool flag )
|
|
||||||
{
|
|
||||||
wxNode *node = m_menus.Nth( pos );
|
|
||||||
|
|
||||||
wxCHECK_RET( node, wxT("menu not found") );
|
wxCHECK_RET( node, wxT("menu not found") );
|
||||||
|
|
||||||
wxMenu* menu = (wxMenu*)node->Data();
|
wxMenu* menu = node->GetData();
|
||||||
|
|
||||||
if (menu->m_owner)
|
if (menu->m_owner)
|
||||||
gtk_widget_set_sensitive( menu->m_owner, flag );
|
gtk_widget_set_sensitive( menu->m_owner, flag );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wxMenuBar::GetLabelTop( int pos ) const
|
wxString wxMenuBar::GetLabelTop( size_t pos ) const
|
||||||
{
|
{
|
||||||
wxNode *node = m_menus.Nth( pos );
|
wxMenuList::Node *node = m_menus.Item( pos );
|
||||||
|
|
||||||
wxCHECK_MSG( node, wxT("invalid"), wxT("menu not found") );
|
wxCHECK_MSG( node, wxT("invalid"), wxT("menu not found") );
|
||||||
|
|
||||||
wxMenu* menu = (wxMenu*)node->Data();
|
wxMenu* menu = node->GetData();
|
||||||
|
|
||||||
return menu->GetTitle();
|
return menu->GetTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::SetLabelTop( int pos, const wxString& label )
|
void wxMenuBar::SetLabelTop( size_t pos, const wxString& label )
|
||||||
{
|
{
|
||||||
wxNode *node = m_menus.Nth( pos );
|
wxMenuList::Node *node = m_menus.Item( pos );
|
||||||
|
|
||||||
wxCHECK_RET( node, wxT("menu not found") );
|
wxCHECK_RET( node, wxT("menu not found") );
|
||||||
|
|
||||||
wxMenu* menu = (wxMenu*)node->Data();
|
wxMenu* menu = node->GetData();
|
||||||
|
|
||||||
menu->SetTitle( label );
|
menu->SetTitle( label );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::SetHelpString( int id, const wxString& helpString )
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::SetHelpString: no such item") );
|
|
||||||
|
|
||||||
item->SetHelp( helpString );
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxMenuBar::GetHelpString( int id ) const
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, wxT(""), wxT("wxMenuBar::GetHelpString: no such item") );
|
|
||||||
|
|
||||||
return item->GetHelp();
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// "activate"
|
// "activate"
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -840,7 +793,7 @@ static wxString GetHotKey( const wxMenuItem& item )
|
|||||||
case WXK_F10:
|
case WXK_F10:
|
||||||
case WXK_F11:
|
case WXK_F11:
|
||||||
case WXK_F12:
|
case WXK_F12:
|
||||||
hotkey << wxT('F') << code = WXK_F1 + 1;
|
hotkey << wxT('F') << code - WXK_F1 + 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// if there are any other keys wxGetAccelFromString() may return,
|
// if there are any other keys wxGetAccelFromString() may return,
|
||||||
|
@@ -12,10 +12,10 @@
|
|||||||
#pragma implementation "menuitem.h"
|
#pragma implementation "menuitem.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/menu.h"
|
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/intl.h"
|
#include "wx/intl.h"
|
||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
|
#include "wx/menu.h"
|
||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
#include "wx/accel.h"
|
#include "wx/accel.h"
|
||||||
@@ -199,7 +199,7 @@ void wxMenuBar::UnsetInvokingWindow( wxWindow *win )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
bool wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
||||||
{
|
{
|
||||||
m_menus.Append( menu );
|
m_menus.Append( menu );
|
||||||
|
|
||||||
@@ -283,6 +283,38 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
|||||||
// adding menu later on.
|
// adding menu later on.
|
||||||
if (m_invokingWindow)
|
if (m_invokingWindow)
|
||||||
wxMenubarSetInvokingWindow( menu, m_invokingWindow );
|
wxMenubarSetInvokingWindow( menu, m_invokingWindow );
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
|
||||||
|
{
|
||||||
|
if ( !wxMenuBarBase::Insert(pos, menu, title) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
wxFAIL_MSG(wxT("TODO"));
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
|
||||||
|
{
|
||||||
|
if ( !wxMenuBarBase::Replace(pos, menu, title) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
wxFAIL_MSG(wxT("TODO"));
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenu *wxMenuBar::Remove(size_t pos)
|
||||||
|
{
|
||||||
|
if ( !wxMenuBarBase::Remove(pos) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
wxFAIL_MSG(wxT("TODO"));
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
|
static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString, const wxString &itemString )
|
||||||
@@ -307,18 +339,6 @@ static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString
|
|||||||
return wxNOT_FOUND;
|
return wxNOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem *wxMenuBar::FindItemForId(int itemId, wxMenu **menuForItem ) const
|
|
||||||
{
|
|
||||||
if ( menuForItem )
|
|
||||||
{
|
|
||||||
// TODO return the pointer to the menu
|
|
||||||
|
|
||||||
*menuForItem = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FindItem(itemId);
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
|
int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
|
||||||
{
|
{
|
||||||
wxNode *node = m_menus.First();
|
wxNode *node = m_menus.First();
|
||||||
@@ -351,7 +371,7 @@ static wxMenuItem* FindMenuItemByIdRecursive(const wxMenu* menu, int id)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMenuItem* wxMenuBar::FindItem( int id ) const
|
wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
|
||||||
{
|
{
|
||||||
wxMenuItem* result = 0;
|
wxMenuItem* result = 0;
|
||||||
wxNode *node = m_menus.First();
|
wxNode *node = m_menus.First();
|
||||||
@@ -362,115 +382,48 @@ wxMenuItem* wxMenuBar::FindItem( int id ) const
|
|||||||
node = node->Next();
|
node = node->Next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( menuForItem )
|
||||||
|
{
|
||||||
|
*menuForItem = result ? result->GetMenu() : (wxMenu *)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::Check( int id, bool check )
|
void wxMenuBar::EnableTop( size_t pos, bool flag )
|
||||||
{
|
{
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
wxMenuList::Node *node = m_menus.Item( pos );
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::Check: no such item") );
|
|
||||||
|
|
||||||
item->Check(check);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxMenuBar::IsChecked( int id ) const
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsChecked: no such item") );
|
|
||||||
|
|
||||||
return item->IsChecked();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMenuBar::Enable( int id, bool enable )
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::Enable: no such item") );
|
|
||||||
|
|
||||||
item->Enable(enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxMenuBar::IsEnabled( int id ) const
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsEnabled: no such item") );
|
|
||||||
|
|
||||||
return item->IsEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxMenuBar::GetLabel( int id ) const
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, wxT(""), wxT("wxMenuBar::GetLabel: no such item") );
|
|
||||||
|
|
||||||
return item->GetText();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMenuBar::SetLabel( int id, const wxString &label )
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::SetLabel: no such item") );
|
|
||||||
|
|
||||||
item->SetText( label );
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMenuBar::EnableTop( int pos, bool flag )
|
|
||||||
{
|
|
||||||
wxNode *node = m_menus.Nth( pos );
|
|
||||||
|
|
||||||
wxCHECK_RET( node, wxT("menu not found") );
|
wxCHECK_RET( node, wxT("menu not found") );
|
||||||
|
|
||||||
wxMenu* menu = (wxMenu*)node->Data();
|
wxMenu* menu = node->GetData();
|
||||||
|
|
||||||
if (menu->m_owner)
|
if (menu->m_owner)
|
||||||
gtk_widget_set_sensitive( menu->m_owner, flag );
|
gtk_widget_set_sensitive( menu->m_owner, flag );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wxMenuBar::GetLabelTop( int pos ) const
|
wxString wxMenuBar::GetLabelTop( size_t pos ) const
|
||||||
{
|
{
|
||||||
wxNode *node = m_menus.Nth( pos );
|
wxMenuList::Node *node = m_menus.Item( pos );
|
||||||
|
|
||||||
wxCHECK_MSG( node, wxT("invalid"), wxT("menu not found") );
|
wxCHECK_MSG( node, wxT("invalid"), wxT("menu not found") );
|
||||||
|
|
||||||
wxMenu* menu = (wxMenu*)node->Data();
|
wxMenu* menu = node->GetData();
|
||||||
|
|
||||||
return menu->GetTitle();
|
return menu->GetTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::SetLabelTop( int pos, const wxString& label )
|
void wxMenuBar::SetLabelTop( size_t pos, const wxString& label )
|
||||||
{
|
{
|
||||||
wxNode *node = m_menus.Nth( pos );
|
wxMenuList::Node *node = m_menus.Item( pos );
|
||||||
|
|
||||||
wxCHECK_RET( node, wxT("menu not found") );
|
wxCHECK_RET( node, wxT("menu not found") );
|
||||||
|
|
||||||
wxMenu* menu = (wxMenu*)node->Data();
|
wxMenu* menu = node->GetData();
|
||||||
|
|
||||||
menu->SetTitle( label );
|
menu->SetTitle( label );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::SetHelpString( int id, const wxString& helpString )
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::SetHelpString: no such item") );
|
|
||||||
|
|
||||||
item->SetHelp( helpString );
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxMenuBar::GetHelpString( int id ) const
|
|
||||||
{
|
|
||||||
wxMenuItem* item = FindMenuItemById( id );
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, wxT(""), wxT("wxMenuBar::GetHelpString: no such item") );
|
|
||||||
|
|
||||||
return item->GetHelp();
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// "activate"
|
// "activate"
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -840,7 +793,7 @@ static wxString GetHotKey( const wxMenuItem& item )
|
|||||||
case WXK_F10:
|
case WXK_F10:
|
||||||
case WXK_F11:
|
case WXK_F11:
|
||||||
case WXK_F12:
|
case WXK_F12:
|
||||||
hotkey << wxT('F') << code = WXK_F1 + 1;
|
hotkey << wxT('F') << code - WXK_F1 + 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// if there are any other keys wxGetAccelFromString() may return,
|
// if there are any other keys wxGetAccelFromString() may return,
|
||||||
|
101
src/msw/menu.cpp
101
src/msw/menu.cpp
@@ -670,20 +670,11 @@ WXHMENU wxMenuBar::Create()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// wxMenuBar functions forwarded to wxMenuItem
|
// wxMenuBar functions to work with the top level submenus
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
// Must only be used AFTER menu has been attached to frame,
|
// NB: we don't support owner drawn top level items for now, if we do these
|
||||||
// otherwise use individual menus to enable/disable items
|
// functions would have to be changed to use wxMenuItem as well
|
||||||
void wxMenuBar::Enable(int id, bool enable)
|
|
||||||
{
|
|
||||||
wxMenu *itemMenu = NULL;
|
|
||||||
wxMenuItem *item = FindItemForId(id, &itemMenu) ;
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("attempt to enable an item which doesn't exist") );
|
|
||||||
|
|
||||||
item->Enable(enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMenuBar::EnableTop(int pos, bool enable)
|
void wxMenuBar::EnableTop(int pos, bool enable)
|
||||||
{
|
{
|
||||||
@@ -694,92 +685,6 @@ void wxMenuBar::EnableTop(int pos, bool enable)
|
|||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must only be used AFTER menu has been attached to frame,
|
|
||||||
// otherwise use individual menus
|
|
||||||
void wxMenuBar::Check(int id, bool check)
|
|
||||||
{
|
|
||||||
wxMenu *itemMenu = NULL;
|
|
||||||
wxMenuItem *item = FindItemForId(id, &itemMenu) ;
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("attempt to check an item which doesn't exist") );
|
|
||||||
wxCHECK_RET( item->IsCheckable(), wxT("attempt to check an uncheckable item") );
|
|
||||||
|
|
||||||
item->Check(check);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxMenuBar::IsChecked(int id) const
|
|
||||||
{
|
|
||||||
wxMenu *itemMenu = NULL;
|
|
||||||
wxMenuItem *item = FindItemForId(id, &itemMenu) ;
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsChecked(): no such item") );
|
|
||||||
|
|
||||||
int flag = ::GetMenuState(GetHmenuOf(itemMenu), id, MF_BYCOMMAND);
|
|
||||||
|
|
||||||
return (flag & MF_CHECKED) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxMenuBar::IsEnabled(int id) const
|
|
||||||
{
|
|
||||||
wxMenu *itemMenu = NULL;
|
|
||||||
wxMenuItem *item = FindItemForId(id, &itemMenu) ;
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, FALSE, wxT("wxMenuBar::IsEnabled(): no such item") );
|
|
||||||
|
|
||||||
int flag = ::GetMenuState(GetHmenuOf(itemMenu), id, MF_BYCOMMAND) ;
|
|
||||||
|
|
||||||
// don't "and" with MF_ENABLED because its value is 0
|
|
||||||
return (flag & MF_DISABLED) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMenuBar::SetLabel(int id, const wxString& label)
|
|
||||||
{
|
|
||||||
wxMenu *itemMenu = NULL;
|
|
||||||
wxMenuItem *item = FindItemForId(id, &itemMenu) ;
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::SetLabel(): no such item") );
|
|
||||||
|
|
||||||
item->SetText(label);
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxMenuBar::GetLabel(int id) const
|
|
||||||
{
|
|
||||||
wxMenu *itemMenu = NULL;
|
|
||||||
wxMenuItem *item = FindItemForId(id, &itemMenu) ;
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, wxEmptyString,
|
|
||||||
wxT("wxMenuBar::GetLabel(): no such item") );
|
|
||||||
|
|
||||||
return item->GetText();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMenuBar::SetHelpString (int id, const wxString& helpString)
|
|
||||||
{
|
|
||||||
wxMenu *itemMenu = NULL;
|
|
||||||
wxMenuItem *item = FindItemForId(id, &itemMenu) ;
|
|
||||||
|
|
||||||
wxCHECK_RET( item, wxT("wxMenuBar::SetHelpString(): no such item") );
|
|
||||||
|
|
||||||
item->SetHelp(helpString);
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxMenuBar::GetHelpString (int id) const
|
|
||||||
{
|
|
||||||
wxMenu *itemMenu = NULL;
|
|
||||||
wxMenuItem *item = FindItemForId(id, &itemMenu) ;
|
|
||||||
|
|
||||||
wxCHECK_MSG( item, wxT(""), wxT("wxMenuBar::GetHelpString(): no such item") );
|
|
||||||
|
|
||||||
return item->GetHelp();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
// wxMenuBar functions to work with the top level submenus
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// NB: we don't support owner drawn top level items for now, if we do these
|
|
||||||
// functions would have to be changed to use wxMenuItem as well
|
|
||||||
|
|
||||||
void wxMenuBar::SetLabelTop(int pos, const wxString& label)
|
void wxMenuBar::SetLabelTop(int pos, const wxString& label)
|
||||||
{
|
{
|
||||||
UINT id;
|
UINT id;
|
||||||
|
@@ -137,6 +137,17 @@ void wxMenuItem::DeleteSubMenu()
|
|||||||
m_subMenu = NULL;
|
m_subMenu = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get item state
|
||||||
|
// --------------
|
||||||
|
|
||||||
|
void wxMenuItem::IsChecked() const
|
||||||
|
{
|
||||||
|
int flag = ::GetMenuState(GetHMenuOf(m_parentMenu), id, MF_BYCOMMAND);
|
||||||
|
|
||||||
|
// don't "and" with MF_ENABLED because its value is 0
|
||||||
|
return (flag & MF_DISABLED) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
// change item state
|
// change item state
|
||||||
// -----------------
|
// -----------------
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user