GUIKit の例題:プログレスバー(拡張版)
Needs["GUIKit`"]例題
この例題では,プログレスバーダイアログのさまざまなデザインテクニックとこれに含まれる再利用可能なウィジェットのラップに使える数多くのオプションを紹介する.
基本実装
次はWolfram言語式のシンタックスを使ってプログレスバーを定義するひとつのテクニックである.
expr = Widget["Frame", {
WidgetGroup[{
Widget["Label", {"text" -> "Percent
complete:"},
Name -> "label"],
Widget["ProgressBar", {"minimum" -> 0, "maximum" -> 100, "preferredSize" -> Widget["Dimension", {"width" -> 300, "height" -> 25}]}, Name -> "bar"]},
WidgetLayout -> {"Grouping" -> Column, "Border" -> {{15, 15}, {25, 20}}}], "location" -> Widget["Point", {"x" -> 400, "y" -> 400}], "title" -> "Computation Progress",
"resizable" -> False},
Name -> "frame"];プログレスバーは他の進行中のカーネル評価の更新状況の表示に使われるモードレスセッションで最も役に立つ.
ref = GUIRun[expr]簡単に検索できるように参照名付きで登録されたダイアログには3つの重要なウィジェットが含まれている.以下はダイアログが終了するまでの間設定しておく価値がある最も一般的な特性である.
ref @ SetPropertyValue[{"bar", "value"}, 70]ref @ SetPropertyValue[{"frame", "title"}, "Running..."]ref @ SetPropertyValue[{"label", "text"}, "Finding..."]ダイアログが不要になったら,ReleaseGUIObjectを呼び出してインスタンスを処分することができる.
ReleaseGUIObject[ref];次のバリエーションもまた, AddOnのレイアウト中に再利用可能なプログレスダイアログを定義する上とは別のテクニックを示し,ユーザインターフェースを構成している特性とウィジェットのサブセットだけを公開するために使用可能な多くのオプションについて論じている.
次は,J/Link の例題と同じようなプログレスバーの実装を提供する例題である.
このバージョンでは,定義ファイルをロードした後で名前からインスタンスを検索し,Wolfram言語内でJavaオブジェクトの後操作をする.ウィンドウフレームのタイトルを変更しテキストにラベルを付けた後で,ダイアログを表示するGUIRunを呼ぶ.
CreateProgressBar1[title_String : "Computation Progress", caption_String : "Percent complete:", percent_Integer : 0] := Module[{uiObj}, uiObj = GUILoad["Wolfram/Example/ProgressBar1"];uiObj[SetPropertyValue[{"frame", "title"}, title]];uiObj[SetPropertyValue[{"label", "text"}, caption]];uiObj[SetPropertyValue[{"bar", "value"}, percent]];GUIRun[uiObj]]次は,プログレスバーダイアログを表すGUIObjectとの典型的なインタラクションのシミュレーションをする関数である.
RunProgressBar[ref_] :=
Module[{n},
n = ref @ PropertyValue[{"bar", "value"}];
While[n ≤ 100,
ref @ SetPropertyValue[{"bar", "value"}, n];
Pause[1];(* This simulates the time-consuming computation. *)
n += 15]; (* This simulates progress in 15% increments. *)
ReleaseGUIObject[ref];
]計算でプログレスバーを使うためには,ユーザインターフェース定義をロードしてGUIObjectを返すCreateProgressBar1を呼び出す.次に,計算の実行中定期的に値特性を更新してバーの外観を変更する.計算が終了したらReleaseGUIObjectを呼び出す.
ref = CreateProgressBar1[]RunProgressBar[ref]特定の特性をCreateProgressBar1関数のオプショナルの引数として公開し,複数の状況でダイアログを再利用することもできる.
ref = CreateProgressBar1["Modified title", "Modified caption", 45]RunProgressBar[ref]この例題は,各インスタンスで変更が必要かもしれない動的特性のプレースホルダを作ることでプログレスバーまたは任意のウィジェットの再利用可能なバージョンを代替的に作る方法を説明している.これは,base .m内でWidgetReference["#n"]を使い,ベーススクリプトに必要な引数の定義を外部的に行うさまざまなラッパーの.mファイル作ることで行うことができる.
この例題では,WidgetReference["#n"]を使い,呼ばれると値が最初の引数に渡されるProgressBar2Base.mと呼ばれるベースユーザインターフェースを使う.
ProgressBar2Base.mのソースが,ProgressBar2Base.m中の特定の特性のみしか公開せず,しかし変更可能なすべての特性をwrapping .mファイルでラップすることで,プログレスバーのどの動的要素がこのインスタンスにとって一意的かを明らかにする.
CreateProgressBar2A[] := GUIRun["Wolfram/Example/ProgressBar2"];次は,同じRunProgressBarを再利用して改訂されたCreateProgressBar2Aである.
ref = CreateProgressBar2A[]RunProgressBar[ref]このラッパーとbase .mをもう一歩進めると,GUIObjectインスタンスをロードし実行するWolfram言語関数がオプショナルな第2引数で呼ばれた場合にはスクリプト引数を渡すことができるようになる.次では,例題1の機能性をまねて,しかしCreateProgressBar1Wolfram言語コード内の各特性すべての処理呼出しを見ないことで再利用可能なユーザインターフェースとのインタラクションを大幅に簡略してWolfram言語コードが先に使ったbase .mファイルに動的に引数を渡せるかを示している.
GUILoadの第2引数が単に{title,caption,percent}である点に注意のこと.これはウィジェット名のレジストリに"#1", "#2", "#3",の順で登録される.
ProgressBar2Base.mを使ったGUILoadに対する2引数の呼出しは,ProgressBar2Base.mを希望望の値を含むProgressBar2.mでラップした例題2Aに等しい.
CreateProgressBar2B[title_String : "Computation Progress", caption_String : "Percent complete:", percent_Integer : 0] := GUIRun["Wolfram/Example/ProgressBar2Base", {title, caption, percent}];次は同じRunProgressBarを再利用したCreateProgressBar2Bの実装の改訂版である.
ref = CreateProgressBar2B["Yet another title", "Another caption", 65]RunProgressBar[ref]