Well, the Flash asdocs really don't make this clear, but I initially had a
suspicion that overriding a handler instead of registering a listener might be
the answer. I didn't pursue that direction right away because the method
signatures don't return a Boolean or some other value to indicate that an event
was handled and no further processing is wanted.
In any case, I was able to achieve the glass pane effect that I wanted this
morning with the following code:
options = { width: "100%", height: "100%"};
Canvas(createChild(Canvas, "_glassPane", options));
_glassPane.setStyle("backgroundColor", "#FF00FF");
_glassPane.alpha = 0;
_glassPane.visible = false;
MovieClip(_glassPane).onPress = function() {}
All of the above was required: without a backgroundColor being set, events
weren't captured at all; The alpha, of course, was to make the glass pane
actually invisible (there maybe other properties beside backgroundColor that
also work for causing events to get caught, but I haven't experimented). The
visible property -- once a backgroundColor property is set -- is what enables
and disables the event capturing.
However, for the toolbar that I also wanted to capture events so the text
component below doesn't receive them, this is not yet a complete solution
because it also prevents the child components (the toolbar buttons) from
getting any events either. I've written some code to iterate the child
components, but I don't know what to pass to them -- it seems intrinsically
wrong that the toolbar needs to become an event manager from its onPress
handler:
// doesn't work -- onPress doesn't have event parameter anyway...
MovieClip(this).onPress = mx.utils.Delegate.create(this, function(event) {
var comp : UIObject = null;
for (var i : Number = 0; i < childDescriptors.length; i++) {
comp = getChildAt(i);
if (hitTest(comp)) {
comp.handleEvent(event);
}
}
});
(Incidentally, if there is some other more appropriate way for iterating child
components, I'd appreciate hearing about it).
So Flash/Flex gurus ... what am I missing here...? Thanks!
Tony
tony pujals| senior engineer | Yahoo! SiteBuilder Express
p. 408.349.6284 | e. tonyp * yahoo-inc . com | y!id tonypujals
________________________________________
From: Tony Pujals
Sent: Wednesday, February 15, 2006 7:43 AM
To: '[email protected]'
Subject: RE: [flexcoders] Mouse Event Filtering
Sorry, I don't know if this works in the Flex 2 beta, but I should have
specified that we're working with Flex 1.5 at Yahoo. Unfortunately,
EventDispatcher states:
function addEventListener(eventType:String, eventListener):Void
{
// Note: In the future, we may add a third
parameter,
// useCapture:Boolean, to be compliant with the
// DOM Level 3 Events spec,
//
http://www.w3.org/TR/DOM-Level-3-Events/events.html.
.
.
.
This would have been very convenient if it were implemented. Nevertheless,
Button and other components do seem able to capture the event. Is this a
question for one of the Flash lists (any recommendation to which list I should
post this question)?
Thanks, Matt - if you or anyone else has any other ideas, I'd really love to
hear them
-Tony
tony pujals| senior engineer | Yahoo! SiteBuilder Express
p. 408.349.6284 | e. tonyp * yahoo-inc . com | y!id tonypujals
________________________________________
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Matt
Chotin
Sent: Tuesday, February 14, 2006 9:45 PM
To: [email protected]
Subject: RE: [flexcoders] Mouse Event Filtering
you want to add your mouse event listener with useCapture set to true
and then call stopPropagation on the event in your handler (I think). I
believe that will prevent it from moving further down the hierarchy.
-----Original Message-----
From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of Tony Pujals
Sent: Tuesday, February 14, 2006 5:27 PM
To: [email protected]
Subject: [flexcoders] Mouse Event Filtering
There are two variations to my question, but they should share a common
solution:
1) I want to create a "glass pane" - ie, a transparent layer that can
capture/consume mouse events without allowing the event to bubble to a
component below it. I've tried to achieve this effect with a transparent
Canvas, but the component below it (eg, a TextArea), also catches the
event.
2) I have a floating toolbar that extends Canvas. I don't want to use
the PopUpManager because of issues with the FocusManager and TextArea
that causes text to be selected incorrectly when focus is returned after
focus was transferred to a toolbar button. If the toolbar is floating
above the TextArea component, the cursor changes to an ibeam. If I click
down on the toolbar to drag it, the toolbar drags, but the TextArea also
gets the events, causing text to become selected. I want the toolbar to
consume the mouse events occurring on it without any further event
bubbling.
Since the toolbar has a mouseMove handler that allows me to drag it, I
can drag even by pressing mouse down on a toolbar button. I guess the
toolbar as parent is receiving and handling the mousedown, even though
the mouse down event is also propagating to its child button component
as well (I actually do not want this behavior either, but I suppose I
can solve this easily enough with hitTest). But what is really
interesting is that the event stops there if it's caught by the button
-- the TextArea below the toolbar doesn't get the event in this case. So
something about a Button or its superclasses makes it special, but the
difference isn't apparent to me in the AS source provided with Flex.
Any insight is appreciated. Thanks!
-Tony
tony pujals| senior engineer | Yahoo! SiteBuilder Express
p. 408.349.6284 | e. tonyp * yahoo-inc . com | y!id tonypujals
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives:
http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
SPONSORED LINKS
Web site design development
Computer software development
Software design and development
Macromedia flex
Software development best practice
________________________________________
YAHOO! GROUPS LINKS
* Visit your group "flexcoders" on the web.
* To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
* Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
________________________________________
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/