timer_dialog.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. """Dialog for creating and editing timers."""
  2. from PyQt6.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, QLabel,
  3. QLineEdit, QSpinBox, QPushButton, QGroupBox,
  4. QColorDialog, QTimeEdit)
  5. from PyQt6.QtGui import QColor
  6. from PyQt6.QtCore import QTime
  7. from models.timer_model import Timer
  8. class TimerDialog(QDialog):
  9. def __init__(self, parent=None, timer=None):
  10. super().__init__(parent)
  11. self.timer = timer
  12. self.bg_color = timer.bg_color if timer else "#000000"
  13. self.text_color = timer.text_color if timer else "#FFFFFF"
  14. self.init_ui()
  15. def init_ui(self):
  16. self.setWindowTitle("Timer Configuration")
  17. self.setMinimumWidth(400)
  18. layout = QVBoxLayout(self)
  19. # Timer name
  20. name_layout = QHBoxLayout()
  21. name_layout.addWidget(QLabel("Timer Name:"))
  22. self.name_input = QLineEdit()
  23. if self.timer:
  24. self.name_input.setText(self.timer.name)
  25. name_layout.addWidget(self.name_input)
  26. layout.addLayout(name_layout)
  27. # Duration
  28. duration_layout = QHBoxLayout()
  29. duration_layout.addWidget(QLabel("Duration (HH:MM:SS):"))
  30. self.duration_input = QTimeEdit()
  31. self.duration_input.setDisplayFormat("HH:mm:ss")
  32. self.duration_input.setMinimumTime(QTime(0, 0, 1))
  33. self.duration_input.setMaximumTime(QTime(23, 59, 59))
  34. # Set initial value from timer duration in seconds
  35. if self.timer:
  36. seconds = self.timer.duration
  37. else:
  38. seconds = 60 # Default 1 minute
  39. hours = seconds // 3600
  40. minutes = (seconds % 3600) // 60
  41. secs = seconds % 60
  42. self.duration_input.setTime(QTime(hours, minutes, secs))
  43. duration_layout.addWidget(self.duration_input)
  44. layout.addLayout(duration_layout)
  45. # Appearance group
  46. appearance_group = QGroupBox("Appearance")
  47. appearance_layout = QVBoxLayout()
  48. # Font size
  49. font_layout = QHBoxLayout()
  50. font_layout.addWidget(QLabel("Font Size:"))
  51. self.font_size_input = QSpinBox()
  52. self.font_size_input.setMinimum(20)
  53. self.font_size_input.setMaximum(500)
  54. self.font_size_input.setValue(self.timer.font_size if self.timer else 120)
  55. font_layout.addWidget(self.font_size_input)
  56. appearance_layout.addLayout(font_layout)
  57. # Background color
  58. bg_color_layout = QHBoxLayout()
  59. bg_color_layout.addWidget(QLabel("Background Color:"))
  60. self.bg_color_btn = QPushButton("Choose Color")
  61. self.bg_color_btn.clicked.connect(self.choose_bg_color)
  62. self.update_bg_color_button()
  63. bg_color_layout.addWidget(self.bg_color_btn)
  64. appearance_layout.addLayout(bg_color_layout)
  65. # Text color
  66. text_color_layout = QHBoxLayout()
  67. text_color_layout.addWidget(QLabel("Text Color:"))
  68. self.text_color_btn = QPushButton("Choose Color")
  69. self.text_color_btn.clicked.connect(self.choose_text_color)
  70. self.update_text_color_button()
  71. text_color_layout.addWidget(self.text_color_btn)
  72. appearance_layout.addLayout(text_color_layout)
  73. appearance_group.setLayout(appearance_layout)
  74. layout.addWidget(appearance_group)
  75. # Buttons
  76. button_layout = QHBoxLayout()
  77. save_btn = QPushButton("Save")
  78. cancel_btn = QPushButton("Cancel")
  79. save_btn.clicked.connect(self.accept)
  80. cancel_btn.clicked.connect(self.reject)
  81. button_layout.addStretch()
  82. button_layout.addWidget(save_btn)
  83. button_layout.addWidget(cancel_btn)
  84. layout.addLayout(button_layout)
  85. def choose_bg_color(self):
  86. color = QColorDialog.getColor(QColor(self.bg_color), self)
  87. if color.isValid():
  88. self.bg_color = color.name()
  89. self.update_bg_color_button()
  90. def choose_text_color(self):
  91. color = QColorDialog.getColor(QColor(self.text_color), self)
  92. if color.isValid():
  93. self.text_color = color.name()
  94. self.update_text_color_button()
  95. def update_bg_color_button(self):
  96. self.bg_color_btn.setStyleSheet(f"background-color: {self.bg_color};")
  97. def update_text_color_button(self):
  98. self.text_color_btn.setStyleSheet(f"background-color: {self.text_color};")
  99. def get_timer(self):
  100. # Convert QTime to seconds
  101. time = self.duration_input.time()
  102. duration_seconds = time.hour() * 3600 + time.minute() * 60 + time.second()
  103. return Timer(
  104. name=self.name_input.text(),
  105. duration=duration_seconds,
  106. font_size=self.font_size_input.value(),
  107. bg_color=self.bg_color,
  108. text_color=self.text_color
  109. )