From 01ccc633dce5cf9880bebe5f4ffe655386b73a34 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sun, 3 Nov 2013 15:36:19 +0100 Subject: Started working on the biome info editor --- biome_info_editor.go | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 biome_info_editor.go (limited to 'biome_info_editor.go') 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 } -- cgit v1.2.3-54-g00ecf From 6e630d91c25f8fe4767fc94d2b301b640a2fc219 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sun, 3 Nov 2013 19:47:19 +0100 Subject: Loading partially implemented --- biome_info_editor.go | 62 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 14 deletions(-) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index 9768f61..1ae98c3 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -3,11 +3,10 @@ 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" + "os" "strconv" - "unicode" ) type biomeEditFrame struct { @@ -29,7 +28,7 @@ func newBiomeEditFrame() *biomeEditFrame { 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) @@ -76,7 +75,7 @@ func (frm *biomeEditFrame) getBiomeInfo() (BiomeInfo, bool) { } name := frm.nameInput.GetText() - if name != "" { + if name == "" { return BiomeInfo{}, false } @@ -91,15 +90,8 @@ func (frm *biomeEditFrame) getBiomeInfo() (BiomeInfo, bool) { } 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() != "" + _, ok := frm.getBiomeInfo() + return ok } func (frm *biomeEditFrame) unlockApply() { @@ -118,6 +110,7 @@ func NewBiomeInfoEditor(biomes []BiomeInfo) *BiomeInfoEditor { } ed.SetModal(true) + vbox := ed.GetVBox() btnHBox := gtk.NewHBox(true, 0) @@ -148,8 +141,49 @@ func (ed *BiomeInfoEditor) reset() { // TODO: Update view } +func mkBioFFilters() (*gtk.FileFilter, *gtk.FileFilter) { + f1 := gtk.NewFileFilter() + f1.AddPattern("*.biomes") + f1.SetName("Biome Infos (.biomes)") + + f2 := gtk.NewFileFilter() + f2.AddPattern("*") + f2.SetName("All files") + + return f1, f2 +} + +func errdlg(msg string, params ...interface{}) { + dlg := gtk.NewMessageDialog(nil, gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg, params...) + dlg.Run() + dlg.Destroy() +} + func (ed *BiomeInfoEditor) load() { - // TODO + f1, f2 := mkBioFFilters() + dlg := gtk.NewFileChooserDialog("Load", nil, gtk.FILE_CHOOSER_ACTION_OPEN, "OK", gtk.RESPONSE_OK, "Cancel", gtk.RESPONSE_CANCEL) + dlg.AddFilter(f1) + dlg.AddFilter(f2) + defer dlg.Destroy() + if dlg.Run() == gtk.RESPONSE_OK { + path := dlg.GetFilename() + + f, err := os.Open(path) + if err != nil { + errdlg("Could not load biome infos %s:\n%s", path, err.Error()) + return + } + defer f.Close() + + infos, err := ReadBiomeInfos(f) + if err != nil { + errdlg("Could not load biome infos %s:\n%s", path, err.Error()) + return + } + + ed.biomes = infos + // TODO: Update view + } } func (ed *BiomeInfoEditor) save() { -- cgit v1.2.3-54-g00ecf From cecd4ca589ec3de1d22727fb265f0fbe50689acd Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sun, 3 Nov 2013 20:40:48 +0100 Subject: Saving biome infos implemented --- biome_info_editor.go | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index 1ae98c3..53c8a03 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -160,25 +160,23 @@ func errdlg(msg string, params ...interface{}) { } func (ed *BiomeInfoEditor) load() { - f1, f2 := mkBioFFilters() dlg := gtk.NewFileChooserDialog("Load", nil, gtk.FILE_CHOOSER_ACTION_OPEN, "OK", gtk.RESPONSE_OK, "Cancel", gtk.RESPONSE_CANCEL) - dlg.AddFilter(f1) - dlg.AddFilter(f2) defer dlg.Destroy() +askFilename: if dlg.Run() == gtk.RESPONSE_OK { path := dlg.GetFilename() f, err := os.Open(path) if err != nil { errdlg("Could not load biome infos %s:\n%s", path, err.Error()) - return + goto askFilename } defer f.Close() infos, err := ReadBiomeInfos(f) if err != nil { errdlg("Could not load biome infos %s:\n%s", path, err.Error()) - return + goto askFilename } ed.biomes = infos @@ -187,7 +185,34 @@ func (ed *BiomeInfoEditor) load() { } func (ed *BiomeInfoEditor) save() { - // TODO + dlg := gtk.NewFileChooserDialog("Save", nil, gtk.FILE_CHOOSER_ACTION_SAVE, "OK", gtk.RESPONSE_OK, "Cancel", gtk.RESPONSE_CANCEL) + defer dlg.Destroy() +askFilename: + if dlg.Run() == gtk.RESPONSE_OK { + path := dlg.GetFilename() + + if _, err := os.Stat(path); err == nil { + qdlg := gtk.NewMessageDialog(nil, gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, "File %s already exists. Overwrite?", path) + resp := qdlg.Run() + qdlg.Destroy() + + if resp != gtk.RESPONSE_YES { + goto askFilename + } + } + + f, err := os.Create(path) + if err != nil { + errdlg("Could not save biome infos %s:\n%s", path, err.Error()) + goto askFilename + } + defer f.Close() + + if err := WriteBiomeInfos(ed.biomes, f); err != nil { + errdlg("Could not save biome infos %s:\n%s", path, err.Error()) + goto askFilename + } + } } func (ed *BiomeInfoEditor) Biomes() []BiomeInfo { return ed.biomes } -- cgit v1.2.3-54-g00ecf From 034dcea37e494fb6b27f78fb0c47b29388a8faac Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sun, 3 Nov 2013 22:33:04 +0100 Subject: Added biome list to biome editor --- biome_info_editor.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 77 insertions(+), 9 deletions(-) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index 53c8a03..0109068 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -4,6 +4,8 @@ import ( "fmt" "github.com/kch42/gomcmap/mcmap" "github.com/mattn/go-gtk/gdk" + "github.com/mattn/go-gtk/gdkpixbuf" + "github.com/mattn/go-gtk/glib" "github.com/mattn/go-gtk/gtk" "os" "strconv" @@ -98,15 +100,80 @@ func (frm *biomeEditFrame) unlockApply() { frm.applyBtn.SetSensitive(frm.checkOK()) } +type biomeList struct { + *gtk.HBox + treeview *gtk.TreeView + lStore *gtk.ListStore + biomes []BiomeInfo +} + +func newBiomeList() *biomeList { + bl := &biomeList{ + HBox: gtk.NewHBox(false, 0), + treeview: gtk.NewTreeView(), + lStore: gtk.NewListStore(gdkpixbuf.GetType(), glib.G_TYPE_STRING, glib.G_TYPE_STRING, glib.G_TYPE_STRING), + } + + scroll := gtk.NewScrolledWindow(nil, nil) + scroll.SetPolicy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + scroll.Add(bl.treeview) + bl.PackStart(scroll, true, true, 3) + + bl.treeview.SetModel(bl.lStore) + bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Color", gtk.NewCellRendererPixbuf(), "pixbuf", 0)) + bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("ID", gtk.NewCellRendererText(), "text", 1)) + bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Snowline", gtk.NewCellRendererText(), "text", 2)) + bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Name", gtk.NewCellRendererText(), "text", 3)) + + bl.PackStart(bl.treeview, true, true, 3) + + vbox := gtk.NewVBox(false, 0) + + addBtn := gtk.NewButton() + addBtn.Add(gtk.NewImageFromStock(gtk.STOCK_ADD, gtk.ICON_SIZE_SMALL_TOOLBAR)) + delBtn := gtk.NewButton() + delBtn.Add(gtk.NewImageFromStock(gtk.STOCK_DELETE, gtk.ICON_SIZE_SMALL_TOOLBAR)) + upBtn := gtk.NewButton() + upBtn.Add(gtk.NewImageFromStock(gtk.STOCK_GO_UP, gtk.ICON_SIZE_SMALL_TOOLBAR)) + downBtn := gtk.NewButton() + downBtn.Add(gtk.NewImageFromStock(gtk.STOCK_GO_DOWN, gtk.ICON_SIZE_SMALL_TOOLBAR)) + + addBtn.Connect("clicked", bl.onAdd) + delBtn.Connect("clicked", bl.onDel) + upBtn.Connect("clicked", bl.onUp) + downBtn.Connect("clicked", bl.onDown) + + vbox.PackStart(addBtn, false, false, 3) + vbox.PackStart(delBtn, false, false, 3) + vbox.PackStart(upBtn, false, false, 3) + vbox.PackStart(downBtn, false, false, 3) + + bl.PackStart(vbox, false, false, 0) + + return bl +} + +func (bl *biomeList) SetBiomes(biomes []BiomeInfo) { + bl.biomes = biomes + // TODO: Update View +} + +func (bl *biomeList) Biomes() []BiomeInfo { return bl.biomes } + +func (bl *biomeList) onAdd() {} // TODO +func (bl *biomeList) onDel() {} // TODO +func (bl *biomeList) onUp() {} // TODO +func (bl *biomeList) onDown() {} // TODO + type BiomeInfoEditor struct { *gtk.Dialog - biomes []BiomeInfo + biolist *biomeList } func NewBiomeInfoEditor(biomes []BiomeInfo) *BiomeInfoEditor { ed := &BiomeInfoEditor{ - Dialog: gtk.NewDialog(), - biomes: biomes, + Dialog: gtk.NewDialog(), + biolist: newBiomeList(), } ed.SetModal(true) @@ -127,6 +194,9 @@ func NewBiomeInfoEditor(biomes []BiomeInfo) *BiomeInfoEditor { btnHBox.PackStart(saveBtn, true, true, 3) vbox.PackStart(btnHBox, false, false, 3) + ed.biolist.SetBiomes(biomes) + vbox.PackStart(ed.biolist, false, false, 3) + editFrame := newBiomeEditFrame() vbox.PackStart(editFrame, false, false, 3) @@ -137,8 +207,7 @@ func NewBiomeInfoEditor(biomes []BiomeInfo) *BiomeInfoEditor { } func (ed *BiomeInfoEditor) reset() { - ed.biomes = ReadDefaultBiomes() - // TODO: Update view + ed.biolist.SetBiomes(ReadDefaultBiomes()) } func mkBioFFilters() (*gtk.FileFilter, *gtk.FileFilter) { @@ -179,8 +248,7 @@ askFilename: goto askFilename } - ed.biomes = infos - // TODO: Update view + ed.biolist.SetBiomes(infos) } } @@ -208,11 +276,11 @@ askFilename: } defer f.Close() - if err := WriteBiomeInfos(ed.biomes, f); err != nil { + if err := WriteBiomeInfos(ed.biolist.Biomes(), f); err != nil { errdlg("Could not save biome infos %s:\n%s", path, err.Error()) goto askFilename } } } -func (ed *BiomeInfoEditor) Biomes() []BiomeInfo { return ed.biomes } +func (ed *BiomeInfoEditor) Biomes() []BiomeInfo { return ed.biolist.Biomes() } -- cgit v1.2.3-54-g00ecf From 1a9da3d899699a2d76116454f7daa2f179b0c109 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 4 Nov 2013 11:24:09 +0100 Subject: We don't need to pack the treeview here Is already in a scrolled window --- biome_info_editor.go | 2 -- 1 file changed, 2 deletions(-) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index 0109068..cb24058 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -125,8 +125,6 @@ func newBiomeList() *biomeList { bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Snowline", gtk.NewCellRendererText(), "text", 2)) bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Name", gtk.NewCellRendererText(), "text", 3)) - bl.PackStart(bl.treeview, true, true, 3) - vbox := gtk.NewVBox(false, 0) addBtn := gtk.NewButton() -- cgit v1.2.3-54-g00ecf From 69902644f31689a3f9e19c950718ced8a462494b Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 4 Nov 2013 12:35:52 +0100 Subject: TreeView is working :) --- biome_info_editor.go | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index cb24058..27c18ef 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/kch42/gomcmap/mcmap" "github.com/mattn/go-gtk/gdk" - "github.com/mattn/go-gtk/gdkpixbuf" "github.com/mattn/go-gtk/glib" "github.com/mattn/go-gtk/gtk" "os" @@ -111,7 +110,7 @@ func newBiomeList() *biomeList { bl := &biomeList{ HBox: gtk.NewHBox(false, 0), treeview: gtk.NewTreeView(), - lStore: gtk.NewListStore(gdkpixbuf.GetType(), glib.G_TYPE_STRING, glib.G_TYPE_STRING, glib.G_TYPE_STRING), + lStore: gtk.NewListStore(glib.G_TYPE_STRING, glib.G_TYPE_STRING, glib.G_TYPE_STRING, glib.G_TYPE_STRING), } scroll := gtk.NewScrolledWindow(nil, nil) @@ -120,11 +119,13 @@ func newBiomeList() *biomeList { bl.PackStart(scroll, true, true, 3) bl.treeview.SetModel(bl.lStore) - bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Color", gtk.NewCellRendererPixbuf(), "pixbuf", 0)) + bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Color", gtk.NewCellRendererText(), "background", 0)) bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("ID", gtk.NewCellRendererText(), "text", 1)) bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Snowline", gtk.NewCellRendererText(), "text", 2)) bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Name", gtk.NewCellRendererText(), "text", 3)) + bl.treeview.Connect("cursor-changed", bl.onCursorChanged) + vbox := gtk.NewVBox(false, 0) addBtn := gtk.NewButton() @@ -151,13 +152,27 @@ func newBiomeList() *biomeList { return bl } +func (bl *biomeList) setBiome(iter *gtk.TreeIter, biome BiomeInfo) { + bl.lStore.Set(iter, biome.Color, strconv.FormatInt(int64(biome.ID), 10), strconv.FormatInt(int64(biome.SnowLine), 10), biome.Name) +} + func (bl *biomeList) SetBiomes(biomes []BiomeInfo) { bl.biomes = biomes - // TODO: Update View + + bl.lStore.Clear() + var iter gtk.TreeIter + for _, bio := range biomes { + bl.lStore.Append(&iter) + bl.setBiome(&iter, bio) + } } func (bl *biomeList) Biomes() []BiomeInfo { return bl.biomes } +func (bl *biomeList) onCursorChanged() { + // TODO +} + func (bl *biomeList) onAdd() {} // TODO func (bl *biomeList) onDel() {} // TODO func (bl *biomeList) onUp() {} // TODO @@ -193,7 +208,7 @@ func NewBiomeInfoEditor(biomes []BiomeInfo) *BiomeInfoEditor { vbox.PackStart(btnHBox, false, false, 3) ed.biolist.SetBiomes(biomes) - vbox.PackStart(ed.biolist, false, false, 3) + vbox.PackStart(ed.biolist, true, true, 3) editFrame := newBiomeEditFrame() vbox.PackStart(editFrame, false, false, 3) -- cgit v1.2.3-54-g00ecf From c14bae386dc7a8db6dc1dd81facce8e317aa45f9 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 4 Nov 2013 13:20:13 +0100 Subject: Adding, deleting and modifying biomes works! --- biome_info_editor.go | 83 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 79 insertions(+), 4 deletions(-) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index 27c18ef..80f893c 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -15,6 +15,7 @@ type biomeEditFrame struct { applyBtn *gtk.Button idInput, snowLineInput, nameInput *gtk.Entry colorInput *gtk.ColorButton + bList *biomeList } func newBiomeEditFrame() *biomeEditFrame { @@ -51,6 +52,8 @@ func newBiomeEditFrame() *biomeEditFrame { vbox.PackStart(frm.applyBtn, false, false, 3) frm.Add(vbox) + frm.applyBtn.Connect("clicked", frm.doApply) + return frm } @@ -61,6 +64,15 @@ func (frm *biomeEditFrame) setBiomeInfo(info BiomeInfo) { frm.nameInput.SetText(info.Name) } +func (frm *biomeEditFrame) doApply() { + biome, ok := frm.getBiomeInfo() + if !ok { + return + } + + frm.bList.setCurrentBiome(biome) +} + func (frm *biomeEditFrame) getBiomeInfo() (BiomeInfo, bool) { id, err := strconv.ParseUint(frm.idInput.GetText(), 10, 8) if err != nil { @@ -86,7 +98,7 @@ func (frm *biomeEditFrame) getBiomeInfo() (BiomeInfo, bool) { ID: mcmap.Biome(id), SnowLine: int(snow), Name: name, - Color: fmt.Sprintf("#%02x%02x%02x", col.Red()<<8, col.Green()<<8, col.Blue()<<8), + Color: fmt.Sprintf("#%02x%02x%02x", col.Red()>>8, col.Green()>>8, col.Blue()>>8), }, true } @@ -104,6 +116,7 @@ type biomeList struct { treeview *gtk.TreeView lStore *gtk.ListStore biomes []BiomeInfo + editfrm *biomeEditFrame } func newBiomeList() *biomeList { @@ -124,6 +137,7 @@ func newBiomeList() *biomeList { bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Snowline", gtk.NewCellRendererText(), "text", 2)) bl.treeview.AppendColumn(gtk.NewTreeViewColumnWithAttributes("Name", gtk.NewCellRendererText(), "text", 3)) + bl.treeview.GetSelection().SetMode(gtk.SELECTION_SINGLE) bl.treeview.Connect("cursor-changed", bl.onCursorChanged) vbox := gtk.NewVBox(false, 0) @@ -156,6 +170,15 @@ func (bl *biomeList) setBiome(iter *gtk.TreeIter, biome BiomeInfo) { bl.lStore.Set(iter, biome.Color, strconv.FormatInt(int64(biome.ID), 10), strconv.FormatInt(int64(biome.SnowLine), 10), biome.Name) } +func (bl *biomeList) setCurrentBiome(biome BiomeInfo) { + idx, iter := bl.treeviewIdx() + if idx < 0 { + return + } + bl.biomes[idx] = biome + bl.setBiome(iter, biome) +} + func (bl *biomeList) SetBiomes(biomes []BiomeInfo) { bl.biomes = biomes @@ -169,15 +192,66 @@ func (bl *biomeList) SetBiomes(biomes []BiomeInfo) { func (bl *biomeList) Biomes() []BiomeInfo { return bl.biomes } +func (bl *biomeList) treeviewIdx() (int, *gtk.TreeIter) { + var path *gtk.TreePath + var column *gtk.TreeViewColumn + bl.treeview.GetCursor(&path, &column) + + idxs := path.GetIndices() + if len(idxs) != 1 { + return -1, nil + } + var iter gtk.TreeIter + bl.lStore.GetIter(&iter, path) + + return idxs[0], &iter +} + func (bl *biomeList) onCursorChanged() { - // TODO + idx, _ := bl.treeviewIdx() + if idx < 0 { + return + } + + bl.editfrm.setBiomeInfo(bl.biomes[idx]) +} + +func (bl *biomeList) onAdd() { + bio := BiomeInfo{ + Color: "#000000", + ID: 0, + SnowLine: 255, + Name: "(new)", + } + bl.biomes = append(bl.biomes, bio) + + var iter gtk.TreeIter + bl.lStore.Append(&iter) + bl.setBiome(&iter, bio) + path := gtk.NewTreePath() + path.AppendIndex(len(bl.biomes) - 1) + bl.treeview.SetCursor(path, nil, false) } -func (bl *biomeList) onAdd() {} // TODO -func (bl *biomeList) onDel() {} // TODO +func (bl *biomeList) onDel() { + idx, iter := bl.treeviewIdx() + if idx < 0 { + return + } + + copy(bl.biomes[idx:], bl.biomes[idx+1:]) + bl.biomes = bl.biomes[:len(bl.biomes)-1] + + bl.lStore.Remove(iter) +} func (bl *biomeList) onUp() {} // TODO func (bl *biomeList) onDown() {} // TODO +func connectBiomeListEditFrame(bl *biomeList, frm *biomeEditFrame) { + bl.editfrm = frm + frm.bList = bl +} + type BiomeInfoEditor struct { *gtk.Dialog biolist *biomeList @@ -211,6 +285,7 @@ func NewBiomeInfoEditor(biomes []BiomeInfo) *BiomeInfoEditor { vbox.PackStart(ed.biolist, true, true, 3) editFrame := newBiomeEditFrame() + connectBiomeListEditFrame(ed.biolist, editFrame) vbox.PackStart(editFrame, false, false, 3) ed.AddButton("Cancel", gtk.RESPONSE_CANCEL) -- cgit v1.2.3-54-g00ecf From fd2bd4a1379c5b030bfab933678fa933d9c05245 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 4 Nov 2013 13:49:00 +0100 Subject: Biomes can be moved around --- biome_info_editor.go | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index 80f893c..8b47308 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -171,7 +171,7 @@ func (bl *biomeList) setBiome(iter *gtk.TreeIter, biome BiomeInfo) { } func (bl *biomeList) setCurrentBiome(biome BiomeInfo) { - idx, iter := bl.treeviewIdx() + idx, iter, _ := bl.treeviewIdx() if idx < 0 { return } @@ -192,23 +192,23 @@ func (bl *biomeList) SetBiomes(biomes []BiomeInfo) { func (bl *biomeList) Biomes() []BiomeInfo { return bl.biomes } -func (bl *biomeList) treeviewIdx() (int, *gtk.TreeIter) { +func (bl *biomeList) treeviewIdx() (int, *gtk.TreeIter, *gtk.TreePath) { var path *gtk.TreePath var column *gtk.TreeViewColumn bl.treeview.GetCursor(&path, &column) idxs := path.GetIndices() if len(idxs) != 1 { - return -1, nil + return -1, nil, nil } var iter gtk.TreeIter bl.lStore.GetIter(&iter, path) - return idxs[0], &iter + return idxs[0], &iter, path } func (bl *biomeList) onCursorChanged() { - idx, _ := bl.treeviewIdx() + idx, _, _ := bl.treeviewIdx() if idx < 0 { return } @@ -234,7 +234,7 @@ func (bl *biomeList) onAdd() { } func (bl *biomeList) onDel() { - idx, iter := bl.treeviewIdx() + idx, iter, _ := bl.treeviewIdx() if idx < 0 { return } @@ -244,8 +244,35 @@ func (bl *biomeList) onDel() { bl.lStore.Remove(iter) } -func (bl *biomeList) onUp() {} // TODO -func (bl *biomeList) onDown() {} // TODO +func (bl *biomeList) onUp() { + idx, iter, path := bl.treeviewIdx() + if idx <= 0 { + return + } + + path.Prev() + var iter2 gtk.TreeIter + bl.lStore.GetIter(&iter2, path) + + bl.lStore.MoveBefore(iter, &iter2) + + bl.biomes[idx], bl.biomes[idx-1] = bl.biomes[idx-1], bl.biomes[idx] +} + +func (bl *biomeList) onDown() { + idx, iter, path := bl.treeviewIdx() + if (idx < 0) || (idx >= len(bl.biomes)-1) { + return + } + + path.Next() + var iter2 gtk.TreeIter + bl.lStore.GetIter(&iter2, path) + + bl.lStore.MoveAfter(iter, &iter2) + + bl.biomes[idx], bl.biomes[idx+1] = bl.biomes[idx+1], bl.biomes[idx] +} func connectBiomeListEditFrame(bl *biomeList, frm *biomeEditFrame) { bl.editfrm = frm -- cgit v1.2.3-54-g00ecf From 25135a163aeb6891614fd18e1a9316955ec3920a Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 4 Nov 2013 13:58:02 +0100 Subject: onDel re-selects the current entry --- biome_info_editor.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index 8b47308..f4f23cd 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -234,7 +234,7 @@ func (bl *biomeList) onAdd() { } func (bl *biomeList) onDel() { - idx, iter, _ := bl.treeviewIdx() + idx, iter, path := bl.treeviewIdx() if idx < 0 { return } @@ -243,6 +243,9 @@ func (bl *biomeList) onDel() { bl.biomes = bl.biomes[:len(bl.biomes)-1] bl.lStore.Remove(iter) + if len(bl.biomes) > 0 { + bl.treeview.SetCursor(path, nil, false) + } } func (bl *biomeList) onUp() { idx, iter, path := bl.treeviewIdx() -- cgit v1.2.3-54-g00ecf From bb8ec813d87a15519749c44aa6f9e8b7b85a443d Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 4 Nov 2013 13:58:54 +0100 Subject: Buttons of biome list are now (de)activated, depending on index --- biome_info_editor.go | 60 +++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 26 deletions(-) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index f4f23cd..5d10320 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -113,10 +113,11 @@ func (frm *biomeEditFrame) unlockApply() { type biomeList struct { *gtk.HBox - treeview *gtk.TreeView - lStore *gtk.ListStore - biomes []BiomeInfo - editfrm *biomeEditFrame + treeview *gtk.TreeView + lStore *gtk.ListStore + biomes []BiomeInfo + editfrm *biomeEditFrame + addBtn, delBtn, upBtn, downBtn *gtk.Button } func newBiomeList() *biomeList { @@ -124,6 +125,10 @@ func newBiomeList() *biomeList { HBox: gtk.NewHBox(false, 0), treeview: gtk.NewTreeView(), lStore: gtk.NewListStore(glib.G_TYPE_STRING, glib.G_TYPE_STRING, glib.G_TYPE_STRING, glib.G_TYPE_STRING), + addBtn: gtk.NewButton(), + delBtn: gtk.NewButton(), + upBtn: gtk.NewButton(), + downBtn: gtk.NewButton(), } scroll := gtk.NewScrolledWindow(nil, nil) @@ -142,24 +147,24 @@ func newBiomeList() *biomeList { vbox := gtk.NewVBox(false, 0) - addBtn := gtk.NewButton() - addBtn.Add(gtk.NewImageFromStock(gtk.STOCK_ADD, gtk.ICON_SIZE_SMALL_TOOLBAR)) - delBtn := gtk.NewButton() - delBtn.Add(gtk.NewImageFromStock(gtk.STOCK_DELETE, gtk.ICON_SIZE_SMALL_TOOLBAR)) - upBtn := gtk.NewButton() - upBtn.Add(gtk.NewImageFromStock(gtk.STOCK_GO_UP, gtk.ICON_SIZE_SMALL_TOOLBAR)) - downBtn := gtk.NewButton() - downBtn.Add(gtk.NewImageFromStock(gtk.STOCK_GO_DOWN, gtk.ICON_SIZE_SMALL_TOOLBAR)) - - addBtn.Connect("clicked", bl.onAdd) - delBtn.Connect("clicked", bl.onDel) - upBtn.Connect("clicked", bl.onUp) - downBtn.Connect("clicked", bl.onDown) - - vbox.PackStart(addBtn, false, false, 3) - vbox.PackStart(delBtn, false, false, 3) - vbox.PackStart(upBtn, false, false, 3) - vbox.PackStart(downBtn, false, false, 3) + bl.addBtn.Add(gtk.NewImageFromStock(gtk.STOCK_ADD, gtk.ICON_SIZE_SMALL_TOOLBAR)) + bl.delBtn.Add(gtk.NewImageFromStock(gtk.STOCK_DELETE, gtk.ICON_SIZE_SMALL_TOOLBAR)) + bl.upBtn.Add(gtk.NewImageFromStock(gtk.STOCK_GO_UP, gtk.ICON_SIZE_SMALL_TOOLBAR)) + bl.downBtn.Add(gtk.NewImageFromStock(gtk.STOCK_GO_DOWN, gtk.ICON_SIZE_SMALL_TOOLBAR)) + + bl.addBtn.Connect("clicked", bl.onAdd) + bl.delBtn.Connect("clicked", bl.onDel) + bl.upBtn.Connect("clicked", bl.onUp) + bl.downBtn.Connect("clicked", bl.onDown) + + bl.delBtn.SetSensitive(false) + bl.upBtn.SetSensitive(false) + bl.downBtn.SetSensitive(false) + + vbox.PackStart(bl.addBtn, false, false, 3) + vbox.PackStart(bl.delBtn, false, false, 3) + vbox.PackStart(bl.upBtn, false, false, 3) + vbox.PackStart(bl.downBtn, false, false, 3) bl.PackStart(vbox, false, false, 0) @@ -209,11 +214,14 @@ func (bl *biomeList) treeviewIdx() (int, *gtk.TreeIter, *gtk.TreePath) { func (bl *biomeList) onCursorChanged() { idx, _, _ := bl.treeviewIdx() - if idx < 0 { - return - } - bl.editfrm.setBiomeInfo(bl.biomes[idx]) + bl.delBtn.SetSensitive(idx >= 0) + bl.upBtn.SetSensitive(idx >= 1) + bl.downBtn.SetSensitive((idx >= 0) && (idx < len(bl.biomes)-1)) + + if idx >= 0 { + bl.editfrm.setBiomeInfo(bl.biomes[idx]) + } } func (bl *biomeList) onAdd() { -- cgit v1.2.3-54-g00ecf From 037fc4ff36521c19626e79ce40990ecf420ce4f6 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 4 Nov 2013 14:40:27 +0100 Subject: Added some tooltips --- biome_info_editor.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'biome_info_editor.go') diff --git a/biome_info_editor.go b/biome_info_editor.go index 5d10320..61a1d7e 100644 --- a/biome_info_editor.go +++ b/biome_info_editor.go @@ -39,6 +39,9 @@ func newBiomeEditFrame() *biomeEditFrame { vbox := gtk.NewVBox(false, 0) hbox := gtk.NewHBox(false, 0) + frm.idInput.SetTooltipText("The data value of the Biome [0-255]") + frm.snowLineInput.SetTooltipText(fmt.Sprintf("Height (Y coordinate) at which snowfall starts (-1 or %d for no snowfall, 0 for always snowy)", mcmap.ChunkSizeY)) + hbox.PackStart(gtk.NewLabel("Color:"), false, false, 0) hbox.PackStart(frm.colorInput, false, false, 3) hbox.PackStart(gtk.NewLabel("ID:"), false, false, 0) -- cgit v1.2.3-54-g00ecf