Hi All,

I was wondering if anyone could offer some advice on the best way to acheive the following:

I have a "MainMenu" Stack which the default menu for the app. When the App first starts up it and no Stacks are open. The Deisgn I have followed is that each Stack is in fact a main stack in it's own right and they all link to a "Global" stack dymanically via the "start using" command. This allows the Stack to be opened and used in it's own right (if it doesn't need a menubar or if it uses it's own menubar), or the Stack can choose to use the "MainMenuBar" (and dynamically link to the "MainMenu" stack via the "start using" command). I am now in the process of adding Menu Button Objects dynamically to the "MainMenu" Stack. This allows a flexible environment in which to do development work and testing and also to provide updates to users (you only need send the new or changed stacks, not the while Standalone).

Anyway, this has given rise to some design issues and I was wondering if anyone had any suggestion or advice on the subject.

The first problem is that if there are no other open active stacks then the "MainMenu" will need a default menubar. This is not a problem initially. The problem comes when I call "StackX" in response to (say) a "Open" command and then "StackX" wants to use one of the Menu Button already being used by "MainMenu", which can be done, but how to restore the "MainMenuState" once the Stack is done? In more detail:

MainMenu - has default Menu Items, opens calls StackX
StackX       - Wants to change the File menu for it's own use
                     It can do so, but when the user closes StackX.
MainMenu - Still contains the Menu Items from StackX.

The are a number of ways to get around this:

1.  When "MainMenu" dispatches a Stack it does this:

goto stack myStackFullPathName

 I could add a line that sends a message to the target stack as so:

send "AddMainMenuObject" to stack myStackFullPathName,

a refinement would be to add a custom property to the target stack:

if cpStackRequiresMainMenu of stack myStackFullPathName then
  send "AddMainMenuObject myGroupMainMenu" to stack myStackFullPathName,
end if

But this is error prone if the Handler doesn't exist it will cause an error, so it would be better to add a test to see if the handler exists. This would slow things down a bit, but since this is only done when a new stack is being opened the lag shouldn't be too noticable.

AddMainMenuObject handler would then modify the the standard menubar as necessary and

2. Have StackX retreives the Object using the dynamic linkage described above to access functions in the stack script that return the object and then does essentially the same as 1.

In both these cases the Menubar object is copied into a card of StackX where it is the modified and set as the new menubar.

There are other ways which involve making copies of the the MainMenu menubar object at stack open and restoring them at stack close, but these seem error prone, so it's 1 or 2 unless you have a better way of doing it!

In options 1 and 2, there will be a menunar object left in StackX, should I delete it at stack close and maybe also stack preOpen ???

If I didn't then I'd have the Stack embedded for use when running the stack without mainmenu loaded.

All comments, suggestions and advice on a postcard please!
All the Best
Dave


























_______________________________________________ use-revolution mailing list use-revolution@lists.runrev.com http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to