#
-# 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!
#
list.o \
log.o \
memory.o \
+ menucmn.o \
mimetype.o \
module.o \
mstream.o \
list.d \
log.d \
memory.d \
+ menucmn.d \
mimetype.d \
module.d \
mstream.d \
list.o \
log.o \
memory.o \
+ menucmn.o \
mimetype.o \
module.o \
mstream.o \
list.d \
log.d \
memory.d \
+ menucmn.d \
mimetype.d \
module.d \
mstream.d \
dialog.o \
filedlg.o \
font.o \
- fontenum.o \
frame.o \
gauge.o \
gdiobj.o \
dialog.d \
filedlg.d \
font.d \
- fontenum.d \
frame.d \
gauge.d \
gdiobj.d \
list.o \
log.o \
memory.o \
+ menucmn.o \
mimetype.o \
module.o \
mstream.o \
list.d \
log.d \
memory.d \
+ menucmn.d \
mimetype.d \
module.d \
mstream.d \
UNIX_OBJS = \
dialup.o \
+ fontenum.o \
gsocket.o \
threadpsx.o \
utilsunx.o
UNIX_DEPS = \
dialup.d \
+ fontenum.d \
gsocket.d \
threadpsx.d \
utilsunx.d
list.cpp C B
log.cpp C B
memory.cpp C
+menucmn.cpp C
mimetype.cpp C 32,B
module.cpp C B
mstream.cpp C
/////////////////////////////////////////////////////////////////////////////
-// Name: menu.h
+// Name: wx/gtk/menu.h
// Purpose:
// Author: Robert Roebling
// Id: $Id$
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-
#ifndef __GTKMENUH__
#define __GTKMENUH__
#ifdef __GNUG__
-#pragma interface
+ #pragma interface "menu.h"
#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
//-----------------------------------------------------------------------------
-class wxMenuBar : public wxWindow
+class wxMenuBar : public wxMenuBarBase
{
- DECLARE_DYNAMIC_CLASS(wxMenuBar)
-
public:
// ctors
wxMenuBar();
wxMenuBar(long style);
wxMenuBar(int n, wxMenu *menus[], const wxString titles[]);
- ~wxMenuBar();
+ virtual ~wxMenuBar();
- // menubar construction
- void Append( wxMenu *menu, const wxString &title );
+ // implement base class (pure) virtuals
+ 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,
const wxString& itemString) const;
- // returns NULL if not found
- wxMenuItem* FindItem( int id ) const;
- // returns NULL if not found, fills menuForItem if !NULL
- wxMenuItem *FindItemForId(int itemId, wxMenu **menuForItem = NULL) const;
-
- // state control
- void Check( int id, bool check );
- bool IsChecked( int id ) 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(); }
+ virtual wxMenuItem* FindItem( int id, wxMenu **menu = NULL ) const;
- 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; }
+ virtual void EnableTop( size_t pos, bool flag );
+ virtual void SetLabelTop( size_t pos, const wxString& label );
+ virtual wxString GetLabelTop( size_t pos ) const;
+ // implementation only from now on
void SetInvokingWindow( wxWindow *win );
void UnsetInvokingWindow( wxWindow *win );
GtkAccelGroup *m_accel;
GtkItemFactory *m_factory;
- wxList m_menus;
GtkWidget *m_menubar;
long m_style;
wxWindow *m_invokingWindow;
+
+#if 0 // seems to be unused (VZ)
+ wxMenuList& GetMenus() { return m_menus; }
+#endif // 0
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxMenuBar)
};
//-----------------------------------------------------------------------------
// title
void SetTitle(const wxString& label);
const wxString GetTitle() const;
-
+
// menu creation
void AppendSeparator();
void Append(int id, const wxString &item,
private:
// common code for both constructors:
void Init( const wxString& title,
- long style,
+ long style,
const wxFunction func = (wxFunction) NULL );
wxString m_title;
/////////////////////////////////////////////////////////////////////////////
-// Name: menu.h
+// Name: wx/gtk/menu.h
// Purpose:
// Author: Robert Roebling
// Id: $Id$
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-
#ifndef __GTKMENUH__
#define __GTKMENUH__
#ifdef __GNUG__
-#pragma interface
+ #pragma interface "menu.h"
#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
//-----------------------------------------------------------------------------
-class wxMenuBar : public wxWindow
+class wxMenuBar : public wxMenuBarBase
{
- DECLARE_DYNAMIC_CLASS(wxMenuBar)
-
public:
// ctors
wxMenuBar();
wxMenuBar(long style);
wxMenuBar(int n, wxMenu *menus[], const wxString titles[]);
- ~wxMenuBar();
+ virtual ~wxMenuBar();
- // menubar construction
- void Append( wxMenu *menu, const wxString &title );
+ // implement base class (pure) virtuals
+ 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,
const wxString& itemString) const;
- // returns NULL if not found
- wxMenuItem* FindItem( int id ) const;
- // returns NULL if not found, fills menuForItem if !NULL
- wxMenuItem *FindItemForId(int itemId, wxMenu **menuForItem = NULL) const;
-
- // state control
- void Check( int id, bool check );
- bool IsChecked( int id ) 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(); }
+ virtual wxMenuItem* FindItem( int id, wxMenu **menu = NULL ) const;
- 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; }
+ virtual void EnableTop( size_t pos, bool flag );
+ virtual void SetLabelTop( size_t pos, const wxString& label );
+ virtual wxString GetLabelTop( size_t pos ) const;
+ // implementation only from now on
void SetInvokingWindow( wxWindow *win );
void UnsetInvokingWindow( wxWindow *win );
GtkAccelGroup *m_accel;
GtkItemFactory *m_factory;
- wxList m_menus;
GtkWidget *m_menubar;
long m_style;
wxWindow *m_invokingWindow;
+
+#if 0 // seems to be unused (VZ)
+ wxMenuList& GetMenus() { return m_menus; }
+#endif // 0
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxMenuBar)
};
//-----------------------------------------------------------------------------
// title
void SetTitle(const wxString& label);
const wxString GetTitle() const;
-
+
// menu creation
void AppendSeparator();
void Append(int id, const wxString &item,
private:
// common code for both constructors:
void Init( const wxString& title,
- long style,
+ long style,
const wxFunction func = (wxFunction) NULL );
wxString m_title;
+///////////////////////////////////////////////////////////////////////////////
+// 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_
#define _WX_MENU_H_BASE_
+#ifdef __GNUG__
+ #pragma interface "menubase.h"
+#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"
+ #include "wx/msw/menu.h"
#elif defined(__WXMOTIF__)
-#include "wx/motif/menu.h"
+ #include "wx/motif/menu.h"
#elif defined(__WXGTK__)
-#include "wx/gtk/menu.h"
+ #include "wx/gtk/menu.h"
#elif defined(__WXQT__)
-#include "wx/qt/menu.h"
+ #include "wx/qt/menu.h"
#elif defined(__WXMAC__)
-#include "wx/mac/menu.h"
+ #include "wx/mac/menu.h"
#elif defined(__WXPM__)
-#include "wx/os2/menu.h"
+ #include "wx/os2/menu.h"
#elif defined(__WXSTUBS__)
-#include "wx/stubs/menu.h"
+ #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
// _WX_MENU_H_BASE_
bool isCheckable = FALSE,
wxMenu *subMenu = (wxMenu *)NULL);
+ // the menu we're in
+ wxMenu *GetMenu() const { return m_parentMenu; }
+
// get/set id
void SetId(int id) { m_id = id; }
int GetId() const { return m_id; }
virtual void Enable(bool bDoEnable = TRUE);
virtual void Check(bool bDoCheck = TRUE);
+ virtual void IsChecked() const;
// unfortunately needed to resolve ambiguity between
// wxMenuItemBase::IsCheckable() and wxOwnerDrawn::IsCheckable()
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// 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();
+}
+
#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"
}
}
-void wxMenuBar::Append( wxMenu *menu, const wxString &title )
+bool wxMenuBar::Append( wxMenu *menu, const wxString &title )
{
m_menus.Append( menu );
// 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 )
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();
return result;
}
-wxMenuItem* wxMenuBar::FindItem( int id ) const
+wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
{
wxMenuItem* result = 0;
wxNode *node = m_menus.First();
node = node->Next();
}
- return result;
-}
-
-void wxMenuBar::Check( int id, bool check )
-{
- 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") );
+ if ( menuForItem )
+ {
+ *menuForItem = result ? result->GetMenu() : (wxMenu *)NULL;
+ }
- item->SetText( label );
+ return result;
}
-void wxMenuBar::EnableTop( int pos, bool flag )
+void wxMenuBar::EnableTop( size_t 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"
//-----------------------------------------------------------------------------
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,
#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"
}
}
-void wxMenuBar::Append( wxMenu *menu, const wxString &title )
+bool wxMenuBar::Append( wxMenu *menu, const wxString &title )
{
m_menus.Append( menu );
// 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 )
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();
return result;
}
-wxMenuItem* wxMenuBar::FindItem( int id ) const
+wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
{
wxMenuItem* result = 0;
wxNode *node = m_menus.First();
node = node->Next();
}
- return result;
-}
-
-void wxMenuBar::Check( int id, bool check )
-{
- 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") );
+ if ( menuForItem )
+ {
+ *menuForItem = result ? result->GetMenu() : (wxMenu *)NULL;
+ }
- item->SetText( label );
+ return result;
}
-void wxMenuBar::EnableTop( int pos, bool flag )
+void wxMenuBar::EnableTop( size_t 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"
//-----------------------------------------------------------------------------
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,
}
// ---------------------------------------------------------------------------
-// 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)
{
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;
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
// -----------------