From 2d55d25eaa27227c306c97928f8ca5205a7e63e3 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Thu, 31 Oct 2013 21:07:34 +0100 Subject: Preparing editable biomes. Most stuff doesnt update correctly now... --- main.go | 88 ++++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 55 insertions(+), 33 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 1351c27..11468b8 100644 --- a/main.go +++ b/main.go @@ -21,6 +21,11 @@ type GUI struct { statusContext uint lastStatus string + sbVBox *gtk.VBox + + biomes []BiomeInfo + bioVBox *gtk.VBox + mapw *MapWidget } @@ -99,20 +104,23 @@ func (g *GUI) mkMenuBar() *gtk.MenuBar { quit.Connect("activate", g.exitApp) fileMenu.Append(quit) + foo := gtk.NewMenuItemWithLabel("Foo") + foo.Connect("activate", func() { + f, _ := os.Open("test.biomes") + defer f.Close() + biomes, err := ReadBiomeInfos(f) + if err != nil { + panic(err) + } + g.biomes = biomes + g.updateBiomeInfo() + }) + fileMenu.Append(foo) + fileMenuItem := gtk.NewMenuItemWithLabel("File") fileMenuItem.SetSubmenu(fileMenu) menubar.Append(fileMenuItem) - /*editMenu := gtk.NewMenu() - - undo := gtk.NewMenuItemWithLabel("Undo") - undo.Connect("activate", g.undo) - editMenu.Append(undo) - - editMenuItem := gtk.NewMenuItemWithLabel("Edit") - editMenuItem.SetSubmenu(editMenu) - menubar.Append(editMenuItem)*/ - helpMenu := gtk.NewMenu() controls := gtk.NewMenuItemWithLabel("Controls") @@ -174,19 +182,19 @@ func labelCustomFont(text, font string) *gtk.Label { } func (g *GUI) mkSidebar() *gtk.ScrolledWindow { - vbox := gtk.NewVBox(false, 0) + g.sbVBox = gtk.NewVBox(false, 0) - vbox.PackStart(labelCustomFont("Tools", "Sans Bold 14"), false, false, 3) + g.sbVBox.PackStart(labelCustomFont("Tools", "Sans Bold 14"), false, false, 3) g.showbiomes = gtk.NewCheckButtonWithLabel("Show Biomes") g.showbiomes.SetActive(true) g.showbiomes.Connect("toggled", g.showbiomesToggled) - vbox.PackStart(g.showbiomes, false, false, 3) + g.sbVBox.PackStart(g.showbiomes, false, false, 3) g.fixSnowIce = gtk.NewCheckButtonWithLabel("Fix Snow/Ice") g.fixSnowIce.SetTooltipText("Add Snow/Ice for Taiga/Ice Plains. Remove Snow/Ice for other biomes.") g.fixSnowIce.Connect("toggled", g.fixSnowIceToggled) - vbox.PackStart(g.fixSnowIce, false, false, 3) + g.sbVBox.PackStart(g.fixSnowIce, false, false, 3) fill := gtk.NewRadioButtonWithLabel(nil, "Fill") fill.SetActive(true) @@ -200,32 +208,50 @@ func (g *GUI) mkSidebar() *gtk.ScrolledWindow { drawHBox.PackEnd(drawRadius, false, false, 3) draw.Connect("toggled", g.mkUpdateToolFx(draw, NewDrawTool(func() int { return drawRadius.GetValueAsInt() }))) - vbox.PackStart(fill, false, false, 3) - vbox.PackStart(drawHBox, false, false, 3) + g.sbVBox.PackStart(fill, false, false, 3) + g.sbVBox.PackStart(drawHBox, false, false, 3) - vbox.PackStart(gtk.NewHSeparator(), false, false, 3) - vbox.PackStart(labelCustomFont("Biomes", "Sans Bold 14"), false, false, 3) + g.sbVBox.PackStart(gtk.NewHSeparator(), false, false, 3) + g.sbVBox.PackStart(labelCustomFont("Biomes", "Sans Bold 14"), false, false, 3) + + g.bioVBox = gtk.NewVBox(false, 0) + g.sbVBox.PackStart(g.bioVBox, true, false, 3) + g.updateBiomeInfo() + + scrolled := gtk.NewScrolledWindow(nil, nil) + scrolled.SetPolicy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + scrolled.AddWithViewPort(g.sbVBox) + return scrolled +} +func (g *GUI) updateBiomeInfo() { + vbox := gtk.NewVBox(false, 0) var grp *glib.SList - for _, bio := range bioList { + + for _, biome := range g.biomes { biohbox := gtk.NewHBox(false, 0) - cbox := colorBox(bioColors[bio]) + cbox := colorBox(gdk.NewColor(biome.Color)) cbox.SetSizeRequest(20, 20) biohbox.PackStart(cbox, false, false, 3) - rbutton := gtk.NewRadioButtonWithLabel(grp, bio.String()) + rbutton := gtk.NewRadioButtonWithLabel(grp, biome.Name) grp = rbutton.GetGroup() - rbutton.Connect("toggled", g.mkUpdateBiomeFx(rbutton, bio)) + rbutton.Connect("toggled", g.mkUpdateBiomeFx(rbutton, biome.ID)) biohbox.PackEnd(rbutton, true, true, 3) vbox.PackStart(biohbox, false, false, 3) } - scrolled := gtk.NewScrolledWindow(nil, nil) - scrolled.SetPolicy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - scrolled.AddWithViewPort(vbox) - return scrolled + g.sbVBox.Remove(g.bioVBox) + g.bioVBox.Destroy() + + g.sbVBox.PackStart(vbox, true, false, 3) + g.bioVBox = vbox + + // TODO: Update mapwidget } func (g *GUI) Init() { + g.biomes = ReadDefaultBiomes() + g.window = gtk.NewWindow(gtk.WINDOW_TOPLEVEL) g.window.SetTitle("biomed") @@ -235,7 +261,7 @@ func (g *GUI) Init() { hbox := gtk.NewHBox(false, 0) - g.mapw = NewMapWidget(GUICallbacks{g.reportError, g.updateInfo, g.setBusy}) + g.mapw = NewMapWidget(GUICallbacks{g.reportError, g.updateInfo, g.setBusy}, MkBiomeLookup(g.biomes)) hbox.PackStart(g.mapw.DArea(), true, true, 3) sidebar := g.mkSidebar() @@ -273,8 +299,8 @@ func (g *GUI) reportError(msg string) { os.Exit(1) } -func (g *GUI) updateInfo(x, z int, bio mcmap.Biome) { - g.lastStatus = fmt.Sprintf("X:%d, Z:%d, Biome:%s", x, z, bio) +func (g *GUI) updateInfo(x, z int, bio mcmap.Biome, name string) { + g.lastStatus = fmt.Sprintf("X:%d, Z:%d, Biome: %s(%d)", x, z, name, bio) g.statusbar.Pop(g.statusContext) g.statusbar.Push(g.statusContext, g.lastStatus) } @@ -311,10 +337,6 @@ func (g *GUI) fixSnowIceToggled() { g.mapw.SetFixSnowIce(g.fixSnowIce.GetActive()) } -/*func (g *GUI) undo() { - fmt.Println("Undo") -}*/ - func (g *GUI) Show() { g.window.ShowAll() g.betaWarning() -- cgit v1.2.3-54-g00ecf From 03eaf07bee24bb12319e53e090a19f2c2a05ad23 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sat, 2 Nov 2013 14:26:18 +0100 Subject: New Biomes are now displayed in the sidebar. --- main.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 11468b8..288b59d 100644 --- a/main.go +++ b/main.go @@ -21,10 +21,9 @@ type GUI struct { statusContext uint lastStatus string - sbVBox *gtk.VBox - biomes []BiomeInfo bioVBox *gtk.VBox + bioVBoxWrap *gtk.VBox mapw *MapWidget } @@ -182,19 +181,19 @@ func labelCustomFont(text, font string) *gtk.Label { } func (g *GUI) mkSidebar() *gtk.ScrolledWindow { - g.sbVBox = gtk.NewVBox(false, 0) + sbVBox := gtk.NewVBox(false, 0) - g.sbVBox.PackStart(labelCustomFont("Tools", "Sans Bold 14"), false, false, 3) + sbVBox.PackStart(labelCustomFont("Tools", "Sans Bold 14"), false, false, 3) g.showbiomes = gtk.NewCheckButtonWithLabel("Show Biomes") g.showbiomes.SetActive(true) g.showbiomes.Connect("toggled", g.showbiomesToggled) - g.sbVBox.PackStart(g.showbiomes, false, false, 3) + sbVBox.PackStart(g.showbiomes, false, false, 3) g.fixSnowIce = gtk.NewCheckButtonWithLabel("Fix Snow/Ice") g.fixSnowIce.SetTooltipText("Add Snow/Ice for Taiga/Ice Plains. Remove Snow/Ice for other biomes.") g.fixSnowIce.Connect("toggled", g.fixSnowIceToggled) - g.sbVBox.PackStart(g.fixSnowIce, false, false, 3) + sbVBox.PackStart(g.fixSnowIce, false, false, 3) fill := gtk.NewRadioButtonWithLabel(nil, "Fill") fill.SetActive(true) @@ -208,19 +207,21 @@ func (g *GUI) mkSidebar() *gtk.ScrolledWindow { drawHBox.PackEnd(drawRadius, false, false, 3) draw.Connect("toggled", g.mkUpdateToolFx(draw, NewDrawTool(func() int { return drawRadius.GetValueAsInt() }))) - g.sbVBox.PackStart(fill, false, false, 3) - g.sbVBox.PackStart(drawHBox, false, false, 3) + sbVBox.PackStart(fill, false, false, 3) + sbVBox.PackStart(drawHBox, false, false, 3) - g.sbVBox.PackStart(gtk.NewHSeparator(), false, false, 3) - g.sbVBox.PackStart(labelCustomFont("Biomes", "Sans Bold 14"), false, false, 3) + sbVBox.PackStart(gtk.NewHSeparator(), false, false, 3) + sbVBox.PackStart(labelCustomFont("Biomes", "Sans Bold 14"), false, false, 3) + g.bioVBoxWrap = gtk.NewVBox(false, 0) g.bioVBox = gtk.NewVBox(false, 0) - g.sbVBox.PackStart(g.bioVBox, true, false, 3) + g.bioVBoxWrap.PackStart(g.bioVBox, false, false, 0) + sbVBox.PackStart(g.bioVBoxWrap, false, false, 3) g.updateBiomeInfo() scrolled := gtk.NewScrolledWindow(nil, nil) scrolled.SetPolicy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - scrolled.AddWithViewPort(g.sbVBox) + scrolled.AddWithViewPort(sbVBox) return scrolled } @@ -240,10 +241,9 @@ func (g *GUI) updateBiomeInfo() { vbox.PackStart(biohbox, false, false, 3) } - g.sbVBox.Remove(g.bioVBox) - g.bioVBox.Destroy() - - g.sbVBox.PackStart(vbox, true, false, 3) + g.bioVBoxWrap.Remove(g.bioVBox) + g.bioVBoxWrap.PackStart(vbox, false, false, 3) + vbox.ShowAll() g.bioVBox = vbox // TODO: Update mapwidget -- cgit v1.2.3-54-g00ecf From 63b964614135f6381b5d55828714efb3783dfd04 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sat, 2 Nov 2013 14:47:26 +0100 Subject: New biome infos are now passed to mapwidget --- main.go | 6 +++--- mapwidget.go | 10 ++++++++++ region_wrapper.go | 8 ++++---- 3 files changed, 17 insertions(+), 7 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 288b59d..ba60c97 100644 --- a/main.go +++ b/main.go @@ -21,8 +21,8 @@ type GUI struct { statusContext uint lastStatus string - biomes []BiomeInfo - bioVBox *gtk.VBox + biomes []BiomeInfo + bioVBox *gtk.VBox bioVBoxWrap *gtk.VBox mapw *MapWidget @@ -246,7 +246,7 @@ func (g *GUI) updateBiomeInfo() { vbox.ShowAll() g.bioVBox = vbox - // TODO: Update mapwidget + g.mapw.updateBioLookup(MkBiomeLookup(g.biomes)) } func (g *GUI) Init() { diff --git a/mapwidget.go b/mapwidget.go index 116f069..e04b5eb 100644 --- a/mapwidget.go +++ b/mapwidget.go @@ -233,6 +233,16 @@ func (mw *MapWidget) updateGUI() { mw.dArea.GetWindow().Invalidate(nil, false) } +func (mw *MapWidget) updateBioLookup(lookup BiomeLookup) { + mw.bioLookup = lookup + mw.regWrap.bioLookup = lookup + + if mw.regWrap.RegionLoaded() { + mw.regWrap.FlushTiles() + mw.regWrap.UpdateTiles() + } +} + func NewMapWidget(guicbs GUICallbacks, bioLookup BiomeLookup) *MapWidget { dArea := gtk.NewDrawingArea() diff --git a/region_wrapper.go b/region_wrapper.go index 9a4d958..d27d1ad 100644 --- a/region_wrapper.go +++ b/region_wrapper.go @@ -131,11 +131,11 @@ func (rw *RegionWrapper) tileUpdater() { func (rw *RegionWrapper) SetRegion(region *mcmap.Region) { if rw.RegionLoaded() { - rw.flushTiles() + rw.FlushTiles() } rw.region = NewCachedRegion(region, cacheSize) - rw.tileUpdates <- true + rw.UpdateTiles() } func (rw *RegionWrapper) SetChunkBounds(startX, startZ, endX, endZ int) { @@ -152,7 +152,7 @@ func (rw *RegionWrapper) SetFixSnowIce(b bool) { rw.fixSnowIce = b } func (rw *RegionWrapper) RegionLoaded() bool { return rw.region != nil } func (rw *RegionWrapper) ToolSingleClick() bool { return rw.tool.SingleClick() } -func (rw *RegionWrapper) flushTiles() { +func (rw *RegionWrapper) FlushTiles() { if err := rw.region.Flush(); err != nil { rw.guicbs.reportFail(fmt.Sprintf("Error while flushing cache: %s", err)) return @@ -171,7 +171,7 @@ func (rw *RegionWrapper) flushTiles() { } func (rw *RegionWrapper) Save() { - rw.flushTiles() + rw.FlushTiles() if err := rw.region.Flush(); err != nil { rw.guicbs.reportFail(fmt.Sprintf("Error while flushing cache: %s", err)) -- cgit v1.2.3-54-g00ecf From 613c8855cd8fcace4b7ba4f6662bd0486e9ad5f1 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sat, 2 Nov 2013 17:54:32 +0100 Subject: New menu items --- main.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index ba60c97..75409e1 100644 --- a/main.go +++ b/main.go @@ -103,23 +103,23 @@ func (g *GUI) mkMenuBar() *gtk.MenuBar { quit.Connect("activate", g.exitApp) fileMenu.Append(quit) - foo := gtk.NewMenuItemWithLabel("Foo") - foo.Connect("activate", func() { - f, _ := os.Open("test.biomes") - defer f.Close() - biomes, err := ReadBiomeInfos(f) - if err != nil { - panic(err) - } - g.biomes = biomes - g.updateBiomeInfo() - }) - fileMenu.Append(foo) - fileMenuItem := gtk.NewMenuItemWithLabel("File") fileMenuItem.SetSubmenu(fileMenu) menubar.Append(fileMenuItem) + prefMenu := gtk.NewMenu() + + confbiomes := gtk.NewMenuItemWithLabel("Configure Biomes") + confbiomes.Connect("activate", func() { + // TODO: Display awesome biome editor dialog thing. + fmt.Println("(...)") + }) + prefMenu.Append(confbiomes) + + prefMenuItem := gtk.NewMenuItemWithLabel("Preferences") + prefMenuItem.SetSubmenu(prefMenu) + menubar.Append(prefMenuItem) + helpMenu := gtk.NewMenu() controls := gtk.NewMenuItemWithLabel("Controls") -- cgit v1.2.3-54-g00ecf 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 +++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 9 ++- 2 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 biome_info_editor.go (limited to 'main.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 } diff --git a/main.go b/main.go index 75409e1..e4c3767 100644 --- a/main.go +++ b/main.go @@ -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) -- cgit v1.2.3-54-g00ecf From 568116b8644255e04759190d3ad764f858398646 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 4 Nov 2013 14:40:18 +0100 Subject: Biome editor is now opened by a button in the sidebar --- main.go | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index e4c3767..b1ae1ad 100644 --- a/main.go +++ b/main.go @@ -79,6 +79,16 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. dlg.Destroy() } +func (g *GUI) biomeEditor() { + ed := NewBiomeInfoEditor(g.biomes) + rv := ed.Run() + ed.Destroy() + if rv == gtk.RESPONSE_OK { + g.biomes = ed.Biomes() + g.updateBiomeInfo() + } +} + func (g *GUI) mkMenuBar() *gtk.MenuBar { menubar := gtk.NewMenuBar() @@ -107,24 +117,6 @@ func (g *GUI) mkMenuBar() *gtk.MenuBar { fileMenuItem.SetSubmenu(fileMenu) menubar.Append(fileMenuItem) - prefMenu := gtk.NewMenu() - - confbiomes := gtk.NewMenuItemWithLabel("Configure Biomes") - confbiomes.Connect("activate", func() { - ed := NewBiomeInfoEditor(g.biomes) - rv := ed.Run() - ed.Destroy() - if rv == gtk.RESPONSE_OK { - g.biomes = ed.Biomes() - g.updateBiomeInfo() - } - }) - prefMenu.Append(confbiomes) - - prefMenuItem := gtk.NewMenuItemWithLabel("Preferences") - prefMenuItem.SetSubmenu(prefMenu) - menubar.Append(prefMenuItem) - helpMenu := gtk.NewMenu() controls := gtk.NewMenuItemWithLabel("Controls") @@ -216,7 +208,14 @@ func (g *GUI) mkSidebar() *gtk.ScrolledWindow { sbVBox.PackStart(drawHBox, false, false, 3) sbVBox.PackStart(gtk.NewHSeparator(), false, false, 3) - sbVBox.PackStart(labelCustomFont("Biomes", "Sans Bold 14"), false, false, 3) + bioHeaderHBox := gtk.NewHBox(false, 0) + bioHeaderHBox.PackStart(labelCustomFont("Biomes", "Sans Bold 14"), true, false, 0) + editBiomesBtn := gtk.NewButton() + editBiomesBtn.Add(gtk.NewImageFromStock(gtk.STOCK_EDIT, gtk.ICON_SIZE_SMALL_TOOLBAR)) + editBiomesBtn.Connect("clicked", g.biomeEditor) + editBiomesBtn.SetTooltipText("Configure Biomes") + bioHeaderHBox.PackStart(editBiomesBtn, false, false, 0) + sbVBox.PackStart(bioHeaderHBox, false, false, 3) g.bioVBoxWrap = gtk.NewVBox(false, 0) g.bioVBox = gtk.NewVBox(false, 0) -- cgit v1.2.3-54-g00ecf