Posts: 31
Threads: 13
Joined: Jan 2007
Hi!
As of version 2.2.0 it is possible to expand file folders, ie automatically create submenus of files. This is really nice. But wouldn't it be great to be able to get the same effect with menu macro's? Suppose I have a menu macro like this:
macro1:
>labelA
item1
labelB macro2
item2
item3
<
item4
item5
... and another menu macro like
macro2:
If macro2 is set to expand (e.g. via an option) then macro1 would act like
>labelA
item1
>labelB
itemA
itemB
itemC
<
item2
item3
<
item4
item5
This feature would have the following extra advantages:
a. macro can be re-used in other macro's
b. macro can have its own trigger if used as stand-alone menu
c. nice hover effect if macro is a button on toolbar
Please disregard this wish if it's already possible to accomplish. But please tell me how.
Thanks & Regards.
Posts: 12,083
Threads: 142
Joined: Dec 2002
Function TemplateMenu
;\
function# $template [$tempitemname] [sync]
;Shows popup menu created at run time.
;Replaces every {menuname} in template text with submenu created
;;;from a menu (QM item) whose name is menuname.
;{menuname} must be at the beginning of a line. It can be preceded
;;;by tabs. If it is followed by more text in the same line, the
;;;menu name is not inserted.
;If menu menuname does not exist, removes the line.
;template - menu text (if multiline), or existing menu name (if single line).
;tempitemname - the name of the temporary menu. Default: "temp_menu".
;sync - if nonzero, waits and returns 1-based index of selected line.
str s sn st sr si; int i
ARRAY(CHARRANGE) a
if(findc(template 10)<0) s.getmacro(template)
else s=template
if(findrx(s "^\t*\{(.+?)\}([^[]]*)$" 0 12 a))
,for i a.len-1 -1 -1
,,CHARRANGE r(a[0 i]) rn(a[1 i]) ri(a[2 i])
,,sn.get(s rn.cpMin rn.cpMax-rn.cpMin)
,,st.getmacro(sn); err s.remove(r.cpMin r.cpMax-r.cpMin+2); continue
,,st.rtrim("[]")
,,if(ri.cpMax>ri.cpMin) si.get(s ri.cpMin ri.cpMax-ri.cpMin); sn=""; else si=""
,,sr.format(">%s%s[]%s[]<" sn si st)
,,s.replace(sr r.cpMin r.cpMax-r.cpMin)
;out s
ret DynamicMenu(s tempitemname sync)
err+ end _error
Example
Menu "tm main" (example)
Macro492 :mac "Macro492"
{tm sub 1}
>sub
,Macro492 :mac "Macro492"
,{tm sub 2}Mouse * mouse.ico
,<
Macro492 :mac "Macro492"
Menu "tm sub 1" (example)
Function48 :mac "Function48"
Function48 :mac "Function48"
Menu "tm sub 2" (example)
Function47 :mac "Function47"
Function47 :mac "Function47"
Posts: 31
Threads: 13
Joined: Jan 2007
Man, this is awesome. Works like a charm! Thank you very much Gintaras.
(do you want to remove this request from the wish list and put it in the general or programming section?)
Posts: 12,083
Threads: 142
Joined: Dec 2002
Quote:do you want to remove this request from the wish list and put it in the general or programming section?)
The functions is what we can do today. In the future, QM menus and toolbars should support something similar.