Hatena::ブログ(Diary)

TAKETYONの作業記録 at りなざうテクノウ


 | 

2004-07-18

[][][]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で制御出来るよう要望に加えといた方が良いかな?。今んトコはまだ、具体的に使うアテがあるわけじゃないんですけどね(苦笑)。

 | 

Linux Zaurus Technical Know-howにもどる