[ 新規 | 編集 | 差分 ] [ 検索 | 一覧 | FrontPage ] [ 履歴 (RSS) | 差分履歴 (RSS) ] [ ログイン ]
【PR】Amazon | SL-C3000 | SL-C1000(3/18発売!) | SL-C860 | SL-6000W | SL-6000L | SL-6000N

qshdlg

編集

Qtopia Shell Bridge Dialog

編集

CUIとGUIの間を繋ぐ為の汎用ダイアログです。

qshdlg_sc1_s.png

シェルスクリプト等に組み込んで対話的に処理を行う事が出来るようになります。

更新履歴

編集

ダウンロード

編集


初期化後に標準のバックアップをリストアした場合に、/var/spool/qshdlg/以下のpipeが作成されないようです。
手動で作成するか、もしくはqshdlgの再インストールを行って下さい。
(どのバージョンからか忘れましたが自動的に生成するようにしたので再インストールは不要になったかもしれません)

Ver0.5.0でセレクトダイアログを実装した関係で、OKボタンを押した時の処理が変わっています。
その為、FileLaunchのスクリプトでqcop QPE/Application/qshdlg 'accept()'
としている部分が期待通りに動きません。
Ver0.5.0を使用する場合には該当部分をqcop QPE/Application/qshdlg 'reject()'
と書き換えてご使用下さい。(fl_sudoXXX.sh系のスクリプトでしょうか?)
上記の修正が出来ない方は、inueさんからの正式対応版が出るまでは旧バージョンを使用する事をおすすめします。
qshdlg0.5.0対応版を出して頂いたのでVer0.5.0以降を使用する場合にはfl-sudotool0.5.0を導入して下さい。

ソース

編集

Qtopiaアプリケーションとしては、あまりお行儀の良い作りではありません…。

機能

編集

シェルスクリプト等からダイアログを表示し、対話的な処理を可能とします。

メッセージダイアログでは押されたボタンによって異なる値を返すので
コマンドの戻り値でその後の処理を分岐させる事が出来ます。

また、インプット/リプライ/セレクト/リッチダイアログは
バックグラウンドで起動しておくと、

出力用PIPE

/var/spool/qshdlg/output

に出力をリダイレクトすることで、ダイアログにコマンドの出力を表示。

入力用PIPE

/var/spool/qshdlg/inout

から入力をリダイレクトすることで、ダイアログからコマンドへの入力が行えます。

またコントロール用PIPE

/var/spool/qshdlg/control

にqcopメッセージを書き込む事で、各種コントロールを行う事が出来ます。

qcop コマンドは遅いのでシェル等から使用する場合にはこちらを使用した方が断然速いです。

例)

qcop QPE/Application/qshdlg 'reject()'

echo 'reject()' > /var/spool/qshdlg/control

また、コントロール用PIPEへの書き込み時には半角スペースがパラメータの区切りとして扱われるので、パラメータに半角スペースを含めたい場合にはダブルクォートまたはシングルクォートで括った文字列を書き込むようにします。
※シェルが解釈した後の文字列がダブルクォートまたはシングルクォートで括られるようにする必要があります。

例)

echo 'description(QString)' '"AAA BBB CCC"' > /var/spool/qshdlg/control
echo 'description(QString)' "'AAA BBB CCC"' > /var/spool/qshdlg/control

アプリケーション開発

編集

qshdlgをフロントエンドとしたアプリケーションをスクリプトで組む事が可能になりました。

環境変数QSHDLG_APPにアプリケーション名をセットしてからqshdlgを実行すると
セットしたアプリケーション名となって実行されます。

使用するPIPEは

/var/spool/qshdlg/input_アプリケーション名
/var/spool/qshdlg/output_アプリケーション名
/var/spool/qshdlg/control_アプリケーション名

qcopチャンネルは

QPE/Application/アプリケーション名

となり、独立した操作が可能になります。

また、メッセージダイアログ(message)ではOKボタンを押すとダイアログが終了してしまうので、
対話的に処理を行うようなダイアログはmessage以外での起動を推奨します。

.desktopファイルを用意し、適切にアプリケーション名等をセットする事で
タスクバーにも登録され、KeyHelperでの切り替えも可能となります。

アプリケーション開発手順

編集

qshdlg_testというファイル名のスクリプトを作成した場合。

スクリプト内では環境変数QSHDLG_APPをセットした後にqshdlgを実行します。

QSHDLG_APP=qshdlg_testとセットするのでこのアプリケーションで使用するPIPEは

/var/spool/qshdlg/input_qshdlg_test
/var/spool/qshdlg/output_qshdlg_test
/var/spool/qshdlg/control_qshdlg_test

となります。

また、PIPEが動的に作成されるので作成を待つ必要があります。
(コントロール用PIPEが最後に作成されるのでそれを待つのが良いでしょう)

例)

#/bin/sh
export QSHDLG_APP=qshdlg_test
qshdlg -t test -d test message &
while [ ! -p /var/spool/qshdlg/control_qshdlg_test ]
do
done

