NAME

WxPerl::MenuMaker - create and manage linked menus and toolbars

SYNOPSIS

This is not a wxMenu, only a way to hold and manage named references to the menu items and toolbar items.

my $mm = WxPerl::MenuMaker->new(
  handler => $self,
  nomethod => sub {warn "$_[1] cannot '$_[0]()'"},
);

$mm->create_menubar(\@menu);
# the toolbar takes a few more parameters
$mm->create_toolbar(\@toolbar,
  parent => $frame, # all you really need
  id => -1,
  position => wxDefaultPosition,
  size => wxDefaultSize,
  style => wxTB_HORIZONTAL|wxTB_FLAT|wxTB_DOCKABLE,
  bitmap_size => [32, 32],
);

# and you can get them back
my $menu = $mm->menubar;
my $menu_item = $mm->menu_items->file_open;
my $toolbar = $mm->toolbar;
my $toolbar_item = $mm->toolbar_items->that_button;

# and
my $associate = $mm->associated_menu->that_button;

Constructor

new

my $mm = WxPerl::MenuMaker->new(
  handler => $self,
  nomethod => sub {warn "$_[1] cannot '$_[0]()'"},
);

create_menubar

Should typically be called before create_toolbar().

my @menu = (
  {
    name  => 'file',
    menu  => [...], # see create_menu()
    label => '&File',
  }
);
$mm->create_menubar(\@menu);

In the above example, the submenu [...] will have its entries prefixed by file_. Thus, you will be able to access the open submenu item via $mm->menu_items->file_open.

create_menu

This is called for you by create_menubar().

Using this for standalone menus is untested.

my @menu = (
  {
    name        => 'open',
    action      => 'file_open',
    label       => '&Open
  },
  {
    separator   => 1
  },
  {
    auto_action => 1,
    name        => 'quit',
    label       => 'Quit'
  }
);
my $menu = $mm->create_menu(\@menu, prefix => 'file_');

The hash reference items in the array are treated as follows:

separator

Set the separator property to true to get a separator.

action

If action is defined, the event will be connected to a menu_action() method.

auto_action

If auto_action is not present and false, your menu events will be connected to 'menu_' . $name (where $name starts with the prefix.)

In the above example, the resultant events are menu_file_open() and menu_file_quit().

_name_check

$name = $self->_name_check($item->{name});

create_toolbar

my @toolbar = (
  {
    tooltip     => 'File Manager',
    icon        => 'file-manager.png',
    auto_action => 0,
    name        => 'file_manager'
  },
  {
    tooltip     => 'Notes',
    icon        => 'tb_button_notes.png',
    name        => 'notes'
  },
  {
    separator => '1'
  },
  {
    tooltip     => 'Open File',
    icon        => 'kedit.png',
    associate   => 'file_open',
    name        => 'file_open'
  },
  {
    tooltip     => 'Browse',
    icon        => 'tb_button_browse.png',
    action      => 'do_something',
    name        => 'browse'
  },
  {
    tooltip     => 'Foo',
    icon        => 'tb_button_foo.png',
    action      => sub {warn "this is foo"},
    name        => 'foo'
  }
);

$mm->create_toolbar(\@toolbar,
  parent      => $frame, # all you really need
  id          => -1,
  position    => wxDefaultPosition,
  size        => wxDefaultSize,
  style       => wxTB_HORIZONTAL|wxTB_FLAT|wxTB_DOCKABLE,
  bitmap_size => [32, 32],
);

If you set a handler in the constructor, you will not need to pass the parent argument to this method.

The toolbar items are connected much like in create_menu(), except that the default method is menu_tb_name().

The associate property will cause the tool to be associated to that menu entry. This means they will have the same ID (and thus the same events.)

append_toolbar

$mm->append_toolbar(%args);

_add_toolbar_item

my $tool = $self->_add_toolbar_item(%args);

_mk_accessor

$class->_mk_accessor($package, $method, $value);

_mk_event

$self->_mk_event($item, $name, $menu_item);

AUTHOR

Eric Wilhelm <ewilhelm at cpan dot org>

http://scratchcomputing.com/

BUGS

If you found this module on CPAN, please report any bugs or feature requests through the web interface at http://rt.cpan.org. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

If you pulled this development version from my /svn/, please contact me directly.

COPYRIGHT

Copyright (C) 2006 Eric L. Wilhelm, All Rights Reserved.

NO WARRANTY

Absolutely, positively NO WARRANTY, neither express or implied, is offered with this software. You use this software at your own risk. In case of loss, no person or entity owes you anything whatsoever. You have been warned.

LICENSE

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.