"""Dialog for creating and editing timers.""" from PyQt6.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QSpinBox, QPushButton, QGroupBox, QColorDialog, QTimeEdit) from PyQt6.QtGui import QColor from PyQt6.QtCore import QTime from models.timer_model import Timer class TimerDialog(QDialog): def __init__(self, parent=None, timer=None): super().__init__(parent) self.timer = timer self.bg_color = timer.bg_color if timer else "#000000" self.text_color = timer.text_color if timer else "#FFFFFF" self.init_ui() def init_ui(self): self.setWindowTitle("Timer Configuration") self.setMinimumWidth(400) layout = QVBoxLayout(self) # Timer name name_layout = QHBoxLayout() name_layout.addWidget(QLabel("Timer Name:")) self.name_input = QLineEdit() if self.timer: self.name_input.setText(self.timer.name) name_layout.addWidget(self.name_input) layout.addLayout(name_layout) # Duration duration_layout = QHBoxLayout() duration_layout.addWidget(QLabel("Duration (HH:MM:SS):")) self.duration_input = QTimeEdit() self.duration_input.setDisplayFormat("HH:mm:ss") self.duration_input.setMinimumTime(QTime(0, 0, 1)) self.duration_input.setMaximumTime(QTime(23, 59, 59)) # Set initial value from timer duration in seconds if self.timer: seconds = self.timer.duration else: seconds = 60 # Default 1 minute hours = seconds // 3600 minutes = (seconds % 3600) // 60 secs = seconds % 60 self.duration_input.setTime(QTime(hours, minutes, secs)) duration_layout.addWidget(self.duration_input) layout.addLayout(duration_layout) # Appearance group appearance_group = QGroupBox("Appearance") appearance_layout = QVBoxLayout() # Font size font_layout = QHBoxLayout() font_layout.addWidget(QLabel("Font Size:")) self.font_size_input = QSpinBox() self.font_size_input.setMinimum(20) self.font_size_input.setMaximum(500) self.font_size_input.setValue(self.timer.font_size if self.timer else 120) font_layout.addWidget(self.font_size_input) appearance_layout.addLayout(font_layout) # Background color bg_color_layout = QHBoxLayout() bg_color_layout.addWidget(QLabel("Background Color:")) self.bg_color_btn = QPushButton("Choose Color") self.bg_color_btn.clicked.connect(self.choose_bg_color) self.update_bg_color_button() bg_color_layout.addWidget(self.bg_color_btn) appearance_layout.addLayout(bg_color_layout) # Text color text_color_layout = QHBoxLayout() text_color_layout.addWidget(QLabel("Text Color:")) self.text_color_btn = QPushButton("Choose Color") self.text_color_btn.clicked.connect(self.choose_text_color) self.update_text_color_button() text_color_layout.addWidget(self.text_color_btn) appearance_layout.addLayout(text_color_layout) appearance_group.setLayout(appearance_layout) layout.addWidget(appearance_group) # Buttons button_layout = QHBoxLayout() save_btn = QPushButton("Save") cancel_btn = QPushButton("Cancel") save_btn.clicked.connect(self.accept) cancel_btn.clicked.connect(self.reject) button_layout.addStretch() button_layout.addWidget(save_btn) button_layout.addWidget(cancel_btn) layout.addLayout(button_layout) def choose_bg_color(self): color = QColorDialog.getColor(QColor(self.bg_color), self) if color.isValid(): self.bg_color = color.name() self.update_bg_color_button() def choose_text_color(self): color = QColorDialog.getColor(QColor(self.text_color), self) if color.isValid(): self.text_color = color.name() self.update_text_color_button() def update_bg_color_button(self): self.bg_color_btn.setStyleSheet(f"background-color: {self.bg_color};") def update_text_color_button(self): self.text_color_btn.setStyleSheet(f"background-color: {self.text_color};") def get_timer(self): # Convert QTime to seconds time = self.duration_input.time() duration_seconds = time.hour() * 3600 + time.minute() * 60 + time.second() return Timer( name=self.name_input.text(), duration=duration_seconds, font_size=self.font_size_input.value(), bg_color=self.bg_color, text_color=self.text_color )