Bill Vlahos wrote:

Oh now that is the most ridiculously, wonderfully, and embarrassingly easy thing to do.

Here it is:
on mouseDown -- Put in button "Edit" of menubar group of stack
   -- This example assumes text in fields not other clipboard types
   if the selectedText is empty then -- nothing selected
     disable menuItem 1 of me -- Cut
     disable menuItem 2 of me -- Copy
   else -- text is selected
     enable menuItem 1 of me -- Cut
     enable menuItem 2 of me -- Copy
   end if
   if the clipboard is "text" then -- Is there text in the clipboard?
     enable menuItem 3 of me -- Paste
else -- Either no text in clipboard or data type of clipboard is not text
     disable menuItem 3 of me -- Paste
   end if
end mouseDown

There are two issues with the above:

1. On a Mac the individual menu buttons do not receive a mouseDown message when they're in the current menu bar. But the menuGroup object does get a mouseDown, so just put the handler there (modified of course for the object change).

2. The strategy of updating menu items when they become visible to the user (mouseDown) is how many frameworks, like the ol' Think Class Library, work. But in Rev this is problematic once we consider keyboard shortcuts.

For example, if you disable the Paste item when the user mouses down on the Edit menu and the clipboard is empty, and then later the user has something on the clipboard and attempts to use Cmd-V to paste it, the command key won't trigger the menu item because it's still disabled.

So while I used to use the update-prior-to-display method, these days I tend to use an update-when-the-triggering-action-first-happens method.

In the same example above, I would modify the contents of the Edit menu based on global handlers in a frontScript that monitor selectionChanged and related actions, and in any handlers that can affect menu updates such as enabling Paste after a Cut or Copy is performed, etc.

It might make things simpler if Rev had a way to interpret keyboard shortcuts, recognize that they're part of the current menu set, and trigger a mouseDown event in response so you could take the simple path of using the update-prior-to-display method. Anyone know if such a feature request has been submitted to Bugzilla? I couldn't find one....

--
 Richard Gaskin
 Managing Editor, revJournal
 _______________________________________________________
 Rev tips, tutorials and more: http://www.revJournal.com
_______________________________________________
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