Autoraising panels and graph windows upon mouseover (focus follows cursor)
_sk
Misc > Autoraise
. Once turned on, a hook is installed on mousemoved
event for all the panels and graphs. When turned off the hook is removed for all panels and graphs. If this event is already occupied by another function for a particular panel or graph, the function will be overwritten with the autoraise function. A possible solution may be to find another suitable event to trigger the autoraising event. A more refined solution would be to save the previous hook in userdata and restore it upon hook remove. An even more refined solution might be to chain the hook functions.menu "Misc", dynamic
"--"
ugsk_autoraise_menu_title(), /Q, ugsk_autoraise_toggle()
help={"Auto-raise panels and graphs on hover"}
end
function/s ugsk_autoraise_menu_title()
nvar/z v_chk = root:autoraise:ui:v_chk
if (!nvar_exists(v_chk))
newdatafolder/o root:autoraise
newdatafolder/o root:autoraise:ui
variable/g root:autoraise:ui:v_chk = 0
return "Autoraise: is off"
elseif (v_chk == 0)
return "Autoraise: is off"
else
return "Autoraise: is on"
endif
end
function ugsk_autoraise_toggle()
nvar/z v_chk = root:autoraise:ui:v_chk
if (v_chk == 1)
v_chk = 0
ugsk_autoraise_hook_kill()
return 0
else
v_chk = 1
ugsk_autoraise_hook_install()
endif
end
function ugsk_autoraise_hook_kill()
string s_win = ""
string s_winlist = winlist("*",";","WIN:65,VISIBLE:1")
variable v_win = itemsinlist(s_winlist)
variable i = 0
string s_hook = ""
for ( i=0; i<v_win; i+=1 )
s_win = stringfromlist(i, s_winlist, ";")
setwindow $s_win hook(mousemoved)=$""
endfor
end
function ugsk_autoraise_hook_install()
string s_win = ""
string s_winlist = winlist("*",";","WIN:65,VISIBLE:1")
variable v_win = itemsinlist(s_winlist)
variable i = 0
string s_hook = ""
for ( i=0; i<v_win; i+=1 )
s_win = stringfromlist(i, s_winlist, ";")
setwindow $s_win hook(mousemoved)=ugsk_autoraise_raise
endfor
end
function ugsk_autoraise_raise(s)
STRUCT WMWinHookStruct &s
if (s.eventcode == 4)
dowindow/F $(s.winname)
return 0
endif
end
"--"
ugsk_autoraise_menu_title(), /Q, ugsk_autoraise_toggle()
help={"Auto-raise panels and graphs on hover"}
end
function/s ugsk_autoraise_menu_title()
nvar/z v_chk = root:autoraise:ui:v_chk
if (!nvar_exists(v_chk))
newdatafolder/o root:autoraise
newdatafolder/o root:autoraise:ui
variable/g root:autoraise:ui:v_chk = 0
return "Autoraise: is off"
elseif (v_chk == 0)
return "Autoraise: is off"
else
return "Autoraise: is on"
endif
end
function ugsk_autoraise_toggle()
nvar/z v_chk = root:autoraise:ui:v_chk
if (v_chk == 1)
v_chk = 0
ugsk_autoraise_hook_kill()
return 0
else
v_chk = 1
ugsk_autoraise_hook_install()
endif
end
function ugsk_autoraise_hook_kill()
string s_win = ""
string s_winlist = winlist("*",";","WIN:65,VISIBLE:1")
variable v_win = itemsinlist(s_winlist)
variable i = 0
string s_hook = ""
for ( i=0; i<v_win; i+=1 )
s_win = stringfromlist(i, s_winlist, ";")
setwindow $s_win hook(mousemoved)=$""
endfor
end
function ugsk_autoraise_hook_install()
string s_win = ""
string s_winlist = winlist("*",";","WIN:65,VISIBLE:1")
variable v_win = itemsinlist(s_winlist)
variable i = 0
string s_hook = ""
for ( i=0; i<v_win; i+=1 )
s_win = stringfromlist(i, s_winlist, ";")
setwindow $s_win hook(mousemoved)=ugsk_autoraise_raise
endfor
end
function ugsk_autoraise_raise(s)
STRUCT WMWinHookStruct &s
if (s.eventcode == 4)
dowindow/F $(s.winname)
return 0
endif
end
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More
- The recommended practice is to put package globals in a root:Packages:MYPACKAGE folder.
- I'm confused why the sub-sub-folder autoraise:ui is needed????
- Hook functions are to return 1 to indicate they have processed the event or 0 to allow other events to handle the eventcode. This might improve the behavior with regard to your concern about overlaps with other user-set mouse-moved events
--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH
April 26, 2017 at 08:33 am - Permalink