From 2b9e2292fa781a532c12c3d27c41ed4c7c9dd2e1 Mon Sep 17 00:00:00 2001 From: Marcel Kapfer Date: Wed, 9 Sep 2020 23:41:42 +0200 Subject: [PATCH 1/6] Added Clear Fields Dialog --- ui_clear_dialog.py | 52 +++++++++++++++++++++++++++++++++++++++ ui_clear_dialog.ui | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 ui_clear_dialog.py create mode 100644 ui_clear_dialog.ui diff --git a/ui_clear_dialog.py b/ui_clear_dialog.py new file mode 100644 index 0000000..97a627e --- /dev/null +++ b/ui_clear_dialog.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'ui_clear_dialog.ui' +# +# Created by: PyQt5 UI code generator 5.15.0 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_ClearDialog(object): + def setupUi(self, ClearDialog): + ClearDialog.setObjectName("ClearDialog") + ClearDialog.setWindowModality(QtCore.Qt.ApplicationModal) + ClearDialog.resize(265, 75) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(ClearDialog.sizePolicy().hasHeightForWidth()) + ClearDialog.setSizePolicy(sizePolicy) + self.verticalLayout = QtWidgets.QVBoxLayout(ClearDialog) + self.verticalLayout.setObjectName("verticalLayout") + self.t_clear = QtWidgets.QLabel(ClearDialog) + self.t_clear.setObjectName("t_clear") + self.verticalLayout.addWidget(self.t_clear) + self.l_buttons = QtWidgets.QHBoxLayout() + self.l_buttons.setObjectName("l_buttons") + self.b_yes = QtWidgets.QPushButton(ClearDialog) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.b_yes.sizePolicy().hasHeightForWidth()) + self.b_yes.setSizePolicy(sizePolicy) + self.b_yes.setObjectName("b_yes") + self.l_buttons.addWidget(self.b_yes) + self.b_no = QtWidgets.QPushButton(ClearDialog) + self.b_no.setObjectName("b_no") + self.l_buttons.addWidget(self.b_no) + self.verticalLayout.addLayout(self.l_buttons) + + self.retranslateUi(ClearDialog) + QtCore.QMetaObject.connectSlotsByName(ClearDialog) + + def retranslateUi(self, ClearDialog): + _translate = QtCore.QCoreApplication.translate + ClearDialog.setWindowTitle(_translate("ClearDialog", "Eingabefelder leeren")) + self.t_clear.setText(_translate("ClearDialog", "Sollen die Eingabefelder geleert werden?")) + self.b_yes.setText(_translate("ClearDialog", "Ja")) + self.b_no.setText(_translate("ClearDialog", "Nein")) diff --git a/ui_clear_dialog.ui b/ui_clear_dialog.ui new file mode 100644 index 0000000..45ef83e --- /dev/null +++ b/ui_clear_dialog.ui @@ -0,0 +1,61 @@ + + + ClearDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 265 + 75 + + + + + 0 + 0 + + + + Eingabefelder leeren + + + + + + Sollen die Eingabefelder geleert werden? + + + + + + + + + + 0 + 0 + + + + Ja + + + + + + + Nein + + + + + + + + + + From cb139c6fbfb2fd63b886f2c4a9622777afd9831c Mon Sep 17 00:00:00 2001 From: Marcel Kapfer Date: Wed, 9 Sep 2020 23:42:51 +0200 Subject: [PATCH 2/6] Added mene item to clear fields --- ui_mainwindow.py | 20 +++++++++++++------- ui_mainwindow.ui | 23 +++++++++++++++-------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/ui_mainwindow.py b/ui_mainwindow.py index e6717ec..6041ef5 100644 --- a/ui_mainwindow.py +++ b/ui_mainwindow.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui_mainwindow.ui' # -# Created by: PyQt5 UI code generator 5.14.2 +# Created by: PyQt5 UI code generator 5.15.0 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -49,10 +50,6 @@ class Ui_MainWindow(object): self.e_servings.setText("") self.e_servings.setObjectName("e_servings") self.y_basics.addWidget(self.e_servings, 1, 1, 1, 1) - self.e_url = QtWidgets.QLineEdit(self.t_basics) - self.e_url.setText("") - self.e_url.setObjectName("e_url") - self.y_basics.addWidget(self.e_url, 2, 3, 1, 1) self.l_recipe_name = QtWidgets.QLabel(self.t_basics) self.l_recipe_name.setObjectName("l_recipe_name") self.y_basics.addWidget(self.l_recipe_name, 0, 0, 1, 1) @@ -75,6 +72,10 @@ class Ui_MainWindow(object): self.e_rating_overall.setProperty("value", 3) self.e_rating_overall.setObjectName("e_rating_overall") self.y_basics.addWidget(self.e_rating_overall, 2, 1, 1, 1) + self.e_url = QtWidgets.QLineEdit(self.t_basics) + self.e_url.setText("") + self.e_url.setObjectName("e_url") + self.y_basics.addWidget(self.e_url, 2, 3, 1, 1) self.verticalLayout_9.addLayout(self.y_basics) self.horizontalLayout_16 = QtWidgets.QHBoxLayout() self.horizontalLayout_16.setObjectName("horizontalLayout_16") @@ -361,15 +362,19 @@ class Ui_MainWindow(object): self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menuBar = QtWidgets.QMenuBar(MainWindow) - self.menuBar.setGeometry(QtCore.QRect(0, 0, 800, 30)) + self.menuBar.setGeometry(QtCore.QRect(0, 0, 800, 28)) self.menuBar.setObjectName("menuBar") self.menuMen = QtWidgets.QMenu(self.menuBar) self.menuMen.setObjectName("menuMen") MainWindow.setMenuBar(self.menuBar) + self.ma_clear_fields = QtWidgets.QAction(MainWindow) + self.ma_clear_fields.setObjectName("ma_clear_fields") self.ma_close = QtWidgets.QAction(MainWindow) self.ma_close.setObjectName("ma_close") self.ma_information = QtWidgets.QAction(MainWindow) self.ma_information.setObjectName("ma_information") + self.menuMen.addAction(self.ma_clear_fields) + self.menuMen.addSeparator() self.menuMen.addAction(self.ma_information) self.menuMen.addSeparator() self.menuMen.addAction(self.ma_close) @@ -454,5 +459,6 @@ class Ui_MainWindow(object): self.b_rating_remove.setText(_translate("MainWindow", "Entfernen")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.t_rating), _translate("MainWindow", "Bewertung")) self.menuMen.setTitle(_translate("MainWindow", "Me&nü")) + self.ma_clear_fields.setText(_translate("MainWindow", "Eingaben löschen")) self.ma_close.setText(_translate("MainWindow", "&Schließen")) self.ma_information.setText(_translate("MainWindow", "Informationen")) diff --git a/ui_mainwindow.ui b/ui_mainwindow.ui index caf6143..755b70f 100644 --- a/ui_mainwindow.ui +++ b/ui_mainwindow.ui @@ -98,13 +98,6 @@ - - - - - - - @@ -150,6 +143,13 @@ + + + + + + + @@ -792,19 +792,26 @@ 0 0 800 - 30 + 28 Me&nü + + + + + Eingaben löschen + + &Schließen From ba3a575ba2fd936b4d3d25622c5c63bd09e9795c Mon Sep 17 00:00:00 2001 From: Marcel Kapfer Date: Wed, 9 Sep 2020 23:43:40 +0200 Subject: [PATCH 3/6] Added clear function The clear function reset all input areas to their initial (mostly empty) value. --- wikicookbook.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/wikicookbook.py b/wikicookbook.py index d8b8835..44f5590 100644 --- a/wikicookbook.py +++ b/wikicookbook.py @@ -277,6 +277,49 @@ class MainWindow(QMainWindow, Ui_MainWindow): code = current_recipe.wikicode(writer) dialog = WikiCodeDialog(code) + def clear(self): + """ + Clear all fields + """ + + # Tab: Basics + self.e_recipe_name.setText("") + self.e_servings.setText("") + self.e_time.setText("") + self.e_rating_overall.setValue(3) + self.e_url.setText("") + self.e_category.setText("") + self.v_categories.clear() + + # Tab: Ingredients + self.e_ingredient.setText("") + self.e_amount.setText("") + self.c_heading.setChecked(False) + self.v_ingredients.clear() + + # Tab: Utensils + self.e_utensil.setText("") + self.v_utensils.clear() + + # Tab: Steps + self.e_step.setText("") + self.v_steps.clear() + + # Tab: Notes + self.e_note.setText("") + self.v_notes.clear() + + # Tab: Tips + self.e_tip.setText("") + self.v_tips.clear() + + # Tab: Variations + self.e_variation.setText("") + self.v_variations.clear() + + # Tab: Ratings + self.e_rating.setText("") + self.v_ratings.clear() dialog.exec_() def about(self): From 371ff3fa9fc7b107f94563fb1be6d4bcd666f592 Mon Sep 17 00:00:00 2001 From: Marcel Kapfer Date: Wed, 9 Sep 2020 23:44:27 +0200 Subject: [PATCH 4/6] Handle clear fields menu entry --- wikicookbook.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/wikicookbook.py b/wikicookbook.py index 44f5590..5a9f440 100644 --- a/wikicookbook.py +++ b/wikicookbook.py @@ -63,8 +63,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.b_cancel.clicked.connect(self.close) self.ma_close.triggered.connect(self.close) - # Connect about action + # Connect other menu actions self.ma_information.triggered.connect(self.about) + self.ma_clear_fields.triggered.connect(self.clear_fields) # Conncect recipe name typing self.e_recipe_name.textChanged.connect(self.updateTitle) @@ -320,6 +321,13 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Tab: Ratings self.e_rating.setText("") self.v_ratings.clear() + + def clear_fields(self): + """ + Show the clear fields dialog. + """ + dialog = ClearDialog() + dialog.accepted.connect(self.clear) dialog.exec_() def about(self): @@ -339,6 +347,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): if reply == QMessageBox.Yes: super.close() + if __name__ == "__main__": app = QApplication([]) app.setApplicationName("WikiCookBook") From f51e5ed8781016cc6dfb91d7b0867336288ee2c0 Mon Sep 17 00:00:00 2001 From: Marcel Kapfer Date: Wed, 9 Sep 2020 23:44:52 +0200 Subject: [PATCH 5/6] Added clear fields dialog code --- wikicookbook.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/wikicookbook.py b/wikicookbook.py index 5a9f440..ff853f3 100644 --- a/wikicookbook.py +++ b/wikicookbook.py @@ -28,6 +28,7 @@ from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QTableWidget from ui_mainwindow import Ui_MainWindow from ui_code_dialog import Ui_WikiCode from ui_about_dialog import Ui_About +from ui_clear_dialog import Ui_ClearDialog class AboutDialog(QDialog, Ui_About): def __init__(self, *args, **kwargs): @@ -38,6 +39,16 @@ class AboutDialog(QDialog, Ui_About): self.show() +class ClearDialog(QDialog, Ui_ClearDialog): + def __init__(self, *args, **kwargs): + super(ClearDialog, self).__init__(*args, **kwargs) + self.setupUi(self) + + self.b_yes.clicked.connect(self.accept) + self.b_no.clicked.connect(self.reject) + + self.show() + class WikiCodeDialog(QDialog, Ui_WikiCode): def __init__(self, code, *args, **kwargs): super(WikiCodeDialog, self).__init__(*args, **kwargs) From 3fe735e596ccea02ad183f7464b3318085c6eb91 Mon Sep 17 00:00:00 2001 From: Marcel Kapfer Date: Wed, 9 Sep 2020 23:45:06 +0200 Subject: [PATCH 6/6] Offer clearing fields when closing code dialog The offer is only made if the content has been copied at least once --- wikicookbook.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/wikicookbook.py b/wikicookbook.py index ff853f3..4e545cb 100644 --- a/wikicookbook.py +++ b/wikicookbook.py @@ -53,10 +53,11 @@ class WikiCodeDialog(QDialog, Ui_WikiCode): def __init__(self, code, *args, **kwargs): super(WikiCodeDialog, self).__init__(*args, **kwargs) self.setupUi(self) + self.copied = False self.e_code.setPlainText(code) - self.b_close.clicked.connect(self.close) + self.b_close.clicked.connect(self.clear_fields) self.b_copy.clicked.connect(self.copy) self.show() @@ -64,6 +65,20 @@ class WikiCodeDialog(QDialog, Ui_WikiCode): def copy(self): self.e_code.selectAll() self.e_code.copy() + self.copied = True + + def clear_fields(self): + """ + Show the clear fields dialog if the code was at least copied once. + """ + if self.copied: + dialog = ClearDialog() + dialog.rejected.connect(self.reject) + dialog.accepted.connect(self.accept) + dialog.exec_() + else: + self.close() + class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): @@ -289,6 +304,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): code = current_recipe.wikicode(writer) dialog = WikiCodeDialog(code) + dialog.accepted.connect(self.clear) + dialog.exec_() + def clear(self): """ Clear all fields