アクションを元に戻す/やり直す
このセクションは、
IlvManagerCommand クラスに元に戻す/やり直すプロセスを実装する方法を説明します。
プログラム・ユーザーがオブジェクトに適用する可能性のあるアクション (およびオブジェクト) を記憶するために、マネージャーは必要となったアクションに従って
IlvManagerCommand クラスの特定のインスタンスを作成します。これによりマネージャーは、これらのコマンドのスタックを操作できるようになります。
IlvManager::unDo の要求はアイテムをスタックから外し、そのアイテムを作成した逆操作を適用します。
IlvManager::reDo 操作はコマンド・スタックの一番上のアイテムを複製し、操作を再実行します。
このセクションは、以下のように構成されています。
コマンド・クラス
Rogue Wave Views の使用可能コマンドは
IlvManagerCommand クラスに実装されています。元に戻す/やり直す操作を実行するために、このクラスのサブタイプはコマンドの引数だけを格納します。記憶される実際のコマンドは、
IlvManagerCommand オブジェクトのタイプとして認識されます。
マネージャーに新規操作を作成し、それを元に戻したりやり直したりしたい場合は、
IlvManagerCommand クラスの特定のサブタイプを作成する必要があります。このサブタイプの例は
例:IlvManagerCommand クラスを使用して元に戻す/やり直すに示されています。
元に戻す管理
次の
IlvManager メンバー関数は操作を元に戻します。
IlvManager::addCommand IlvManager::isUndoEnabled IlvManager::setUndoEnabled IlvManager::forgetUndo IlvManager::reDo IlvManager::unDo マネージャー・オブジェクトに適用されるそれぞれのアクションは、それぞれの
IlvManager インスタンスで維持される専用のキューに挿入されます。元に戻す/やり直すプロセスは、このキュー管理に基づいて行われます。
例:IlvManagerCommand クラスを使用して元に戻す/やり直す
このサブセクションは
IlvManagerCommand のサブクラスである
IlvTranslateObjectCommand クラスの実装を示します。
このクラスのコンストラクターは移動操作のパラメーターを格納します。
IlvTranslateObjectCommand::IlvTranslateObjectCommand(IlvManager* manager, IlvGraphic* object, const IlvPoint& dp) : IlvManagerCommand(manager), _dx(dp.x()), _dy(dp.y()), _object(object) {} |
doIt メンバー関数
IlvTranslateObjectCommand::doIt メンバー関数は次のように実装されます。
void IlvTranslateObjectCommand::doIt() { _manager->translateObject(_object, _dx, _dy, IlTrue); } |
オブジェクトを _dx および _dy 分だけ移動する操作が行われます。
unDo メンバー関数
IlvTranslateObjectCommand::unDo メンバー関数は次のように実装されます。
void IlvTranslateObjectCommand::unDo() { _manager->translateObject(_object, -_dx, -_dy, IlTrue); } |
逆移動が適用され、領域が再描画されます。
copy メンバー関数
IlvTranslateObjectCommand::copy メンバー関数はコマンド・オブジェクトのコピーを作成し、それを戻します。
IlvManagerCommand* IlvTranslateObjectCommand::copy() const { return new IlvTranslateObjectCommand(_manager, _object, _dx, _dy); } |
変更の管理
次の
IlvManager メンバー関数により、マネージャーの処理するオブジェクトの状態 (変更の有無) を管理できます。
IlvManager::isModified IlvManager::setModified IlvManager::contentsChanged 例:マネージャーの状態を変更なしに設定する
manager->setModified(IlFalse);
2 つのグローバル関数もあります。
IlvGetContentsChangedUpdate IlvSetContentsChangedUpdate 例:contentsChanged でビュー・フック呼び出しを禁止する
以下のコードにより、マネージャー・ビューに関連する既存のビュー・フックの IlvManager::contentsChanged メンバー関数の呼び出しを禁止します。
IlvSetContentsChangedUpdate(IlTrue);
Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.