Files
voidraft/internal/common/helper/window_helper.go
2025-11-21 22:30:47 +08:00

124 lines
2.9 KiB
Go

package helper
import (
"strconv"
"github.com/wailsapp/wails/v3/pkg/application"
"voidraft/internal/common/constant"
)
// WindowHelper 窗口辅助工具
type WindowHelper struct{}
// NewWindowHelper 创建窗口辅助工具实例
func NewWindowHelper() *WindowHelper {
return &WindowHelper{}
}
// GetMainWindow 获取主窗口实例
// 返回窗口对象和是否找到的标志
func (wh *WindowHelper) GetMainWindow() (application.Window, bool) {
app := application.Get()
return app.Window.GetByName(constant.VOIDRAFT_MAIN_WINDOW_NAME)
}
// MustGetMainWindow 获取主窗口实例
// 如果窗口不存在则返回 nil
func (wh *WindowHelper) MustGetMainWindow() application.Window {
window, ok := wh.GetMainWindow()
if !ok {
return nil
}
return window
}
// ShowMainWindow 显示主窗口
func (wh *WindowHelper) ShowMainWindow() bool {
if window := wh.MustGetMainWindow(); window != nil {
window.Show()
return true
}
return false
}
// HideMainWindow 隐藏主窗口
func (wh *WindowHelper) HideMainWindow() bool {
if window := wh.MustGetMainWindow(); window != nil {
window.Hide()
return true
}
return false
}
// MinimiseMainWindow 最小化主窗口
func (wh *WindowHelper) MinimiseMainWindow() bool {
if window := wh.MustGetMainWindow(); window != nil {
window.Minimise()
return true
}
return false
}
// FocusMainWindow 聚焦主窗口
func (wh *WindowHelper) FocusMainWindow() bool {
if window := wh.MustGetMainWindow(); window != nil {
window.Show()
window.Restore()
window.Focus()
return true
}
return false
}
// AutoShowMainWindow 自动显示主窗口
func (wh *WindowHelper) AutoShowMainWindow() {
window := wh.MustGetMainWindow()
if window.IsVisible() {
window.Focus()
} else {
window.Show()
}
}
// GetDocumentWindow 根据文档ID获取窗口
func (wh *WindowHelper) GetDocumentWindow(documentID int64) (application.Window, bool) {
app := application.Get()
windowName := strconv.FormatInt(documentID, 10)
return app.Window.GetByName(windowName)
}
// GetAllDocumentWindows 获取所有文档窗口
func (wh *WindowHelper) GetAllDocumentWindows() []application.Window {
app := application.Get()
allWindows := app.Window.GetAll()
var docWindows []application.Window
for _, window := range allWindows {
// 跳过主窗口
if window.Name() != constant.VOIDRAFT_MAIN_WINDOW_NAME {
docWindows = append(docWindows, window)
}
}
return docWindows
}
// FocusDocumentWindow 聚焦指定文档的窗口
func (wh *WindowHelper) FocusDocumentWindow(documentID int64) bool {
if window, exists := wh.GetDocumentWindow(documentID); exists {
window.Show()
window.Restore()
window.Focus()
return true
}
return false
}
// CloseDocumentWindow 关闭指定文档的窗口
func (wh *WindowHelper) CloseDocumentWindow(documentID int64) bool {
if window, exists := wh.GetDocumentWindow(documentID); exists {
window.Close()
return true
}
return false
}