Qtopia Shell Bridge Dialog その16 ウィジェット制御

 ちょっと気分転換(笑)。
 ってことで、 0.6.0で実装されたウィジェット制御機能を試してみました。

 まずは、ウィンドウ位置の指定。


# WinMove.sh
#!/bin/bash

export QSHDLG_APP=WinMove
INPUT=/var/spool/qshdlg/input_${QSHDLG_APP}
OUTPUT=/var/spool/qshdlg/output_${QSHDLG_APP}
CONTROL=/var/spool/qshdlg/control_${QSHDLG_APP}

X_SIZE=240
Y_SIZE=240
X_WIN=200
Y_WIN=100

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

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

echo 'direction(QString,QString)' Button TopToBottom > ${CONTROL}
echo 'size(int,int)' $X_SIZE $Y_SIZE > ${CONTROL}
echo 'move(int,int)' $X_WIN $Y_WIN > ${CONTROL}
echo 'update()' > ${CONTROL}

echo 'cancel(QString)' Exit_WinMove > ${CONTROL}

echo 'item(QString,QString)' "右上" "TR_WinMove" > ${CONTROL}
echo 'item(QString,QString)' "左上" "TL_WinMove" > ${CONTROL}
echo 'item(QString,QString)' "右下" "BR_WinMove" > ${CONTROL}
echo 'item(QString,QString)' "左下" "BL_WinMove" > ${CONTROL}
echo 'item(QString,QString)' "中央" "CT_WinMove" > ${CONTROL}
echo 'showReply()' > ${CONTROL}

echo 'show()' > ${CONTROL}

read ARG_RTN < $INPUT

case $ARG_RTN in
Exit_WinMove)
echo "reject()" > ${CONTROL}
exit 0
;;
TL_WinMove)
echo 'title(QString)' "'WinMove : 左上'" > ${CONTROL}
X_WIN=0
Y_WIN=32
Window_MAIN
;;
TR_WinMove)
echo 'title(QString)' "'WinMove : 右上'" > ${CONTROL}
X_WIN=400
Y_WIN=30
Window_MAIN
;;
BL_WinMove)
echo 'title(QString)' "'WinMove : 左下'" > ${CONTROL}
X_WIN=0
Y_WIN=200
Window_MAIN
;;
BR_WinMove)
echo 'title(QString)' "'WinMove : 右下'" > ${CONTROL}
X_WIN=400
Y_WIN=200
Window_MAIN
;;
CT_WinMove)
echo 'title(QString)' "'WinMove : 中央'" > ${CONTROL}
X_WIN=200
Y_WIN=100
Window_MAIN
;;
*)
Window_MAIN
;;
esac
}

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

qshdlg -t WinMove -c eucJP -N -n -s custom &
while [ ! -p ${CONTROL} ]
do
:
done

Window_MAIN

位置制御

 見て、そのまんま。ボタン押したら、ボタンに書かれてる場所にウィンドウが動きます。
 なんか、追っかけっこしてるみたいで、結構楽しい(笑)。

 注意点としては、yaktyさんのページでも記載されてますが、Y軸の位置指定にタイトルバーが含まれないこと。X=0、Y=0を指定すると、ウィンドウが画面からはみ出ちゃいます。
 大体、X=0、Y=32くらいで、丁度画面の左上ぴったしにウィンドウが当たります。


 お次はウィンドウサイズ変更。


# WinSize.sh
#!/bin/bash

export QSHDLG_APP=WinSize
INPUT=/var/spool/qshdlg/input_${QSHDLG_APP}
OUTPUT=/var/spool/qshdlg/output_${QSHDLG_APP}
CONTROL=/var/spool/qshdlg/control_${QSHDLG_APP}

X_SIZE=240
Y_SIZE=240
X_LOCATE=190
Y_LOCATE=90

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

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

echo 'direction(QString,QString)' Button TopToBottom > ${CONTROL}
echo 'size(int,int)' $X_SIZE $Y_SIZE > ${CONTROL}
echo 'move(int,int)' $X_LOCATE $Y_LOCATE > ${CONTROL}
echo 'update()' > ${CONTROL}

echo 'cancel(QString)' Exit_WinMove > ${CONTROL}

echo 'item(QString,QString)' "大" "Large_WinSize" > ${CONTROL}
echo 'item(QString,QString)' "中" "Middle_WinSize" > ${CONTROL}
echo 'item(QString,QString)' "小" "Small_WinSize" > ${CONTROL}
echo 'showReply()' > ${CONTROL}

echo 'show()' > ${CONTROL}

read ARG_RTN < $INPUT

case $ARG_RTN in
Exit_WinMove)
echo "reject()" > ${CONTROL}
exit 0
;;
Large_WinSize)
echo 'title(QString)' "'WinSize : 大'" > ${CONTROL}
X_SIZE=620
Y_SIZE=360
X_LOCATE=10
Y_LOCATE=40
Window_MAIN
;;
Middle_WinSize)
echo 'title(QString)' "'WinSize : 中'" > ${CONTROL}
X_SIZE=360
Y_SIZE=200
X_LOCATE=140
Y_LOCATE=150
Window_MAIN
;;
Small_WinSize)
echo 'title(QString)' "'WinSize : 小'" > ${CONTROL}
X_SIZE=240
Y_SIZE=150
X_LOCATE=190
Y_LOCATE=180
Window_MAIN
;;
*)
Window_MAIN
;;
esac
}

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

qshdlg -t WinSize -c eucJP -N -n -s custom &
while [ ! -p ${CONTROL} ]
do
:
done

Window_MAIN

サイズ変更

 これもそのまんま、大・中・小と、三段階にウィンドウサイズが可変します。上で貼ってるサンプル画面が中サイズ。
 ウィンドウサイズを640x480(実際は、タスクバーのことがあるんで、Y軸はもちょっと削った方が良いですが)とかにしてやると、フル画面まで広がります。
 この場合はいわゆる最大化とは異なりますんで、ペンでタップするとぐりぐりウィンドウが動きます。勿論、画面の外にはみ出ちゃいますが(笑)。

 一応、ウィンドウの最大化は qshdlgの立ち上げ時にコマンドラインオプション「-M」で指定出来るんですけどね。これも、qcopで制御出来るよう要望に加えといた方が良いかな?。今んトコはまだ、具体的に使うアテがあるわけじゃないんですけどね(苦笑)。