Complete file refactoring

No code changes outside of the refactoring process.
This commit is contained in:
Marcel Kapfer 2021-04-14 19:14:09 +02:00
parent 65dc5a65e6
commit 184a5ee20b
Signed by: mmk2410
GPG key ID: CADE6F0C09F21B09
15 changed files with 425 additions and 421 deletions

View file

@ -0,0 +1,182 @@
"""
A class for modeling and saving information about a recipe.
Copyright (C) 2020 Marcel Kapfer <opensource@mmk2410.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
class Recipe():
"""
This class represents an recipe.
"""
def __init__(self, name, servings, time, rating, url):
self.name = name
self.servings = servings
self.time = time
self.rating = rating
self.url = url
self.categories = []
self.ingredients = []
self.utensils = []
self.steps = []
self.notes = []
self.tips = []
self.variations = []
self.ratings = []
def add_category(self, category):
self.categories.append(category)
def add_ingredient(self, amount, ingredient):
self.ingredients.append((amount, ingredient))
def add_utensil(self, utensil):
self.utensils.append(utensil)
def add_step(self, step):
self.steps.append(step)
def add_note(self, note):
self.notes.append(note)
def add_tip(self, tip):
self.tips.append(tip)
def add_variation(self, variation):
self.variations.append(variation)
def add_rating(self, rating):
self.ratings.append(rating)
def wikicode(self, writer):
# Define table styles
style_titletable = 'tablestyle="margin-right:auto;margin-left:auto; width: 100%;text-align:center;"'
style_title_title = '#BF31C3 height="75px" style="font-size:35px;font-weight:bold;border: 3px solid #BF31C3;color:#ffffff"'
style_title_image = 'height="200pt" style="border:none;"'
style_title_info = 'height="50pt" style="font-size:20px;font-weight:bold;border: 3px solid #BF31C3;color:#BF31C3"'
style_infotable = 'tablestyle="margin-right:auto;margin-left:auto; width: 100%;text-align:center;" height="50pt" #BF31C3'
style_info_headingrow = 'rowstyle="font-size:20px;font-weight:bold;color:#ffffff"'
style_info_heading = '25% #BF31C3 style="border: none; border-right: 3px solid #fff;"'
style_info_contentrow = 'height="40pt" rowstyle="font-size:20px;font-weight:bold;"'
style_info_content = '25% style="border: none; border-bottom:3px solid #BF31C3"'
style_ingredientstable = 'tablestyle="margin-right:auto;margin-left:auto; width: 100%;text-align:center;font-size:15px;"'
style_ingredients_heading = '#BF31C3 height="50px" style="color:#ffffff;font-size:20px;font-weight:bold;border: 3px solid #BF31C3;"'
style_ingredients_heading_2_left = '20% style="text-align:right;border:none;border-right:3px solid #BF31C3;border-bottom:3px solid #BF31C3"'
style_ingredients_heading_2_right = '80% style="text-align:left;border:none;border-bottom:3px solid #BF31C3"'
style_ingredients_subheading = '#BF31C3 style="color:#ffffff"'
style_ingredients_left = '20% style="text-align:right;border:none;border-right:3px solid #BF31C3;"'
style_ingredients_right = '80% style="text-align:left;border:none;"'
style_heading = 'tablestyle="margin-right:auto;margin-left:auto; width: 100%;text-align:center;font-size:20px" #BF31C3 height="50px" style="font-size:20px;font-weight:bold;border: 3px solid #BF31C3;color:#ffffff;"'
# Array holding the complete code
code = []
# Title table (title, image and Info header
code.append(writer.table_cell(""))
code.append(writer.table_cell(""))
code.append(writer.table_cell(""))
code.append(writer.table_cell(self.name, f"{style_titletable} {style_title_title}"))
code.append(writer.table_row_end())
code.append(writer.table_cell(""))
code.append(writer.table_cell(""))
code.append(writer.table_cell(""))
code.append(writer.table_cell(writer.link(self.name, "attachment:rezept.jpg", "width=30%", display=True), style_title_image))
code.append(writer.table_row_end())
code.append(writer.table_cell(""))
code.append(writer.table_cell(""))
code.append(writer.table_cell(""))
code.append(writer.table_cell("I N F O", style_title_info))
code.append(writer.table_row_end())
code.append(writer.newline())
# Basic information table
code.append(writer.table_cell("Portionen", f"{style_infotable} {style_info_headingrow} {style_info_heading}"))
code.append(writer.table_cell("Zeit", style_info_heading))
code.append(writer.table_cell("Bewertung", style_info_heading))
code.append(writer.table_cell("Link", style_info_heading))
code.append(writer.table_row_end())
code.append(writer.table_cell(self.servings, f"{style_info_contentrow} {style_info_content}"))
code.append(writer.table_cell(self.time, style_info_content))
code.append(writer.table_cell("🟢" * self.rating + "" * (5 - self.rating), style_info_content))
code.append(writer.table_cell(writer.link(self.name, self.url), style_info_content))
code.append(writer.table_row_end())
code.append(writer.newline())
code.append(writer.linebreak())
code.append(writer.newline())
# Ingredients table
code.append(writer.table_cell(""))
code.append(writer.table_cell("Zutaten", f"{style_ingredientstable} {style_ingredients_heading}"))
code.append(writer.table_row_end())
code.append(writer.table_cell("Menge", style_ingredients_heading_2_left))
code.append(writer.table_cell("Zutat", style_ingredients_heading_2_right))
code.append(writer.table_row_end())
for ingredient in self.ingredients:
if ingredient[0] == "----------":
code.append(writer.table_cell(""))
code.append(writer.table_cell(ingredient[1], style_ingredients_subheading))
else:
code.append(writer.table_cell(ingredient[0], style_ingredients_left))
code.append(writer.table_cell(ingredient[1], style_ingredients_right))
code.append(writer.table_row_end())
# Sections
sections = [(self.utensils, "Küchenutensilien"),
(self.steps, "Zubereitung"),
(self.notes, "Notizen"),
(self.tips, "Tipps"),
(self.variations, "Variationen"),
(self.ratings, "Bewertung")]
for section in sections:
code = code + self.wikicode_section(section[1], section[0], writer, style_heading)
code.append(writer.newline())
code.append(writer.newline())
# Categories
code.append(writer.hrule())
for category in self.categories:
code.append(f"{category} ")
code.append(writer.newline())
return ''.join(code)
def wikicode_section(self, name, items, writer, style_heading):
"""
Get the standard wiki code for a section with a unorderd list.
"""
code = []
if items:
code.append(writer.newline())
code.append(writer.linebreak())
code.append(writer.newline())
code.append(writer.table_cell(name, style_heading))
code.append(writer.table_row_end())
for item in items:
code.append(writer.ulitem(item))
code.append(writer.newline())
return code

View file

@ -0,0 +1,78 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui_about_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 AboutDialog(object):
def setupUi(self, About):
About.setObjectName("About")
About.resize(400, 300)
self.verticalLayout_2 = QtWidgets.QVBoxLayout(About)
self.verticalLayout_2.setObjectName("verticalLayout_2")
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem)
self.l_title = QtWidgets.QLabel(About)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.l_title.setFont(font)
self.l_title.setAlignment(QtCore.Qt.AlignCenter)
self.l_title.setObjectName("l_title")
self.verticalLayout_2.addWidget(self.l_title)
self.l_description = QtWidgets.QLabel(About)
self.l_description.setAlignment(QtCore.Qt.AlignCenter)
self.l_description.setWordWrap(True)
self.l_description.setObjectName("l_description")
self.verticalLayout_2.addWidget(self.l_description)
self.label = QtWidgets.QLabel(About)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.verticalLayout_2.addWidget(self.label)
self.l_basedon = QtWidgets.QLabel(About)
self.l_basedon.setAlignment(QtCore.Qt.AlignCenter)
self.l_basedon.setObjectName("l_basedon")
self.verticalLayout_2.addWidget(self.l_basedon)
self.l_copyright = QtWidgets.QLabel(About)
self.l_copyright.setAlignment(QtCore.Qt.AlignCenter)
self.l_copyright.setObjectName("l_copyright")
self.verticalLayout_2.addWidget(self.l_copyright)
self.l_sourcecode = QtWidgets.QLabel(About)
self.l_sourcecode.setAlignment(QtCore.Qt.AlignCenter)
self.l_sourcecode.setObjectName("l_sourcecode")
self.verticalLayout_2.addWidget(self.l_sourcecode)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem1)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem2)
self.b_close = QtWidgets.QPushButton(About)
self.b_close.setObjectName("b_close")
self.horizontalLayout.addWidget(self.b_close)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem3)
self.verticalLayout_2.addLayout(self.horizontalLayout)
spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem4)
self.retranslateUi(About)
QtCore.QMetaObject.connectSlotsByName(About)
def retranslateUi(self, About):
_translate = QtCore.QCoreApplication.translate
About.setWindowTitle(_translate("About", "About"))
self.l_title.setText(_translate("About", "WikiCookBook"))
self.l_description.setText(_translate("About", "A graphical editor for creating cookbook entries using the MoinMoin wiki syntax"))
self.label.setText(_translate("About", "Version 0.2.0"))
self.l_basedon.setText(_translate("About", "<html><head/><body><p>Based on <a href=\"https://www.python.org/\"><span style=\" text-decoration: underline; color:#4c6b8a;\">Python</span></a> and <a href=\"https://www.riverbankcomputing.com/software/pyqt/intro\"><span style=\" text-decoration: underline; color:#4c6b8a;\">PyQt</span></a>.</p></body></html>"))
self.l_copyright.setText(_translate("About", "<html><head/><body><p>2020 © Marcel Kapfer (opensource@mmk2410.org)<br/>Licensed under GPLv3</p></body></html>"))
self.l_sourcecode.setText(_translate("About", "<html><head/><body><p>Sourcecode available at<br/><a href=\"https://git.mmk2410.org/mmk2410/wikicookbook\"><span style=\" text-decoration: underline; color:#4c6b8a;\">git.mmk2410.org/mmk2410/wikicookbook</span></a></p></body></html>"))
self.b_close.setText(_translate("About", "Schließen"))

View file

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

View file

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui_close_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 CloseDialog(object):
def setupUi(self, CloseDialog):
CloseDialog.setObjectName("CloseDialog")
CloseDialog.setWindowModality(QtCore.Qt.ApplicationModal)
CloseDialog.resize(313, 75)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(CloseDialog.sizePolicy().hasHeightForWidth())
CloseDialog.setSizePolicy(sizePolicy)
self.verticalLayout = QtWidgets.QVBoxLayout(CloseDialog)
self.verticalLayout.setObjectName("verticalLayout")
self.t_close = QtWidgets.QLabel(CloseDialog)
self.t_close.setObjectName("t_close")
self.verticalLayout.addWidget(self.t_close)
self.l_buttons = QtWidgets.QHBoxLayout()
self.l_buttons.setObjectName("l_buttons")
self.b_yes = QtWidgets.QPushButton(CloseDialog)
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(CloseDialog)
self.b_no.setObjectName("b_no")
self.l_buttons.addWidget(self.b_no)
self.verticalLayout.addLayout(self.l_buttons)
self.retranslateUi(CloseDialog)
QtCore.QMetaObject.connectSlotsByName(CloseDialog)
def retranslateUi(self, CloseDialog):
_translate = QtCore.QCoreApplication.translate
CloseDialog.setWindowTitle(_translate("CloseDialog", "Programm schließen"))
self.t_close.setText(_translate("CloseDialog", "Soll das Programm wirklich geschlossen werden?"))
self.b_yes.setText(_translate("CloseDialog", "Ja"))
self.b_no.setText(_translate("CloseDialog", "Nein"))

View file

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui_code_dialog.ui'
#
# Created by: PyQt5 UI code generator 5.14.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class CodeDialog(object):
def setupUi(self, CodeDialog):
CodeDialog.setObjectName("CodeDialog")
CodeDialog.resize(530, 643)
self.verticalLayout_2 = QtWidgets.QVBoxLayout(CodeDialog)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.e_code = QtWidgets.QPlainTextEdit(CodeDialog)
font = QtGui.QFont()
font.setFamily("Monospace")
self.e_code.setFont(font)
self.e_code.setReadOnly(True)
self.e_code.setObjectName("e_code")
self.verticalLayout_2.addWidget(self.e_code)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.b_copy = QtWidgets.QPushButton(CodeDialog)
self.b_copy.setObjectName("b_copy")
self.horizontalLayout.addWidget(self.b_copy)
self.b_close = QtWidgets.QPushButton(CodeDialog)
self.b_close.setObjectName("b_close")
self.horizontalLayout.addWidget(self.b_close)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.retranslateUi(CodeDialog)
QtCore.QMetaObject.connectSlotsByName(CodeDialog)
def retranslateUi(self, CodeDialog):
_translate = QtCore.QCoreApplication.translate
CodeDialog.setWindowTitle(_translate("CodeDialog", "CodeDialog"))
self.b_copy.setText(_translate("CodeDialog", "Kopieren"))
self.b_close.setText(_translate("CodeDialog", "Schließen"))

View file

@ -0,0 +1,502 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui_mainwindow.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 MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 620)
MainWindow.setMinimumSize(QtCore.QSize(800, 620))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setContentsMargins(10, 10, 10, 10)
self.gridLayout.setObjectName("gridLayout")
self.y_buttons = QtWidgets.QHBoxLayout()
self.y_buttons.setObjectName("y_buttons")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.y_buttons.addItem(spacerItem)
self.b_create = QtWidgets.QPushButton(self.centralwidget)
self.b_create.setObjectName("b_create")
self.y_buttons.addWidget(self.b_create)
self.b_cancel = QtWidgets.QPushButton(self.centralwidget)
self.b_cancel.setObjectName("b_cancel")
self.y_buttons.addWidget(self.b_cancel)
self.gridLayout.addLayout(self.y_buttons, 1, 0, 1, 1)
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setObjectName("tabWidget")
self.t_basics = QtWidgets.QWidget()
self.t_basics.setObjectName("t_basics")
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.t_basics)
self.verticalLayout_9.setObjectName("verticalLayout_9")
self.y_basics = QtWidgets.QGridLayout()
self.y_basics.setObjectName("y_basics")
self.l_rating = QtWidgets.QLabel(self.t_basics)
self.l_rating.setObjectName("l_rating")
self.y_basics.addWidget(self.l_rating, 2, 0, 1, 1)
self.l_url = QtWidgets.QLabel(self.t_basics)
self.l_url.setObjectName("l_url")
self.y_basics.addWidget(self.l_url, 2, 2, 1, 1)
self.e_servings = QtWidgets.QLineEdit(self.t_basics)
self.e_servings.setText("")
self.e_servings.setObjectName("e_servings")
self.y_basics.addWidget(self.e_servings, 1, 1, 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)
self.e_time = QtWidgets.QLineEdit(self.t_basics)
self.e_time.setText("")
self.e_time.setObjectName("e_time")
self.y_basics.addWidget(self.e_time, 1, 3, 1, 1)
self.e_recipe_name = QtWidgets.QLineEdit(self.t_basics)
self.e_recipe_name.setText("")
self.e_recipe_name.setObjectName("e_recipe_name")
self.y_basics.addWidget(self.e_recipe_name, 0, 1, 1, 3)
self.l_servings = QtWidgets.QLabel(self.t_basics)
self.l_servings.setObjectName("l_servings")
self.y_basics.addWidget(self.l_servings, 1, 0, 1, 1)
self.l_zeit = QtWidgets.QLabel(self.t_basics)
self.l_zeit.setObjectName("l_zeit")
self.y_basics.addWidget(self.l_zeit, 1, 2, 1, 1)
self.e_rating_overall = QtWidgets.QSpinBox(self.t_basics)
self.e_rating_overall.setMaximum(5)
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")
self.v_categories = QtWidgets.QListWidget(self.t_basics)
self.v_categories.setObjectName("v_categories")
self.horizontalLayout_16.addWidget(self.v_categories)
self.verticalLayout_8 = QtWidgets.QVBoxLayout()
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.y_category = QtWidgets.QGridLayout()
self.y_category.setObjectName("y_category")
self.l_category = QtWidgets.QLabel(self.t_basics)
self.l_category.setObjectName("l_category")
self.y_category.addWidget(self.l_category, 0, 0, 1, 1)
self.e_category = QtWidgets.QLineEdit(self.t_basics)
self.e_category.setObjectName("e_category")
self.y_category.addWidget(self.e_category, 0, 1, 1, 1)
self.verticalLayout_8.addLayout(self.y_category)
self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
self.horizontalLayout_15.setObjectName("horizontalLayout_15")
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_15.addItem(spacerItem1)
self.b_category_remove = QtWidgets.QPushButton(self.t_basics)
self.b_category_remove.setObjectName("b_category_remove")
self.horizontalLayout_15.addWidget(self.b_category_remove)
self.b_category_add = QtWidgets.QPushButton(self.t_basics)
self.b_category_add.setAutoDefault(True)
self.b_category_add.setObjectName("b_category_add")
self.horizontalLayout_15.addWidget(self.b_category_add)
self.verticalLayout_8.addLayout(self.horizontalLayout_15)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_8.addItem(spacerItem2)
self.horizontalLayout_16.addLayout(self.verticalLayout_8)
self.verticalLayout_9.addLayout(self.horizontalLayout_16)
self.tabWidget.addTab(self.t_basics, "")
self.t_ingredients = QtWidgets.QWidget()
self.t_ingredients.setObjectName("t_ingredients")
self.horizontalLayout_14 = QtWidgets.QHBoxLayout(self.t_ingredients)
self.horizontalLayout_14.setObjectName("horizontalLayout_14")
self.v_ingredients = QtWidgets.QTableWidget(self.t_ingredients)
self.v_ingredients.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.v_ingredients.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.v_ingredients.setObjectName("v_ingredients")
self.v_ingredients.setColumnCount(2)
self.v_ingredients.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.v_ingredients.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.v_ingredients.setHorizontalHeaderItem(1, item)
self.v_ingredients.horizontalHeader().setStretchLastSection(True)
self.v_ingredients.verticalHeader().setVisible(False)
self.horizontalLayout_14.addWidget(self.v_ingredients)
self.verticalLayout_7 = QtWidgets.QVBoxLayout()
self.verticalLayout_7.setObjectName("verticalLayout_7")
self.y_ingredient = QtWidgets.QGridLayout()
self.y_ingredient.setObjectName("y_ingredient")
self.e_amount = QtWidgets.QLineEdit(self.t_ingredients)
self.e_amount.setObjectName("e_amount")
self.y_ingredient.addWidget(self.e_amount, 3, 1, 1, 1)
self.l_ingredient = QtWidgets.QLabel(self.t_ingredients)
self.l_ingredient.setObjectName("l_ingredient")
self.y_ingredient.addWidget(self.l_ingredient, 0, 0, 1, 1)
self.l_amount = QtWidgets.QLabel(self.t_ingredients)
self.l_amount.setObjectName("l_amount")
self.y_ingredient.addWidget(self.l_amount, 3, 0, 1, 1)
self.c_heading = QtWidgets.QCheckBox(self.t_ingredients)
self.c_heading.setObjectName("c_heading")
self.y_ingredient.addWidget(self.c_heading, 1, 1, 1, 1)
self.e_ingredient = QtWidgets.QLineEdit(self.t_ingredients)
self.e_ingredient.setObjectName("e_ingredient")
self.y_ingredient.addWidget(self.e_ingredient, 0, 1, 1, 1)
self.verticalLayout_7.addLayout(self.y_ingredient)
self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
self.horizontalLayout_13.setObjectName("horizontalLayout_13")
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_13.addItem(spacerItem3)
self.b_ingredient_remove = QtWidgets.QPushButton(self.t_ingredients)
self.b_ingredient_remove.setObjectName("b_ingredient_remove")
self.horizontalLayout_13.addWidget(self.b_ingredient_remove)
self.b_ingredient_add = QtWidgets.QPushButton(self.t_ingredients)
self.b_ingredient_add.setAutoDefault(True)
self.b_ingredient_add.setObjectName("b_ingredient_add")
self.horizontalLayout_13.addWidget(self.b_ingredient_add)
self.verticalLayout_7.addLayout(self.horizontalLayout_13)
spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_7.addItem(spacerItem4)
self.horizontalLayout_14.addLayout(self.verticalLayout_7)
self.tabWidget.addTab(self.t_ingredients, "")
self.t_utensils = QtWidgets.QWidget()
self.t_utensils.setObjectName("t_utensils")
self.horizontalLayout_11 = QtWidgets.QHBoxLayout(self.t_utensils)
self.horizontalLayout_11.setObjectName("horizontalLayout_11")
self.v_utensils = QtWidgets.QListWidget(self.t_utensils)
self.v_utensils.setObjectName("v_utensils")
self.horizontalLayout_11.addWidget(self.v_utensils)
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.y_utensils = QtWidgets.QGridLayout()
self.y_utensils.setObjectName("y_utensils")
self.l_utensil = QtWidgets.QLabel(self.t_utensils)
self.l_utensil.setObjectName("l_utensil")
self.y_utensils.addWidget(self.l_utensil, 0, 0, 1, 1)
self.e_utensil = QtWidgets.QLineEdit(self.t_utensils)
self.e_utensil.setObjectName("e_utensil")
self.y_utensils.addWidget(self.e_utensil, 0, 1, 1, 1)
self.verticalLayout_6.addLayout(self.y_utensils)
self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_12.addItem(spacerItem5)
self.b_utensil_remove = QtWidgets.QPushButton(self.t_utensils)
self.b_utensil_remove.setObjectName("b_utensil_remove")
self.horizontalLayout_12.addWidget(self.b_utensil_remove)
self.b_utensil_add = QtWidgets.QPushButton(self.t_utensils)
self.b_utensil_add.setAutoDefault(True)
self.b_utensil_add.setObjectName("b_utensil_add")
self.horizontalLayout_12.addWidget(self.b_utensil_add)
self.verticalLayout_6.addLayout(self.horizontalLayout_12)
spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_6.addItem(spacerItem6)
self.horizontalLayout_11.addLayout(self.verticalLayout_6)
self.tabWidget.addTab(self.t_utensils, "")
self.t_steps = QtWidgets.QWidget()
self.t_steps.setObjectName("t_steps")
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.t_steps)
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.e_step = QtWidgets.QTextEdit(self.t_steps)
self.e_step.setObjectName("e_step")
self.verticalLayout_5.addWidget(self.e_step)
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_9.addItem(spacerItem7)
self.b_step_add = QtWidgets.QPushButton(self.t_steps)
self.b_step_add.setAutoDefault(True)
self.b_step_add.setObjectName("b_step_add")
self.horizontalLayout_9.addWidget(self.b_step_add)
self.verticalLayout_5.addLayout(self.horizontalLayout_9)
self.v_steps = QtWidgets.QListWidget(self.t_steps)
self.v_steps.setObjectName("v_steps")
self.verticalLayout_5.addWidget(self.v_steps)
self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
self.horizontalLayout_10.setObjectName("horizontalLayout_10")
spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_10.addItem(spacerItem8)
self.b_step_edit = QtWidgets.QPushButton(self.t_steps)
self.b_step_edit.setObjectName("b_step_edit")
self.horizontalLayout_10.addWidget(self.b_step_edit)
self.b_step_replace = QtWidgets.QPushButton(self.t_steps)
self.b_step_replace.setObjectName("b_step_replace")
self.horizontalLayout_10.addWidget(self.b_step_replace)
self.b_step_remove = QtWidgets.QPushButton(self.t_steps)
self.b_step_remove.setObjectName("b_step_remove")
self.horizontalLayout_10.addWidget(self.b_step_remove)
self.verticalLayout_5.addLayout(self.horizontalLayout_10)
self.tabWidget.addTab(self.t_steps, "")
self.t_notes = QtWidgets.QWidget()
self.t_notes.setObjectName("t_notes")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.t_notes)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.e_note = QtWidgets.QTextEdit(self.t_notes)
self.e_note.setObjectName("e_note")
self.verticalLayout_4.addWidget(self.e_note)
self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_7.addItem(spacerItem9)
self.b_note_add = QtWidgets.QPushButton(self.t_notes)
self.b_note_add.setAutoDefault(True)
self.b_note_add.setObjectName("b_note_add")
self.horizontalLayout_7.addWidget(self.b_note_add)
self.verticalLayout_4.addLayout(self.horizontalLayout_7)
self.v_notes = QtWidgets.QListWidget(self.t_notes)
self.v_notes.setObjectName("v_notes")
self.verticalLayout_4.addWidget(self.v_notes)
self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_8.addItem(spacerItem10)
self.b_note_edit = QtWidgets.QPushButton(self.t_notes)
self.b_note_edit.setObjectName("b_note_edit")
self.horizontalLayout_8.addWidget(self.b_note_edit)
self.b_note_replace = QtWidgets.QPushButton(self.t_notes)
self.b_note_replace.setObjectName("b_note_replace")
self.horizontalLayout_8.addWidget(self.b_note_replace)
self.b_note_remove = QtWidgets.QPushButton(self.t_notes)
self.b_note_remove.setObjectName("b_note_remove")
self.horizontalLayout_8.addWidget(self.b_note_remove)
self.verticalLayout_4.addLayout(self.horizontalLayout_8)
self.tabWidget.addTab(self.t_notes, "")
self.t_tips = QtWidgets.QWidget()
self.t_tips.setObjectName("t_tips")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.t_tips)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.e_tip = QtWidgets.QTextEdit(self.t_tips)
self.e_tip.setObjectName("e_tip")
self.verticalLayout_2.addWidget(self.e_tip)
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_5.addItem(spacerItem11)
self.b_tip_add = QtWidgets.QPushButton(self.t_tips)
self.b_tip_add.setAutoDefault(True)
self.b_tip_add.setObjectName("b_tip_add")
self.horizontalLayout_5.addWidget(self.b_tip_add)
self.verticalLayout_2.addLayout(self.horizontalLayout_5)
self.v_tips = QtWidgets.QListWidget(self.t_tips)
self.v_tips.setObjectName("v_tips")
self.verticalLayout_2.addWidget(self.v_tips)
self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_6.addItem(spacerItem12)
self.b_tip_edit = QtWidgets.QPushButton(self.t_tips)
self.b_tip_edit.setObjectName("b_tip_edit")
self.horizontalLayout_6.addWidget(self.b_tip_edit)
self.b_tip_replace = QtWidgets.QPushButton(self.t_tips)
self.b_tip_replace.setObjectName("b_tip_replace")
self.horizontalLayout_6.addWidget(self.b_tip_replace)
self.b_tip_remove = QtWidgets.QPushButton(self.t_tips)
self.b_tip_remove.setObjectName("b_tip_remove")
self.horizontalLayout_6.addWidget(self.b_tip_remove)
self.verticalLayout_2.addLayout(self.horizontalLayout_6)
self.tabWidget.addTab(self.t_tips, "")
self.t_variations = QtWidgets.QWidget()
self.t_variations.setObjectName("t_variations")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.t_variations)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.e_variation = QtWidgets.QTextEdit(self.t_variations)
self.e_variation.setObjectName("e_variation")
self.verticalLayout_3.addWidget(self.e_variation)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_3.addItem(spacerItem13)
self.b_variation_add = QtWidgets.QPushButton(self.t_variations)
self.b_variation_add.setAutoDefault(True)
self.b_variation_add.setObjectName("b_variation_add")
self.horizontalLayout_3.addWidget(self.b_variation_add)
self.verticalLayout_3.addLayout(self.horizontalLayout_3)
self.v_variations = QtWidgets.QListWidget(self.t_variations)
self.v_variations.setObjectName("v_variations")
self.verticalLayout_3.addWidget(self.v_variations)
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_4.addItem(spacerItem14)
self.b_variation_edit = QtWidgets.QPushButton(self.t_variations)
self.b_variation_edit.setObjectName("b_variation_edit")
self.horizontalLayout_4.addWidget(self.b_variation_edit)
self.b_variation_replace = QtWidgets.QPushButton(self.t_variations)
self.b_variation_replace.setObjectName("b_variation_replace")
self.horizontalLayout_4.addWidget(self.b_variation_replace)
self.b_variation_remove = QtWidgets.QPushButton(self.t_variations)
self.b_variation_remove.setObjectName("b_variation_remove")
self.horizontalLayout_4.addWidget(self.b_variation_remove)
self.verticalLayout_3.addLayout(self.horizontalLayout_4)
self.tabWidget.addTab(self.t_variations, "")
self.t_rating = QtWidgets.QWidget()
self.t_rating.setObjectName("t_rating")
self.verticalLayout = QtWidgets.QVBoxLayout(self.t_rating)
self.verticalLayout.setObjectName("verticalLayout")
self.e_rating = QtWidgets.QTextEdit(self.t_rating)
self.e_rating.setObjectName("e_rating")
self.verticalLayout.addWidget(self.e_rating)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
spacerItem15 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem15)
self.b_rating_add = QtWidgets.QPushButton(self.t_rating)
self.b_rating_add.setAutoDefault(True)
self.b_rating_add.setObjectName("b_rating_add")
self.horizontalLayout_2.addWidget(self.b_rating_add)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.v_ratings = QtWidgets.QListWidget(self.t_rating)
self.v_ratings.setObjectName("v_ratings")
self.verticalLayout.addWidget(self.v_ratings)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
spacerItem16 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem16)
self.b_rating_edit = QtWidgets.QPushButton(self.t_rating)
self.b_rating_edit.setObjectName("b_rating_edit")
self.horizontalLayout.addWidget(self.b_rating_edit)
self.b_rating_replace = QtWidgets.QPushButton(self.t_rating)
self.b_rating_replace.setObjectName("b_rating_replace")
self.horizontalLayout.addWidget(self.b_rating_replace)
self.b_rating_remove = QtWidgets.QPushButton(self.t_rating)
self.b_rating_remove.setObjectName("b_rating_remove")
self.horizontalLayout.addWidget(self.b_rating_remove)
self.verticalLayout.addLayout(self.horizontalLayout)
self.tabWidget.addTab(self.t_rating, "")
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, 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)
self.menuBar.addAction(self.menuMen.menuAction())
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
MainWindow.setTabOrder(self.e_recipe_name, self.e_servings)
MainWindow.setTabOrder(self.e_servings, self.e_time)
MainWindow.setTabOrder(self.e_time, self.e_rating_overall)
MainWindow.setTabOrder(self.e_rating_overall, self.e_url)
MainWindow.setTabOrder(self.e_url, self.e_category)
MainWindow.setTabOrder(self.e_category, self.b_category_add)
MainWindow.setTabOrder(self.b_category_add, self.v_categories)
MainWindow.setTabOrder(self.v_categories, self.b_category_remove)
MainWindow.setTabOrder(self.b_category_remove, self.e_ingredient)
MainWindow.setTabOrder(self.e_ingredient, self.c_heading)
MainWindow.setTabOrder(self.c_heading, self.e_amount)
MainWindow.setTabOrder(self.e_amount, self.b_ingredient_add)
MainWindow.setTabOrder(self.b_ingredient_add, self.v_ingredients)
MainWindow.setTabOrder(self.v_ingredients, self.b_ingredient_remove)
MainWindow.setTabOrder(self.b_ingredient_remove, self.e_utensil)
MainWindow.setTabOrder(self.e_utensil, self.b_utensil_add)
MainWindow.setTabOrder(self.b_utensil_add, self.v_utensils)
MainWindow.setTabOrder(self.v_utensils, self.b_utensil_remove)
MainWindow.setTabOrder(self.b_utensil_remove, self.e_step)
MainWindow.setTabOrder(self.e_step, self.b_step_add)
MainWindow.setTabOrder(self.b_step_add, self.v_steps)
MainWindow.setTabOrder(self.v_steps, self.b_step_edit)
MainWindow.setTabOrder(self.b_step_edit, self.b_step_replace)
MainWindow.setTabOrder(self.b_step_replace, self.b_step_remove)
MainWindow.setTabOrder(self.b_step_remove, self.e_note)
MainWindow.setTabOrder(self.e_note, self.b_note_add)
MainWindow.setTabOrder(self.b_note_add, self.v_notes)
MainWindow.setTabOrder(self.v_notes, self.b_note_edit)
MainWindow.setTabOrder(self.b_note_edit, self.b_note_replace)
MainWindow.setTabOrder(self.b_note_replace, self.b_note_remove)
MainWindow.setTabOrder(self.b_note_remove, self.e_tip)
MainWindow.setTabOrder(self.e_tip, self.b_tip_add)
MainWindow.setTabOrder(self.b_tip_add, self.v_tips)
MainWindow.setTabOrder(self.v_tips, self.b_tip_edit)
MainWindow.setTabOrder(self.b_tip_edit, self.b_tip_replace)
MainWindow.setTabOrder(self.b_tip_replace, self.b_tip_remove)
MainWindow.setTabOrder(self.b_tip_remove, self.e_variation)
MainWindow.setTabOrder(self.e_variation, self.b_variation_add)
MainWindow.setTabOrder(self.b_variation_add, self.v_variations)
MainWindow.setTabOrder(self.v_variations, self.b_variation_edit)
MainWindow.setTabOrder(self.b_variation_edit, self.b_variation_replace)
MainWindow.setTabOrder(self.b_variation_replace, self.b_variation_remove)
MainWindow.setTabOrder(self.b_variation_remove, self.e_rating)
MainWindow.setTabOrder(self.e_rating, self.b_rating_add)
MainWindow.setTabOrder(self.b_rating_add, self.v_ratings)
MainWindow.setTabOrder(self.v_ratings, self.b_rating_edit)
MainWindow.setTabOrder(self.b_rating_edit, self.b_rating_replace)
MainWindow.setTabOrder(self.b_rating_replace, self.b_rating_remove)
MainWindow.setTabOrder(self.b_rating_remove, self.b_create)
MainWindow.setTabOrder(self.b_create, self.tabWidget)
MainWindow.setTabOrder(self.tabWidget, self.b_cancel)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "WikiCookBook"))
self.b_create.setText(_translate("MainWindow", "Rezept erstellen"))
self.b_cancel.setText(_translate("MainWindow", "Abbrechen"))
self.l_rating.setText(_translate("MainWindow", "Bewertung"))
self.l_url.setText(_translate("MainWindow", "Link"))
self.l_recipe_name.setText(_translate("MainWindow", "Rezeptname"))
self.l_servings.setText(_translate("MainWindow", "Portionen"))
self.l_zeit.setText(_translate("MainWindow", "Zeit"))
self.l_category.setText(_translate("MainWindow", "Kategorie"))
self.b_category_remove.setText(_translate("MainWindow", "Ausgewähltes entfernen"))
self.b_category_add.setText(_translate("MainWindow", "Hinzufügen"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.t_basics), _translate("MainWindow", "Grundsätzliches"))
item = self.v_ingredients.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "Menge"))
item = self.v_ingredients.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Zutat"))
self.l_ingredient.setText(_translate("MainWindow", "Zutat"))
self.l_amount.setText(_translate("MainWindow", "Menge"))
self.c_heading.setText(_translate("MainWindow", "Zwischenüberschrift"))
self.b_ingredient_remove.setText(_translate("MainWindow", "Ausgewähltes entfernen"))
self.b_ingredient_add.setText(_translate("MainWindow", "Hinzufügen"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.t_ingredients), _translate("MainWindow", "Zutaten"))
self.l_utensil.setText(_translate("MainWindow", "Utensil"))
self.b_utensil_remove.setText(_translate("MainWindow", "Ausgewähltes entfernen"))
self.b_utensil_add.setText(_translate("MainWindow", "Hinzufügen"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.t_utensils), _translate("MainWindow", "Küchenutensilien"))
self.b_step_add.setText(_translate("MainWindow", "Hinzufügen"))
self.b_step_edit.setText(_translate("MainWindow", "Bearbeiten"))
self.b_step_replace.setText(_translate("MainWindow", "Ersetzen"))
self.b_step_remove.setText(_translate("MainWindow", "Entfernen"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.t_steps), _translate("MainWindow", "Zubereitung"))
self.b_note_add.setText(_translate("MainWindow", "Hinzufügen"))
self.b_note_edit.setText(_translate("MainWindow", "Bearbeiten"))
self.b_note_replace.setText(_translate("MainWindow", "Ersetzen"))
self.b_note_remove.setText(_translate("MainWindow", "Entfernen"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.t_notes), _translate("MainWindow", "Notizen"))
self.b_tip_add.setText(_translate("MainWindow", "Hinzufügen"))
self.b_tip_edit.setText(_translate("MainWindow", "Bearbeiten"))
self.b_tip_replace.setText(_translate("MainWindow", "Ersetzen"))
self.b_tip_remove.setText(_translate("MainWindow", "Entfernen"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.t_tips), _translate("MainWindow", "Tipps"))
self.b_variation_add.setText(_translate("MainWindow", "Hinzufügen"))
self.b_variation_edit.setText(_translate("MainWindow", "Bearbeiten"))
self.b_variation_replace.setText(_translate("MainWindow", "Ersetzen"))
self.b_variation_remove.setText(_translate("MainWindow", "Entfernen"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.t_variations), _translate("MainWindow", "Variationen"))
self.b_rating_add.setText(_translate("MainWindow", "Hinzufügen"))
self.b_rating_edit.setText(_translate("MainWindow", "Bearbeiten"))
self.b_rating_replace.setText(_translate("MainWindow", "Ersetzen"))
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"))

View file

@ -0,0 +1,5 @@
from .AboutDialog import AboutDialog
from .ClearDialog import ClearDialog
from .CloseDialog import CloseDialog
from .CodeDialog import CodeDialog
from .MainWindow import MainWindow

View file

@ -0,0 +1,95 @@
"""
A class for writing MoinMoin wiki syntax.
Copyright (C) 2020 Marcel Kapfer <opensource@mmk2410.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
class MoinMoinWriter():
"""
MoinMoin wiki syntax writer.
Except for newline, linebreak, hrule, table_row_end and macro all commands don't add a newline at the end.
Nothing is printed, all is returned.
"""
def newline(self):
"""
Prints nothing and appends a newline.
"""
return "\n"
def linebreak(self):
"""
Print a froced linebreak (<br>).
"""
return "<<BR>>\n"
def hrule(self):
"""
Print a horizontal rule.
"""
return "----\n"
def ulitem(self, text, level=1):
"""
Print a unordered list item with given level.
"""
whitespace = " " * level
return f"{whitespace}* {text}"
def olitem(self, text, level=1):
"""
Print a orderd list item with given level.
"""
whitespace = " " * level
return f"{whitespace}1. {text}"
def text(self, text, bold=False, italics=False):
"""
Just print the given text.
"""
if bold and italics:
return f"*****{text}*****"
elif bold:
return f"***{text}***"
elif italics:
return f"**{text}**"
else:
return text
def link(self, text, url, arguments="", display=False):
if display:
if arguments:
return "{{" + url + f"|{text}|" + arguments + "}}"
else:
return "{{" + url + f"|{text}" + "}}"
else:
if arguments:
return f"[[{url}|{text}|{arguments}]]"
else:
return f"[[{url}|{text}]]"
def macro(self, macro, arguments=""):
return f"<<{macro}({arguments})>>"
def table_cell(self, text, arguments=""):
if text:
return f"||<{arguments}> {text} "
else:
return "||"
def table_row_end(self):
return "||\n"

