Flex4でタブ移動をスキップ

特定のUIComponentに対してタブ移動をスキップするなら、tabFocusEnabledをfalseに設定すればOK。

tabEnabledがfalseならタブ移動がスキップされる、と思いきや、tabFocusEnabledがtrueならタブ移動時のフォーカス対象になってしまうんですな。

まぁそれはそれとして、
http://help.adobe.com/ja_JP/AS3LCR/Flex_4.0/mx/core/UIComponent.html#tabFocusEnabled

tabFocusEnabled プロパティ
tabFocusEnabled:Boolean
言語バージョン: ActionScript 4.0
製品バージョン: Flex 4
ランタイムバージョン: Flash Player 10, AIR 1.5


いつの間にAS4.0が出たんだろう

Cairngormプラグインがオープンソースじゃない?

Cairngormeclipseプラグインがあると聞いて、ソースコードをみてプラグイン開発の参考にしようと思ったら、パスワードロックが掛かってました。どういうことなの??
http://opensource.adobe.com/svn/opensource/cairngorm/trunk/plugin/
eclipse用のアップデートサイトにもないので、非公開のようです。

ちなみにCairngormプラグインのページはこちら
http://opensource.adobe.com/wiki/display/cairngorm/Plugin
Cairngorm2専用のようです

macのeclipse 3.6(helios)でFlash Builder 4.0.1 Pluginを動かす

Flash Builder Pluginをmaceclipseで動かすには、eclipseのcarbon版を使う必要があります。(cocoa版だとエラーが出て動きません)
eclipse.orgのトップダウンロードページから、mac carbon版が消えていましたが、Eclipse SDKパッケージならcarbon版が提供されています。
こちらのトップページからLatest Releaseのリンクを辿ると、Eclipse SDKのcarbon版がダウンロードできます。
http://download.eclipse.org/eclipse/downloads/

こちらは、2010/07現在のeclipse sdk 3.6 carbonの最新版です。
http://download.eclipse.org/eclipse/downloads/drops/R-3.6-201006080911/download.php?dropFile=eclipse-SDK-3.6-macosx-carbon.tar.gz

Adobe Flash Builder 4 Plug-inをインストールした後にeclipse 3.6を導入した場合は、eclipseインストールディレクトリの直下にあるdropinsディレクトリに以下のファイルを格納します。

ファイル名:
com.adobe.flexbuilder.feature.core.nl1.link
ファイルの中身:
path=/Applications/Adobe Flash Builder 4 Plug-in

Flex 4の和書

宮田さんのFlex本が、Flex4に対応して出版されていました。

Flex4プログラミング入門
http://www.amazon.co.jp/dp/4798026484/

日本語書籍で初のFlex4本ですね

こちらもどうぞ
Flash ActionScript3.0 Handbook
http://www.amazon.co.jp/dp/4797359269/

Flash Player 10.1でFlex Sparkの日本語インライン入力とサロゲートペア

Flash Player 10.1からIIMEClientインタフェースが実装されたのか、Spark系のテキスト入力部品で日本語のインライン入力が可能になりました。

Spark系のテキスト入力部品は、mx系では出来なかったサロゲートペア文字の入力が可能になっています。

Flex/Flashの文字列は、AVMの内部ではUTF-16で扱われるので、Javaと同様サロゲートペアの問題を抱えます。つまり、Stringがサロゲートペアに対応していません。
Flex/Flashサロゲートペア文字を検出するには、flashx.textLayout.utils.CharacterUtilを使います。
こんな感じでしょうか。

public function hasSurrogatePair(value:String):Boolean
{
	for(var i:int=0; i<value.length-1; i++) {
		if(	CharacterUtil.isHighSurrogate(value.charCodeAt(i)) &&
			CharacterUtil.isLowSurrogate(value.charCodeAt(i+1)))
		{
			return true;
		}
	}
	return false;
}

Spark系のテキスト入力部品は、デフォルトではよく分からないフォントになっているので、サロゲートペアを表示できるメイリオJIS2004対応MSゴシック&MS明朝等を指定しておく必要があることに注意してください。

log5j

発想が面白いです
http://code.google.com/p/log5j/

getLoggerの引数にクラス名を指定しなくていい

(Log4j)

private static final Logger log = Logger.getLogger( FeedTask.class );

(Log5j)

private static final Logger log = Logger.getLogger();

コピペしたときにクラス名の指定を変更し忘れて(ry

sprintf形式のサポート

(Log4j)

log.debug( "This thing broke: " + foo + " due to bar: " + bar + " on this thing: " + car );

(Log5j)

log.debug( "This thing broke: %s due to bar: %s on this thing: %s", foo, bar, car );

前者に比べると後者の方は文字連結が無いから、if (log.isDebugEnabled()) { ... } を入れなくてもいいっていう利点がある。
もちろん、sprintfのパラメータに使う変数を文字連結する場合はifで囲まないといけないけど、それでも後者の方がパフォーマンスがいい。
String foo = "foo " + hoge;
log.debug("hello %", foo);

プロパティを持っているかどうかをチェックする

hasOwnProperty関数を使うことで、対象オブジェクトが指定されたプロパティを保持しているかどうかチェックできます。

例えば、コンポーネントがtextプロパティを持っているかどうかをチェックしたいとき、以下のようにします。
便利な関数ですね!

public static function hasTextProperty(uic:UIComponent):Boolean
{
    return uic.hasOwnProperty("text");
}

これを知らなかった私は間違って、
try {
var obj:Object = uic["text"];
// 何らかの処理
} catch(e:Error) {
}
なんてことをしてしまいました。反省。