Curl® GUI ツールキットは、ポップアップ ダイアログを作成するためのプロシージャを提供します。
- choose-file および関連しているプロシージャは、ファイル ダイアログを作成します。ユーザーはこのダイアログを使用して、アプレットが作業するためのファイルを 1 つまたは複数選択します。これらのプロシージャは、アプレットがファイルを操作するために使用します。
- 通常の (権限のない) アプレットがファイルを開いたり作成したりする必要が生じると、これらのプロシージャによりダイアログ ボックスがポップアップし、アプレットが読み取り / 書き込みのファイルを開くか作成しようとしていることを伝えます。メッセージがダイアログのセキュリティ パネルに表示されます。
- 特権アプレットがこれらのプロシージャを呼び出すと、セキュリティ パネルはダイアログから除外されます。
- choose-color と choose-color-string は両方とも色の選択ダイアログを作成します。
- popup-message および関連しているプロシージャは、メッセージを表示し、はい / いいえの応答や TextField を介して String を取得する簡単なダイアログを作成します。
ダイアログ プロシージャについて要約すると次のようになります。
ファイル ダイアログ プロシージャは、特権のないアプレットがファイルを操作する方法です。ユーザーにファイルを参照して 1 つまたは複数のファイルを選択させる、ポップアップ ダイアログを作成します。これらのプロシージャは
PrivilegedUrl を返します。これは追加のアクセス権を持つ
Url です。通常は許可されていない状況でも、関連づけられたファイルを直接読み取ったり書き込んだりすることができます。
セキュリティーとファイルアクセスの詳細に関しては、「
ネットワーク アクセスの制限 」
および 「
ファイル アクセスの制限」 を参照してください。
各プロシージャについて、
style パラメータで、
- 関連するファイルに読み取り / 書き込みアクセス権をどのように設定するかを指定します。
- 既定のタイトル(常に独自のタイトルを指定できることに注意してください。)
- ダイアログ内での最初の場所がディレクトリまたはファイルのどちらなのか。
- 確認ボタンが[開く]と[保存]のどちらなのか。
- ユーザーが決定したとき、第 2 ダイアログがある場合はどれをポップアップするか。
次の表は 3 つのファイル ダイアログ スタイルを説明しています。次の第 2 ダイアログが表示される状況についても説明しています。
- 「ファイルが見つかりません」というメッセージ ダイアログは、入力ファイル名が存在しないため開けないということをユーザーに通知します。
- 「ファイルを置き換えますか」という確認ダイアログは、アプレットが既存のファイルに書き込もうとしていることをユーザーに通知し、確認を得ます。
アプレット実行中... | ファイル ダイアログ スタイル | 既定のタイトル | アクセス権 | 2 番目の「ファイルが見つかりません」ダイアログ | 2 番目の「ファイルを置き換えますか」ダイアログ |
既存のファイルを読み取りで開く | FileDialogStyle.read | 読み取り | r | Yユーザーが存在しないファイルの名前を入力した場合 | N |
既存のファイルを読み取り書き込みで開く | FileDialogStyle.edit | 開く | r+w | Yユーザーが存在しないファイルの名前を入力した場合 | N |
新しいファイルを読み取り書き込みで作成する | FileDialogStyle.save-as | 名前を付けて保存 | r+w | N | Yユーザーが既存のファイルを選択した場合 |
上記のパラメータの他に、ファイル ダイアログ プロシージャには次の項目を指定するパラメータがあります。
上記のプロシージャ コールの 1 つの結果として表示される各ダイアログには、ファイル拡張子のフィルターとして動作する
DropdownList があります。フィルタを設定するには、次を実行します。
- 必要な拡張子ごとに FileDialogTypeFilter を作成します。たとえば、txt、text、htm、html のそれぞれについて 1 つずつ作成します。
- FileDialogFilter を作成し、説明を FileDialogTypeFilter の配列でカプセル化します。たとえば、説明 "HTML FILES" は拡張子 "txt" および "text" を説明する FileDialogTypeFilter の配列と一括りにすることができます。
- プロシージャの filters 引数を FileDialogFilter の配列に設定します。
次の例では、ファイル種別がテキストおよび HTML 用のフィルタを作成します。
このサンプルをここで実行するか、特権が与えられていないディレクトリでローカル ファイルとして実行すると、セキュリティ ダイアログが表示されます。特権ディレクトリから実行した場合には、セキュリティ ダイアログは表示されません。
例:
ファイル ダイアログ フィルターの使用 |
|
{let filters:{Array-of FileDialogFilter} =
{new
{Array-of FileDialogFilter},
{FileDialogFilter
"HTML Files",
{new
{Array-of FileDialogTypeFilter},
{FileDialogTypeFilter "htm"},
{FileDialogTypeFilter "html"}
}
},
{FileDialogFilter
"Text Files",
{new
{Array-of FileDialogTypeFilter},
{FileDialogTypeFilter "txt"},
{FileDialogTypeFilter "text"}
}
},
{FileDialogFilter
"All Files",
{new
{Array-of FileDialogTypeFilter},
{FileDialogTypeFilter "*"}
}
}
}
}
{CommandButton
label="Launch a File Dialog to read HTML and text files",
{on Action do
{choose-file
filters=filters
}
}
}
| |
popup-message は、ポップアップ ダイアログを生成する簡単なショートカット プロシージャです。必要な引数はメッセージだけです。このメッセージは
String またはグラフィカル オブジェクトで、ネストされたオブジェクトを含むことがあります。既定では
[OK] ラベルの付いたボタンがあります。オプションで
[キャンセル] ボタンを含めることもできます。
このショートカット プロシージャは、既定でモーダル ポップアップ ダイアログ (次へ進む前に応答が必要なダイアログ) を生成します。modal? = false を指定すると、非モーダル ダイアログをポップアップするために使用することもできます。
popup-message がモーダルの場合、プロシージャはユーザーがクリックしたボタンを示す
String をダイアログが閉じられた後に返します。取りうる値は次の通りです。
このショートカットで作成されたポップアップ ダイアログは、次のキーワード引数のいずれかでカスタマイズすることができます。
- title: 任意の String
- modal? :ダイアログがモーダルであるかどうか (既定ではtrue)
- cancel? :ダイアログに [キャンセル] ボタンがあるかどうか (既定ではfalse)
- ok-label :[OK] ボタンの代替ラベル
- owner :ダイアログが中央揃えで表示する View (現在のアプレットまたは直近のモーダル ダイアログ。既定ではダイアログが画面の上部 3 分の 2 の位置に中央揃えで表示されるよう owner = null に設定します。)
- max-width :ダイアログの最大幅 (既定では6in)
このプロシージャの詳細な説明については『API リファレンス マニュアル』を参照してください。
この簡単な例では
popup-message プロシージャが起動され、メッセージ用テキストと
[OK] ボタンのあるポップアップが作成されます。
例:
popup-message の使用 |
|
{CommandButton label = "Click for User Message",
{on Action do
{popup-message "You've clicked a button!",
title = "Friendly Message"}
}
}
| |
次の例では、より興味深い
popup-message を作成します。ユーザーが
[OK] ボタンをクリックするとプログラムに値を返す
RadioFrame が含まれています。選択せずにダイアログを閉じられることをユーザーに知らせる
[キャンセル] ボタンも含まれています。
例:
popup-message の使用 |
|
{let x:Dynamic =
{Dynamic "initial value"}
}
{let rf:RadioFrame =
{radio-buttons
"Past",
"Present",
"Future",
value = "Present" || initial selection
}
}
{spaced-vbox
{CommandButton label =
"Click for Popup Modal Dialog",
{on Action do
let result:String = {popup-message
use-look-and-feel?=false,
cancel? = true,
background = "yellow",
{spaced-vbox
rf
}
}
{if (result == Dialog.ok) then
set x.value = rf.value
}
}
}, || Button
{paragraph
Dialog's Return Value: {value x}
}
}
| |
前の例では 2 つの点でモーダルなポップアップ ダイアログに依存していることに注目してください。
- ユーザーがダイアログを閉じた時の状況を表す情報がプログラムに返されます。
- ダイアログはすでに閉じられているので、プロシージャが返し次第ラジオ フレームの値を取得できます。
popup-questionは、
[はい]、
[いいえ]、および (オプションで)
[キャンセル] ボタンのあるモーダル ダイアログ ボックスをポップアップします。このプロシージャを使用して、ユーザーにはいまたはいいえの答えを求める質問をすることができます。
ただし、ユーザーがどのボタンもクリックしないでダイアログ ボックスを閉じた場合は、既定の値を返します。ダイアログ ボックスに
[キャンセル] ボタンがある場合、返される既定値は
"cancel" です。
[キャンセル] ボタンがない場合、返される既定値は
Dialog.no です。
次の例では
popup-question プロシージャが起動され、質問と
[はい]、
[いいえ] および
[キャンセル] ボタンのあるポップアップ ダイアログが作成されます。
例:
popup-question の使用 |
|
{CommandButton label = "Click for Yes/No Dialog",
{on Action do
let x:String =
{popup-question
cancel? = true,
"Do you like orange juice?",
title = "OJ Question"}
{popup-message
cancel? = true,
{if x == Dialog.yes then "I like orange juice too"
elseif x == Dialog.no then "Have some milk"
else "Never mind"}
}
}
}
| |
popup-text-query は、入力応答を求めるモーダル ダイアログ ボックスを作成します。
[OK] ボタンをクリックしてダイアログがコミットされると、ユーザーの応答を
String として返します。ユーザーが
[キャンセル] ボタンをクリックするかウィンドウを閉じると、NULL を返します。
開発者は、引数にキーワード prefix を指定することによりオプションでテキスト フィールドの初期値を入力することができます。
例:
popup-text-query の使用 |
|
{let cap:Dynamic =
{Dynamic {text }}
}
{CommandButton
label = "Click for Dialog",
{on Action do
set cap.value =
{popup-text-query
title = "Introduction",
"Who are you?",
prefix = "the Phantom Menace"
}
}
}
{text
font-style = "italic",
You are {value cap}
}
| |
次の例でこのプロセスを示します。コマンド ボタンをクリックすると、
チェック ボタンを含むダイアログが表示します。
チェック ボタンを選択すると、
CheckButton のイベント ハンドラは、
コマンドボタンが 3 つある
HBox を
Dialog に追加します。
get-view メソッドは
Dialog を含む
View を取得します。
このビューの
set-size-from-child を呼ぶと、
ダイアログのサイズが調整され、コマンドボタンを全て収容できるようになります。
以下に示す行をコメントに入れ、例を実行してみてください。
ダイアログのサイズは変更されず、全てを収容する余地がなくなることに留意してください。
{{dialog.get-view}.set-size-from-child}
例:
可視 Dialog のサイズ変更 |
|
{value
let cb1:CommandButton = {CommandButton}
let cb2:CommandButton = {CommandButton}
let cb3:CommandButton = {CommandButton}
let buttons:HBox = {spaced-hbox cb1, cb2, cb3}
let vbox:VBox =
{spaced-vbox
margin=5pt
}
let dialog:Dialog =
{Dialog
vbox,
border-width = 2pt
}
let cb:CheckButton =
{CheckButton
value = false,
label = "Add command buttons?",
{on ValueChanged at cb:CheckButton do
{vbox.add buttons}
{{dialog.get-view}.set-size-from-child}
}
}
{vbox.add
cb
}
let button:CommandButton =
{CommandButton
label = "Show Dialog",
border-width = 3pt,
{on Action do
{dialog.show modal?=true,
title = "Dialog"
}
{dialog.clear}
{dialog.add
vbox
}
}
}
button
}
| |
Copyright © 1998-2019 SCSK Corporation.
All rights reserved.
Curl, the Curl logo, Surge, and the Surge logo are trademarks of SCSK Corporation.
that are registered in the United States. Surge
Lab, the Surge Lab logo, and the Surge Lab Visual Layout Editor (VLE)
logo are trademarks of SCSK Corporation.