Qtopia Shell Bridge Dialog その1「インプットダイアログ」

 昨日、opie-shで玉砕し(^^;)、いよいよ本気で Qtのプログラミング環境でも組もうかと考えてたトコで、サイトマスターがぼそっと一言。

 「qshdlgは試してみたん?」

 ・・・・おお(爆)。
 すっかり忘れてました(^^;)。

 ってことで、今日は改めてqshdlgを検証。

 とりあえず、ざっと yaktyさんのページを眺めた限り、かなり色々なことが出来そう。

 と言うか、昨日あれから GUIが必要となりそうな部分を整理して考えたところ、基本的には

  1. 入力ボックス
  2. リスト表示からの選択

さえ出来れば、あとは主に見様だけの問題なのかなぁと。


 細かいコトを言うのなら入力に関しては、スライダーとか数値入力のオプションとかもあるとは思いけど、とりあえず最低限ってことで(^^;)。

 ってことで、まずはインプットダイアログから試してみることに。
 目指すは単純、ボックスに入力した文字列を引数としてスクリプトに渡すこと。

 今回は、テストってことでファイルに文字列を落とし込むのを目標にしてみます。

 とりあえず、まずハマったのが、入力パイプを参照する先が記されて初めてボックスに入力が可能となるってこと。
 単純にダイアログの表示だけさせようとしたところ、何回やってもインプットボックスがグレーアウトしたまんまで、かなり悩みました(苦笑)。

 で、次に悩んだのは、入力後の動作。
 文字列を入力したら、そのままダイアログ閉じて、次の処理にうつりたいのにそれが仲々出来まへん。いちいち、Cancelボタン押さないとダイアログが閉じないんですよね。

 さんざん、悪戦苦闘の末、troさん作の Opera7の日本語設定パッケージなんかを参考にして、ようやく期待通りの動作させるのに成功(^^)。

 とりあえず。本日の成果は以下の通り。

#!/bin/sh

# ダイアログ表示
qshdlg custom -C input -t 辞書名入力 -n -N -h 70 &

# contolが存在してる間ダイアログを表示し続ける
while [ ! -p /var/spool/qshdlg/control ]
do
done

# Cancelボタンが押された際、ダイアログを終了させるのでは無く、入力パイプに文字列「cancel」を送る
echo 'cancel(QString)' cancel > /var/spool/qshdlg/input

# 入力パイプの内容を変数「dicfn」に読み込む
read dicfn < /var/spool/qshdlg/input

# 入力内容を判定
# 変数「dicfn」の内容が「cancel」でなければ、
# ファイル「/home/zaurus/result.txt」に出力
if [ "$dicfn" != "cancel" ] ; then
echo $dicfn > /home/zaurus/result.txt
fi

# ダイアログを閉じる
echo 'reject()' > /var/spool/qshdlg/control

 成程、Cancelボタンでダイアログを終了させるのでは無く、Cancelボタンが押されたら、押されたこと自体を伝えて、その上で次の処理に進めて、最終的に reject()*1 で、ダイアログを閉じれば良いのか〜、うむむ勉強になる(^^;)。

 とりあえず、今日はここまで(苦笑)。

*1:ダイアログを閉じろと言うQcopメッセージ。通常、Cancelボタンを押した時の処理と同じ