Manager > マネージャーの高度な機能 > アクションを元に戻す/やり直す
 
アクションを元に戻す/やり直す
このセクションは、IlvManagerCommand クラスに元に戻す/やり直すプロセスを実装する方法を説明します。
プログラム・ユーザーがオブジェクトに適用する可能性のあるアクション (およびオブジェクト) を記憶するために、マネージャーは必要となったアクションに従って IlvManagerCommand クラスの特定のインスタンスを作成します。これによりマネージャーは、これらのコマンドのスタックを操作できるようになります。IlvManager::unDo の要求はアイテムをスタックから外し、そのアイテムを作成した逆操作を適用します。
IlvManager::reDo 操作はコマンド・スタックの一番上のアイテムを複製し、操作を再実行します。
このセクションは、以下のように構成されています。
*コマンド・クラス
*元に戻す管理
*例:IlvManagerCommand クラスを使用して元に戻す/やり直す
*変更の管理
コマンド・クラス
Rogue Wave Views の使用可能コマンドは IlvManagerCommand クラスに実装されています。元に戻す/やり直す操作を実行するために、このクラスのサブタイプはコマンドの引数だけを格納します。記憶される実際のコマンドは、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.