ぷらこのきろく

メモとかテストとか備忘録とか

walk Layout

今回遊んだコードはこれがベース。昨日(だったけ)作ったコードから少しだけ変えた。

package main

import (
	"github.com/lxn/walk"
	. "github.com/lxn/walk/declarative"
)

func main() {
	var te1, te2  *walk.TextEdit
	
	MainWindow{
		Title: "hello",
		Size: Size{320, 240},
		Layout: HBox{},
		Children: []Widget {
			TextEdit {
				AssignTo: &te1,
			},
			TextEdit {
				AssignTo: &te2,
			},
		},
	}.Run()
}

Layoutというのはインターフェイス型で、それを満たす構造体にHBoxとVBoxと、Gridというのがあるみたい。
どれも

type HBox struct {
	Margins     Margins
	Spacing     int
	MarginsZero bool
	SpacingZero bool
}

という感じになってるみたいなんだけど、とりあえずはこの中身をいじるのはまた今度。
Gridはおいといて、'V'と'H'はVertical(垂直)とHorizontal(水平)の略であるのは想像に難くない。

前の日記に書き忘れたが、manifestファイルというのを書かないといけないみたい。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
	<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
	<dependency>
		<dependentAssembly>
			<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
		</dependentAssembly>
	</dependency>
</assembly>

これをtestwalk.exe.manifestという名前で保存する。
どうも使い回しができるっぽいので、(実行ファイル名).manifestという名前でコピーして使ってる。

まあとりあえず、動かした結果がこれ。
f:id:prizeout:20130918001808j:plain
テキストボックスが二つ横に並んでる。

そして

		Layout: VBox{},

と書き換えると
f:id:prizeout:20130918002220j:plain
こんな感じになる。予想どおりVerticalとHorizontalだった。

Gridは試してみたら実行時エラーで動かなかったので、違う使い方かもしれない。

Childrenは、Widget型のスライスで、まあWidget型がいくつか並んでいるみたい。
そしてWidget型はインターフェイスで、とにかくたくさんの型が入るみたい。
今回使ったTextEdit型の構造体とか、今度使う予定のPushButton型とか、いろいろ。
とりあえずdeclarativeの下で

grep Widgetinfo *.go | grep func | less

とかしたらいっぱいでてきたので、まあそれくらいいっぱい型があるんだろう。

今日はこれぐらいで許してもらって、次はボタンを押してなんかできるようになるのが目標。