シェルスクリプトを/opt/QtPalmtop/binの直下に配置します。

/opt/QtPalmtop/bin/qshdlg_test

デスクトップファイルを

/opt/QtPalmtop/apps/Applications/qshdlg_test.desktop

として配置します。

例)

[Desktop Entry]
Comment=qshdlg test
Exec=qshdlg_test
Icon=qshdlg_test_icon
Type=Application
Name=qshdlg_test
CanFastLoad=0
HidePrivilege=1
Display=640x480/144dpi,480x640/144dpi

アプリケーション開発TIPS

編集

デモアプリケーション

編集

qshdlgをフロントエンドにしたシェルアプリケーションのデモを公開します。
アプリケーション開発の際に参考にしてみて下さい。

2004-02-20 (Fri) 22:21:05 アップデート

Yahooニュース巡回

編集

qshdlgのデモを兼ねて、塚本さん作のYahooニュース巡回スクリプトqshdlgベースに移植してみました。
0.2.0-pre6ベースです。
動作にはqshdlg Version 0.5.5以降が必要になります。

詳細は本家をご覧下さい。
コンソール&iselectベースで書かれていたものをqshdlgを使用するように書き換えただけで
内部的な処理は全くいじっていません。

上記スクリプトには組み込まれていますが、qshdlgを使用する部分をパッケージにしてみたので
Perlからqshdlgを使用したいという方はご参考にどうぞ。もちろんそのまま使用して頂いても構いません。

Zaurus::QShDlg

コマンドラインオプション

編集

コマンドラインオプションこちらのページを参照して下さい。

QCopメッセージ

編集

QCopメッセージこちらのページを参照して下さい。

設定

編集

設定ファイルパス

~/Settings/qshdlg.conf

[Default]

編集

設定例

[Default]
width = 400
height = 200
bgcolor = #999999

width

編集

ダイアログのデフォルトの幅を指定します。

height

編集

ダイアログのデフォルトの高さを指定します。

bgcolor

編集

ダイアログのテキストビューの背景色を指定します。

#RRGGBB

の様な形式で指定します。

txtcolor

編集

ダイアログのテキスト色を指定します。

#RRGGBB

の様な形式で指定します。

使用例

編集

inueさん作のFileLaunchのコピー機能は通常ではファイルの上書き確認が出来ませんが、
コピーのスクリプト(fl_copy.sh)を下記のようにqshdlgを使用する形に書き換えると上書き確認が可能になります。
さらにVer0.3.1で実装したサイレントモードを使用すると、上書き確認が必要な場合のみダイアログを表示する事が出来ます。

#!/bin/bash
echo "コピー"
if [ $1 = "sudo" ];then
    shift
    if [ "$(isfat "$1")" = "FAT" ];then
        suf="sudo "
    else
        suf=""
    fi
else
    suf=""
fi
dest="$1"
shift
if [ -f "$dest" ];then
    dest=$(dirname "$dest")
fi
# qshdlgをバックグラウンドで起動しておく
qshdlg -n -s -t "copy" -c utf8 reply 2> /dev/null &
for i in "$@";do
    # /var/spool/qshdlg/inputから読み取り、/var/spool/qshdlg/outputに出力する。
    $suf cp -ia "$i" "$dest" < /var/spool/qshdlg/input > /var/spool/qshdlg/output 2>&1
    if [ $? = 0 ];then
        echo "$i を $dest にコピーしました"
    else
        echo "$i の $dest へのコピーは失敗しました"
    fi
done
# qshdlgを閉じる
qcop QPE/Application/qshdlg 'reject()' 2> /dev/null 
echo "コピーを終了しました"

既知の問題

編集

アンケート

編集

コントロールの配置について

編集

シェルスクリプト側からコントロールする事で、アウトプットビューとセレクトビュー
を両方同時に表示する事が出来ますが、この配置をどうしようか迷っています。
アンケートにご協力下さい。
現状ではアウトプットビューが上に来ます。

アウトプットビューが上10
セレクトビューが上3

追加するコントロールについて

編集

コントロールの追加を考えていますが、どのコントロールを優先的に追加するか迷っています。
アンケートにご協力下さい。優先的に追加して欲しいコントロールのvoteボタンを押して下さい。

リッチテキスト
42
スライダー
1
テーブル
4
コンボボックス
2
プログレスバー
6
スピンボックス
4

また、どのコントロールをどのような用途に使用したいですか?

[[#rcomment]]

コメント

編集

ご意見、ご要望等はこちらにどうぞ。

v0.3.0

編集

v0.5.0

編集

v0.5.1

編集

v0.5.6

編集

v0.6.1

編集
追加制御
'currentSelect(int)'
 指定番号をカレントにする
  int アイテム番号(0〜)
 SelectView->setCurrentItem( int );
'changeSelect(int,QString,QString)'
 指定番号のラベルと値を変更する
  int アイテム番号(0〜)
  QString ラベル
  QString 値
 SelectView->changeItem( m_labels[i],int);
 (m_values[i])
[[#comment]]

64666