Flash/datagrid/ダブルクリックでアイテム変更
提供: 初心者エンジニアの簡易メモ
package app.model.logic { // データグリッドイベント import mx.events.DataGridEvent; // 時間取得 import flash.utils.getTimer; /** * DataGridダブルクリック判定ロジック * * @example * // ダブルクリック判定ロジッククラス * import app.model.logic.DoubleClickValidateLogic; * addEventListener(DataGridEvent.ITEM_EDIT_END, itemEditBeginningDataGrid); * // データグリッドアイテム編集中イベント * public function itemEditBeginningDataGrid(event:DataGridEvent):void * { * // ダブルクリック判定に満たない時 * if (!_doubleClickValidateLogic.execValidate(event)) { * // 編集させない * event.preventDefault(); * } * } * @see http://f0000.nonip.info/wiki/work/index.php?flash%2Fdatagrid%2F%E3%83%80%E3%83%96%E3%83%AB%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%A7%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E5%A4%89%E6%9B%B4 * @see http://d.hatena.ne.jp/fits/20081120/1227187959 */ public class DoubleClickDataGridValidateLogic { // ダブルクリックと判断する有効時間(ミリ秒) private const DOUBLE_CLICK_TIME:uint = 300; // 一つ前のクリックイベント private var _oldEvent:DataGridEvent; // 一つ前のクリックタイム private var _oldTime:int; /** * constructor */ public function DoubleClickDataGridValidateLogic() { } /** * 判定実行 * * @param event * @return true:ダブルクリック, false:それ以外 */ public function execValidate(event:DataGridEvent):Boolean { // 現在の時間を設定 var nowTime:int = getTimer(); var result:Boolean = ( _oldEvent != null && event.columnIndex == _oldEvent.columnIndex && event.rowIndex == _oldEvent.rowIndex && (nowTime - _oldTime) <= DOUBLE_CLICK_TIME ); // 今回のイベントを保存 _oldEvent = (result)? null: event; // 今回のタイムスタンプを保存 _oldTime = nowTime; return result; } } }