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;
}
}
}
