hakeの日記

Windows環境でプログラミングの勉強をしています。

qshdlg その2

ひきつづきqshdlgをいじっています、今日は簡易ランチャーのようなものを作ってみました。
ザウルスのGUIなアプリケーションプログラムの本体は/home/QtPalmtop/bin/以下に存在します、ここのファイルリストをメニューに表示、選択させて起動させるという至って簡単なものです。

昨日の日記と同様にqshdlg_smpl2というファイルを作成してアイコン登録

#!/bin/sh

export QSHDLG_APP=qshdlg_smpl2

INPUT=/var/spool/qshdlg/input_$QSHDLG_APP
OUTPUT=/var/spool/qshdlg/output_$QSHDLG_APP
CONTROL=/var/spool/qshdlg/control_$QSHDLG_APP

qshdlg custom -C message -A -t "sample2" -c eucJP -M &

while [ ! -p $CONTROL ]
do
done

echo "メッセージを表示します" > $OUTPUT

DIR=/home/QtPalmtop/bin
echo 'label(QString)' '"ファイルリスト"' > $CONTROL
for FILE in `ls $DIR`
do
   echo 'item(QString)' "$FILE" > $CONTROL
done
echo 'showSelect()' > $CONTROL

echo "ファイルリストを表示しました" > $OUTPUT

while read RET < $INPUT
do
   echo "$RET を起動します" > $OUTPUT
   qcop QPE/System 'execute(QString,QString)' $RET
done

昨日は

echo 'item(QString,QString)' ラベル 値 > $CONTROL

を使ってメニュー項目を作成しましたが、今日は

echo 'item(QString)' ラベル > $CONTROL

を使用します、QStringが1個少ないので引数も「ラベル」しかありません、このメニューが選択された場合に返される値は「ラベル」そのものとなります。
for文の中で、/home/QtPalmtop/bin/以下に存在するファイル名を1個ずつ取り出し、それをラベルとしてメニュー作成します。
なお、

echo 'label(QString)' '"ファイルリスト"' > $CONTROL

はセレクトビューに他のメニュー項目と一緒に表示されますが、選択はできない項目となります。メニューのタイトルや区切りのような使い方をさせる感じですか。




メニューからファイル名が選択されると、そのファイル名が返されるのでwhile文の中で

qcop QPE/System 'execute(QString,QString)' $RET

としてqcopコマンドでアプリケーションを起動させています。




画面上半分のメッセージビューを消して全面セレクトビューとして表示させたい場合は、qshdlgを起動させている行を

qshdlg select -A -t "sample2" -c eucJP -M &

とすればOK。


注意:
表示されるファイルにはQTアプリケーションではないファイルもあるので選択実行は、「addressbook」「calculater」「datebook」など何をするアプリかがわかるもので実験すること。