Qtopia Shell Bridge Dialog その15 フォーカス処理

 と、言うことで 0.6.0で追加されたフォーカス処理も試してみました。


# focus2.sh
#!/bin/bash

# Define argument
export QSHDLG_APP=FocusTest
INPUT=/var/spool/qshdlg/input_${QSHDLG_APP}
OUTPUT=/var/spool/qshdlg/output_${QSHDLG_APP}
CONTROL=/var/spool/qshdlg/control_${QSHDLG_APP}
LANG_FILE="/home/zaurus/work/focus.lang"
MOUNT_DIR="/home/zaurus/Documents/smb"
CURRENT_DIR="/home/zaurus/Documents"

####################################

window1(){

echo 'hideInput()' > ${CONTROL}
echo 'hideSelect()' > ${CONTROL}
echo 'hideReply()' > ${CONTROL}
echo 'hideMessage()' > ${CONTROL}
echo 'hideDefault()' > ${CONTROL}
echo 'direction(QString,QString)' ViewButton LeftToRight > ${CONTROL}
echo 'direction(QString,QString)' Button TopToBottom > ${CONTROL}
echo 'direction(QString,QString)' ViewInput TopToBottom > ${CONTROL}
echo 'update()' > ${CONTROL}

echo 'cancel(QString)' "Cancel_Qshdlg" > $CONTROL

echo 'item(QString,QString)' "Set" "Setting_Qshdlg" > $CONTROL
echo 'item(QString,QString)' "Exit" "Cancel_Qshdlg" > $CONTROL
echo 'showReply()' > $CONTROL

echo 'showMessage()' > $CONTROL
echo 'description(QString)' "'This is a test script.'" > $CONTROL

echo 'show()' > $CONTROL
echo 'focus(QString)' Reply > $CONTROL # フォーカス制御

read ARG_RTN < $INPUT
case $ARG_RTN in
Setting_Qshdlg)
echo 'clear()' > ${CONTROL}
window2
;;
Cancel_Qshdlg)
echo 'reject()' > ${CONTROL}
exit
;;
esac
}

window2(){
echo 'hideInput()' > ${CONTROL}
echo 'hideSelect()' > ${CONTROL}
echo 'hideReply()' > ${CONTROL}
echo 'hideMessage()' > ${CONTROL}
echo 'hideDefault()' > ${CONTROL}

echo 'direction(QString,QString)' ViewButton LeftToRight > ${CONTROL}
echo 'direction(QString,QString)' Button TopToBottom > ${CONTROL}
echo 'direction(QString,QString)' ViewInput TopToBottom > ${CONTROL}
echo 'update()' > ${CONTROL}

echo 'cancel(QString)' "Cancel_Qshdlg" > $CONTROL

echo 'item(QString,QString)' "Browse" "DirBrowse_Qshdlg" > $CONTROL
echo 'item(QString,QString)' "Back" "Cancel_Qshdlg" > $CONTROL
echo 'showReply()' > $CONTROL

echo 'showMessage()' > $CONTROL
echo 'description(QString)' "'=$MOUNT_DIR'" > $CONTROL

# grep "msg_line" $LANG_FILE | sed -e 's/^.*=/description(QString) /' > $CONTROL # 原因(^^;)
# grep "msg_line" $LANG_FILE | sed -e 's/^.*=/description(QString) /' > $CONTROL # 原因(^^;)
# grep "msg_line" $LANG_FILE | sed -e 's/^.*=/description(QString) /' > $CONTROL # 原因(^^;)
# grep "msg_line" $LANG_FILE | sed -e 's/^.*=/description(QString) /' > $CONTROL # 原因(^^;)

echo 'item(QString)' "'$MOUNT_DIR'" > $CONTROL
echo 'showInput()' > $CONTROL

echo 'showDefault()' > $CONTROL
echo 'show()' > $CONTROL
echo 'focus(QString)' Reply > $CONTROL # フォーカス制御

read ARG_RTN < $INPUT
case $ARG_RTN in
DirBrowse_Qshdlg)
echo 'clear()' > ${CONTROL}
window3
;;
Cancel_Qshdlg)
echo 'clear()' > ${CONTROL}
window1
;;
*)
MOUNT_DIR="$ARG_RTN"
echo 'clear()' > ${CONTROL}
window2
;;
esac
}

window3(){
echo 'hideDefault()' > ${CONTROL}
echo 'hideInput()' > ${CONTROL}
echo 'hideMessage()' > ${CONTROL}
echo 'hideReply()' > ${CONTROL}

echo 'direction(QString,QString)' ViewButton LeftToRight > ${CONTROL}
echo 'direction(QString,QString)' Button TopToBottom > ${CONTROL}
echo 'direction(QString,QString)' ViewInput BottomToTop > ${CONTROL}
echo 'stretch(QString,int)' select 1 > ${CONTROL}
echo 'update()' > ${CONTROL}

echo 'cancel(QString)' BacktoPreviousWin_Qshdlg > ${CONTROL}
echo 'item(QString,QString)' "Set" SetDir_Qshdlg > ${CONTROL}
echo 'item(QString,QString)' "Back" BacktoPreviousWin_Qshdlg > ${CONTROL}

echo 'showReply()' > ${CONTROL}

ls -aF1 | grep '\/$' | sed -e 's/^/\"/' | sed -e 's/$/\"/' | sed -e 's/^/item(QString) /' > $CONTROL
echo 'showSelect()' > $CONTROL

echo 'item(QString)' "'$CURRENT_DIR'" > ${CONTROL}
echo 'showInput()' > ${CONTROL}

echo 'show()' > ${CONTROL}
echo 'focus(QString)' Reply > $CONTROL # フォーカス制御

read arg_dirname < $INPUT
case $arg_dirname in
SetDir_Qshdlg)
MOUNT_DIR="$CURRENT_DIR"
echo 'clear()' > ${CONTROL}
window2
;;
BacktoPreviousWin_Qshdlg)
echo 'clear()' > ${CONTROL}
window2
;;
*)
cd "$arg_dirname"
CURRENT_DIR="`pwd`"
echo 'clear()' > ${CONTROL}
window3
;;
esac
}

####################################

# Init qshdlg
qshdlg -t "FocusTest" -c utf8 -N -n -M -s custom -C &
while [ ! -p ${CONTROL} ]
do
:
done

# Start routine

cd "$CURRENT_DIR"

window1

 基本的には、昨日のスクリプトにフォーカスの指定を一行・・・(3窓あるから、実際は3行)追加しただけです。focus.langは昨日と全く同じモノなので、割愛しました。

 で、結論としては・・・フォーカスが飛んじゃう条件の時は、今回のフォーカス指定も正しく為されないようです。

 まぁ、それ以外にも立ち上げ時点で、最初のウィンドウのフォーカス指定(Reply)も正しく当たってくれなかったりするんですが・・・。ちなみに、二窓目から戻ってくる時はちゃんとフォーカス当たります(^^;)。

 やっぱ、このへんは各コントロールの配置が完了する前に、フォーカスの指定が為されてしまい、指定すべきコントロールを見失った結果、フォーカスが飛んじゃってるんじゃないかと・・・。

 同一のパイプに入る分に関しては、順番に処理されるハズなんですけどねぇ。