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