From 242a3be1c09835f9456eac4f8467e7cb6b3e79df Mon Sep 17 00:00:00 2001 From: Maximilian Zettler Date: Fri, 1 Sep 2023 09:54:55 +0200 Subject: [PATCH] update allow to pass a time to smart-punch --- timebot.ui | 122 ++++++++++++++++++++++++++++++++++++++---- timebot/gui.py | 26 +++------ timebot/ui/timebot.py | 90 ++++++++++++++++++++++++------- 3 files changed, 191 insertions(+), 47 deletions(-) diff --git a/timebot.ui b/timebot.ui index 3de2c5f..a612509 100644 --- a/timebot.ui +++ b/timebot.ui @@ -10,13 +10,25 @@ 0 0 300 - 300 + 320 + + + 0 + 0 + + 300 - 300 + 320 + + + + + 300 + 320 @@ -40,7 +52,10 @@ - TextLabel + Status + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse @@ -112,17 +127,106 @@ - - - Refresh Status + + + + 0 + 0 + + + + + + + 0 + 0 + + + + + 129 + 0 + + + + + 129 + 16777215 + + + + Smart Punch Time: + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 129 + 0 + + + + + 129 + 16777215 + + + + Qt::StrongFocus + + + + + + 30 + + + Qt::AlignCenter + + + + - - - Smart Punch + + + + 0 + 0 + + + + + + Qt::StrongFocus + + + Smart Punch + + + + + + + Refresh Status + + + + diff --git a/timebot/gui.py b/timebot/gui.py index d6af41d..a14a8be 100644 --- a/timebot/gui.py +++ b/timebot/gui.py @@ -7,7 +7,7 @@ from PySide6.QtWidgets import QWidget, QLabel, QMessageBox, QLineEdit, QHBoxLayo QFormLayout, QDialog, QMainWindow from pytimeparse.timeparse import timeparse -from timebot.timebot import TimeBot, TimebotObtainPasswordError +from timebot.timebot import TimeBot, TimebotObtainPasswordError, parse_user_time_input from timebot.ui.timebot import Ui_MainWindow package_logger = logging.getLogger(__name__) @@ -39,22 +39,6 @@ class MyPasswordDialog(QDialog): return False, "", False -class HoursPresentLabelArea(QWidget): - def __init__(self, parent=None): - super().__init__(parent) - - self.text_box_hours_present_label = QLabel() - self.text_box_hours_present_label.setText("Hours present:") - self.text_box_hours_present = QLabel() - self.text_box_hours_present.setStyleSheet("background : #E0E0E0") - self.text_box_hours_present.setAlignment(Qt.AlignCenter) - - layout = QHBoxLayout() - layout.addWidget(self.text_box_hours_present_label) - layout.addWidget(self.text_box_hours_present) - self.setLayout(layout) - - class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, timebot: TimeBot, refresh_interval="1m"): super(MainWindow, self).__init__() @@ -68,6 +52,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.threadpool = QThreadPool() self.refreshStatusButton.clicked.connect(self.update_status) + self.refreshStatusButton.setFocus() self.smartPunchButton.clicked.connect(self.smart_punch) self.status_timer_time = timeparse(refresh_interval) * 1000 @@ -109,8 +94,13 @@ class MainWindow(QMainWindow, Ui_MainWindow): def smart_punch(self): try: - self.timebot.smart_punch() + date = self.smartPunchTimeLineEdit.text() + if date: + self.timebot.smart_punch(parse_user_time_input(date)) + else: + self.timebot.smart_punch() self.update_status() + self.smartPunchTimeLineEdit.setText("") except Exception as e: self.error_msg_show(str(e)) diff --git a/timebot/ui/timebot.py b/timebot/ui/timebot.py index e18ccb3..b74a802 100644 --- a/timebot/ui/timebot.py +++ b/timebot/ui/timebot.py @@ -16,16 +16,22 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QImage, QKeySequence, QLinearGradient, QPainter, QPalette, QPixmap, QRadialGradient, QTransform) from PySide6.QtWidgets import (QApplication, QFrame, QHBoxLayout, QLabel, - QLayout, QMainWindow, QPushButton, QSizePolicy, - QVBoxLayout, QWidget) + QLayout, QLineEdit, QMainWindow, QPushButton, + QSizePolicy, QVBoxLayout, QWidget) class Ui_MainWindow(object): def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") MainWindow.setEnabled(True) - MainWindow.resize(300, 300) - MainWindow.setMinimumSize(QSize(300, 300)) + MainWindow.resize(300, 320) + sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) + MainWindow.setSizePolicy(sizePolicy) + MainWindow.setMinimumSize(QSize(300, 320)) + MainWindow.setMaximumSize(QSize(300, 320)) MainWindow.setBaseSize(QSize(300, 300)) MainWindow.setAcceptDrops(False) icon = QIcon() @@ -42,24 +48,25 @@ class Ui_MainWindow(object): self.verticalLayout.setObjectName(u"verticalLayout") self.statusLabel = QLabel(self.centralwidget) self.statusLabel.setObjectName(u"statusLabel") + self.statusLabel.setTextInteractionFlags(Qt.LinksAccessibleByMouse|Qt.TextSelectableByMouse) self.verticalLayout.addWidget(self.statusLabel) self.hoursPresentWidget = QWidget(self.centralwidget) self.hoursPresentWidget.setObjectName(u"hoursPresentWidget") - sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.hoursPresentWidget.sizePolicy().hasHeightForWidth()) - self.hoursPresentWidget.setSizePolicy(sizePolicy) + sizePolicy1 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.hoursPresentWidget.sizePolicy().hasHeightForWidth()) + self.hoursPresentWidget.setSizePolicy(sizePolicy1) self.horizontalLayout = QHBoxLayout(self.hoursPresentWidget) self.horizontalLayout.setObjectName(u"horizontalLayout") self.horizontalLayout.setSizeConstraint(QLayout.SetDefaultConstraint) self.label_2 = QLabel(self.hoursPresentWidget) self.label_2.setObjectName(u"label_2") self.label_2.setEnabled(True) - sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) - self.label_2.setSizePolicy(sizePolicy) + sizePolicy1.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) + self.label_2.setSizePolicy(sizePolicy1) self.label_2.setMinimumSize(QSize(0, 0)) font = QFont() font.setUnderline(False) @@ -70,8 +77,8 @@ class Ui_MainWindow(object): self.label_3 = QLabel(self.hoursPresentWidget) self.label_3.setObjectName(u"label_3") - sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth()) - self.label_3.setSizePolicy(sizePolicy) + sizePolicy1.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth()) + self.label_3.setSizePolicy(sizePolicy1) self.label_3.setAutoFillBackground(False) self.label_3.setFrameShape(QFrame.NoFrame) self.label_3.setAlignment(Qt.AlignCenter) @@ -81,15 +88,56 @@ class Ui_MainWindow(object): self.verticalLayout.addWidget(self.hoursPresentWidget) - self.refreshStatusButton = QPushButton(self.centralwidget) + self.smartPunchWidget = QWidget(self.centralwidget) + self.smartPunchWidget.setObjectName(u"smartPunchWidget") + sizePolicy1.setHeightForWidth(self.smartPunchWidget.sizePolicy().hasHeightForWidth()) + self.smartPunchWidget.setSizePolicy(sizePolicy1) + self.horizontalLayout_2 = QHBoxLayout(self.smartPunchWidget) + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.smartPunchTimeLineLabel = QLabel(self.smartPunchWidget) + self.smartPunchTimeLineLabel.setObjectName(u"smartPunchTimeLineLabel") + sizePolicy1.setHeightForWidth(self.smartPunchTimeLineLabel.sizePolicy().hasHeightForWidth()) + self.smartPunchTimeLineLabel.setSizePolicy(sizePolicy1) + self.smartPunchTimeLineLabel.setMinimumSize(QSize(129, 0)) + self.smartPunchTimeLineLabel.setMaximumSize(QSize(129, 16777215)) + self.smartPunchTimeLineLabel.setAlignment(Qt.AlignCenter) + + self.horizontalLayout_2.addWidget(self.smartPunchTimeLineLabel) + + self.smartPunchTimeLineEdit = QLineEdit(self.smartPunchWidget) + self.smartPunchTimeLineEdit.setObjectName(u"smartPunchTimeLineEdit") + sizePolicy1.setHeightForWidth(self.smartPunchTimeLineEdit.sizePolicy().hasHeightForWidth()) + self.smartPunchTimeLineEdit.setSizePolicy(sizePolicy1) + self.smartPunchTimeLineEdit.setMinimumSize(QSize(129, 0)) + self.smartPunchTimeLineEdit.setMaximumSize(QSize(129, 16777215)) + self.smartPunchTimeLineEdit.setFocusPolicy(Qt.StrongFocus) + self.smartPunchTimeLineEdit.setMaxLength(30) + self.smartPunchTimeLineEdit.setAlignment(Qt.AlignCenter) + + self.horizontalLayout_2.addWidget(self.smartPunchTimeLineEdit) + + + self.verticalLayout.addWidget(self.smartPunchWidget) + + self.buttonWidget = QWidget(self.centralwidget) + self.buttonWidget.setObjectName(u"buttonWidget") + sizePolicy1.setHeightForWidth(self.buttonWidget.sizePolicy().hasHeightForWidth()) + self.buttonWidget.setSizePolicy(sizePolicy1) + self.horizontalLayout_3 = QHBoxLayout(self.buttonWidget) + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.smartPunchButton = QPushButton(self.buttonWidget) + self.smartPunchButton.setObjectName(u"smartPunchButton") + self.smartPunchButton.setFocusPolicy(Qt.StrongFocus) + + self.horizontalLayout_3.addWidget(self.smartPunchButton) + + self.refreshStatusButton = QPushButton(self.buttonWidget) self.refreshStatusButton.setObjectName(u"refreshStatusButton") - self.verticalLayout.addWidget(self.refreshStatusButton) + self.horizontalLayout_3.addWidget(self.refreshStatusButton) - self.smartPunchButton = QPushButton(self.centralwidget) - self.smartPunchButton.setObjectName(u"smartPunchButton") - self.verticalLayout.addWidget(self.smartPunchButton) + self.verticalLayout.addWidget(self.buttonWidget) MainWindow.setCentralWidget(self.centralwidget) @@ -100,10 +148,12 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"Timebot", None)) - self.statusLabel.setText(QCoreApplication.translate("MainWindow", u"TextLabel", None)) + self.statusLabel.setText(QCoreApplication.translate("MainWindow", u"Status", None)) self.label_2.setText(QCoreApplication.translate("MainWindow", u"Hours present:", None)) self.label_3.setText(QCoreApplication.translate("MainWindow", u"00:00:00", None)) - self.refreshStatusButton.setText(QCoreApplication.translate("MainWindow", u"Refresh Status", None)) + self.smartPunchTimeLineLabel.setText(QCoreApplication.translate("MainWindow", u"Smart Punch Time:", None)) + self.smartPunchTimeLineEdit.setText("") self.smartPunchButton.setText(QCoreApplication.translate("MainWindow", u"Smart Punch", None)) + self.refreshStatusButton.setText(QCoreApplication.translate("MainWindow", u"Refresh Status", None)) # retranslateUi