AGW Logo

agw_title flatmenu

FlatMenu is a generic menu implementation.


description Description

FlatMenu, like the name implies, it is a generic menu implementation. I tried to provide a full functionality for menus, menubar and toolbar.

FlatMenu supports the following features:

  • Fires all the events (UI & Cmd);
  • Check items;
  • Separators;
  • Enabled / Disabled menu items;
  • Images on items;
  • Toolbar support, with images and separators;
  • Controls in toolbar (work in progress);
  • Toolbar tools tooltips (done: thanks to Peter Kort);
  • Accelerators for menus;
  • Accelerators for menubar;
  • Radio items in menus;
  • Integration with AUI;
  • Scrolling when menu is too big to fit the screen;
  • Menu navigation with keyboard;
  • Drop down arrow button to the right of the menu, it always contains the “Customize” option, which will popup an options dialog. The dialog has the following abilities:
    1. Ability to add/remove menus;
    2. Select different colour schemes for the menu bar / toolbar;
    3. Control various options, such as: colour for highlight menu item, draw border around menus (classic look only);
    4. Toolbar floating appearance.
  • Allows user to specify grey bitmap for disabled menus/toolbar tools;
  • If no grey bitmap is provided, it generates one from the existing bitmap;
  • Hidden toolbar items / menu bar items - will appear in a small popmenu to the right if they are hidden;
  • 4 different colour schemes for the menu bar (more can easily added);
  • Scrolling is available if the menu height is greater than the screen height;
  • Context menus for menu items;
  • Show/hide the drop down arrow which allows the customization of FlatMenu;
  • Multiple columns menu window;
  • Tooltips for menus and toolbar items on a wx.StatusBar (if present);
  • Transparency (alpha channel) for menu windows (for platforms supporting it);
  • FileHistory support through a pure-Python wx.FileHistory implementation;
  • Possibility to set a background bitmap for a FlatMenu;
  • First attempt in adding controls to FlatToolbar;
  • Added a MiniBar (thanks to Vladiuz);
  • Added wx.ToolBar methods AddCheckTool/AddRadioTool (thanks to Vladiuz).

usage Usage

Usage example:

import wx
import wx.lib.agw.flatmenu as FM

class MyFrame(wx.Frame):

    def __init__(self, parent):

        wx.Frame.__init__(self, parent, -1, "FlatMenu Demo")

        self.CreateMenu()

        panel = wx.Panel(self, -1)
        btn = wx.Button(panel, -1, "Hello", (15, 12), (100, 120))

        main_sizer = wx.BoxSizer(wx.VERTICAL)
        main_sizer.Add(self.menubar, 0, wx.EXPAND)
        main_sizer.Add(panel, 1, wx.EXPAND)

        self.SetSizer(main_sizer)
        main_sizer.Layout()


    def CreateMenu(self):

        self.menubar = FM.FlatMenuBar(self, -1)

        f_menu = FM.FlatMenu()
        e_menu = FM.FlatMenu()
        v_menu = FM.FlatMenu()
        t_menu = FM.FlatMenu()
        w_menu = FM.FlatMenu()

        # Append the menu items to the menus
        f_menu.Append(-1, "Simple   Ctrl+N", "Text", None)
        e_menu.Append(-1, "FlatMenu", "Text", None)
        v_menu.Append(-1, "Example", "Text", None)
        t_menu.Append(-1, "Hello", "Text", None)
        w_menu.Append(-1, "World", "Text", None)

        # Append menus to the menubar
        self.menubar.Append(f_menu, "&File")
        self.menubar.Append(e_menu, "&Edit")
        self.menubar.Append(v_menu, "&View")
        self.menubar.Append(t_menu, "&Options")
        self.menubar.Append(w_menu, "&Help")


# our normal wxApp-derived class, as usual

app = wx.PySimpleApp()

frame = MyFrame(None)
app.SetTopWindow(frame)
frame.Show()

app.MainLoop()

This code snippet can be downloaded, see this example script.

Note

Some of the AGW snippets of code in the documentation use images and external files (to create bitmaps or access external data). As these files are not provided in these snippets, you should make the approriate modifications to the code to actually run it.


platforms Supported Platforms

FlatMenu has been tested on the following platforms:
  • Windows (Windows XP, Vista);
  • Linux Ubuntu (Dapper 6.06)

styles Window Styles

This class supports the following window styles:


Window styles for flatmenu
Window Styles Hex Value Description
FM_OPT_IS_LCD 0x1 Use this style if your computer uses a LCD screen.
FM_OPT_MINIBAR 0x2 Use this if you plan to use the toolbar only.
FM_OPT_SHOW_CUSTOMIZE 0x4 Show “customize link” in the More menu, you will need to write your own handler. See demo.
FM_OPT_SHOW_TOOLBAR 0x8 Set this option is you are planning to use the toolbar.

events Events Processing

This class processes the following events:


Events processing for flatmenu
Event Name Description
EVT_FLAT_MENU_DISMISSED Used internally.
EVT_FLAT_MENU_ITEM_MOUSE_OUT Fires an event when the mouse leaves a FlatMenuItem.
EVT_FLAT_MENU_ITEM_MOUSE_OVER Fires an event when the mouse enters a FlatMenuItem.
EVT_FLAT_MENU_SELECTED Fires the wx.EVT_MENU event for FlatMenu.

license License And Version

FlatMenu is distributed under the wxPython license.

Latest Revision: Andrea Gavana @ 07 Mar 2012, 21.00 GMT

Version 1.0

Module author: Andrea Gavana <andrea.gavana@gmail.com>


hierarchy Inheritance Diagram

Inheritance diagram for module: flatmenu

Inheritance diagram of flatmenu.FMRenderer, flatmenu.FMRendererMSOffice2007, flatmenu.FMRendererMgr, flatmenu.FMRendererVista, flatmenu.FMRendererXP, flatmenu.FileHistory, flatmenu.FlatMenu, flatmenu.FlatMenuBar, flatmenu.FlatMenuBase, flatmenu.FlatMenuButton, flatmenu.FlatMenuEvent, flatmenu.FlatMenuItem, flatmenu.FlatMenuItemGroup, flatmenu.FlatToolbarItem, flatmenu.FocusHandler, flatmenu.MenuEntryInfo, flatmenu.MenuKbdRedirector, flatmenu.ShadowPopupWindow, flatmenu.StatusBarTimer, flatmenu.ToolBarItem, flatmenu.mcPopupWindow


svn_main SVN Revisions

A graphical representation of the SVN commits in the last year.

Click on any date in the picture to jump to that particular revision page, containing information about committers, log messages and SVN diffs.

flatmenu

Revision Graph For flatmenu


2to3 Python 3 Issues (via 2to3)

No issues have been detected by 2to3.py.