Qtopia Shell Bridge Dialog その10
とりあえず、日本語コードの問題は置いといて(^^;)、検証作業中、もひとつ、気づいたことがあります。
# oktest.sh#!/bin/bash
export QSHDLG_APP=OKTEST
INPUT=/var/spool/qshdlg/input_${QSHDLG_APP}
OUTPUT=/var/spool/qshdlg/output_${QSHDLG_APP}
CONTROL=/var/spool/qshdlg/control_${QSHDLG_APP}##################
# Define Function
##################
checkARG(){
read ARG < $INPUT
echo "$ARG" >> /home/zaurus/work/intest.txtif [ "$ARG" = "" ]; then
echo 'reject()' > ${CONTROL}
else
checkARG
fi
}
##################
# Main Routine
##################
qshdlg -t "OKTEST" -n -N -M -s -c "utf8" custom &
while [ ! -p ${CONTROL} ]
do
:
doneecho 'direction(QString,QString)' ViewButton LeftToRight > ${CONTROL}
# メッセージダイアログ
# echo 'showMessage()' > ${CONTROL}
# echo "AA AA" > ${OUTPUT}
# echo "ののの" > ${OUTPUT}# セレクトダイアログ
# echo 'item(QString,QString)' "Item1" "Value1" > ${CONTROL}
# echo 'item(QString,QString)' "Item2" "Value2" > ${CONTROL}
# echo 'item(QString,QString)' "Item3" "Value3" > ${CONTROL}
# echo 'showSelect()' > ${CONTROL}# インプットダイアログ
echo 'showInput()' > ${CONTROL}echo 'showDefault()' > ${CONTROL}
echo 'show()' > ${CONTROL}# $INPUT 直読み
# cat $INPUT > /home/zaurus/work/intest.txtcheckARG
とりあえず、判りやすいのでインプットダイアログの場合を元に話を進めます。
入力ボックスに文字列をセットし、フォーカスが当たった状態で、キーボードのOK、ENTERを押すと INPUTパイプに入力文字列が渡されます。
同じく、フォーカスが当たった状態で画面上のOKボタンをペンでタップすると、やはり文字列が渡されます。
で、同じように入力ボックスに文字列をセットした後、tabキーで「画面上のOKボタン」にフォーカスを移動し、キーボードの各キー「OK、ENTER、スペース」で画面上のボタンを押そうとしたり、そのものズバリ、ペンでボタンを押したりすると・・・何んにも起こりません(^^;)。
いちお、ヌル文字列が返ってきた場合には、ウィンドウを終了するように指定してますんで、反応無いってことは、そもそも戻り値が返ってないみたいなんですよね。
多分、内部処理として、「フォーカスが当たっている部分の内容」を入力内容として送っているため、画面のOKボタンにフォーカスが当たると、「何処にもフォーカスが当たっていない=渡すべき値が存在しない」状態だと解釈されちゃってるんじゃないかと思うのですが・・・。
実際、入力ボックスを空白にしたままで、キーボードのOK、ENTERを押すと、何の反応も返ってこないんで、それと同じようなコトになってるんじゃないかと。
この仕様に関しては、入力ボックスで「空白=設定値を削除する」ってな、処理が出来ないんで、それはそれで困ってるのですが。ちなみに、現在製作中のスクリプトでは、別途[未設定]のボタンを用意してやって、そのボタンの値が渡った場合、設定値をクリアすると言った型で、今んとこ対応させてます(苦笑)。
ちなみに、この状態はセレクトダイアログ、リプライダイアログ、メッセージダイアログでも、同様に発生します。
まぁ、画面のOKボタンで値を渡せるようになったらなったで、今度はセレクトダイアログと、インプットダイアログを同時に表示させたりした場合、どっちの値が渡るのか?と言う問題が出てきます。そういう意味では、もしかしたら仕様なのかもしれませんが(^^;)。