Hi,

It's funny how things come up on the list and others are walking the same or similar path at the same time.

I am just revising my Menubar handling at the moment. Menubar's don't fit in very well with way the rest of RunRev works IMO.

In a typical application you may want to add new menu's to the menubar or you may want to change the text of an existing menu item or the action associated with a menu action. An example of this is:

Main Window, has a button that allows a user to choose a file and you want to use the "open" (or any other) menu item to perform the same action as pressing the button. If then case you also want the menu item to be enabled/disabled at the same time as the Button.

However, in another window, you want the File menu item to be disabled completely or you may want to have another action associated with the Open Item or you may want to change the text of the item or both.

I am trying to build a General Menubar manager stack and have come up with the following method of operation:

The Menubar handling is all contained on one stack - Menubar.rev. This starts off with a dummy menubar group which has a number (say 16) of menu "buttons". Each of the buttons has an empty menu items list. When a stack requires a menu bar, it does the following:

--
--  Create a New Menubar
--
put "MainMenubar" into myMenubarName
put "File,Edit,Help" into myMenuButtonList
put MenubarNewMenuBar(myMenubarName,myMenuButtonList) into myMenubarLongID
if myMenubarLongID = empty
-- Handle Error
end if  

--
--  Add a File Menu to the Menubar
--
put "File" into myMenuName
if MenubarNewMenu(myMenubarLongID,myMenuName) = false
--Handle Error
end if  

--
--  Add an Item to the Menu in the Menubar
--
put 1 into myMenuItemNumber
put "Open" into myMenuItemText
if MenubarSetMenuText(myMenubarLongID,myMenuName,myMenuItemNumber, myMenuItemText) = false
--Handle Error
end if  

--
--  Attach a Handler to the Menu Item of the Menu of the Menubar
--
put "MenuBarFileOpenHandler" into myHandlerName
put the long id of this stack into myHandlerLocation
MeubarSetMenuItemSelectedHandler(myMenubarLongID, myMenuItemNumber,myHandlerName,myHandlerLocation)


--
--  Enable the Menu Item of the Menu in the Menubar
--
MenubarSetMenuItemEnabledState(myMenubarLongID, myMenuName, myMenuItemNumber,true)

put MenubarGetMenuGroupName(myMenubarLongID) into myMenubarGroupName
set the menubar of this stack to myMenubarGroupName

Now when "Open" is Selected in the "File" Menu in the Menubar, myHandlerName in myHandlerLocation will be sent a message as so:

on MenuBarFileOpenHandler
end MenuBarFileOpenHandler


That's basically as far as I've got, which works for one stack, the problem I have is changing the menubar when another stack or card is run. For instance if I want the open item to be disabled when a card is selected, or I want the same action(s), but related to the new stack or card, e.g. Open is selected in Stack A, I want to do one thing, but if Stack B is in control then I want the open action sent to StackB.

This seems like a lot of work, but I can't see anyway around it, unless you hand-sculpt the menubar handling for each application.

Has anyone else done something similar? Anyone else have any advice or suggestions on the best way to achieve a general Menubar stack/ module? It just seems like a monster waste of time for each RunRev developer to have to go thru this over and over again for each app that requires a menubar.
On 3 Mar 2006, at 02:03, Mark Schonewille wrote:

Hi Karen,

It seems you haven't got a repy to your question, yet. In the menubar script (or the script of the group that serves as menubar), you could put a menuPick handler. Have a look at the docs for info about the menuPick handler.

The menuPick handler could call scripts in the main stack or send commands to other stacks and objects. Depending on what you are trying to do, your menuPick handler might look like

on menuPick theMenuItem
  switch theMenuItem
    case "Open..."
      runOpenHandlerInMainStack
    break
    case "Something Else"
      send "runSomeHandlerInSubstack" to the topstack
    break
  end switch
end menuPick

The second "case" will work fine, if the main stack also has a "something" handlers. It would be easiest to put all scripts in the main stack, without using the "send" command, but if each of your substacks should act differently upon a user's menu selection, "send" is a very useful command.

Ok, but what if you want different Menu entries depending on which stack in the "topstack" ? Also how do you enable/disable menu items depending on which stack/card/whatever is in control?

Thanks a lot
All the Best
Dave









_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to