File Exchange

image thumbnail

MenuBar

version 1.8 (13.2 KB) by

Create Menu Bar (s) on any location in a figure window

10 Downloads

Updated

View License

Editor's Note: This file was selected as MATLAB Central Pick of the Week

 This function MenuBar, allows the user to create menu's anywhere in a figure
 it replaces UIcontextmenu of UIpanels by real menu bars.

   menubar(figure_handle) or menubar

 Mouse hover, and window-resize updates can be enabled by
  
   menubar('start',figure_handle) or menubar('start')

 Or alternatively by:

   set(figure_handle,'ResizeFcn','menubar(''ResizeFcn'',gcf)');
   set(figure_handle,'WindowButtonMotionFcn','menubar(''MotionFcn'',gcf)');

 Example,

   %Creat figure with uipanel
  figure,
  uipanel1 = uipanel('Units','Pixels','Position',[10 200 400 200]);
  
   %Attach a contextmenu (right-mouse button menu)
  menu_panel1=uicontextmenu;
  set(uipanel1,'UIContextMenu',menu_panel1);

   %Add menu-items to the context menu
   hchild=uimenu(menu_panel1, 'Label', 'Random Pixels');
   uimenu(hchild, 'Label', 'Red','Callback','disp(''Red callback'')');
   uimenu(hchild, 'Label', 'Blue','Callback','disp(''Blue callback'')');

   %Make form the context menu a real menubar
   menubar
   
   %Add some other menu-buttons
   hchild=uimenu(menu_panel1, 'Label', 'Clear','Callback','disp(''Clear'')');
   hchild=uimenu(menu_panel1, 'Label', 'Help');
   uimenu(hchild, 'Label', 'Info','Callback','disp(''Info callback'')');

   %Update the menubar
   menubar

   %Enable the mouse over and resize effects
   menubar('start');

Comments and Ratings (4)

per isakson

MenuBar adds both to the appearance and usability of my guis. Furthermore, I learn from the code.

I replaced imshow by image (R2012a) and to suppress tickmarks and labels I added the following line directly after "... image( barimage, ..."

set( data.menuitems(i).Handle, 'Visible', 'off' )

The behavior of MenuBar is not affected by this change.

Jiro Doke

Jiro Doke (view profile)

Dirk-Jan, I really like this tool, but I noticed you used "imshow" which is a function from Image Processing Toolbox. Can you change that to use the "image" command instead? In the meantime, please add Image Processing Toolbox as a requirement.

Y Mehta

I get the following error

??? Undefined function or method 'imshow' for input arguments of type 'uint8'.

Error in ==> menubar>CreatMenuBar at 196
    data.menuitems(i).HandleImshow=imshow(barimage,'Parent',data.menuitems(i).Handle);

Error in ==> menubar at 95
        CreatMenuBar(uimenuhandle,C(i),Pos,figure_handle);

Error in ==> test>test_OpeningFcn at 67
menubar;

Error in ==> gui_mainfcn at 221
    feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

Error in ==> test at 27
    gui_mainfcn(gui_State, varargin{:});

Y Mehta

Updates

1.8

Now also works with regular callback functions.

1.7

Instead of using a timer for every uipanel it uses one timer for the whole figure.

1.4

Solved bug: "Matlab is slow after doing many menubar updates"

1.3

Menubar width is now equal to uipanel width. Uipanel no longer set to invisible.

1.2

Fixed bug: in subsub-menu

1.1

Figure Resize Detection.

MATLAB Release
MATLAB 7.11 (R2010b)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video