| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- """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
- )
|