summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go92
1 files changed, 59 insertions, 33 deletions
diff --git a/main.go b/main.go
index 1351c27..b1ae1ad 100644
--- a/main.go
+++ b/main.go
@@ -21,6 +21,10 @@ type GUI struct {
statusContext uint
lastStatus string
+ biomes []BiomeInfo
+ bioVBox *gtk.VBox
+ bioVBoxWrap *gtk.VBox
+
mapw *MapWidget
}
@@ -75,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()
@@ -103,16 +117,6 @@ func (g *GUI) mkMenuBar() *gtk.MenuBar {
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 +178,19 @@ func labelCustomFont(text, font string) *gtk.Label {
}
func (g *GUI) mkSidebar() *gtk.ScrolledWindow {
- vbox := gtk.NewVBox(false, 0)
+ sbVBox := gtk.NewVBox(false, 0)
- vbox.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)
- vbox.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)
- vbox.PackStart(g.fixSnowIce, false, false, 3)
+ sbVBox.PackStart(g.fixSnowIce, false, false, 3)
fill := gtk.NewRadioButtonWithLabel(nil, "Fill")
fill.SetActive(true)
@@ -200,32 +204,58 @@ 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)
+ sbVBox.PackStart(fill, false, false, 3)
+ sbVBox.PackStart(drawHBox, false, false, 3)
+
+ sbVBox.PackStart(gtk.NewHSeparator(), 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)
+ g.bioVBoxWrap.PackStart(g.bioVBox, false, false, 0)
+ sbVBox.PackStart(g.bioVBoxWrap, false, false, 3)
+ g.updateBiomeInfo()
- vbox.PackStart(gtk.NewHSeparator(), false, false, 3)
- vbox.PackStart(labelCustomFont("Biomes", "Sans Bold 14"), false, false, 3)
+ scrolled := gtk.NewScrolledWindow(nil, nil)
+ scrolled.SetPolicy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+ scrolled.AddWithViewPort(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.bioVBoxWrap.Remove(g.bioVBox)
+ g.bioVBoxWrap.PackStart(vbox, false, false, 3)
+ vbox.ShowAll()
+ g.bioVBox = vbox
+
+ g.mapw.updateBioLookup(MkBiomeLookup(g.biomes))
}
func (g *GUI) Init() {
+ g.biomes = ReadDefaultBiomes()
+
g.window = gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
g.window.SetTitle("biomed")
@@ -235,7 +265,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 +303,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 +341,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()