♻️ Refactor context menu
This commit is contained in:
@@ -3,12 +3,13 @@ package services
|
||||
import (
|
||||
"github.com/wailsapp/wails/v3/pkg/application"
|
||||
"github.com/wailsapp/wails/v3/pkg/services/log"
|
||||
"voidraft/internal/common/helper"
|
||||
)
|
||||
|
||||
// DialogService 对话框服务,处理文件选择等对话框操作
|
||||
type DialogService struct {
|
||||
logger *log.LogService
|
||||
windowHelper *WindowHelper
|
||||
windowHelper *helper.WindowHelper
|
||||
}
|
||||
|
||||
// NewDialogService 创建新的对话框服务实例
|
||||
@@ -19,7 +20,7 @@ func NewDialogService(logger *log.LogService) *DialogService {
|
||||
|
||||
return &DialogService{
|
||||
logger: logger,
|
||||
windowHelper: NewWindowHelper(),
|
||||
windowHelper: helper.NewWindowHelper(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
"voidraft/internal/common/helper"
|
||||
"voidraft/internal/common/hotkey"
|
||||
"voidraft/internal/models"
|
||||
|
||||
@@ -18,7 +19,7 @@ import (
|
||||
type HotkeyService struct {
|
||||
logger *log.LogService
|
||||
configService *ConfigService
|
||||
windowHelper *WindowHelper
|
||||
windowHelper *helper.WindowHelper
|
||||
|
||||
mu sync.RWMutex
|
||||
currentHotkey *models.HotkeyCombo
|
||||
@@ -45,7 +46,7 @@ func NewHotkeyService(configService *ConfigService, logger *log.LogService) *Hot
|
||||
return &HotkeyService{
|
||||
logger: logger,
|
||||
configService: configService,
|
||||
windowHelper: NewWindowHelper(),
|
||||
windowHelper: helper.NewWindowHelper(),
|
||||
ctx: ctx,
|
||||
cancel: cancel,
|
||||
}
|
||||
|
||||
@@ -3,13 +3,14 @@ package services
|
||||
import (
|
||||
"github.com/wailsapp/wails/v3/pkg/application"
|
||||
"github.com/wailsapp/wails/v3/pkg/services/log"
|
||||
"voidraft/internal/common/helper"
|
||||
)
|
||||
|
||||
// TrayService 系统托盘服务
|
||||
type TrayService struct {
|
||||
logger *log.LogService
|
||||
configService *ConfigService
|
||||
windowHelper *WindowHelper
|
||||
windowHelper *helper.WindowHelper
|
||||
}
|
||||
|
||||
// NewTrayService 创建新的系统托盘服务实例
|
||||
@@ -17,7 +18,7 @@ func NewTrayService(logger *log.LogService, configService *ConfigService) *TrayS
|
||||
return &TrayService{
|
||||
logger: logger,
|
||||
configService: configService,
|
||||
windowHelper: NewWindowHelper(),
|
||||
windowHelper: helper.NewWindowHelper(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
package services
|
||||
|
||||
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
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"math"
|
||||
"sync"
|
||||
"time"
|
||||
"voidraft/internal/common/helper"
|
||||
"voidraft/internal/models"
|
||||
|
||||
"github.com/wailsapp/wails/v3/pkg/application"
|
||||
@@ -25,7 +26,7 @@ const (
|
||||
type WindowSnapService struct {
|
||||
logger *log.LogService
|
||||
configService *ConfigService
|
||||
windowHelper *WindowHelper
|
||||
windowHelper *helper.WindowHelper
|
||||
mu sync.RWMutex
|
||||
|
||||
// 吸附配置
|
||||
@@ -75,7 +76,7 @@ func NewWindowSnapService(logger *log.LogService, configService *ConfigService)
|
||||
wss := &WindowSnapService{
|
||||
logger: logger,
|
||||
configService: configService,
|
||||
windowHelper: NewWindowHelper(),
|
||||
windowHelper: helper.NewWindowHelper(),
|
||||
snapEnabled: snapEnabled,
|
||||
baseThresholdRatio: 0.025, // 2.5%的主窗口宽度作为基础阈值
|
||||
minThreshold: 8, // 最小8像素(小屏幕保底)
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
"voidraft/internal/common/helper"
|
||||
"voidraft/internal/models"
|
||||
|
||||
"github.com/wailsapp/wails/v3/pkg/application"
|
||||
@@ -42,7 +43,7 @@ func createTestService() *WindowSnapService {
|
||||
service := &WindowSnapService{
|
||||
logger: logger,
|
||||
configService: nil, // 测试中不需要实际的配置服务
|
||||
windowHelper: NewWindowHelper(),
|
||||
windowHelper: helper.NewWindowHelper(),
|
||||
snapEnabled: true,
|
||||
baseThresholdRatio: 0.025,
|
||||
minThreshold: 8,
|
||||
|
||||
Reference in New Issue
Block a user