excel2moodle 0.3.1__py3-none-any.whl → 0.3.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
excel2moodle/ui/appUi.py CHANGED
@@ -8,6 +8,7 @@ from PySide6 import QtCore
8
8
  from PySide6.QtCore import Qt
9
9
  from PySide6 import QtWidgets
10
10
  from pathlib import Path
11
+ from excel2moodle import e2mMetadata
11
12
  from excel2moodle.ui.windowMain import Ui_MoodleTestGenerator
12
13
  from .windowEquationChecker import Ui_EquationChecker
13
14
  from excel2moodle.ui import windowEquationChecker, dialogs
@@ -16,11 +17,8 @@ from excel2moodle.ui.treewidget import QuestionItem, CategoryItem
16
17
  from excel2moodle.extra import equationVerification as eqVerif
17
18
  from excel2moodle import qSignalLogger
18
19
  from excel2moodle.ui.settings import Settings
19
- from excel2moodle.ui.windowDoc import DocumentationWindow
20
20
  import logging as logging
21
21
 
22
- from excel2moodle import dirDocumentation
23
-
24
22
 
25
23
  logger = logging.getLogger(__name__)
26
24
 
@@ -29,25 +27,22 @@ logger = logging.getLogger(__name__)
29
27
  class MainWindow(QtWidgets.QMainWindow):
30
28
  def __init__(self, settings:Settings, testDB:QuestionDB)->None:
31
29
  super().__init__()
32
- # self.questionGenerator = questionGenerator
33
- # self.readSettings()
34
30
  self.settings = settings
35
31
  self.excelPath: Path|None = None
36
- if self.excelPath is not None:
37
- self.ui.buttonSpreadSheet.setText(self.excelPath.name)
38
32
  self.mainPath = (self.excelPath.parent if self.excelPath is not None else None)
39
33
  self.exportFile = Path()
40
34
  self.testDB = testDB
41
35
  self.ui = Ui_MoodleTestGenerator()
42
36
  self.ui.setupUi(self)
43
37
 
44
- # self.ui.buttonRefresh.clicked.connect(lambda: self.refreshList(self.test))
45
38
  self.ui.treeWidget.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
46
39
  self.ui.treeWidget.header().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
40
+ self.ui.checkBoxIncludeCategories.setChecked(self.settings.value("testGen/includeCats", type=bool))
47
41
 
48
42
  self.ui.retranslateUi(self)
49
43
  logger.info(f"Settings are stored under: {self.settings.fileName()}")
50
44
  self.ui.pointCounter.setReadOnly(True)
45
+ self.ui.questionCounter.setReadOnly(True)
51
46
  self.setStatus("Wählen Sie bitte eine Excel Tabelle und einen Export Ordner für die Fragen aus")
52
47
  try:
53
48
  self.resize(self.settings.value("windowSize"))
@@ -64,11 +59,11 @@ class MainWindow(QtWidgets.QMainWindow):
64
59
  self.ui.checkBoxIncludeCategories.checkStateChanged.connect(self.setIncludeCategoriesSetting)
65
60
  # self.ui.buttonRefresh.clicked.connect(self.refreshList)
66
61
  self.ui.actionParseAll.triggered.connect(self.onParseAll )
62
+ self.testDB.dataChanged.signal.connect(self.onParseAll)
67
63
  self.ui.buttonSpreadSheet.clicked.connect(self.onButSpreadsheet)
68
64
  self.ui.buttonTestGen.clicked.connect(self.onButGenTest)
69
- self.testDB.dataChanged.signal.connect(self.refreshList)
70
65
  self.ui.actionPreviewQ.triggered.connect(self.previewQ)
71
- self.ui.actionDocumentation.triggered.connect(self.onOpenDocumentation)
66
+ self.ui.actionAbout.triggered.connect(self.onAbout)
72
67
  self.settings.shPathChanged.connect(self.onSheetPathChanged)
73
68
 
74
69
 
@@ -77,6 +72,7 @@ class MainWindow(QtWidgets.QMainWindow):
77
72
  logger.debug("Slot, new Spreadsheet triggered")
78
73
  self.spreadSheetPath = sheet
79
74
  self.mainPath = sheet.parent
75
+ self.ui.buttonSpreadSheet.setText(str(sheet.name))
80
76
 
81
77
  def updateLog(self,log)->None:
82
78
  self.ui.loggerWindow.append(log)
@@ -84,14 +80,41 @@ class MainWindow(QtWidgets.QMainWindow):
84
80
  def setIncludeCategoriesSetting(self):
85
81
  if self.ui.checkBoxIncludeCategories.isChecked():
86
82
  self.settings.set("testGen/includeCats", True)
83
+ logger.debug("set includeCats to True")
87
84
  else:
88
85
  self.settings.set("testGen/includeCats", False)
86
+ logger.debug("set includeCats to False")
89
87
 
