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:
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"
|
||||
#endif
|
||||
|
||||
#include "wx/menu.h"
|
||||
#include "wx/log.h"
|
||||
#include "wx/intl.h"
|
||||
#include "wx/app.h"
|
||||
#include "wx/menu.h"
|
||||
|
||||
#if wxUSE_ACCEL
|
||||
#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 );
|
||||
|
||||
@@ -283,6 +283,38 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
||||
// adding menu later on.
|
||||
if (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 )
|
||||
@@ -307,18 +339,6 @@ static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString
|
||||
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
|
||||
{
|
||||
wxNode *node = m_menus.First();
|
||||
@@ -351,7 +371,7 @@ static wxMenuItem* FindMenuItemByIdRecursive(const wxMenu* menu, int id)
|
||||
return result;
|
||||
}
|
||||
|
||||
wxMenuItem* wxMenuBar::FindItem( int id ) const
|
||||
wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
|
||||
{
|
||||
wxMenuItem* result = 0;
|
||||
wxNode *node = m_menus.First();
|
||||
@@ -362,115 +382,48 @@ wxMenuItem* wxMenuBar::FindItem( int id ) const
|
||||
node = node->Next();
|
||||
}
|
||||
|
||||
if ( menuForItem )
|
||||
{
|
||||
*menuForItem = result ? result->GetMenu() : (wxMenu *)NULL;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void wxMenuBar::Check( int id, bool check )
|
||||
void wxMenuBar::EnableTop( size_t pos, bool flag )
|
||||
{
|
||||
wxMenuItem* item = FindMenuItemById( id );
|
||||
|
||||
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 );
|
||||
wxMenuList::Node *node = m_menus.Item( pos );
|
||||
|
||||
wxCHECK_RET( node, wxT("menu not found") );
|
||||
|
||||
wxMenu* menu = (wxMenu*)node->Data();
|
||||
wxMenu* menu = node->GetData();
|
||||
|
||||
if (menu->m_owner)
|
||||
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") );
|
||||
|
||||
wxMenu* menu = (wxMenu*)node->Data();
|
||||
wxMenu* menu = node->GetData();
|
||||
|
||||
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") );
|
||||
|
||||
wxMenu* menu = (wxMenu*)node->Data();
|
||||
wxMenu* menu = node->GetData();
|
||||
|
||||
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"
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -840,7 +793,7 @@ static wxString GetHotKey( const wxMenuItem& item )
|
||||
case WXK_F10:
|
||||
case WXK_F11:
|
||||
case WXK_F12:
|
||||
hotkey << wxT('F') << code = WXK_F1 + 1;
|
||||
hotkey << wxT('F') << code - WXK_F1 + 1;
|
||||
break;
|
||||
|
||||
// if there are any other keys wxGetAccelFromString() may return,
|
||||
|
@@ -12,10 +12,10 @@
|
||||
#pragma implementation "menuitem.h"
|
||||
#endif
|
||||
|
||||
#include "wx/menu.h"
|
||||
#include "wx/log.h"
|
||||
#include "wx/intl.h"
|
||||
#include "wx/app.h"
|
||||
#include "wx/menu.h"
|
||||
|
||||
#if wxUSE_ACCEL
|
||||
#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 );
|
||||
|
||||
@@ -283,6 +283,38 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
||||
// adding menu later on.
|
||||
if (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 )
|
||||
@@ -307,18 +339,6 @@ static int FindMenuItemRecursive( const wxMenu *menu, const wxString &menuString
|
||||
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
|
||||
{
|
||||
wxNode *node = m_menus.First();
|
||||
@@ -351,7 +371,7 @@ static wxMenuItem* FindMenuItemByIdRecursive(const wxMenu* menu, int id)
|
||||
return result;
|
||||
}
|
||||
|
||||
wxMenuItem* wxMenuBar::FindItem( int id ) const
|
||||
wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
|
||||
{
|
||||
wxMenuItem* result = 0;
|
||||
wxNode *node = m_menus.First();
|
||||
@@ -362,115 +382,48 @@ wxMenuItem* wxMenuBar::FindItem( int id ) const
|
||||
node = node->Next();
|
||||
}
|
||||
|
||||
if ( menuForItem )
|
||||
{
|
||||
*menuForItem = result ? result->GetMenu() : (wxMenu *)NULL;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void wxMenuBar::Check( int id, bool check )
|
||||
void wxMenuBar::EnableTop( size_t pos, bool flag )
|
||||
{
|
||||
wxMenuItem* item = FindMenuItemById( id );
|
||||
|
||||
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 );
|
||||
wxMenuList::Node *node = m_menus.Item( pos );
|
||||
|
||||
wxCHECK_RET( node, wxT("menu not found") );
|
||||
|
||||
wxMenu* menu = (wxMenu*)node->Data();
|
||||
wxMenu* menu = node->GetData();
|
||||
|
||||
if (menu->m_owner)
|
||||
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") );
|
||||
|
||||
wxMenu* menu = (wxMenu*)node->Data();
|
||||
wxMenu* menu = node->GetData();
|
||||
|
||||
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") );
|
||||
|
||||
wxMenu* menu = (wxMenu*)node->Data();
|
||||
wxMenu* menu = node->GetData();
|
||||
|
||||
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"
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -840,7 +793,7 @@ static wxString GetHotKey( const wxMenuItem& item )
|
||||
case WXK_F10:
|
||||
case WXK_F11:
|
||||
case WXK_F12:
|
||||
hotkey << wxT('F') << code = WXK_F1 + 1;
|
||||
hotkey << wxT('F') << code - WXK_F1 + 1;
|
||||
break;
|
||||
|
||||
// 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,
|
||||
// otherwise use individual menus to enable/disable items
|
||||
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);
|
||||
}
|
||||
// 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::EnableTop(int pos, bool enable)
|
||||
{
|
||||
@@ -694,92 +685,6 @@ void wxMenuBar::EnableTop(int pos, bool enable)
|
||||
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)
|
||||
{
|
||||
UINT id;
|
||||
|
@@ -137,6 +137,17 @@ void wxMenuItem::DeleteSubMenu()
|
||||
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
|
||||
// -----------------
|
||||
|
||||
|
Reference in New Issue
Block a user