예제 #1
0
파일: action.go 프로젝트: hauke96/go-gtk
func CreateMenuAndToolbar(w *gtk.Window, vbox *gtk.VBox) {
	action_group := gtk.NewActionGroup("my_group")
	ui_manager := CreateUIManager()
	accel_group := ui_manager.GetAccelGroup()
	w.AddAccelGroup(accel_group)
	AddFileMenuActions(action_group)
	AddEditMenuActions(action_group)
	AddChoicesMenuActions(action_group)
	ui_manager.InsertActionGroup(action_group, 0)
	menubar := ui_manager.GetWidget("/MenuBar")
	vbox.PackStart(menubar, false, false, 0)
	toolbar := ui_manager.GetWidget("/ToolBar")
	vbox.PackStart(toolbar, false, false, 0)
	eventbox := gtk.NewEventBox()
	vbox.PackStart(eventbox, false, false, 0)
	//    label := gtk.NewLabel("Right-click to see the popup menu.")
	//    vbox.PackStart(label, false, false, 0)
}
예제 #2
0
func main() {

	gtk.Init(nil)
	window := gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
	window.SetTitle("test002 - clicker game stuff thingy")
	window.Connect("destroy", gtk.MainQuit)
	window.SetSizeRequest(800, 600)

	layout := gtk.NewLayout(nil, nil)
	layout.ModifyBG(gtk.STATE_NORMAL, gdk.NewColorRGB(200, 200, 200))

	menubar := createMenu()

	spielstand := spielstand{money: 10, spielfeld: [5][5]*haus{}, amountUpgrades: 0}

	label := gtk.NewLabel("")
	labelUpdate(label, &spielstand)

	for i := 0; i < len(spielstand.spielfeld); i++ {
		for j := 0; j < len(spielstand.spielfeld[0]); j++ {
			spielHaus := haus{state: -1}
			spielstand.spielfeld[i][j] = &spielHaus

			bild := gtk.NewImage()
			if i == 2 && j == 3 {
				spielHaus.state = 0
			}
			setImage(bild, spielHaus.state)

			// lambda für die weiterschaltung
			// Erhöhe den state nur wenn es kein upgrade gibt oder wenn wenn wir genug geld haben.
			// Und nur bei letzterem kaufe das upgrade.
			weiter := func(ctx *glib.CallbackContext) {
				if spielHaus.state == -1 && spielstand.amountUpgrades != 0 && spielstand.money >= spielstand.amountUpgrades*10 {
					spielHaus.state = 0
					setImage(bild, 0)
					spielstand.money -= spielstand.amountUpgrades * 10
				} else {
					if spielHaus.state < 6*5 && spielHaus.state != -1 {
						if (spielHaus.state+1)%5 != 0 {
							spielHaus.state += 1
						} else {
							if spielstand.money > 9 {
								spielHaus.state += 1
								setImage(bild, spielHaus.state/5)
								spielstand.money -= 10
								spielstand.amountUpgrades++
							}
						}
					}
				}

				labelUpdate(label, &spielstand)
			}

			// Ein bild kann ohne weiteres keine events, daher braucht man eine
			// EventBox drum rum um events zu haben
			eventBox := gtk.NewEventBox()
			eventBox.Add(bild)
			// das event kann nicht direkt auf das image gesetzt werden, deswegen
			// diese event box dafür.
			eventBox.Connect("button-press-event", weiter)
			eventBox.SetEvents(int(gdk.BUTTON_PRESS_MASK))
			layout.Put(eventBox, 100+i*100, 100+j*100)
		}
	}

	// start update routine
	go update(&spielstand, label)

	layout.Put(label, 300, 70)
	layout.Put(menubar, 0, 0)

	window.Add(layout)
	window.ShowAll()
	gtk.Main()
}