File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -162,6 +162,7 @@ def __init__(
162162 self ._force_quit = False
163163 self .tray = TrayController (self )
164164 self .tray .show_requested .connect (self ._restore_from_tray )
165+ self .tray .reset_layout_requested .connect (self ._reset_window_layout )
165166 self .tray .quit_requested .connect (self ._quit_from_tray )
166167 self .tray .show ()
167168
@@ -513,6 +514,26 @@ def _restore_from_tray(self) -> None:
513514 self .raise_ ()
514515 self .activateWindow ()
515516
517+ def _reset_window_layout (self ) -> None :
518+ """托盘菜单:重置主窗口位置/大小,并清除悬浮窗持久化布局。"""
519+ from aao .ui import floating_state
520+
521+ floating_state .clear_all ()
522+ geo = self .screen ().availableGeometry ()
523+ self .resize (860 , 560 )
524+ self .move (geo .center ().x () - self .width () // 2 , geo .center ().y () - self .height () // 2 )
525+ self ._restore_from_tray ()
526+
527+ margin = 20
528+ if self .overlay is not None :
529+ self .overlay .reset_layout (geo .right () - 170 - margin , geo .top () + margin )
530+ log = getattr (self .farm_page , "_floating_log" , None )
531+ if log is not None :
532+ x = geo .right () - 360 - margin
533+ y = geo .top () + margin + (self .overlay .height () + 12 if self .overlay is not None else 0 )
534+ log .reset_layout (x , y )
535+ self .tray .show_message ("ArknightsAutoOperator" , "已重置主窗口和悬浮窗布局。" )
536+
516537 def _quit_from_tray (self ) -> None :
517538 """托盘「退出」:停所有 worker + 退出应用。"""
518539 self ._force_quit = True
Original file line number Diff line number Diff line change @@ -124,6 +124,12 @@ def paintEvent(self, _event: QPaintEvent) -> None:
124124 painter .setPen (border )
125125 painter .drawPath (path )
126126
127+ def reset_layout (self , x : int , y : int ) -> None :
128+ self ._snap_follow = None
129+ self .resize (170 , 72 )
130+ self .move (x , y )
131+ self ._save_window_state ()
132+
127133 def on_state (self , state : dict ) -> None :
128134 running = state .get ("isRunning" , False )
129135 cf = state .get ("currentFrame" )
Original file line number Diff line number Diff line change @@ -197,6 +197,12 @@ def _save_window_state(self) -> None:
197197 _WINDOW_ID , self ._snap_follow .to_dict () if self ._snap_follow is not None else None
198198 )
199199
200+ def reset_layout (self , x : int , y : int ) -> None :
201+ self ._snap_follow = None
202+ self .resize (360 , 220 )
203+ self .move (x , y )
204+ self ._save_window_state ()
205+
200206 def set_always_on_top (self , enabled : bool ) -> None :
201207 visible = self .isVisible ()
202208 self .setWindowFlag (Qt .WindowType .WindowStaysOnTopHint , enabled )
Original file line number Diff line number Diff line change 1717from PySide6 .QtWidgets import QWidget
1818
1919
20+ def clear_all () -> None :
21+ s = _load_settings ()
22+ s .pop ("floating_windows" , None )
23+ _save_settings (s )
24+
25+
2026def load_state (window_id : str ) -> dict [str , Any ]:
2127 s = _load_settings ()
2228 data = s .get ("floating_windows" , {})
Original file line number Diff line number Diff line change @@ -28,6 +28,7 @@ class TrayController(QObject):
2828
2929 quit_requested = Signal () # 用户点「退出」
3030 show_requested = Signal () # 用户点「显示」/ 双击图标
31+ reset_layout_requested = Signal () # 重置主窗口 + 悬浮窗布局
3132
3233 def __init__ (self , parent : QWidget ):
3334 super ().__init__ (parent )
@@ -37,9 +38,12 @@ def __init__(self, parent: QWidget):
3738 menu = QMenu (parent )
3839 act_show = QAction ("显示窗口" , parent )
3940 act_show .triggered .connect (self .show_requested .emit )
41+ act_reset = QAction ("重置窗口布局" , parent )
42+ act_reset .triggered .connect (self .reset_layout_requested .emit )
4043 act_quit = QAction ("退出" , parent )
4144 act_quit .triggered .connect (self .quit_requested .emit )
4245 menu .addAction (act_show )
46+ menu .addAction (act_reset )
4347 menu .addSeparator ()
4448 menu .addAction (act_quit )
4549
You can’t perform that action at this time.
0 commit comments