2020年7月27日月曜日

ダイアログ作成のサンプルコード

スクリプトを実行した状態から、ユーザーの判断を仰ぐような場合に使用する confirmDialog コマンドというのがあります。


まずはサンプルから、
global proc int isConfirm(string $msg)
{
    // コマンド作成
    string $cmd ="";
    $cmd +="confirmDialog ";
    $cmd +="-t \"isConfirm\" ";
    $cmd +=("-m \""+$msg+"\" ");
    $cmd +="-b \"Ok\" ";
    $cmd +="-b \"Cansel\" ";
    $cmd +="-db \"Cansel\" ";
    $cmd +="-cb \"Cansel\" ";
    $cmd +="-ds \"Cansel\" ";
    $cmd +="-icn \"question\" ";
    
    
    //------------------------------------------------------------------------------
    string $result =`eval $cmd`;
    if("Cansel"==$result) return 0;
    
    return 1;
    
}
これを下のような風に呼び出すことで、こんなモーダルダイアログが出てきます。
isConfirm("sample");


サンプルでは、メッセージの文字列だけを引数にしていますが、汎用性を高めるために、タイトルやアイコンタイプを渡すようにしても良いかと思います。

これは filetest コマンドで、ファイルの上書き確認をするときなんかに良く使います。
こんな感じですかね。
if(`filetest -f ($path+"/"+$file+".ma")`)
{
    if(!`isConfirm "over write?"`) return;
    
}


if判定をして intを返すようにしていますが、 confirmDialog は、押したボタンの文字列を返すようになっているので、何か特定のラベル名をしたボタンをいくつか作成して、switchで分岐させるというような使い方も出来ます。
global proc string choiceStr(string $msg)
{
    // コマンド作成
    string $cmd ="";
    $cmd +="confirmDialog ";
    $cmd +="-t \"isConfirm\" ";
    $cmd +=("-m \""+$msg+"\" ");
    $cmd +="-b \"A\" ";
    $cmd +="-b \"B\" ";
    $cmd +="-b \"C\" ";
    $cmd +="-b \"D\" ";
    $cmd +="-b \"Cansel\" ";
    $cmd +="-db \"Cansel\" ";
    $cmd +="-cb \"Cansel\" ";
    $cmd +="-ds \"Cansel\" ";
    $cmd +="-icn \"question\" ";
    
    
    //------------------------------------------------------------------------------
    string $result =`eval $cmd`;
    if("Cansel"==$result) return "";
    
    return $result;
    
}

ここでは、ボタンを直書きしていますが、ボタン名をリストで渡してループさせるとかすれば、汎用性は上がるでしょうか。


confirmDialog では、指定した文字の中から選択する形式ですが、自由入力ができる promptDialog コマンドというのもあります。
コマンドのサンプルコードには、こんなようなのが載っています。
string $result =`promptDialog
    -title "Rename Object"
    -message "Enter Name:"
    -button "OK" -button "Cancel"
    -defaultButton "OK" -cancelButton "Cancel"
    -dismissString "Cancel"`;


string $text;
if($result == "OK")
{
    $text =`promptDialog -query -text`;
    
}

このコマンドの注意点としては、アルファベットや数字以外にマルチバイト文字や記号なんかも無制限に受け付けてしまうので、取得した文字列の整合性チェックみたいなのをする必要があるのが面倒です。

0 件のコメント:

コメントを投稿