KVMote.go/app.go

111 lines
2.1 KiB
Go

package main
import (
"context"
"fmt"
"time"
"kvmote/internal/input"
"kvmote/internal/kvm"
"kvmote/internal/transport"
"github.com/wailsapp/wails/v2/pkg/runtime"
)
// App struct
type App struct {
ctx context.Context
engine *kvm.Engine
overlay *input.OverlayWindow
isMini bool
}
// NewApp creates a new App application struct
func NewApp() *App {
t := transport.NewBleTransport()
h := input.NewInputHandler()
e := kvm.NewEngine(t, h)
app := &App{
engine: e,
overlay: input.NewOverlayWindow(),
}
e.SetWindowManager(app)
return app
}
func (a *App) SetMiniMode() {
if a.isMini {
return
}
a.isMini = true
runtime.EventsEmit(a.ctx, "window-mode", "mini")
// Overlay nativo Win32 no canto — não toca na janela principal
mx, my, mw, mh := a.engine.GetMonitorWorkArea()
a.overlay.Show(mx, my, mw, mh)
}
func (a *App) RestoreNormalMode() {
if !a.isMini {
return
}
a.isMini = false
runtime.EventsEmit(a.ctx, "window-mode", "normal")
a.overlay.Hide()
}
// startup is called when the app starts. The context is saved
// so we can call the runtime methods
func (a *App) startup(ctx context.Context) {
a.ctx = ctx
err := a.engine.Start(ctx)
if err != nil {
fmt.Printf("Error starting engine: %v\n", err)
}
}
func (a *App) Connect() string {
err := a.engine.Start(a.ctx)
if err != nil {
return fmt.Sprintf("Erro Hook: %v", err)
}
// Lógica real de conexão Bluetooth
ctx, cancel := context.WithTimeout(a.ctx, 10*time.Second)
defer cancel()
ok, err := a.engine.Transport().Detect(ctx)
if err != nil || !ok {
return "Erro: KVMote não encontrado"
}
err = a.engine.Transport().Connect(ctx)
if err != nil {
return fmt.Sprintf("Erro Conexão: %v", err)
}
return "Conectado"
}
func (a *App) Disconnect() string {
a.engine.Transport().Disconnect()
return "Desconectado"
}
func (a *App) SendCtrlAltDel() {
kvm.LogDebug("App: Chamando SendCtrlAltDel")
a.engine.SendCtrlAltDel()
}
func (a *App) ChangeLayout(layout int) {
a.engine.SetLayout(layout)
}
func (a *App) SetPosition(pos int) {
a.engine.SetPosition(pos)
}
func (a *App) HandleScroll(delta int) {
a.engine.HandleManualScroll(delta)
}