diff --git a/gui/main.py b/gui/main.py index 0166d28..0ecb76a 100644 --- a/gui/main.py +++ b/gui/main.py @@ -13,8 +13,8 @@ from PyQt5.QtWidgets import ( QWidget, QPushButton, QLabel, QFileDialog, QMessageBox, QProgressBar, QTextEdit, QSplitter, QGroupBox, QStatusBar ) -from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer -from PyQt5.QtGui import QIcon, QFont, QPixmap +from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer, QSettings +from PyQt5.QtGui import QIcon, QFont, QPixmap, QScreen # Import configuration widgets from gui.config_tab import ConfigTab @@ -29,9 +29,40 @@ class DazedMTLGUI(QMainWindow): def __init__(self): super().__init__() + self.settings = QSettings("DazedTranslations", "DazedMTLTool") self.init_ui() self.setup_status_bar() self.setup_font_scaling() + self.restore_window_state() + + def restore_window_state(self): + """Restore window geometry and state from settings.""" + try: + # Restore window geometry + geometry = self.settings.value("geometry") + if geometry: + self.restoreGeometry(geometry) + + # Restore window state (maximized, etc.) + window_state = self.settings.value("windowState") + if window_state: + self.restoreState(window_state) + + except Exception as e: + print(f"Warning: Could not restore window state: {e}") + + def save_window_state(self): + """Save window geometry and state to settings.""" + try: + self.settings.setValue("geometry", self.saveGeometry()) + self.settings.setValue("windowState", self.saveState()) + except Exception as e: + print(f"Warning: Could not save window state: {e}") + + def closeEvent(self, event): + """Handle application close event.""" + self.save_window_state() + event.accept() def setup_font_scaling(self): """Set up font scaling based on configuration.""" @@ -75,7 +106,23 @@ class DazedMTLGUI(QMainWindow): def init_ui(self): """Initialize the user interface.""" self.setWindowTitle("DazedMTLTool - Visual Translation Interface") - self.setGeometry(100, 100, 1200, 800) + + # Get screen geometry and set window size more responsively + screen = QApplication.primaryScreen() + screen_geometry = screen.availableGeometry() + + # Set window size to 80% of screen size, with reasonable minimums + window_width = max(1200, int(screen_geometry.width() * 0.8)) + window_height = max(800, int(screen_geometry.height() * 0.8)) + + # Center the window on screen + x = (screen_geometry.width() - window_width) // 2 + y = (screen_geometry.height() - window_height) // 2 + + self.setGeometry(x, y, window_width, window_height) + + # Set minimum size to prevent the window from becoming too small + self.setMinimumSize(1000, 600) # Set window icon if available icon_path = Path("screens/tool.png") @@ -102,7 +149,10 @@ class DazedMTLGUI(QMainWindow): # Add widgets to splitter main_splitter.addWidget(self.tab_widget) main_splitter.addWidget(self.log_viewer) - main_splitter.setSizes([800, 400]) + + # Set proportional sizes instead of fixed pixel sizes + main_splitter.setStretchFactor(0, 2) # Main content gets 2/3 + main_splitter.setStretchFactor(1, 1) # Log viewer gets 1/3 # Set main layout layout = QVBoxLayout() @@ -340,7 +390,22 @@ def main(): QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True) + # Additional DPI handling for better compatibility + if hasattr(Qt, 'AA_DisableWindowContextHelpButton'): + QApplication.setAttribute(Qt.AA_DisableWindowContextHelpButton, True) + + # Set high DPI scale factor policy + if hasattr(QApplication, 'setHighDpiScaleFactorRoundingPolicy'): + QApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough) + app = QApplication(sys.argv) + + # Additional screen-aware settings + screen = app.primaryScreen() + if screen: + dpi = screen.logicalDotsPerInch() + print(f"Screen DPI: {dpi}") + except Exception as e: print(f"Failed to create QApplication: {e}") print("Make sure PyQt5 is properly installed:") diff --git a/gui/translation_tab.py b/gui/translation_tab.py index ec3aa4e..810c956 100644 --- a/gui/translation_tab.py +++ b/gui/translation_tab.py @@ -519,7 +519,9 @@ class TranslationTab(QWidget): output_widget = self.create_output_files_widget() file_management_splitter.addWidget(output_widget) - file_management_splitter.setSizes([300, 300]) + # Set proportional sizes instead of fixed pixel sizes + file_management_splitter.setStretchFactor(0, 1) + file_management_splitter.setStretchFactor(1, 1) layout.addWidget(file_management_splitter) # Console log at the bottom @@ -628,7 +630,8 @@ class TranslationTab(QWidget): input_layout = QVBoxLayout() self.input_list = QListWidget() - self.input_list.setMaximumHeight(120) + self.input_list.setMinimumHeight(80) + self.input_list.setMaximumHeight(150) input_layout.addWidget(self.input_list) input_buttons = QHBoxLayout() @@ -655,7 +658,8 @@ class TranslationTab(QWidget): output_layout = QVBoxLayout() self.output_list = QListWidget() - self.output_list.setMaximumHeight(120) + self.output_list.setMinimumHeight(80) + self.output_list.setMaximumHeight(150) output_layout.addWidget(self.output_list) output_buttons = QHBoxLayout() @@ -721,7 +725,8 @@ class TranslationTab(QWidget): self.log_display = QTextEdit() self.log_display.setReadOnly(True) self.log_display.setFont(QFont("Consolas", 9)) - self.log_display.setMinimumHeight(200) + self.log_display.setMinimumHeight(150) + self.log_display.setMaximumHeight(300) self.log_display.setStyleSheet(""" QTextEdit { background-color: #1e1e1e;