On 08/03/2015 03:38 PM, [email protected] wrote:
> I'm doing something like you said:
>
> var checkHover;
> function hoverCallback(a,b,c,d){
> if(checkHover)
> clearInterval(checkHover);
> var res = b.split('.')[0];//get everything until first "."
> Jmol.script(myJmolOb, 'select '+ res +' ; halo on;');
> checkHover = setInterval(function() {
> Jmol.script(myJmolOb, 'select '+ res +' ; halo off;');
> }, 1000);
> }
>
>
> What I did is, every call I cancel the setInterval, then I set the
> highlight (I'm using halo on here) and finally I start setInterval again.
> So in the last call (when I move out) the setInterval will not be canceled
> being called after 1 second. It's working.
>
> That's really how hovercallback works? This behavior to keep calling the
> listener also to do not call when move out?
>
I obviously didn't remember it correctly and forgot about the timout stuff.
My implementation below works completely within Jmol without any
Javascript. One advantage of this is that it also works in the Jmol
application. The 'halo' color is changed to distinguish the 'hover halo'
from a yellow 'selection halo' which might be already there before the
'hover' (setting: "selectionHalos on").
It took me some time to figure out how to avoid flickering because the
callback might be fired multiple times for the same atom if the mouse
pointer rests longer above it. This might not be a problem if
activating/deactivating the halo is the only action. But in my case
there was some more stuff which I stripped out here.
While stripping out the additional stuff I realized that there might
occur a problem if the 'lastAtomIndexHovered' variable would change too
fast, although I never observed any problem with it yet. But maybe it
would be better to provide the atomIndex as a second parameter in the
"hoverAction('end')" call.
------ Jmolscript hover callback implementation ---------------
lastAtomIndexHovered = -1;
lastHoverUnfinished = false;
hoverTimeoutId = "";
function hoverAction(action) {
#print "action=" + action + " hoverId=" + hoverTimeoutId;
if (hoverTimeoutId != "") {
timeout ID @hoverTimeoutId off;
hoverTimeoutId = "";
}
var switchOff = false;
var currentSelection = {selected};
if (action == "end") {
if (lastHoverUnfinished) {
switchOff = true;
}
} elseif (action == "start") {
if (lastHoverUnfinished) {
if (lastAtomIndexHovered != _atomhovered) {
switchOff = true;
}
}
}
#print "action=" + action + " switchOff=" + switchOff + "
lastHoverUnfinished=" + lastHoverUnfinished + " lastAtomIndexHovered="
+ lastAtomIndexHovered + " _atomhovered=" + _atomhovered;
if (switchOff) {
if (lastAtomIndexHovered >= 0) {
select atomindex=@lastAtomIndexHovered;
color halo yellow;
halo off;
}
lastAtomIndexHovered = -1;
lastHoverUnfinished = false;
}
if (_atomhovered >= 0 && action == "start") {
lastAtomIndexHovered = _atomhovered;
select atomindex=@lastAtomIndexHovered;
color halo cyan;
halo on;
lastHoverUnfinished = true;
hoverTimeoutId = "hoverEnd_" + now();
timeout ID @hoverTimeoutId 1.0 "hoverAction('end')";
}
select @currentSelection;
}
set hoverCallback "jmolscript: hoverAction('start');";
-------------------------------------------------------
Regards,
Rolf
--
Rolf Huehne
Postdoc
Leibniz Institute for Age Research - Fritz Lipmann Institute (FLI)
Beutenbergstrasse 11
07745 Jena, Germany
Phone: +49 3641 65 6205
Fax: +49 3641 65 6210
E-Mail: [email protected]
Website: http://www.fli-leibniz.de
Scientific Director: Prof. Dr. K. Lenhard Rudolph
Head of Administration: Dr. Daniele Barthel
Chairman of Board of Trustees: Dennys Klein
VAT No: DE 153 925 464
Register of Associations: No. 230296, Amtsgericht Jena
Tax Number: 162/141/08228
------------------------------------------------------------------------------
_______________________________________________
Jmol-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-users