Auto enable Cut, Copy, Paste menu items

Richard Gaskin ambassador at fourthworld.com
Thu Sep 14 19:03:57 CDT 2006


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



More information about the use-livecode mailing list