Context Menus - the look of the thing

Peter M. Brigham pmbrig at gmail.com
Sat May 11 09:31:39 EDT 2013


Here's a modular solution. Create a popup button named "contextualMenu", and put the following script into it:

on menupick what
  set the uSelection of me to what
end menupick

Put the button in a library stack, and add the following to the library script:

function popChoose
   -- paste the "contextualMenu" button into your mainstack or a library stack
   --    make it invisible when you're done, if you want
   -- enter the short name of the stack containing the button
   --    into the constant declaration below
  
   -- popChoose() can accept a cr-delimited list of choices
   -- or a comma-delimited list
   -- eg: put choice1 & cr & choice2 & cr & choice3 into choiceList
   --     put popChoose(choiceList) into userChoice
   -- or: put popChoose(choice1,choice2,choice3) into userChoice
   -- or: put popChoose("Vera","Chuck","Dave") into userChoice
   
   constant pStackName = "stackContainingContextualMenuButton"
   
   put the params into tList
   put offset("(",tList) into q
   delete char 1 to q of tList
   delete char -1 of tList
   replace comma & space & quote with comma & quote in tList
   replace quote & comma & quote with cr in tList
   if char 1 of tList = quote then delete char 1 of tList
   if char -1 of tList = quote then delete char -1 of tList
   put empty into u
   set the uSelection of btn "contextualMenu" of stack pStackName to empty
   put tList into btn "contextualMenu" of stack pStackName
   popup btn "contextualMenu" of stack pStackName
   put the uSelection of btn "contextualMenu" of stack pStackName into u
   set the uSelection of btn "contextualMenu" of stack pStackName to empty
   put empty into btn "contextualMenu" of stack pStackName
   -- belt and suspenders, don't leave contents hanging around
   select empty
   if u = empty then
      exit to top
      -- equivalent of mouseRelease, no action
   end if
   return u
end popChoose

Then whenever you need a popup contextual menu, just call it with

put popChoose("Vera","Chuck","Dave","-","Lovely Rita","Nowhere Man") into userChoice

You can construct the parameter list on the fly, depending on the context, then just

put popChoose (choiceList) into userChoice

-- Peter

Peter M. Brigham
pmbrig at gmail.com
http://home.comcast.net/~pmbrig


On May 9, 2013, at 4:18 PM, J. Landman Gay wrote:

> On 5/9/13 2:54 PM, Graham Samuel wrote:
>> What I want is a single 'mouseDown' handler in my mainstack
>> that checks if the right mouse button had been pressed in an editable
>> field and then provides Edit-menu type services to that field (the
>> target). Could I use a button menu for that?
> 
> Sure, easily.
> 
> Create an option button and put the menu you want into its contents. Put a corresponding menupick handler in its script. Hide the button.
> 
> In the field where you check for a right-click, just use "popup <name of btn>". That's about it. The button script can either execute commands directly ("copy", "paste") or it can call out to a custom handler in the message path.
> 
> -- 
> Jacqueline Landman Gay         |     jacque at hyperactivesw.com
> HyperActive Software           |     http://www.hyperactivesw.com
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode





More information about the Use-livecode mailing list