パレットの状態の保存と追跡
パレットは複数のフロントエンドセッションに渡り,以前の状態を覚えておくよう設定することができる.この機能は,複数の拡張可能なセクション,タブ,チェックボックス,その他のコントロールオブジェクトを含むパレットに便利である.例えば,10個のオープナビューのうちの9つを閉じなければならないようなユーザは,パレットを開くたびにまた同じことをする必要がなくなる.
Wolframシステムがオブジェクトの状態を保存および追跡することのできる方法はいくつかある.最初の方法は動的変数を使うもので,2つ目の方法はTaggingRulesを使うものである.DynamicModuleで追跡される動的変数はノートブック式の中に保存されているため,変更点を保存するためにはパレットノートブックが保存可能である必要がある.これとは対照的に,TaggingRulesはフロントエンドによって,PalettePathにあるパレットノートブック用の別のファイルに保存される.つまり,状態が保存されるためにパレットノートブック自体が保存可能である必要はないのである.さらに,TaggingRulesがノートブックレベルでオプションとして保存されると,その値はOptions[Get["filepath"],TaggingRules]と同様の式を使って他のノートブックからアクセスすることができる.
「Dynamicの高度な機能」で説明してあるように,DynamicModuleは評価の出力における動的変数の値を保持する.しかしDynamicModuleはいくつものセッションを通じてパレットに値を保存するには適していない.このような場合でもDynamicModuleに値を保存しておきたい場合は,DynamicModuleを含むドキュメントを保存しなければならない.また,パレットはパレットの保存が絶対に禁止されている場所に保存する.
DynamicModuleは,パレットが開くたびにリセットされる値を保存するのには適している.次は2つのコントロールオブジェクトと2つの動的変数の例である.
次のパレットでは,プラスボタンかマイナスボタンをクリックすることで2つのチェックボックスにチェックを入れたり外したりすることができる.このボタンはコントロールオブジェクトの状態に対する動的変数の新しい値を設定する.
オプションTaggingRulesは選択範囲に関する追加の情報を保存する方法を提供する.これはセルのメタデータを保存したり,セルに値を付加してノートブック検索,評価その他の操作中に呼び出したりするのに便利である.TaggingRulesは文字列あるいは規則のリストである.
次はノートブックレベルでのTaggingRulesの2つの基本的な例である.1つ目は規則で,2つ目は規則のリストである.
TaggingRulesはPalettePathに保存されているパレットノートブックのコントロールオブジェクトの状態に対する値を保存するために使うこともできる.フロントエンドは後のフロントエンドセッションで使用できるよう,大域的オプションPalettesMenuSettingsにタグ定義規則の現行値を自動的に保存する.
つまり,明示的なタグ定義規則を持つパレットは,すべてのフロントエンドセッションでそのコントロールオブジェクト状態が必ず復元される.例えば,後のフロントエンドセッションでパレットが再び開かれても,オープナは開いたままの状態である.
パレットノートブックのタグ定義規則は,単独の規則あるいはネストされた規則として実装される.コントロールオブジェクトの状態は,タグ定義規則"TagName"に関する次の例に類似した動的なCurrentValue文を使ってこれらのタグ定義規則の値を設定する.
"TagName"は,初期値が与えられない限りInheritedを返す.次の例題では,Checkboxの状態がTrueを初期値とする"TagName2"によって追跡される.Checkboxのチェックを付けるか外すかでTaggingRulesの値がTrueかFalseかに変更される.
一旦タグ定義の値がコントロールオブジェクトの状態に割り当てられると,これらの値を編集するためのボタンやその他のコントロールを描くことができる.ここで,どちらのオープナもマイナスかプラスのボタンを選ぶことによって開くことも閉じることもできる.このボタンは動的に更新されるコントロールオブジェクトの状態に新しいオプション値を設定する.
2つのコントロールオブジェクトは,同時に開いたり閉じたりするよう,同じTaggingRulesの値を使ってタグを定義することができる.
タグ定義規則は,パレット上の1つのオープナを開くと別のオープナが自動的に閉じるように構成することができる.次の例では,片方のオープナの状態を制御するためにDynamicの第2引数が使われている.
検査したいノートブックに対応するNotebookObjectがある場合は,ノートブックの外部からでもTaggingRulesを検査することができる.CreatePaletteはこの目的で使うことのできるNotebookObjectを常に返す.
値を変数であるかのように適切なCurrentValue式にただ割り当てるだけで,ノートブックの外部から値を設定することもできる.これはデバック,あるいは複数のパレットやノートブックが相互作用を及ぼしあうようなインターフェースに便利である.