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:
Vadim Zeitlin
1999-10-26 19:07:04 +00:00
parent 196c87f43d
commit 3dfac9707a
12 changed files with 537 additions and 433 deletions

203
src/common/menucmn.cpp Normal file
View 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();
}