diff options
| author | Kevin Chabowski <kevin@kch42.de> | 2013-11-03 15:36:19 +0100 | 
|---|---|---|
| committer | Kevin Chabowski <kevin@kch42.de> | 2013-11-03 15:36:19 +0100 | 
| commit | 01ccc633dce5cf9880bebe5f4ffe655386b73a34 (patch) | |
| tree | 4832dd16732680d11677bd8ec1dc6451190aed21 | |
| parent | 613c8855cd8fcace4b7ba4f6662bd0486e9ad5f1 (diff) | |
| download | biomed-01ccc633dce5cf9880bebe5f4ffe655386b73a34.tar.gz biomed-01ccc633dce5cf9880bebe5f4ffe655386b73a34.tar.bz2 biomed-01ccc633dce5cf9880bebe5f4ffe655386b73a34.zip  | |
Started working on the biome info editor
| -rw-r--r-- | biome_info_editor.go | 159 | ||||
| -rw-r--r-- | main.go | 9 | 
2 files changed, 166 insertions, 2 deletions
diff --git a/biome_info_editor.go b/biome_info_editor.go new file mode 100644 index 0000000..9768f61 --- /dev/null +++ b/biome_info_editor.go @@ -0,0 +1,159 @@ +package main + +import ( +	"fmt" +	"github.com/kch42/gomcmap/mcmap" +	"github.com/kch42/kagus" +	"github.com/mattn/go-gtk/gdk" +	"github.com/mattn/go-gtk/gtk" +	"strconv" +	"unicode" +) + +type biomeEditFrame struct { +	*gtk.Frame +	applyBtn                          *gtk.Button +	idInput, snowLineInput, nameInput *gtk.Entry +	colorInput                        *gtk.ColorButton +} + +func newBiomeEditFrame() *biomeEditFrame { +	frm := &biomeEditFrame{ +		Frame:         gtk.NewFrame("Edit Biome"), +		applyBtn:      gtk.NewButtonWithLabel("Apply"), +		idInput:       gtk.NewEntry(), +		snowLineInput: gtk.NewEntry(), +		nameInput:     gtk.NewEntry(), +		colorInput:    gtk.NewColorButton(), +	} + +	frm.idInput.SetSizeRequest(40, -1) +	frm.snowLineInput.SetSizeRequest(40, -1) +	 +	frm.idInput.Connect("changed", frm.unlockApply) +	frm.nameInput.Connect("changed", frm.unlockApply) +	frm.snowLineInput.Connect("changed", frm.unlockApply) +	frm.applyBtn.SetSensitive(false) + +	vbox := gtk.NewVBox(false, 0) +	hbox := gtk.NewHBox(false, 0) + +	hbox.PackStart(gtk.NewLabel("Color:"), false, false, 0) +	hbox.PackStart(frm.colorInput, false, false, 3) +	hbox.PackStart(gtk.NewLabel("ID:"), false, false, 0) +	hbox.PackStart(frm.idInput, false, false, 3) +	hbox.PackStart(gtk.NewLabel("Snowline:"), false, false, 0) +	hbox.PackStart(frm.snowLineInput, false, false, 3) +	hbox.PackStart(gtk.NewLabel("Name:"), false, false, 0) +	hbox.PackStart(frm.nameInput, true, true, 3) + +	vbox.PackStart(hbox, false, false, 0) +	vbox.PackStart(frm.applyBtn, false, false, 3) +	frm.Add(vbox) + +	return frm +} + +func (frm *biomeEditFrame) setBiomeInfo(info BiomeInfo) { +	frm.colorInput.SetColor(gdk.NewColor(info.Color)) +	frm.idInput.SetText(strconv.FormatInt(int64(info.ID), 10)) +	frm.snowLineInput.SetText(strconv.FormatInt(int64(info.SnowLine), 10)) +	frm.nameInput.SetText(info.Name) +} + +func (frm *biomeEditFrame) getBiomeInfo() (BiomeInfo, bool) { +	id, err := strconv.ParseUint(frm.idInput.GetText(), 10, 8) +	if err != nil { +		return BiomeInfo{}, false +	} + +	snow, err := strconv.ParseInt(frm.snowLineInput.GetText(), 10, 32) +	if err != nil { +		return BiomeInfo{}, false +	} +	if (snow > mcmap.ChunkSizeY) || (snow < 0) { +		snow = mcmap.ChunkSizeY +	} + +	name := frm.nameInput.GetText() +	if name != "" { +		return BiomeInfo{}, false +	} + +	col := frm.colorInput.GetColor() + +	return BiomeInfo{ +		ID:       mcmap.Biome(id), +		SnowLine: int(snow), +		Name:     name, +		Color:    fmt.Sprintf("#%02x%02x%02x", col.Red()<<8, col.Green()<<8, col.Blue()<<8), +	}, true +} + +func (frm *biomeEditFrame) checkOK() bool { +	if id := frm.idInput.GetText(); (id == "") || (!kagus.StringConsistsOf(id, unicode.IsNumber)) { +		return false +	} + +	if snow := frm.snowLineInput.GetText(); (snow == "") || (!kagus.StringConsistsOf(snow, unicode.IsNumber)) { +		return false +	} + +	return frm.nameInput.GetText() != "" +} + +func (frm *biomeEditFrame) unlockApply() { +	frm.applyBtn.SetSensitive(frm.checkOK()) +} + +type BiomeInfoEditor struct { +	*gtk.Dialog +	biomes []BiomeInfo +} + +func NewBiomeInfoEditor(biomes []BiomeInfo) *BiomeInfoEditor { +	ed := &BiomeInfoEditor{ +		Dialog: gtk.NewDialog(), +		biomes: biomes, +	} + +	ed.SetModal(true) +	vbox := ed.GetVBox() + +	btnHBox := gtk.NewHBox(true, 0) + +	resetBtn := gtk.NewButtonWithLabel("Reset to defaults") +	resetBtn.Connect("clicked", ed.reset) +	loadBtn := gtk.NewButtonWithLabel("Load from file ...") +	loadBtn.Connect("clicked", ed.load) +	saveBtn := gtk.NewButtonWithLabel("Save to file ...") +	saveBtn.Connect("clicked", ed.save) + +	btnHBox.PackStart(resetBtn, true, true, 3) +	btnHBox.PackStart(loadBtn, true, true, 3) +	btnHBox.PackStart(saveBtn, true, true, 3) +	vbox.PackStart(btnHBox, false, false, 3) + +	editFrame := newBiomeEditFrame() +	vbox.PackStart(editFrame, false, false, 3) + +	ed.AddButton("Cancel", gtk.RESPONSE_CANCEL) +	ed.AddButton("OK", gtk.RESPONSE_OK) +	ed.ShowAll() +	return ed +} + +func (ed *BiomeInfoEditor) reset() { +	ed.biomes = ReadDefaultBiomes() +	// TODO: Update view +} + +func (ed *BiomeInfoEditor) load() { +	// TODO +} + +func (ed *BiomeInfoEditor) save() { +	// TODO +} + +func (ed *BiomeInfoEditor) Biomes() []BiomeInfo { return ed.biomes } @@ -111,8 +111,13 @@ func (g *GUI) mkMenuBar() *gtk.MenuBar {  	confbiomes := gtk.NewMenuItemWithLabel("Configure Biomes")  	confbiomes.Connect("activate", func() { -		// TODO: Display awesome biome editor dialog thing. -		fmt.Println("(...)") +		ed := NewBiomeInfoEditor(g.biomes) +		rv := ed.Run() +		ed.Destroy() +		if rv == gtk.RESPONSE_OK { +			g.biomes = ed.Biomes() +			g.updateBiomeInfo() +		}  	})  	prefMenu.Append(confbiomes)  | 