90
- @QtCore.Slot()
91
- def onOpenDocumentation(self):
92
- documentationWindow = DocumentationWindow(dirDocumentation, self)
93
- documentationWindow.show()
94
88
 
89
+ @QtCore.Slot()
90
+ def onAbout(self):
91
+ aboutMessage: str = f"""
92
+ <h1> About {e2mMetadata['name']}</h1><br>
93
+ <p style="text-align:center">
94
+
95
+ <b><a href="{e2mMetadata['homepage']}">{e2mMetadata['name']}</a> - {e2mMetadata['description']}</b>
96
+ </p>
97
+ <p style="text-align:center">
98
+ The documentation can be found under <b><a href="{e2mMetadata['documentation']}">{e2mMetadata['documentation']}</a></b>
99
+ </br>
100
+ </br>
101
+ If you encounter any issues please report them under the <a href="{e2mMetadata['issues']}"> repositories issues page</a>
102
+ </br>
103
+ </p>
104
+ <p style="text-align:center">
105
+ This project is maintained by {e2mMetadata['author']}.
106
+ <br>
107
+ Development takes place at <a href="{e2mMetadata['homepage']}">{e2mMetadata['homepage']}</a>
108
+ Contributions are very welcome
109
+ <br>
110
+ </p>
111
+ <p style="text-align:center">
112
+ <i>This project is published under {e2mMetadata['license']}, you are welcome, to share, modify and reuse the code.</i>
113
+ </p>
114
+ """
115
+ QtWidgets.QMessageBox.information(self,
116
+ f"About {e2mMetadata['name']}",
117
+ aboutMessage)
95
118
 
96
119
  def closeEvent(self, event):
97
120
  self.settings.setValue("windowSize", self.size())
@@ -110,22 +133,7 @@ class MainWindow(QtWidgets.QMainWindow):
110
133
 
111
134
  logger.info(f'{questions} questions are selected with {count} points')
112
135
  self.ui.pointCounter.setValue(count)
113
-
114
- # val = item.text(2)
115
- # if val == "nan":
116
- # val = 0
117
- # else: val = float(val)
118
- # if item.text(0).startswith('KAT'):
119
- # logger.debug(f'seems to be a Category, doing nothing\n')
120
- # return None
121
- # logger.debug(f'Current Item: {item.text(1)}, is Selected? {item.isSelected()}')
122
- # if item.isSelected():
123
- # count = count + val
124
- # logger.debug(f'Selected, Count up: {count}')
125
- # else:
126
- # count = count - val
127
- # logger.debug(f'unselected, Count down: {count}')
128
-
136
+ self.ui.questionCounter.setValue(questions)
129
137
  return None
130
138
 
131
139
  @QtCore.Slot()
@@ -151,19 +159,6 @@ class MainWindow(QtWidgets.QMainWindow):
151
159
  self.testDB.appendQuestions(selection, self.exportFile)
152
160
  return None
153
161
 
154
- @QtCore.Slot()
155
- def refreshList(self):
156
- logger.info("starting List refresh")
157
- cats = self.testDB.categories
158
- self.ui.treeWidget.clear()
159
- for cat in cats.values():
160
- catItem = CategoryItem(self.ui.treeWidget,cat)
161
- catItem.setFlags(catItem.flags() & ~Qt.ItemIsSelectable)
162
- for q in cat.questions.values():
163
- QuestionItem(catItem,q)
164
- self.setStatus("[OK] Fragen Liste wurde aktualisiert")
165
- self.ui.buttonTestGen.setEnabled(True)
166
-
167
162
  @QtCore.Slot()
168
163
  def onButSpreadsheet(self):
169
164
  file = QtWidgets.QFileDialog.getOpenFileName(self,
@@ -173,8 +168,6 @@ class MainWindow(QtWidgets.QMainWindow):
173
168
  selectedFilter=("*.ods"))
174
169
  self.excelPath = Path(file[0]).resolve()
175
170
  self.settings.setSpreadsheet(self.excelPath)
176
- self.mainPath = self.excelPath.parent
177
- self.ui.buttonSpreadSheet.setText(self.excelPath.name)
178
171
  logger.debug(f'Saved Spreadsheet Path: {self.excelPath}\n')
179
172
  self.setStatus("[OK] Excel Tabelle wurde eingelesen")
180
173
  return None
@@ -187,9 +180,19 @@ class MainWindow(QtWidgets.QMainWindow):
187
180
  It parses all the Questions found in the spreadsheet and then refreshes the list of questions.
188
181
  If successful it prints out a list of all exported Questions
