"proof-of-concept" Revolution Online Open Dictionary at revcoders.org
Ken Ray
kray at sonsothunder.com
Thu Nov 1 16:12:13 EDT 2007
On Thu, 1 Nov 2007 01:09:46 -0700, Josh Mellicker wrote:
> Good example!
>
> I posted a code snippet to do this here:
>
> http://revcoders.org/vScroll/#comment-32
>
> Of course, presently, you would have to know to look under
> "vscroll"... so I am working on a much better search page.
>
> For someone new to Revolution, the best thing is not reading the term
> dictionary, but a step-by-step tutorial that introduces the student
> to Revolution and the foundations of RAD, then guides them through
> the creation of a complete project, hands-on. Richard's idea of
> building a word processor is a good one, it covers many commonly used
> functions.
>
> The open dictionary is not for learning Revolution, it is for
> reference on specific terms for someone who has been through the
> basic tutorials and just needs examples of how to accomplish common
> tasks.
Sorry to dissent here, Josh, but I think there's a middle-point that's
not being addressed. You'r correct that someone who is new to Rev needs
tutorials to walk them through. But I think the "dictionary only"
approach addresses someone who is very familiar with the language, but
can't recall the syntax of a particular command, or like "I know
there's a property for buttons that does ___ but I don't know what it's
called".
The "gap" between the two is addressed by the Lexical and Procedural
indices to the Dictionary - it allows everyone (especially those from
the "newbie" through "almost intermediate" stages) to locate the
particular commands/functions/etc. for the task or object that they
want to work with by looking up synonyms to the tasks/etc. they want to
accomplish and get redirected back to the actual language to get the
job done.
Combine this with a handful of short, useful, *applicable* examples for
each entry (whether initially provided or eventually provided by the
community), and people can cruise right along without frustration.
For example, suppose someone wants to implement a contextual menu on an
object. They should be able to look up "right-click", "control-click",
"contextual menu", "menu", etc. and have them all point back to the
"popup" command. The the popup command Dictionary entry would have an
example that shows how to use a contextual popup menu (which is the
primary reason for the popup command), including what object(s) need to
be created, and script(s) are needed, and that (hopefully) could be
copied and pasted into their code if they want to try it out.
Something similar to the current docs on the 'popup' command, but
perhaps more explanatory, like:
-------
You can use the mouse button parameter of the 'mouseDown' message to
specify that a contextual menu (the menu that is displayed when the
user right-clicks (on Unix, Windows, or Mac OS/OS X systems), or
Control-clicks (Mac OS/OS X systems)) should appear.
Example: Displaying a Contextual Menu For a Field
Scenario: You have a field that has text in it, and you'd like to
display a menu with "Cut", "Copy", and "Paste" options that is based on
whether the user has any text selected. This example assumes that the
field that will display the contextual menu already exists, and that it
is unlocked (the "Lock text" checkbox in then Inspector is unchecked).
Approach: (1) Create a popup menu button that will contain the
menu items for selection and hide it so the user doesn't see it; (2)
script it so that it will perform the correct actions when a menu item
is selected; (3) call it from the field using the 'popup' command.
Step 1) Create a popup menu button, and set the following
properties:
Name: EditPop
Menu Items: Cut, Copy, Paste (each on its own line)
Visible: Unchecked
TraversalOn*: False
Step 2) Set the script of the popup button as follows:
on menuPick pChoice
switch pChoice
case "Cut"
cut
break
case "Copy"
copy
break
case "Paste"
paste
break
end switch
end menuPick
Step 3) Set the script of the field as follows:
on mouseDown pButton
-- pButton is "3" if the user
right/control-clicks
if pButton is 3 then
popup button "EditPop"
else
-- allow the message to pass
pass mouseDown
end if
end mouseDown
* In order to display a contextual menu in an unlocked field and
still maintain the current text selection, you need to make sure that
the 'traversalOn' property (displayed as "Focusable" on the Inspector
palette) of the popup menu button is set to 'false'. This is because
when a button is activated with the 'traversalOn' property set to
'true', the focus is "stolen" from the object that currently has the
focus, which would remove the insertion point or any text selection you
had in the field.
Currently the Inspector palette does not show "Focusable" as a
settable property for popup menu buttons (although it's displayed for
other kinds of buttons), so you will need to do this by using the
Message Box: Choose "Message Box" from the Tools menu, and type the
following line of script in the main (top) field and execute it by
hitting the Enter key:
set the traversalOn of button "EditPop" to false
What Happens:
When you 'mouseDown' on the field, the contextual menu
("EditPop") will appear. When you select from that menu, the "EditPop"
popup button is sent a 'menuPick' message along with the name of the
menu item you selected. The popup button's script then handles what to
do based on the selected menu item.
Special Considerations:
You will most likely need to adjust which items or enabled
or disabled in the contextual menu based on the current situation (for
example, you don't want to show "Cut" and "Copy" enabled if there is no
current text selection, nor do you want to show "Paste" enabled if
there is no text on the clipboard). A good time to do that is just
before you execute the 'popup' command. For more on enabling/disabling
menu items in a popup menu, see the entries for 'disable menu' and
'enable menu'.
-------
Of course this is only a proposed section of the full entry (there
would be the caveats on setting the menuMouseButton, info on using
'popup' with stacks, syntax, etc.), but you get the idea. I know this
seems like a lot of description, and that veteran users will not get as
much (or any) benefit out of the explanations, but it is a *goldmine*
to anyone who's on the learning curve to Revolution. It gives them
something concrete to play with, explains why everything works the way
it does (to eliminate mystery), points them to other related tokens,
and IMHO gives them a sense of comfort and not trepidation about
learning the language.
Just my 2 cents (of course),
Ken Ray
Sons of Thunder Software, Inc.
Email: kray at sonsothunder.com
Web Site: http://www.sonsothunder.com/
More information about the use-livecode
mailing list