La consola fa créixer la finestra en comptes de menjar espai a la llista
En desplegar/replegar la consola, la finestra creix/encongeix la mateixa alçada en lockstep amb el panell (i es fixa l'alçada de la consola min=max perquè agafi exactament aquest espai), de manera que la llista de jocs es manté constant i no es mou. Si la finestra està maximitzada cau al comportament d'encongir la llista. També s'allarga el marge de gràcia abans de replegar en mode auto (1.8s -> 4s). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -31,7 +31,7 @@ WINDOW_TITLE = f"© 2026 {APP_NAME} — JailDesigner"
|
||||
|
||||
CONSOLE_HEIGHT = 220 # alçada de la consola desplegada (px)
|
||||
CONSOLE_ANIM_MS = 220 # durada de l'animació de desplegar/replegar
|
||||
CONSOLE_IDLE_MS = 1800 # marge sense activitat abans de replegar en mode auto
|
||||
CONSOLE_IDLE_MS = 4000 # marge sense activitat abans de replegar en mode auto
|
||||
|
||||
CONSOLE_SHOW = "show"
|
||||
CONSOLE_AUTO = "auto"
|
||||
@@ -133,9 +133,13 @@ class MainWindow(QMainWindow):
|
||||
def _setup_console(self) -> None:
|
||||
"""Prepara la animació d'alçada i l'estat inicial segons console_mode."""
|
||||
self._console_open = False
|
||||
self._console_anim_start = 0 # alçada de consola en arrencar l'animació
|
||||
self._console_win_start = 0 # alçada de finestra en arrencar l'animació
|
||||
self._console_grow_window = True
|
||||
self._console_anim = QPropertyAnimation(self.log_view, b"maximumHeight", self)
|
||||
self._console_anim.setDuration(CONSOLE_ANIM_MS)
|
||||
self._console_anim.setEasingCurve(QEasingCurve.InOutCubic)
|
||||
self._console_anim.valueChanged.connect(self._on_console_anim_value)
|
||||
self._console_anim.finished.connect(self._on_console_anim_done)
|
||||
|
||||
# Timer que replega la consola en mode auto després d'un marge sense activitat.
|
||||
@@ -151,22 +155,43 @@ class MainWindow(QMainWindow):
|
||||
self._set_console_open(True, animated=False)
|
||||
|
||||
def _set_console_open(self, open_: bool, animated: bool = True) -> None:
|
||||
"""Desplega/replega la consola fent créixer o encongir la finestra (perquè la
|
||||
consola guanyi espai en comptes de menjar-ne a la llista)."""
|
||||
if open_ == self._console_open:
|
||||
return
|
||||
self._console_open = open_
|
||||
start = self.log_view.maximumHeight()
|
||||
target = CONSOLE_HEIGHT if open_ else 0
|
||||
# Si la finestra està maximitzada/pantalla completa no la podem fer créixer:
|
||||
# caiem al comportament d'encongir la llista.
|
||||
grow = not (self.isMaximized() or self.isFullScreen())
|
||||
if open_:
|
||||
self.log_view.show() # visible abans d'animar l'obertura
|
||||
self._console_anim.stop()
|
||||
if not animated:
|
||||
if grow:
|
||||
self.resize(self.width(), self.height() + (target - start))
|
||||
self.log_view.setMinimumHeight(target)
|
||||
self.log_view.setMaximumHeight(target)
|
||||
if not open_:
|
||||
self.log_view.hide()
|
||||
return
|
||||
self._console_anim.setStartValue(self.log_view.maximumHeight())
|
||||
self._console_grow_window = grow
|
||||
self._console_anim_start = start
|
||||
self._console_win_start = self.height()
|
||||
self._console_anim.setStartValue(start)
|
||||
self._console_anim.setEndValue(target)
|
||||
self._console_anim.start()
|
||||
|
||||
def _on_console_anim_value(self, value: int) -> None:
|
||||
"""A cada pas: fixem l'alçada de la consola a `value` (min=max, perquè agafi
|
||||
exactament aquest espai i no el cedeixi a la llista) i fem créixer/encongir la
|
||||
finestra el mateix, així la llista (finestra − consola) es manté constant."""
|
||||
self.log_view.setMinimumHeight(value)
|
||||
if self._console_grow_window:
|
||||
delta = value - self._console_anim_start
|
||||
self.resize(self.width(), self._console_win_start + delta)
|
||||
|
||||
def _on_console_anim_done(self) -> None:
|
||||
if not self._console_open:
|
||||
self.log_view.hide() # replegada del tot: treure-la del layout
|
||||
|
||||
Reference in New Issue
Block a user