View file

@ -0,0 +1,382 @@
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QTableWidgetItem, QDialog
import WikiCookBook.UI as UI
from WikiCookBook.Model.Recipe import Recipe
from WikiCookBook.Writer.MoinMoinWriter import MoinMoinWriter
class AboutDialog(QDialog, UI.AboutDialog):
def __init__(self, *args, **kwargs):
super(AboutDialog, self).__init__(*args, **kwargs)
self.setupUi(self)
self.b_close.clicked.connect(self.close)
self.show()
class CloseDialog(QDialog, UI.CloseDialog):
def __init__(self, *args, **kwargs):
super(CloseDialog, self).__init__(*args, **kwargs)
self.setupUi(self)
self.b_yes.clicked.connect(self.accept)
self.b_no.clicked.connect(self.reject)
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 CodeDialog(QDialog, UI.CodeDialog):
def __init__(self, code, *args, **kwargs):
super(CodeDialog, self).__init__(*args, **kwargs)
self.setupUi(self)
self.copied = False
self.e_code.setPlainText(code)
self.b_close.clicked.connect(self.clear_fields)
self.b_copy.clicked.connect(self.copy)
self.show()
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):
super(MainWindow, self).__init__(*args, **kwargs)
self.setupUi(self)
# Connect close actions
self.b_cancel.clicked.connect(self.ask_close)
self.ma_close.triggered.connect(self.ask_close)
# 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)
# Handle categories
self.b_category_add.clicked.connect(self.category_add)
self.e_category.returnPressed.connect(self.category_add)
self.b_category_remove.clicked.connect(self.category_remove)
# Handle ingredients
self.b_ingredient_add.clicked.connect(self.ingredient_add)
self.b_ingredient_remove.clicked.connect(self.ingredient_remove)
# Handle utensils
self.b_utensil_add.clicked.connect(self.utensil_add)
self.e_utensil.returnPressed.connect(self.utensil_add)
self.b_utensil_remove.clicked.connect(self.utensil_remove)
# Handle steps
self.b_step_add.clicked.connect(self.step_add)
self.b_step_edit.clicked.connect(self.step_edit)
self.b_step_replace.clicked.connect(self.step_replace)
self.b_step_remove.clicked.connect(self.step_remove)
# Handle notes
self.b_note_add.clicked.connect(self.note_add)
self.b_note_edit.clicked.connect(self.note_edit)
self.b_note_replace.clicked.connect(self.note_replace)
self.b_note_remove.clicked.connect(self.note_remove)
# Handle tips
self.b_tip_add.clicked.connect(self.tip_add)
self.b_tip_edit.clicked.connect(self.tip_edit)
self.b_tip_replace.clicked.connect(self.tip_replace)
self.b_tip_remove.clicked.connect(self.tip_remove)
# Handle variations
self.b_variation_add.clicked.connect(self.variation_add)
self.b_variation_edit.clicked.connect(self.variation_edit)
self.b_variation_replace.clicked.connect(self.variation_replace)
self.b_variation_remove.clicked.connect(self.variation_remove)
# Handle ratings
self.b_rating_add.clicked.connect(self.rating_add)
self.b_rating_edit.clicked.connect(self.rating_edit)
self.b_rating_replace.clicked.connect(self.rating_replace)
self.b_rating_remove.clicked.connect(self.rating_remove)
# Handle recipe creation
self.b_create.clicked.connect(self.create_recipe)
self.show()
def updateTitle(self):
"""
Update the window title so it contains the name of the current recipe.
"""
current_recipe_name = self.e_recipe_name.text()
if current_recipe_name:
self.setWindowTitle(f"{current_recipe_name} - WikiCookBook")
else:
self.setWindowTitle("WikiCookBook")
def category_add(self):
if self.e_category.text():
self.v_categories.addItem(f"Kategorie{self.e_category.text()}")
self.e_category.setFocus()
self.e_category.selectAll()
def category_remove(self):
self.v_categories.takeItem(self.v_categories.currentRow())
def ingredient_add(self):
if self.e_ingredient.text():
if self.c_heading.checkState() == 2:
current_amount = QTableWidgetItem("----------")
else:
current_amount = QTableWidgetItem(self.e_amount.text())
current_ingredient = QTableWidgetItem(self.e_ingredient.text())
self.v_ingredients.setRowCount(self.v_ingredients.rowCount() + 1)
self.v_ingredients.setItem(self.v_ingredients.rowCount() - 1, 0, current_amount)
self.v_ingredients.setItem(self.v_ingredients.rowCount() - 1, 1, current_ingredient)
self.e_ingredient.setFocus()
self.e_ingredient.selectAll()
def ingredient_remove(self):
self.v_ingredients.removeRow(self.v_ingredients.currentRow())
def utensil_add(self):
if self.e_utensil.text():
self.v_utensils.addItem(self.e_utensil.text())
self.e_utensil.setFocus()
self.e_utensil.selectAll()
def utensil_remove(self):
self.v_utensils.takeItem(self.v_utensils.currentRow())
def step_add(self):
if self.e_step.toPlainText():
self.v_steps.addItem(self.e_step.toPlainText())
self.e_step.setFocus()
self.e_step.selectAll()
def step_edit(self):
if self.v_steps.count() > 0:
self.e_step.setText(self.v_steps.currentItem().text())
def step_replace(self):
if self.e_step.toPlainText() and self.v_steps.count() > 0:
self.v_steps.currentItem().setText(self.e_step.toPlainText())
def step_remove(self):
self.v_steps.takeItem(self.v_steps.currentRow())
def note_add(self):
if self.e_note.toPlainText():
self.v_notes.addItem(self.e_note.toPlainText())
self.e_note.setFocus()
self.e_note.selectAll()
def note_edit(self):
if self.v_notes.count() > 0:
self.e_note.setText(self.v_notes.currentItem().text())
def note_replace(self):
if self.e_note.toPlainText() and self.v_notes.count() > 0:
self.v_notes.currentItem().setText(self.e_note.toPlainText())
def note_remove(self):
self.v_notes.takeItem(self.v_notes.currentRow())
def tip_add(self):
if self.e_tip.toPlainText():
self.v_tips.addItem(self.e_tip.toPlainText())
self.e_tip.setFocus()
self.e_tip.selectAll()
def tip_edit(self):
if self.v_tips.count() > 0:
self.e_tip.setText(self.v_tips.currentItem().text())
def tip_replace(self):
if self.e_tip.toPlainText() and self.v_tips.count() > 0:
self.v_tips.currentItem().setText(self.e_tip.toPlainText())
def tip_remove(self):
self.v_tips.takeItem(self.v_tips.currentRow())
def variation_add(self):
if self.e_variation.toPlainText():
self.v_variations.addItem(self.e_variation.toPlainText())
self.e_variation.setFocus()
self.e_variation.selectAll()
def variation_edit(self):
if self.v_variations.count() > 0:
self.e_variation.setText(self.v_variations.currentItem().text())
def variation_replace(self):
if self.e_variation.toPlainText() and self.v_variations.count() > 0:
self.v_variations.currentItem().setText(self.e_variation.toPlainText())
def variation_remove(self):
self.v_variations.takeItem(self.v_variations.currentRow())
def rating_add(self):
if self.e_rating.toPlainText():
self.v_ratings.addItem(self.e_rating.toPlainText())
self.e_rating.setFocus()
self.e_rating.selectAll()
def rating_edit(self):
if self.v_ratings.count() > 0:
self.e_rating.setText(self.v_ratings.currentItem().text())
def rating_replace(self):
if self.e_rating.toPlainText() and self.v_ratings.count() > 0:
self.v_ratings.currentItem().setText(self.e_rating.toPlainText())
def rating_remove(self):
self.v_ratings.takeItem(self.v_ratings.currentRow())
def create_recipe(self):
current_recipe = Recipe(self.e_recipe_name.text(),
self.e_servings.text(),
self.e_time.text(),
self.e_rating_overall.value(),
self.e_url.text())
# Categories
for row in range(self.v_categories.count()):
current_recipe.add_category(self.v_categories.item(row).text())
# Ingredients
for row in range(self.v_ingredients.rowCount()):
current_recipe.add_ingredient(
self.v_ingredients.item(row, 0).text(),
self.v_ingredients.item(row, 1).text()
)
# Utensils
for row in range(self.v_utensils.count()):
current_recipe.add_utensil(self.v_utensils.item(row).text())
# Steps
for row in range(self.v_steps.count()):
current_recipe.add_step(self.v_steps.item(row).text())
# Notes
for row in range(self.v_notes.count()):
current_recipe.add_note(self.v_notes.item(row).text())
# Tips
for row in range(self.v_tips.count()):
current_recipe.add_tip(self.v_tips.item(row).text())
# Variations
for row in range(self.v_variations.count()):
current_recipe.add_variation(self.v_variations.item(row).text())
# Ratings
for row in range(self.v_ratings.count()):
current_recipe.add_rating(self.v_ratings.item(row).text())
writer = MoinMoinWriter()
code = current_recipe.wikicode(writer)
dialog = CodeDialog(code)
dialog.accepted.connect(self.clear)
dialog.exec_()
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()
def clear_fields(self):
"""
Show the clear fields dialog.
"""
dialog = ClearDialog()
dialog.accepted.connect(self.clear)
dialog.exec_()
def about(self):
"""
Show an about dialog.
"""
dialog = AboutDialog()
dialog.exec_()
def ask_close(self):
"""
Close the application. A warning is shown before.
"""
dialog = CloseDialog()
dialog.accepted.connect(self.close)
dialog.exec_()
def main():
app = QApplication([])
app.setApplicationName("WikiCookBook")
window = MainWindow()
return app.exec_()