|
2.11.6 ノートブックのボタンボックスとアクティブな要素
ノートブックのどのセルでも,ボタンボックス (ButtonBox)というオブジェクトを作ることができ,これをクリックすると所定のコマンドを実行することができる.ButtonBoxオブジェクトは,パレットボタンやハイパーリンク等のノートブックのアクティブな要素をMathematicaで実現する方法である.
セルに入力されたときは,ボタンボックスは他の式と全く同様に動作する.マウスクリックで選択することができ,編集することもできる.しかし,例えば「セルのプロパティ」(Cell Properties)メニューの「アクティブなセル」(Cell Active)を選んでセルオプション Activeを有効にするとボタンボックスはアクティブとなり, ボタンをクリックすると所定のコマンドが実行されるようになる.
ボタンの例.
In[1]:= ButtonBox["Expand[ ]"] // DisplayForm
Out[1]//DisplayForm= 
ボタンがアクティブなセルにあるとき,それをクリックするとその内容がノートブックにコピーされる.

パレットの例.

パレットのセル式では,ボタンはそれぞれボタンオブジェクトとして書かれている.


基本的なボタンボックスオブジェクト
オプション ButtonStyleを指定することによって,ボタンの表示法と動作のデフォルト値を設定することができる.標準的なスタイルがフロントエンドに備わっていて,「ボタンの作成」(Create Button)や 「ボタンの編集」(Edit Button)メニューを選ぶことによってアクセスすることができる.

オプション ButtonStyleの標準的な設定値
このセル式は CopyEvaluateCellのボタンを表す.

ボタンとして表示させたときのセル.

ノートブックに書かれた式を選ぶ.

ボタンをクリックした結果.


ボタンの動作に関するオプション
ButtonStyleを1つ設定すると,他のすべてのボタンのデフォルト値が決められる.これらのオプションのいくつかはボタンの表示に関係し(2.9.11を参照), またあるものは動作に関係している.
最終的にボタンの動作を決定するのは ButtonFunctionの設定である.このオプションにはボタンをクリックしたときに実行されるMathematica関数を指定する.よく使われるのは,各種のノートブック操作コマンドの組合せであろう.
したがって,例えば Pasteボタンでは,NotebookApply[SelectedNotebook[ ], #]&が ButtonFunctionの基本的な設定であり,また Hyperlinkでは NotebookLocate[#2]&が基本的な設定である.
ボタンがクリックされると,その ButtonFunctionには 2 つの引数が与えられる.第 1引数は ButtonSourceによって指定され,第 2引数は ButtonDataによって指定される.
普通 ButtonDataにはボタン作成時に決まる式が設定されるが,ButtonSourceはボタンの内容やおかれた環境によって異なる.

代表的な ButtonSourceの設定値
簡単なペーストボタンでは,ButtonSourceには ButtonContentsが設定される.この場合,ボタンに表示される式がそのままボタン関数の第 1引数として渡される.ボタン関数はそれを受け取って NotebookApplyに引き渡し,その結果,式がノートブックにペーストされる.
ButtonSourceに ButtonContents以外を設定すると,ボタンのあるノートブックの環境をさまざまに利用するボタンを作ることができる.例えば,ButtonSource -> Cellと設定しておけば,ボタンのあるセル全体のセル式がボタン関数の第 1引数となる.ボタン関数にセル式を与えることによって,例えばセルの構造を再構築するような,セルの大域的な操作を行うことができる.

オプション ButtonEvaluatorの設定値
ButtonFunctionの引数が見出され,式が書き出されると,その式をどこで評価するかが問題となる.ButtonBoxのオプション ButtonEvaluateはこれを指定するものである.
一般に,ここで対象になる式が多くのMathematica関数からなるときは,Mathematicaカーネルで評価する以外には選択の余地がない.しかし,式が簡単なノートブックの操作コマンドのみからなるときは,これを直接ノートブックで評価することができる.これは ButtonEvaluator -> Noneの設定によってなされる.

フロントエンドで評価される式
前節で述べたように,標準のノートブックフロントエンドは,FrontEnd`に定義されている限られた種類のコマンドを実行することができる.しかし,これらのコマンドは Paste,EvaluateCell,Hyperlink等, ボタンのスタイルとしてよく使われる動作を実現するのに十分である.
式がフロントエンドに送られたときでも,これが FrontEndExecute関数に与えられたときのみ実行されることに注意する.
|