The Flex classes draw highlight and selection behind the renderer, so
any renderer with an opaque background will obscure it.  Folks either
test for isItemSelected/Highlighted and change their own background
color, or remove the background color.  You can see examples on my blog
(blogs.adobe.com/aharui

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of icepaco33
Sent: Monday, November 12, 2007 9:22 PM
To: [email protected]
Subject: [flexcoders] Re: Can't select an item renderer in a list

 

Salutations,
I have found out the culprit.
So first here is the code of the renderer :

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml
<http://www.adobe.com/2006/mxml> " width="100%"
styleName="myStyle1" verticalScrollPolicy="off"
implements="mx.managers.IFocusManagerComponent" toolTip="{data.uid}"
creationComplete="SentenceRendererCreationCompleteEventHandler()">
<mx:states>
<mx:State name="BeingPlayed">
<mx:SetStyle target="{txtSentence}" name="color" value="#ff0000"/>
</mx:State>
<mx:State name="Selected">
<mx:SetProperty target="{txtSentence}" name="condenseWhite"
value="false"/>
<mx:SetEventHandler name="currentStateChange">

<mx:handler>SentenceRendererSelectedCurrentStateChangeEventHandler()</mx
:handler>
</mx:SetEventHandler>
</mx:State>
<mx:State name="HasBeenPlayed">
<mx:SetStyle target="{txtSentence}" name="color" value="#808080"/>
<mx:SetStyle name="themeColor"/>
</mx:State>
</mx:states>
<mx:Style source="Ressources/Librairie/USlicFont.css"/>
<mx:TextArea id="txtSentence" wordWrap="true" width="90%"
borderStyle="none" text="{data.Text}" textIndent="25"
styleName="myStyle1" textDecoration="none" selectable="false"
verticalScrollPolicy="off" minHeight="60"> 
</mx:TextArea>
<mx:Button id="btnSentence" width="25" label="S{data.indexNo}"
height="15" color="#ffffff">

<mx:downSkin>@Embed('Ressources/Librairie/History/Btn_S_D.swf')</mx:down
Skin>

<mx:overSkin>@Embed('Ressources/Librairie/History/Btn_S_U.swf')</mx:over
Skin>

<mx:upSkin>@Embed('Ressources/Librairie/History/Btn_S_U.swf')</mx:upSkin
>
</mx:Button>
<mx:Script>
<![CDATA[
import text.Highlighter; 
private var _Highlighter:Highlighter;
private var _strDefaultState:String = "non";

override public function set data(value:Object):void
{
super.data = value;
if(this.currentState == "Selected")
{
_Highlighter.reset(); 
_Highlighter.highlightText(); 
}
} 
public function BeingPlayed():void
{
//Change the text color
_strDefaultState = currentState;
_Highlighter.reset(); 
this.currentState = "BeingPlayed"; 
}
public function HasBeenPlayed():void
{
//Change the text color
_Highlighter.reset(); 
this.currentState = "HasBeenPlayed";
}
public function HasBeenSelected():void
{
this.currentState = "Selected";
}
public function ResetRenderer():void
{
if(_strDefaultState != "non")
{
_Highlighter.reset(); 
currentState=_strDefaultState;
_strDefaultState = "non";
}
}
public function BackToDefault():void
{
_Highlighter.reset(); 
currentState = "";
}
private function getTextField(component:TextArea):TextField{
var len:int = component.numChildren;
var r:TextField = new TextField(); 
for(var i:int=0; i<len; i++){
var thisChild:DisplayObject = component.getChildAt(i);
if(thisChild is TextField){
var textChild:TextField = thisChild as TextField;
r = textChild;
}
}
return r;
}
private function
SentenceRendererSelectedCurrentStateChangeEventHandler():void
{
_Highlighter.highlightText(); 
}

private function SentenceRendererCreationCompleteEventHandler():void
{
_Highlighter = new Highlighter(getTextField(txtSentence),0xfffcee21);
}

]]>
</mx:Script>
</mx:Canvas>

The problem resides in the sub components Highlighter. This component
draws a rectangle in the back of the text. (This is someone else's lib
that I modified a bit)

Anyway if I don't refer to this sub class at all then my application
works fine.

I believe I have to implements some Interface from Flex so that I can
use this sub class in my Renderer...

Thanx for the help

--- In [email protected] <mailto:flexcoders%40yahoogroups.com>
, "Alex Harui" <[EMAIL PROTECTED]> wrote:
>
> The UID's in the data, not the renderer matter. Renderers definitely
> get recycled so you can't store anything about selection in the
renderer
> and have to use isItemSelected to update it during updateDisplayList.
> 
> 
> 
> If you want to post a mini-example, we can take a look.
> 
> 
> 
> ________________________________
> 
> From: [email protected] <mailto:flexcoders%40yahoogroups.com>
[mailto:[email protected] <mailto:flexcoders%40yahoogroups.com>
] On
> Behalf Of icepaco33
> Sent: Sunday, November 11, 2007 4:04 PM
> To: [email protected] <mailto:flexcoders%40yahoogroups.com> 
> Subject: [flexcoders] Re: Can't select an item renderer in a list
> 
> 
> 
> No I do not have the same problem if I use the default renderer.
> I checked the UIDs in the following manner :
> 
> - Manually changing the UID of each renderer to make sure they are
> unique
> 
> - Using debug mode and monitoring the UID : they are different. 
> 
> In both cases tho the behavior of this bug is exactly the same :
> 
> Behavior of the list during a drag and drop is to create 2 new
renderer:
> 
> 1 that represent the item being dragged which will never make it to
> the list. (So that new item doesn't cause the bug)
> 1 that will take the place of the item that you dragged but will
> contain the info of the item next to it.
> 
> That last item for whatever reason will be considerer by the list's
> selection model as the last item in the list.
> 
> So while you can still see the other items in the list you can no
> longer rollover / select them.
> 
> If I repopulate the list by changing the list's dataProvider then for
> some reason the list will use the renderer's already there but in
> reverse order. That means that the first item is selectable but none
> of the following items will be.(Unless the new list is longer than the
> old one which means that all the new items which will require new
> renderers will then be selectable)
> 
> Hope this help clarify !
> 
> --- In [email protected]
<mailto:flexcoders%40yahoogroups.com>
<mailto:flexcoders%40yahoogroups.com>
> , "Alex Harui" <aharui@> wrote:
> >
> > Double check the UIDs. Try using the default renderer and see if you
> > still have the problem.
> > 
> > 
> > 
> > ________________________________
> > 
> > From: [email protected]
<mailto:flexcoders%40yahoogroups.com>
<mailto:flexcoders%40yahoogroups.com>
> [mailto:[email protected]
<mailto:flexcoders%40yahoogroups.com>
<mailto:flexcoders%40yahoogroups.com>
> ] On
> > Behalf Of icepaco33
> > Sent: Sunday, November 11, 2007 5:52 AM
> > To: [email protected] <mailto:flexcoders%40yahoogroups.com>
<mailto:flexcoders%40yahoogroups.com> 
> > Subject: [flexcoders] Can't select an item renderer in a list
> > 
> > 
> > 
> > Greetings everybody,
> > I have a peculiar problem. I have a list that is rendered by a
custom
> > item renderer. The list allows multiple selection and also drag and
> > drop operation (in order to shuffle the item around)
> > 
> > However when I move an item further down the list (drag & drop) then
I
> > can't select the items that are below the item immediately following
> > the item I moved.
> > 
> > Also if I change the content of my data provider, I will experience
> > the same thing (can't select the items except the first one)
> > 
> > I found out something very interesting :
> > It seems that my list doesn't allow me to select items which the
> > renderer is older (has been instanciated before) the previous
> renderer.
> > 
> > Allow me to demonstrate :
> > If I have the following renderers :
> > 
> > Renderer1
> > Renderer2
> > Renderer5
> > Renderer3
> > Renderer4
> > 
> > And assuming the number after 'renderer' indicates the order into
> > which the renderer have been instanciated in my list then in the
above
> > situation I will not be able to select or rollover Renderer3 and
> > Renderer4...
> > 
> > This I believe is the problem that happens when I do a drag & drop
> > operation and or when I reload my list by changing the
DataProvider...
> > 
> > N.B. : I use only 1 class for my renderer so all renderers are of
the
> > same type. I have also checked their UID and they seem to be
distinct
> > as far as I can tell...
> > 
> > Hope you guys can help cuz this is really bothering me...
> > 
> > Thanx for your attention !
> > 
> > paco
> >
>

 

Reply via email to