// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "go.wit.com/log" "go.wit.com/widget" ) func (tk *guiWidget) doButtonClick() { if tk.node.IsEnabled() { tk.dumpWidget("click()") // enable this to debug widget clicks me.myTree.SendFromUser(tk.node) } else { log.Info("button is currently disabled by the application") // tk.dumpWidget("disabled()") // enable this to debug widget clicks } } // handles a mouse click func doMouseClick(w int, h int) { // Flag widgets (dropdown menus, etc) are the highest priority. ALWAYS SEND MOUSE CLICKS THERE FIRST // handle an open dropdown menu or text entry window first if me.dropdown.active || me.textbox.active { // can't drag or do anything when dropdown or textbox are visible for _, tk := range findByXY(w, h) { if tk.node.WidgetId == me.dropdown.wId { log.Info("got dropdwon click", w, h, tk.cuiName) tk.dropdownClicked(w, h) return } if tk.node.WidgetId == me.textbox.wId { log.Info("got textbox click", w, h, tk.cuiName) textboxClosed() return } } log.Info("a dropdown or textbox is active. you can't click anywhere else (otherwise hit ESC)", w, h) return } win := findWindowUnderMouse() if win == nil { log.Log(GOCUI, "click() nothing was at:", w, h) return } if !win.isWindowActive() { win.makeWindowActive() return } else { // potentally the user is closing the window if win.checkWindowClose(w, h) { return } } // look in this window for widgets // widgets have priority. send the click here first for _, tk := range win.findByXYreal(w, h) { switch tk.node.WidgetType { case widget.Checkbox: if tk.node.State.Checked { log.Log(WARN, "checkbox is being set to false") tk.node.State.Checked = false tk.setCheckbox() } else { log.Log(WARN, "checkbox is being set to true") tk.node.State.Checked = true tk.setCheckbox() } me.myTree.SendUserEvent(tk.node) return case widget.Button: tk.doButtonClick() return case widget.Combobox: tk.showDropdown() return case widget.Dropdown: tk.showDropdown() return case widget.Textbox: tk.showTextbox() return default: // TODO: enable the GUI debugger in gocui // tk.dumpWidget("undef click()") // enable this to debug widget clicks } } } func doMouseDoubleClick(w int, h int) { me.mouse.double = false // log.Printf("actually a double click (%d,%d)", w, h) if me.dropdown.active || me.textbox.active { // can't drag or do anything when dropdown or textbox are visible log.Info("can't double click. dropdown or textbox is active") return } for _, tk := range findByXY(w, h) { if tk.node.WidgetType == widget.Window { tk.makeWindowActive() return } if tk.node.WidgetType == widget.Stdout { if me.stdout.outputOnTop { me.stdout.outputOnTop = false setThingsOnTop() } else { me.stdout.outputOnTop = true setThingsOnTop() } return } } }