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.txt

if [ "$ARG" = "" ]; then
echo 'reject()' > ${CONTROL}
else
checkARG
fi
}
##################
# Main Routine
##################
qshdlg -t "OKTEST" -n -N -M -s -c "utf8" custom &
while [ ! -p ${CONTROL} ]
do
:
done

echo '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.txt

checkARG

 とりあえず、判りやすいのでインプットダイアログの場合を元に話を進めます。

 入力ボックスに文字列をセットし、フォーカスが当たった状態で、キーボードのOK、ENTERを押すと INPUTパイプに入力文字列が渡されます。
 同じく、フォーカスが当たった状態で画面上のOKボタンをペンでタップすると、やはり文字列が渡されます。

 で、同じように入力ボックスに文字列をセットした後、tabキーで「画面上のOKボタン」にフォーカスを移動し、キーボードの各キー「OK、ENTER、スペース」で画面上のボタンを押そうとしたり、そのものズバリ、ペンでボタンを押したりすると・・・何んにも起こりません(^^;)。

 いちお、ヌル文字列が返ってきた場合には、ウィンドウを終了するように指定してますんで、反応無いってことは、そもそも戻り値が返ってないみたいなんですよね。

 多分、内部処理として、「フォーカスが当たっている部分の内容」を入力内容として送っているため、画面のOKボタンにフォーカスが当たると、「何処にもフォーカスが当たっていない=渡すべき値が存在しない」状態だと解釈されちゃってるんじゃないかと思うのですが・・・。

 実際、入力ボックスを空白にしたままで、キーボードのOK、ENTERを押すと、何の反応も返ってこないんで、それと同じようなコトになってるんじゃないかと。

 この仕様に関しては、入力ボックスで「空白=設定値を削除する」ってな、処理が出来ないんで、それはそれで困ってるのですが。ちなみに、現在製作中のスクリプトでは、別途[未設定]のボタンを用意してやって、そのボタンの値が渡った場合、設定値をクリアすると言った型で、今んとこ対応させてます(苦笑)。

 ちなみに、この状態はセレクトダイアログ、リプライダイアログ、メッセージダイアログでも、同様に発生します。

 まぁ、画面のOKボタンで値を渡せるようになったらなったで、今度はセレクトダイアログと、インプットダイアログを同時に表示させたりした場合、どっちの値が渡るのか?と言う問題が出てきます。そういう意味では、もしかしたら仕様なのかもしれませんが(^^;)。