189
182
  """
183
+ self.ui.buttonTestGen.setEnabled(True)
190
184
  self.testDB.parseAll()
191
185
  self.setStatus("[OK] Alle Fragen wurden erfolgreich in XML-Dateien umgewandelt")
192
- self.refreshList()
186
+ # below is former refres method
187
+ logger.info("starting List refresh")
188
+ cats = self.testDB.categories
189
+ self.ui.treeWidget.clear()
190
+ for cat in cats.values():
191
+ catItem = CategoryItem(self.ui.treeWidget,cat)
192
+ catItem.setFlags(catItem.flags() & ~Qt.ItemIsSelectable)
193
+ for q in cat.questions.values():
194
+ QuestionItem(catItem,q)
195
+ self.setStatus("[OK] Fragen Liste wurde aktualisiert")
193
196
  return None
194
197
 
195
198
  @QtCore.Slot()
@@ -65,9 +65,9 @@ class QuestinoPreviewDialog(QtWidgets.QDialog):
65
65
 
66
66
  def setText(self)->None:
67
67
  t = []
68
- for text in self.question.qtextElements:
68
+ for text in self.question.qtextParagraphs:
69
69
  t.append(ET.tostring(text, encoding='unicode'))
70
-
70
+ t.append(ET.tostring(self.question.bulletList, encoding='unicode'))
71
71
  self.ui.questionText.setText("\n".join(t))
72
72
 
73
73
  def setAnswers(self)->None:
@@ -5,8 +5,8 @@ class Settings(QSettings):
5
5
  shPathChanged = Signal(Path)
6
6
  def __init__(self):
7
7
  super().__init__("jbosse3", "excel2moodle")
8
- if self.contains("spreadsheet"):
9
- self.sheet = self.value("spreadsheet")
8
+ if self.contains("core/spreadsheet"):
9
+ self.sheet = self.value("core/spreadsheet")
10
10
  try:
11
11
  self.sheet.resolve(strict=True)
12
12
  if self.sheet.is_file():
@@ -20,7 +20,8 @@ class Settings(QSettings):
20
20
 
21
21
 
22
22
  def get(self, value, default=None):
23
- self.value(value, default)
23
+ return self.value(value, default)
24
+
24
25
 
25
26
  def set(self, setting, value):
26
27
  self.setValue(setting, value)
@@ -28,7 +29,7 @@ class Settings(QSettings):
28
29
  def setSpreadsheet(self, sheet:Path)->None:
29
30
  if isinstance(sheet, Path):
30
31
  self.sheet = sheet.resolve(strict=True)
31
- self.setValue("spreadsheet", self.sheet)
32
+ self.setValue("core/spreadsheet", self.sheet)
32
33
  self.shPathChanged.emit(sheet)
33
34
  return None
34
35
 
@@ -0,0 +1,414 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ ################################################################################
4
+ ## Form generated from reading UI file 'mainWindow.ui'
5
+ ##
6
+ ## Created by: Qt User Interface Compiler version 6.8.3
7
+ ##
8
+ ## WARNING! All changes made in this file will be lost when recompiling UI file!
9
+ ################################################################################
10
+
11
+ from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12
+ QMetaObject, QObject, QPoint, QRect,
13
+ QSize, QTime, QUrl, Qt)
14
+ from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient,
15
+ QCursor, QFont, QFontDatabase, QGradient,
16
+ QIcon, QImage, QKeySequence, QLinearGradient,
17
+ QPainter, QPalette, QPixmap, QRadialGradient,
18
+ QTransform)
19
+ from PySide6.QtWidgets import (QAbstractItemView, QAbstractSpinBox, QApplication, QCheckBox,
20
+ QDoubleSpinBox, QFormLayout, QFrame, QHBoxLayout,
21
+ QHeaderView, QLabel, QMainWindow, QMenu,
22
+ QMenuBar, QPushButton, QSizePolicy, QSpacerItem,
23
+ QSpinBox, QStatusBar, QTextEdit, QToolBar,
24
+ QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget)
25
+
26
+ class Ui_MoodleTestGenerator(object):
27
+ def setupUi(self, MoodleTestGenerator):
28
+ if not MoodleTestGenerator.objectName():
29
+ MoodleTestGenerator.setObjectName(u"MoodleTestGenerator")
30
+ MoodleTestGenerator.resize(936, 1198)
31
+ icon = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.DialogQuestion))
32
+ MoodleTestGenerator.setWindowIcon(icon)
33
+ self.actionInput_Spreadsheet = QAction(MoodleTestGenerator)
34
+ self.actionInput_Spreadsheet.setObjectName(u"actionInput_Spreadsheet")
35
+ icon1 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.DocumentOpen))
36
+ self.actionInput_Spreadsheet.setIcon(icon1)
37
+ self.actionOutput_Folder = QAction(MoodleTestGenerator)
38
+ self.actionOutput_Folder.setObjectName(u"actionOutput_Folder")
39
+ self.actionEquationChecker = QAction(MoodleTestGenerator)
40
+ self.actionEquationChecker.setObjectName(u"actionEquationChecker")
41
+ icon2 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ToolsCheckSpelling))
42
+ self.actionEquationChecker.setIcon(icon2)
43
+ self.actionParseAll = QAction(MoodleTestGenerator)
44
+ self.actionParseAll.setObjectName(u"actionParseAll")
45
+ icon3 = QIcon(QIcon.fromTheme(u"view-refresh"))
46
+ self.actionParseAll.setIcon(icon3)
47
+ self.actionPreviewQ = QAction(MoodleTestGenerator)
48
+ self.actionPreviewQ.setObjectName(u"actionPreviewQ")
49
+ icon4 = QIcon(QIcon.fromTheme(u"document-print-preview"))
50
+ self.actionPreviewQ.setIcon(icon4)
51
+ self.actionAbout = QAction(MoodleTestGenerator)
52
+ self.actionAbout.setObjectName(u"actionAbout")
53
+ icon5 = QIcon(QIcon.fromTheme(u"help-about"))
54
+ self.actionAbout.setIcon(icon5)
55
+ self.actionDocumentation = QAction(MoodleTestGenerator)
56
+ self.actionDocumentation.setObjectName(u"actionDocumentation")
57
+ self.actionDocumentation.setIcon(icon5)
58
+ self.actionSetting = QAction(MoodleTestGenerator)
59
+ self.actionSetting.setObjectName(u"actionSetting")
60
+ icon6 = QIcon(QIcon.fromTheme(u"preferences-system"))
61
+ self.actionSetting.setIcon(icon6)
62
+ self.mainWidget = QWidget(MoodleTestGenerator)
63
+ self.mainWidget.setObjectName(u"mainWidget")
64
+ self.verticalLayout = QVBoxLayout(self.mainWidget)
65
+ self.verticalLayout.setObjectName(u"verticalLayout")
66
+ self.horizontalLayout_2 = QHBoxLayout()
67
+ self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
68
+ self.horizontalLayout_2.setContentsMargins(-1, -1, -1, 14)
69
+ self.verticalLayout_4 = QVBoxLayout()
70
+ self.verticalLayout_4.setObjectName(u"verticalLayout_4")
71
+ self.verticalLayout_4.setContentsMargins(3, -1, -1, -1)
72
+ self.horizontalLayout = QHBoxLayout()
73
+ self.horizontalLayout.setObjectName(u"horizontalLayout")
74
+ self.checkBoxQuestionListSelectAll = QCheckBox(self.mainWidget)
75
+ self.checkBoxQuestionListSelectAll.setObjectName(u"checkBoxQuestionListSelectAll")
76
+
77
+ self.horizontalLayout.addWidget(self.checkBoxQuestionListSelectAll)
78
+
79
+ self.horizontalSpacer_4 = QSpacerItem(20, 10, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum)
80
+
81
+ self.horizontalLayout.addItem(self.horizontalSpacer_4)
82
+
83
+ self.line_4 = QFrame(self.mainWidget)
84
+ self.line_4.setObjectName(u"line_4")
85
+ self.line_4.setFrameShape(QFrame.Shape.VLine)
86
+ self.line_4.setFrameShadow(QFrame.Shadow.Sunken)
87
+
88
+ self.horizontalLayout.addWidget(self.line_4)
89
+
90
+ self.label = QLabel(self.mainWidget)
91
+ self.label.setObjectName(u"label")
92
+ font = QFont()
93
+ font.setPointSize(14)
94
+ self.label.setFont(font)
95
+ self.label.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
96
+
97
+ self.horizontalLayout.addWidget(self.label)
98
+
99
+ self.horizontalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
100
+
101
+ self.horizontalLayout.addItem(self.horizontalSpacer)
102
+
103
+
104
+ self.verticalLayout_4.addLayout(self.horizontalLayout)
105
+
106
+ self.treeWidget = QTreeWidget(self.mainWidget)
107
+ __qtreewidgetitem = QTreeWidgetItem()
108
+ __qtreewidgetitem.setTextAlignment(2, Qt.AlignLeading|Qt.AlignVCenter);
109
+ self.treeWidget.setHeaderItem(__qtreewidgetitem)
110
+ self.treeWidget.setObjectName(u"treeWidget")
111
+ self.treeWidget.setBaseSize(QSize(0, 60))
112
+ self.treeWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
113
+ self.treeWidget.header().setCascadingSectionResizes(True)
114
+ self.treeWidget.header().setMinimumSectionSize(8)
115
+
116
+ self.verticalLayout_4.addWidget(self.treeWidget)
117
+
118
+
119
+ self.horizontalLayout_2.addLayout(self.verticalLayout_4)
120
+
121
+ self.verticalLayout_2 = QVBoxLayout()
122
+ self.verticalLayout_2.setObjectName(u"verticalLayout_2")
123
+ self.label_5 = QLabel(self.mainWidget)
124
+ self.label_5.setObjectName(u"label_5")
125
+ font1 = QFont()
126
+ font1.setPointSize(15)
127
+ self.label_5.setFont(font1)
128
+
129
+ self.verticalLayout_2.addWidget(self.label_5)
130
+
131
+ self.formLayout = QFormLayout()
132
+ self.formLayout.setObjectName(u"formLayout")
133
+ self.formLayout.setLabelAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
134
+ self.formLayout.setFormAlignment(Qt.AlignmentFlag.AlignHCenter|Qt.AlignmentFlag.AlignTop)
135
+ self.formLayout.setContentsMargins(5, 5, 5, 5)
136
+ self.label_6 = QLabel(self.mainWidget)
137
+ self.label_6.setObjectName(u"label_6")
138
+
139
+ self.formLayout.setWidget(0, QFormLayout.LabelRole, self.label_6)
140
+
141
+ self.pointCounter = QDoubleSpinBox(self.mainWidget)
142
+ self.pointCounter.setObjectName(u"pointCounter")
143
+ self.pointCounter.setEnabled(True)
144
+ sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
145
+ sizePolicy.setHorizontalStretch(0)
146
+ sizePolicy.setVerticalStretch(0)
147
+ sizePolicy.setHeightForWidth(self.pointCounter.sizePolicy().hasHeightForWidth())
148
+ self.pointCounter.setSizePolicy(sizePolicy)
149
+ self.pointCounter.setBaseSize(QSize(190, 0))
150
+ font2 = QFont()
151
+ font2.setPointSize(13)
152
+ self.pointCounter.setFont(font2)
153
+ self.pointCounter.setAutoFillBackground(False)
154
+ self.pointCounter.setInputMethodHints(Qt.InputMethodHint.ImhNone)
155
+ self.pointCounter.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.UpDownArrows)
156
+ self.pointCounter.setDecimals(1)
157
+ self.pointCounter.setMaximum(999.899999999999977)
158
+
159
+ self.formLayout.setWidget(0, QFormLayout.FieldRole, self.pointCounter)
160
+
161
+ self.label_7 = QLabel(self.mainWidget)
162
+ self.label_7.setObjectName(u"label_7")
163
+
164
+ self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_7)
165
+
166
+ self.questionCounter = QDoubleSpinBox(self.mainWidget)
167
+ self.questionCounter.setObjectName(u"questionCounter")
168
+ self.questionCounter.setFont(font2)
169
+ self.questionCounter.setDecimals(0)
170
+ self.questionCounter.setMaximum(300.000000000000000)
171
+
172
+ self.formLayout.setWidget(1, QFormLayout.FieldRole, self.questionCounter)
173
+
174
+ self.label_8 = QLabel(self.mainWidget)
175
+ self.label_8.setObjectName(u"label_8")
176
+
177
+ self.formLayout.setWidget(2, QFormLayout.LabelRole, self.label_8)
178
+
179
+ self.categoriesCounter = QSpinBox(self.mainWidget)
180
+ self.categoriesCounter.setObjectName(u"categoriesCounter")
181
+ self.categoriesCounter.setFont(font2)
182
+ self.categoriesCounter.setMaximum(999)
183
+
184
+ self.formLayout.setWidget(2, QFormLayout.FieldRole, self.categoriesCounter)
185
+
186
+
187
+ self.verticalLayout_2.addLayout(self.formLayout)
188
+
189
+ self.line_3 = QFrame(self.mainWidget)
190
+ self.line_3.setObjectName(u"line_3")
191
+ self.line_3.setFrameShape(QFrame.Shape.HLine)
192
+ self.line_3.setFrameShadow(QFrame.Shadow.Sunken)
193
+
194
+ self.verticalLayout_2.addWidget(self.line_3)
195
+
196
+ self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
197
+
198
+ self.verticalLayout_2.addItem(self.verticalSpacer)
199
+
200
+ self.label_2 = QLabel(self.mainWidget)
201
+ self.label_2.setObjectName(u"label_2")
202
+ self.label_2.setFont(font)
203
+ self.label_2.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
204
+
205
+ self.verticalLayout_2.addWidget(self.label_2)
206
+
207
+ self.buttonSpreadSheet = QPushButton(self.mainWidget)
208
+ self.buttonSpreadSheet.setObjectName(u"buttonSpreadSheet")
209
+ #if QT_CONFIG(tooltip)
210
+ self.buttonSpreadSheet.setToolTip(u"<html><head/><body><p>Select the Spreadsheet File with all the Questions inside</p></body></html>")
211
+ #endif // QT_CONFIG(tooltip)
212
+
213
+ self.verticalLayout_2.addWidget(self.buttonSpreadSheet)
214
+
215
+ self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
216
+
217
+ self.verticalLayout_2.addItem(self.horizontalSpacer_2)
218
+
219
+ self.line_2 = QFrame(self.mainWidget)
220
+ self.line_2.setObjectName(u"line_2")
221
+ self.line_2.setFrameShape(QFrame.Shape.HLine)
222
+ self.line_2.setFrameShadow(QFrame.Shadow.Sunken)
223
+
224
+ self.verticalLayout_2.addWidget(self.line_2)
225
+
226
+ self.label_3 = QLabel(self.mainWidget)
227
+ self.label_3.setObjectName(u"label_3")
228
+ self.label_3.setFont(font)
229
+
230
+ self.verticalLayout_2.addWidget(self.label_3)
231
+
232
+ self.formLayout_2 = QFormLayout()
233
+ self.formLayout_2.setObjectName(u"formLayout_2")
234
+ self.formLayout_2.setContentsMargins(5, 5, 5, 5)
235
+ self.label_9 = QLabel(self.mainWidget)
236
+ self.label_9.setObjectName(u"label_9")
237
+
238
+ self.formLayout_2.setWidget(2, QFormLayout.LabelRole, self.label_9)
239
+
240
+ self.checkBoxIncludeCategories = QCheckBox(self.mainWidget)
241
+ self.checkBoxIncludeCategories.setObjectName(u"checkBoxIncludeCategories")
242
+
243
+ self.formLayout_2.setWidget(2, QFormLayout.FieldRole, self.checkBoxIncludeCategories)
244
+
245
+ self.spinBoxDefaultQVariant = QSpinBox(self.mainWidget)
246
+ self.spinBoxDefaultQVariant.setObjectName(u"spinBoxDefaultQVariant")
247
+
248
+ self.formLayout_2.setWidget(1, QFormLayout.FieldRole, self.spinBoxDefaultQVariant)
249
+
250
+ self.checkBoxUseDefQVariant = QCheckBox(self.mainWidget)
251
+ self.checkBoxUseDefQVariant.setObjectName(u"checkBoxUseDefQVariant")
252
+
253
+ self.formLayout_2.setWidget(0, QFormLayout.FieldRole, self.checkBoxUseDefQVariant)
254
+
255
+ self.label_10 = QLabel(self.mainWidget)
256
+ self.label_10.setObjectName(u"label_10")
257
+
258
+ self.formLayout_2.setWidget(1, QFormLayout.LabelRole, self.label_10)
259
+
260
+ self.label_11 = QLabel(self.mainWidget)
261
+ self.label_11.setObjectName(u"label_11")
262
+
263
+ self.formLayout_2.setWidget(0, QFormLayout.LabelRole, self.label_11)
264
+
265
+
266
+ self.verticalLayout_2.addLayout(self.formLayout_2)
267
+
268
+ self.buttonTestGen = QPushButton(self.mainWidget)
269
+ self.buttonTestGen.setObjectName(u"buttonTestGen")
270
+ self.buttonTestGen.setEnabled(False)
271
+ #if QT_CONFIG(tooltip)
272
+ self.buttonTestGen.setToolTip(u"<html><head/><body><p>exporst all selected questions to the test File</p></body></html>")
273
+ #endif // QT_CONFIG(tooltip)
274
+
275
+ self.verticalLayout_2.addWidget(self.buttonTestGen)
276
+
277
+ self.line = QFrame(self.mainWidget)
278
+ self.line.setObjectName(u"line")
279
+ self.line.setFrameShape(QFrame.Shape.VLine)
280
+ self.line.setFrameShadow(QFrame.Shadow.Sunken)
281
+
282
+ self.verticalLayout_2.addWidget(self.line)
283
+
284
+
285
+ self.horizontalLayout_2.addLayout(self.verticalLayout_2)
286
+
287
+
288
+ self.verticalLayout.addLayout(self.horizontalLayout_2)
289
+
290
+ self.label_4 = QLabel(self.mainWidget)
291
+ self.label_4.setObjectName(u"label_4")
292
+
293
+ self.verticalLayout.addWidget(self.label_4)
294
+
295
+ self.loggerWindow = QTextEdit(self.mainWidget)
296
+ self.loggerWindow.setObjectName(u"loggerWindow")
297
+ self.loggerWindow.setMinimumSize(QSize(0, 0))
298
+ self.loggerWindow.setMaximumSize(QSize(16777215, 373))
299
+ self.loggerWindow.setBaseSize(QSize(0, 30))
300
+ self.loggerWindow.setTextInteractionFlags(Qt.TextInteractionFlag.NoTextInteraction)
301
+
302
+ self.verticalLayout.addWidget(self.loggerWindow)
303
+
304
+ MoodleTestGenerator.setCentralWidget(self.mainWidget)
305
+ self.menubar = QMenuBar(MoodleTestGenerator)
306
+ self.menubar.setObjectName(u"menubar")
307
+ self.menubar.setGeometry(QRect(0, 0, 936, 33))
308
+ self.menuFile = QMenu(self.menubar)
309
+ self.menuFile.setObjectName(u"menuFile")
310
+ self.menuTools = QMenu(self.menubar)
311
+ self.menuTools.setObjectName(u"menuTools")
312
+ self.menuHelp = QMenu(self.menubar)
313
+ self.menuHelp.setObjectName(u"menuHelp")
314
+ MoodleTestGenerator.setMenuBar(self.menubar)
315
+ self.statusbar = QStatusBar(MoodleTestGenerator)
316
+ self.statusbar.setObjectName(u"statusbar")
317
+ MoodleTestGenerator.setStatusBar(self.statusbar)
318
+ self.toolBar = QToolBar(MoodleTestGenerator)
319
+ self.toolBar.setObjectName(u"toolBar")
320
+ MoodleTestGenerator.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolBar)
321
+ self.toolBar_3 = QToolBar(MoodleTestGenerator)
322
+ self.toolBar_3.setObjectName(u"toolBar_3")
323
+ MoodleTestGenerator.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolBar_3)
324
+ self.toolBar_2 = QToolBar(MoodleTestGenerator)
325
+ self.toolBar_2.setObjectName(u"toolBar_2")
326
+ MoodleTestGenerator.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolBar_2)
327
+
328
+ self.menubar.addAction(self.menuFile.menuAction())
329
+ self.menubar.addAction(self.menuTools.menuAction())
330
+ self.menubar.addAction(self.menuHelp.menuAction())
331
+ self.menuFile.addAction(self.actionInput_Spreadsheet)
332
+ self.menuTools.addAction(self.actionEquationChecker)
333
+ self.menuTools.addAction(self.actionParseAll)
334
+ self.menuTools.addAction(self.actionPreviewQ)
335
+ self.menuTools.addAction(self.actionSetting)
336
+ self.menuHelp.addAction(self.actionAbout)
337
+ self.menuHelp.addAction(self.actionDocumentation)
338
+ self.toolBar.addAction(self.actionInput_Spreadsheet)
339
+ self.toolBar.addAction(self.actionParseAll)
340
+ self.toolBar.addSeparator()
341
+ self.toolBar_3.addAction(self.actionEquationChecker)
342
+ self.toolBar_3.addAction(self.actionPreviewQ)
343
+ self.toolBar_2.addAction(self.actionDocumentation)
344
+ self.toolBar_2.addAction(self.actionSetting)
345
+
346
+ self.retranslateUi(MoodleTestGenerator)
347
+
348
+ QMetaObject.connectSlotsByName(MoodleTestGenerator)
349
+ # setupUi
350
+
351
+ def retranslateUi(self, MoodleTestGenerator):
352
+ MoodleTestGenerator.setWindowTitle(QCoreApplication.translate("MoodleTestGenerator", u"excel 2 moodle", None))
353
+ self.actionInput_Spreadsheet.setText(QCoreApplication.translate("MoodleTestGenerator", u"&Input Spreadsheet", None))
354
+ #if QT_CONFIG(shortcut)
355
+ self.actionInput_Spreadsheet.setShortcut(QCoreApplication.translate("MoodleTestGenerator", u"Ctrl+O", None))
356
+ #endif // QT_CONFIG(shortcut)
357
+ self.actionOutput_Folder.setText(QCoreApplication.translate("MoodleTestGenerator", u"&Output Folder", None))
358
+ self.actionEquationChecker.setText(QCoreApplication.translate("MoodleTestGenerator", u"&Equation Checker", None))
359
+ self.actionParseAll.setText(QCoreApplication.translate("MoodleTestGenerator", u"&Parse all Questions", None))
360
+ #if QT_CONFIG(tooltip)
361
+ self.actionParseAll.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"Parses all questions inside the spreadsheet", None))
362
+ #endif // QT_CONFIG(tooltip)
363
+ #if QT_CONFIG(shortcut)
364
+ self.actionParseAll.setShortcut(QCoreApplication.translate("MoodleTestGenerator", u"Ctrl+R", None))
365
+ #endif // QT_CONFIG(shortcut)
366
+ self.actionPreviewQ.setText(QCoreApplication.translate("MoodleTestGenerator", u"Preview Question", None))
367
+ #if QT_CONFIG(shortcut)
368
+ self.actionPreviewQ.setShortcut(QCoreApplication.translate("MoodleTestGenerator", u"Ctrl+P", None))
369
+ #endif // QT_CONFIG(shortcut)
370
+ self.actionAbout.setText(QCoreApplication.translate("MoodleTestGenerator", u"About", None))
371
+ self.actionDocumentation.setText(QCoreApplication.translate("MoodleTestGenerator", u"Documentation", None))
372
+ #if QT_CONFIG(shortcut)
373
+ self.actionDocumentation.setShortcut(QCoreApplication.translate("MoodleTestGenerator", u"F1", None))
374
+ #endif // QT_CONFIG(shortcut)
375
+ self.actionSetting.setText(QCoreApplication.translate("MoodleTestGenerator", u"Settings", None))
376
+ self.checkBoxQuestionListSelectAll.setText(QCoreApplication.translate("MoodleTestGenerator", u"Select all", None))
377
+ self.label.setText(QCoreApplication.translate("MoodleTestGenerator", u"Question List", None))
378
+ ___qtreewidgetitem = self.treeWidget.headerItem()
379
+ ___qtreewidgetitem.setText(3, QCoreApplication.translate("MoodleTestGenerator", u"Variant", None));
380
+ ___qtreewidgetitem.setText(2, QCoreApplication.translate("MoodleTestGenerator", u"Points", None));
381
+ ___qtreewidgetitem.setText(1, QCoreApplication.translate("MoodleTestGenerator", u"Description", None));
382
+ ___qtreewidgetitem.setText(0, QCoreApplication.translate("MoodleTestGenerator", u"Question ID", None));
383
+ self.label_5.setText(QCoreApplication.translate("MoodleTestGenerator", u"Selected:", None))
384
+ self.label_6.setText(QCoreApplication.translate("MoodleTestGenerator", u"Points", None))
385
+ self.pointCounter.setPrefix("")
386
+ self.label_7.setText(QCoreApplication.translate("MoodleTestGenerator", u"Questions", None))
387
+ self.questionCounter.setPrefix("")
388
+ self.label_8.setText(QCoreApplication.translate("MoodleTestGenerator", u"Categories", None))
389
+ self.categoriesCounter.setSuffix("")
390
+ self.categoriesCounter.setPrefix("")
391
+ self.label_2.setText(QCoreApplication.translate("MoodleTestGenerator", u"Input", None))
392
+ self.buttonSpreadSheet.setText(QCoreApplication.translate("MoodleTestGenerator", u"Select spreadsheet", None))
393
+ self.label_3.setText(QCoreApplication.translate("MoodleTestGenerator", u"Output", None))
394
+ #if QT_CONFIG(tooltip)
395
+ self.label_9.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"If enabled, all questions will be categorized, when importing into moodle. Otherwise they will all be imported into one category", None))
396
+ #endif // QT_CONFIG(tooltip)
397
+ self.label_9.setText(QCoreApplication.translate("MoodleTestGenerator", u"Include Questions in Categories", None))
398
+ self.checkBoxIncludeCategories.setText("")
399
+ self.checkBoxUseDefQVariant.setText("")
400
+ self.label_10.setText(QCoreApplication.translate("MoodleTestGenerator", u"Default Question Variant", None))
401
+ #if QT_CONFIG(tooltip)
402
+ self.label_11.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"If enabled it will always use the question variant that is set below. If not, it will ask everytime, which question Variant should be used", None))
403
+ #endif // QT_CONFIG(tooltip)
404
+ self.label_11.setText(QCoreApplication.translate("MoodleTestGenerator", u"Use default question Variant", None))
405
+ self.buttonTestGen.setText(QCoreApplication.translate("MoodleTestGenerator", u"export selected Questions to examfile", None))
406
+ self.label_4.setText(QCoreApplication.translate("MoodleTestGenerator", u"Logger", None))
407
+ self.menuFile.setTitle(QCoreApplication.translate("MoodleTestGenerator", u"File", None))
408
+ self.menuTools.setTitle(QCoreApplication.translate("MoodleTestGenerator", u"Tools", None))
409
+ self.menuHelp.setTitle(QCoreApplication.translate("MoodleTestGenerator", u"Help", None))
410
+ self.toolBar.setWindowTitle(QCoreApplication.translate("MoodleTestGenerator", u"toolBar", None))
411
+ self.toolBar_3.setWindowTitle(QCoreApplication.translate("MoodleTestGenerator", u"toolBar_3", None))
412
+ self.toolBar_2.setWindowTitle(QCoreApplication.translate("MoodleTestGenerator", u"toolBar_2", None))
413
+ # retranslateUi
414
+
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: excel2moodle
3
- Version: 0.3.1
4
- Summary: A Package for Converting Questions input into a spreadsheet, to valid moodle-xml
3
+ Version: 0.3.3
4
+ Summary: A package for converting questions from a spreadsheet, to valid moodle-xml
5
5
  Author: Jakob Bosse
6
6
  License-Expression: GPL-3.0-or-later
7
- Project-URL: Homepage, https://gitlab.com/jbosse3/excel2moodle
8
- Project-URL: documentation, https://jbosse3.gitlab.io/excel2moodle
7
+ Project-URL: Repository, https://gitlab.com/jbosse3/excel2moodle.git
8
+ Project-URL: Documentation, https://jbosse3.gitlab.io/excel2moodle
9
9
  Keywords: moodle,XML,teaching,question,converter
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Operating System :: OS Independent