I didn't run your code yet.

 

Are you saying that if you don't have classConstruct you don't get
styles?  When classConstruct gets run is sort of black magic.  It could
in fact run before the style block styles are installed.

 

Either way, styleName (class selectors) always overrides type selectors

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of Tom Chiverton
Sent: Monday, November 05, 2007 3:24 AM
To: [email protected]
Subject: [flexcoders] Setting multiple custom styles

 

I'm trying to add a set of custom styles to a component, following the
patten 
in the developers guide, unfortunately it only seems to work if I use a 
styleName to set the new styles - trying to set them as defaults for the

class doesn't.

Take the attached two files, drop them in a directory and compile them.
I've 
tried 2.0.1 hf 1, h3 and 3 beta 2 all with the same result:
The first <TestStyleComponent> gets the defaults hard coded into it in 
classConstruct() rather than those given in the TestStyleComponent
style.
The second <TestStyleComponent> correctly gets the styles from the .foo
style, 
however.

Can anyone see why the first one doesn't work ?

TestStyle.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
<http://www.adobe.com/2006/mxml> " 
xmlns="*" 
backgroundColor="#EDEBE0"
width="100%" height="100%" >


<mx:Style>
TestStyleComponent{
/*this doesn't work
*/
fooBackGround:#00ffff; 
dayNamesFontSize:"24";
dayNamesFontColor:#ff00ff; 
}
.foo {
fooBackGround:#ff00ff; 
dayNamesFontSize:"36"; 
}
</mx:Style>

<TestStyleComponent/>

<TestStyleComponent styleName="foo" />

</mx:Application>

TestStyleComponent.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml
<http://www.adobe.com/2006/mxml> " 
width="100%" height="100%">
<mx:Metadata>
/** 
* the background color of the day name text - this does not work when
set in 
CSS
* do in MXML instead.
*/
[Style(name="fooBackGround",type="uint",format="Color",inherit="no")]
/** 
* the color of the day name text
*/
[Style(name="dayNamesFontColor",type="uint",format="Color",inherit="no")
]
/** 
* the font size of the day name text
*/
[Style(name="dayNamesFontSize",type="Number",format="Length",inherit="no
")]
</mx:Metadata>
<mx:Script>
<![CDATA[
import mx.controls.TileList;
import mx.styles.*;

import flash.utils.getDefinitionByName;

// ---------------------------------- 
// custom styles
// ----------------------------------
private var bFooBackGroundChanged:Boolean = true;
private var bDayNamesFontColorChanged:Boolean = true;
private var bDayNamesFontSizeChanged:Boolean = true;

// Define a static variable.
private static var classConstructed:Boolean = classConstruct();

// Define a static method.
private static function classConstruct():Boolean {
// If there is no CSS definition for our style, 
// then create one and set the default value.

if (!StyleManager.getStyleDeclaration("TestStyleComponent"))
{
var newStyleDeclaration:CSSStyleDeclaration = 
new CSSStyleDeclaration();
newStyleDeclaration.setStyle("dayNamesFontSize", 12);

newStyleDeclaration.setStyle("dayNamesFontColor", 0x000000);

newStyleDeclaration.setStyle("fooBackGround", 0xffffff);

StyleManager.setStyleDeclaration("TestStyleComponent", 
newStyleDeclaration, true);
}
return true;
}

override public function styleChanged(styleProp:String):void {
super.styleChanged(styleProp);

// Check to see if style changed. 
if (styleProp=="dayNamesFontSize") 
{
bDayNamesFontSizeChanged=true; 
invalidateDisplayList();
return;
}
if (styleProp=="dayNamesFontColor") 
{
bDayNamesFontColorChanged=true; 
invalidateDisplayList();
return;
}
if (styleProp=="fooBackGround") 
{
bFooBackGroundChanged=true; 
invalidateDisplayList();
return;
}
}

override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);

// Check to see if style changed.and apply it
if (bDayNamesFontSizeChanged==true){
t.setStyle('fontSize',getStyle('dayNamesFontSize'));
bDayNamesFontSizeChanged=false;
}
if (bDayNamesFontColorChanged==true){
var x=getStyle('dayNamesFontColor');
t.setStyle('color',getStyle('dayNamesFontColor'));
bDayNamesFontColorChanged=false;
}
if (bFooBackGroundChanged==true){
var xx=getStyle('fooBackGround');
t.setStyle('backgroundColor',getStyle('fooBackGround'));
bFooBackGroundChanged=false;
}
}

]]>
</mx:Script>

<mx:HBox id="t" width="100%"> 
<mx:Repeater width="100%" 
id="titlesContainer">
<mx:dataProvider>
<mx:Array>
<mx:Object label="Monday"/>
<mx:Object label="Tuesday"/>
<mx:Object label="Wednesday"/>
<mx:Object label="Thursday"/>
<mx:Object label="Friday"/>
<mx:Object label="Saturday"/>
<mx:Object label="Sunday"/>
</mx:Array>
</mx:dataProvider>
<mx:Text text="{titlesContainer.currentItem.label}"/>
</mx:Repeater> 
</mx:HBox>

<mx:TileList columnCount="7" id="monthView"
width="100%" height="100%"/>
</mx:VBox> 
-- 
Tom Chiverton

****************************************************

This email is sent for and on behalf of Halliwells LLP.

Halliwells LLP is a limited liability partnership registered in England
and Wales under registered number OC307980 whose registered office
address is at St James's Court Brown Street Manchester M2 2JF. A list of
members is available for inspection at the registered office. Any
reference to a partner in relation to Halliwells LLP means a member of
Halliwells LLP. Regulated by The Solicitors Regulation Authority.

CONFIDENTIALITY

This email is intended only for the use of the addressee named above and
may be confidential or legally privileged. If you are not the addressee
you must not read it and must not use any information contained in nor
copy it nor inform any person other than Halliwells LLP or the addressee
of its existence or contents. If you have received this email in error
please delete it and notify Halliwells LLP IT Department on 0870 365
8008.

For more information about Halliwells LLP visit www.halliwells.com.

 

Reply via email to