excel2moodle 0.3.7__py3-none-any.whl → 0.4.0__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/__init__.py +6 -11
- excel2moodle/__main__.py +13 -1
- excel2moodle/core/dataStructure.py +23 -19
- excel2moodle/core/globals.py +1 -1
- excel2moodle/core/parser.py +20 -34
- excel2moodle/core/question.py +82 -48
- excel2moodle/{ui → core}/settings.py +28 -13
- excel2moodle/core/stringHelpers.py +4 -3
- excel2moodle/core/validator.py +7 -4
- excel2moodle/logger.py +1 -1
- excel2moodle/question_types/mc.py +44 -10
- excel2moodle/question_types/nf.py +1 -2
- excel2moodle/question_types/nfm.py +1 -2
- excel2moodle/ui/appUi.py +30 -15
- excel2moodle/ui/dialogs.py +41 -33
- excel2moodle/ui/exportSettingsDialog.py +79 -0
- excel2moodle/ui/windowDoc.py +9 -17
- excel2moodle/ui/windowMain.py +220 -225
- {excel2moodle-0.3.7.dist-info → excel2moodle-0.4.0.dist-info}/METADATA +1 -1
- excel2moodle-0.4.0.dist-info/RECORD +37 -0
- {excel2moodle-0.3.7.dist-info → excel2moodle-0.4.0.dist-info}/WHEEL +1 -1
- {excel2moodle-0.3.7.dist-info → excel2moodle-0.4.0.dist-info}/entry_points.txt +3 -0
- excel2moodle/core/questionWriter.py +0 -267
- excel2moodle-0.3.7.dist-info/RECORD +0 -37
- {excel2moodle-0.3.7.dist-info → excel2moodle-0.4.0.dist-info}/licenses/LICENSE +0 -0
- {excel2moodle-0.3.7.dist-info → excel2moodle-0.4.0.dist-info}/top_level.txt +0 -0
excel2moodle/ui/windowMain.py
CHANGED
@@ -17,25 +17,24 @@ from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient,
|
|
17
17
|
QPainter, QPalette, QPixmap, QRadialGradient,
|
18
18
|
QTransform)
|
19
19
|
from PySide6.QtWidgets import (QAbstractItemView, QAbstractSpinBox, QApplication, QCheckBox,
|
20
|
-
QDoubleSpinBox, QFormLayout, QFrame,
|
21
|
-
QHeaderView, QLabel,
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
QDoubleSpinBox, QFormLayout, QFrame, QGraphicsView,
|
21
|
+
QGridLayout, QHeaderView, QLabel, QLayout,
|
22
|
+
QLineEdit, QMainWindow, QMenu, QMenuBar,
|
23
|
+
QPushButton, QSizePolicy, QSplitter, QStatusBar,
|
24
|
+
QTextEdit, QToolBar, QTreeWidget, QTreeWidgetItem,
|
25
|
+
QVBoxLayout, QWidget)
|
25
26
|
|
26
27
|
class Ui_MoodleTestGenerator(object):
|
27
28
|
def setupUi(self, MoodleTestGenerator):
|
28
29
|
if not MoodleTestGenerator.objectName():
|
29
30
|
MoodleTestGenerator.setObjectName(u"MoodleTestGenerator")
|
30
|
-
MoodleTestGenerator.resize(
|
31
|
+
MoodleTestGenerator.resize(1101, 1010)
|
31
32
|
icon = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.DialogQuestion))
|
32
33
|
MoodleTestGenerator.setWindowIcon(icon)
|
33
|
-
self.
|
34
|
-
self.
|
35
|
-
icon1 = QIcon(QIcon.fromTheme(
|
36
|
-
self.
|
37
|
-
self.actionOutput_Folder = QAction(MoodleTestGenerator)
|
38
|
-
self.actionOutput_Folder.setObjectName(u"actionOutput_Folder")
|
34
|
+
self.actionSpreadsheet = QAction(MoodleTestGenerator)
|
35
|
+
self.actionSpreadsheet.setObjectName(u"actionSpreadsheet")
|
36
|
+
icon1 = QIcon(QIcon.fromTheme(u"document-open"))
|
37
|
+
self.actionSpreadsheet.setIcon(icon1)
|
39
38
|
self.actionEquationChecker = QAction(MoodleTestGenerator)
|
40
39
|
self.actionEquationChecker.setObjectName(u"actionEquationChecker")
|
41
40
|
icon2 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ToolsCheckSpelling))
|
@@ -44,98 +43,67 @@ class Ui_MoodleTestGenerator(object):
|
|
44
43
|
self.actionParseAll.setObjectName(u"actionParseAll")
|
45
44
|
icon3 = QIcon(QIcon.fromTheme(u"view-refresh"))
|
46
45
|
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
46
|
self.actionSetting = QAction(MoodleTestGenerator)
|
56
47
|
self.actionSetting.setObjectName(u"actionSetting")
|
57
|
-
|
58
|
-
self.actionSetting.setIcon(
|
48
|
+
icon4 = QIcon(QIcon.fromTheme(u"preferences-system"))
|
49
|
+
self.actionSetting.setIcon(icon4)
|
50
|
+
self.actionExport = QAction(MoodleTestGenerator)
|
51
|
+
self.actionExport.setObjectName(u"actionExport")
|
52
|
+
icon5 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ApplicationExit))
|
53
|
+
self.actionExport.setIcon(icon5)
|
54
|
+
self.actionAbout = QAction(MoodleTestGenerator)
|
55
|
+
self.actionAbout.setObjectName(u"actionAbout")
|
56
|
+
icon6 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.HelpAbout))
|
57
|
+
self.actionAbout.setIcon(icon6)
|
58
|
+
self.actionDocumentation = QAction(MoodleTestGenerator)
|
59
|
+
self.actionDocumentation.setObjectName(u"actionDocumentation")
|
60
|
+
self.actionDocumentation.setIcon(icon6)
|
59
61
|
self.mainWidget = QWidget(MoodleTestGenerator)
|
60
62
|
self.mainWidget.setObjectName(u"mainWidget")
|
61
|
-
self.
|
62
|
-
self.
|
63
|
-
self.
|
64
|
-
self.
|
65
|
-
self.
|
66
|
-
self.
|
63
|
+
self.verticalLayout_3 = QVBoxLayout(self.mainWidget)
|
64
|
+
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
65
|
+
self.splitter_2 = QSplitter(self.mainWidget)
|
66
|
+
self.splitter_2.setObjectName(u"splitter_2")
|
67
|
+
self.splitter_2.setOrientation(Qt.Orientation.Vertical)
|
68
|
+
self.splitter_2.setHandleWidth(3)
|
69
|
+
self.splitter = QSplitter(self.splitter_2)
|
70
|
+
self.splitter.setObjectName(u"splitter")
|
71
|
+
self.splitter.setOrientation(Qt.Orientation.Horizontal)
|
72
|
+
self.splitter.setHandleWidth(3)
|
73
|
+
self.layoutWidget = QWidget(self.splitter)
|
74
|
+
self.layoutWidget.setObjectName(u"layoutWidget")
|
75
|
+
self.verticalLayout_4 = QVBoxLayout(self.layoutWidget)
|
67
76
|
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
|
68
|
-
self.verticalLayout_4.setContentsMargins(
|
69
|
-
self.
|
70
|
-
self.
|
71
|
-
self.
|
72
|
-
self.
|
73
|
-
|
74
|
-
self.horizontalLayout.addWidget(self.checkBoxQuestionListSelectAll)
|
75
|
-
|
76
|
-
self.horizontalSpacer_4 = QSpacerItem(20, 10, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum)
|
77
|
-
|
78
|
-
self.horizontalLayout.addItem(self.horizontalSpacer_4)
|
79
|
-
|
80
|
-
self.line_4 = QFrame(self.mainWidget)
|
77
|
+
self.verticalLayout_4.setContentsMargins(0, 0, 4, 4)
|
78
|
+
self.gridLayout = QGridLayout()
|
79
|
+
self.gridLayout.setObjectName(u"gridLayout")
|
80
|
+
self.gridLayout.setVerticalSpacing(6)
|
81
|
+
self.line_4 = QFrame(self.layoutWidget)
|
81
82
|
self.line_4.setObjectName(u"line_4")
|
82
83
|
self.line_4.setFrameShape(QFrame.Shape.VLine)
|
83
84
|
self.line_4.setFrameShadow(QFrame.Shadow.Sunken)
|
84
85
|
|
85
|
-
self.
|
86
|
-
|
87
|
-
self.label = QLabel(self.mainWidget)
|
88
|
-
self.label.setObjectName(u"label")
|
89
|
-
font = QFont()
|
90
|
-
font.setPointSize(14)
|
91
|
-
self.label.setFont(font)
|
92
|
-
self.label.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
93
|
-
|
94
|
-
self.horizontalLayout.addWidget(self.label)
|
86
|
+
self.gridLayout.addWidget(self.line_4, 1, 3, 1, 1)
|
95
87
|
|
96
|
-
self.
|
97
|
-
|
98
|
-
self.horizontalLayout.addItem(self.horizontalSpacer)
|
99
|
-
|
100
|
-
|
101
|
-
self.verticalLayout_4.addLayout(self.horizontalLayout)
|
102
|
-
|
103
|
-
self.treeWidget = QTreeWidget(self.mainWidget)
|
104
|
-
__qtreewidgetitem = QTreeWidgetItem()
|
105
|
-
__qtreewidgetitem.setTextAlignment(2, Qt.AlignLeading|Qt.AlignVCenter);
|
106
|
-
self.treeWidget.setHeaderItem(__qtreewidgetitem)
|
107
|
-
self.treeWidget.setObjectName(u"treeWidget")
|
108
|
-
self.treeWidget.setBaseSize(QSize(0, 60))
|
109
|
-
self.treeWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
|
110
|
-
self.treeWidget.header().setCascadingSectionResizes(True)
|
111
|
-
self.treeWidget.header().setMinimumSectionSize(8)
|
112
|
-
|
113
|
-
self.verticalLayout_4.addWidget(self.treeWidget)
|
114
|
-
|
115
|
-
|
116
|
-
self.horizontalLayout_2.addLayout(self.verticalLayout_4)
|
117
|
-
|
118
|
-
self.verticalLayout_2 = QVBoxLayout()
|
119
|
-
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
|
120
|
-
self.label_5 = QLabel(self.mainWidget)
|
121
|
-
self.label_5.setObjectName(u"label_5")
|
122
|
-
font1 = QFont()
|
123
|
-
font1.setPointSize(15)
|
124
|
-
self.label_5.setFont(font1)
|
88
|
+
self.checkBoxQuestionListSelectAll = QCheckBox(self.layoutWidget)
|
89
|
+
self.checkBoxQuestionListSelectAll.setObjectName(u"checkBoxQuestionListSelectAll")
|
125
90
|
|
126
|
-
self.
|
91
|
+
self.gridLayout.addWidget(self.checkBoxQuestionListSelectAll, 1, 0, 1, 1)
|
127
92
|
|
128
|
-
self.
|
129
|
-
self.
|
130
|
-
self.
|
131
|
-
|
132
|
-
|
133
|
-
self.
|
134
|
-
self.
|
93
|
+
self.questionCounter = QDoubleSpinBox(self.layoutWidget)
|
94
|
+
self.questionCounter.setObjectName(u"questionCounter")
|
95
|
+
self.questionCounter.setMaximumSize(QSize(120, 16777215))
|
96
|
+
font = QFont()
|
97
|
+
font.setPointSize(13)
|
98
|
+
self.questionCounter.setFont(font)
|
99
|
+
self.questionCounter.setReadOnly(True)
|
100
|
+
self.questionCounter.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
|
101
|
+
self.questionCounter.setDecimals(0)
|
102
|
+
self.questionCounter.setMaximum(300.000000000000000)
|
135
103
|
|
136
|
-
self.
|
104
|
+
self.gridLayout.addWidget(self.questionCounter, 1, 1, 1, 1)
|
137
105
|
|
138
|
-
self.pointCounter = QDoubleSpinBox(self.
|
106
|
+
self.pointCounter = QDoubleSpinBox(self.layoutWidget)
|
139
107
|
self.pointCounter.setObjectName(u"pointCounter")
|
140
108
|
self.pointCounter.setEnabled(True)
|
141
109
|
sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
|
@@ -143,143 +111,161 @@ class Ui_MoodleTestGenerator(object):
|
|
143
111
|
sizePolicy.setVerticalStretch(0)
|
144
112
|
sizePolicy.setHeightForWidth(self.pointCounter.sizePolicy().hasHeightForWidth())
|
145
113
|
self.pointCounter.setSizePolicy(sizePolicy)
|
114
|
+
self.pointCounter.setMaximumSize(QSize(120, 16777215))
|
146
115
|
self.pointCounter.setBaseSize(QSize(190, 0))
|
147
|
-
|
148
|
-
|
149
|
-
|
116
|
+
font1 = QFont()
|
117
|
+
font1.setPointSize(13)
|
118
|
+
font1.setBold(False)
|
119
|
+
self.pointCounter.setFont(font1)
|
120
|
+
self.pointCounter.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
150
121
|
self.pointCounter.setAutoFillBackground(False)
|
151
122
|
self.pointCounter.setInputMethodHints(Qt.InputMethodHint.ImhNone)
|
152
|
-
self.pointCounter.
|
123
|
+
self.pointCounter.setWrapping(False)
|
124
|
+
self.pointCounter.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
|
125
|
+
self.pointCounter.setReadOnly(True)
|
126
|
+
self.pointCounter.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
|
153
127
|
self.pointCounter.setDecimals(1)
|
154
|
-
self.pointCounter.setMaximum(
|
155
|
-
|
156
|
-
self.formLayout.setWidget(0, QFormLayout.ItemRole.FieldRole, self.pointCounter)
|
157
|
-
|
158
|
-
self.label_7 = QLabel(self.mainWidget)
|
159
|
-
self.label_7.setObjectName(u"label_7")
|
160
|
-
|
161
|
-
self.formLayout.setWidget(1, QFormLayout.ItemRole.LabelRole, self.label_7)
|
162
|
-
|
163
|
-
self.questionCounter = QDoubleSpinBox(self.mainWidget)
|
164
|
-
self.questionCounter.setObjectName(u"questionCounter")
|
165
|
-
self.questionCounter.setFont(font2)
|
166
|
-
self.questionCounter.setDecimals(0)
|
167
|
-
self.questionCounter.setMaximum(300.000000000000000)
|
168
|
-
|
169
|
-
self.formLayout.setWidget(1, QFormLayout.ItemRole.FieldRole, self.questionCounter)
|
170
|
-
|
171
|
-
|
172
|
-
self.verticalLayout_2.addLayout(self.formLayout)
|
173
|
-
|
174
|
-
self.line_3 = QFrame(self.mainWidget)
|
175
|
-
self.line_3.setObjectName(u"line_3")
|
176
|
-
self.line_3.setFrameShape(QFrame.Shape.HLine)
|
177
|
-
self.line_3.setFrameShadow(QFrame.Shadow.Sunken)
|
178
|
-
|
179
|
-
self.verticalLayout_2.addWidget(self.line_3)
|
180
|
-
|
181
|
-
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
|
182
|
-
|
183
|
-
self.verticalLayout_2.addItem(self.verticalSpacer)
|
128
|
+
self.pointCounter.setMaximum(9999.899999999999636)
|
184
129
|
|
185
|
-
self.
|
186
|
-
self.label_2.setObjectName(u"label_2")
|
187
|
-
self.label_2.setFont(font)
|
188
|
-
self.label_2.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
130
|
+
self.gridLayout.addWidget(self.pointCounter, 1, 2, 1, 1)
|
189
131
|
|
190
|
-
self.
|
132
|
+
self.buttonSpreadsheet = QPushButton(self.layoutWidget)
|
133
|
+
self.buttonSpreadsheet.setObjectName(u"buttonSpreadsheet")
|
191
134
|
|
192
|
-
self.
|
193
|
-
self.buttonSpreadSheet.setObjectName(u"buttonSpreadSheet")
|
194
|
-
#if QT_CONFIG(tooltip)
|
195
|
-
self.buttonSpreadSheet.setToolTip(u"<html><head/><body><p>Select the Spreadsheet File with all the Questions inside</p></body></html>")
|
196
|
-
#endif // QT_CONFIG(tooltip)
|
197
|
-
|
198
|
-
self.verticalLayout_2.addWidget(self.buttonSpreadSheet)
|
199
|
-
|
200
|
-
self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
|
135
|
+
self.gridLayout.addWidget(self.buttonSpreadsheet, 0, 0, 1, 1)
|
201
136
|
|
202
|
-
self.
|
137
|
+
self.buttonExport = QPushButton(self.layoutWidget)
|
138
|
+
self.buttonExport.setObjectName(u"buttonExport")
|
203
139
|
|
204
|
-
self.
|
205
|
-
self.line_2.setObjectName(u"line_2")
|
206
|
-
self.line_2.setFrameShape(QFrame.Shape.HLine)
|
207
|
-
self.line_2.setFrameShadow(QFrame.Shadow.Sunken)
|
140
|
+
self.gridLayout.addWidget(self.buttonExport, 0, 2, 1, 1)
|
208
141
|
|
209
|
-
self.verticalLayout_2.addWidget(self.line_2)
|
210
142
|
|
211
|
-
self.
|
212
|
-
self.label_3.setObjectName(u"label_3")
|
213
|
-
self.label_3.setFont(font)
|
143
|
+
self.verticalLayout_4.addLayout(self.gridLayout)
|
214
144
|
|
215
|
-
self.
|
216
|
-
|
217
|
-
|
218
|
-
self.
|
219
|
-
self.
|
220
|
-
self.
|
221
|
-
self.
|
145
|
+
self.treeWidget = QTreeWidget(self.layoutWidget)
|
146
|
+
__qtreewidgetitem = QTreeWidgetItem()
|
147
|
+
__qtreewidgetitem.setTextAlignment(2, Qt.AlignLeading|Qt.AlignVCenter);
|
148
|
+
self.treeWidget.setHeaderItem(__qtreewidgetitem)
|
149
|
+
self.treeWidget.setObjectName(u"treeWidget")
|
150
|
+
self.treeWidget.setBaseSize(QSize(0, 60))
|
151
|
+
self.treeWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
|
152
|
+
self.treeWidget.header().setCascadingSectionResizes(True)
|
153
|
+
self.treeWidget.header().setMinimumSectionSize(8)
|
222
154
|
|
223
|
-
self.
|
155
|
+
self.verticalLayout_4.addWidget(self.treeWidget)
|
224
156
|
|
225
|
-
self.
|
226
|
-
self.
|
157
|
+
self.splitter.addWidget(self.layoutWidget)
|
158
|
+
self.layoutWidget1 = QWidget(self.splitter)
|
159
|
+
self.layoutWidget1.setObjectName(u"layoutWidget1")
|
160
|
+
self.verticalLayout_2 = QVBoxLayout(self.layoutWidget1)
|
161
|
+
self.verticalLayout_2.setSpacing(0)
|
162
|
+
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
|
163
|
+
self.verticalLayout_2.setSizeConstraint(QLayout.SizeConstraint.SetMinAndMaxSize)
|
164
|
+
self.verticalLayout_2.setContentsMargins(4, 0, 0, 4)
|
165
|
+
self.label = QLabel(self.layoutWidget1)
|
166
|
+
self.label.setObjectName(u"label")
|
167
|
+
font2 = QFont()
|
168
|
+
font2.setPointSize(13)
|
169
|
+
font2.setBold(False)
|
170
|
+
font2.setItalic(True)
|
171
|
+
self.label.setFont(font2)
|
172
|
+
self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
227
173
|
|
228
|
-
self.
|
174
|
+
self.verticalLayout_2.addWidget(self.label)
|
229
175
|
|
230
|
-
self.
|
231
|
-
self.
|
176
|
+
self.formLayout_3 = QFormLayout()
|
177
|
+
self.formLayout_3.setObjectName(u"formLayout_3")
|
178
|
+
self.formLayout_3.setLabelAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
|
179
|
+
self.formLayout_3.setHorizontalSpacing(20)
|
180
|
+
self.formLayout_3.setVerticalSpacing(5)
|
181
|
+
self.formLayout_3.setContentsMargins(10, 6, 10, -1)
|
182
|
+
self.questionNameLabel = QLabel(self.layoutWidget1)
|
183
|
+
self.questionNameLabel.setObjectName(u"questionNameLabel")
|
232
184
|
|
233
|
-
self.
|
185
|
+
self.formLayout_3.setWidget(0, QFormLayout.ItemRole.LabelRole, self.questionNameLabel)
|
234
186
|
|
235
|
-
self.
|
236
|
-
self.
|
187
|
+
self.qNameLine = QLineEdit(self.layoutWidget1)
|
188
|
+
self.qNameLine.setObjectName(u"qNameLine")
|
189
|
+
self.qNameLine.setReadOnly(True)
|
237
190
|
|
238
|
-
self.
|
191
|
+
self.formLayout_3.setWidget(0, QFormLayout.ItemRole.FieldRole, self.qNameLine)
|
239
192
|
|
240
193
|
|
241
|
-
self.verticalLayout_2.addLayout(self.
|
194
|
+
self.verticalLayout_2.addLayout(self.formLayout_3)
|
242
195
|
|
243
|
-
self.
|
244
|
-
self.
|
245
|
-
self.
|
246
|
-
|
247
|
-
self.buttonTestGen.setToolTip(u"<html><head/><body><p>exporst all selected questions to the test File</p></body></html>")
|
248
|
-
#endif // QT_CONFIG(tooltip)
|
196
|
+
self.questionText = QLabel(self.layoutWidget1)
|
197
|
+
self.questionText.setObjectName(u"questionText")
|
198
|
+
self.questionText.setWordWrap(True)
|
199
|
+
self.questionText.setMargin(10)
|
249
200
|
|
250
|
-
self.verticalLayout_2.addWidget(self.
|
201
|
+
self.verticalLayout_2.addWidget(self.questionText)
|
251
202
|
|
252
|
-
self.
|
253
|
-
self.
|
254
|
-
self.
|
255
|
-
self.
|
203
|
+
self.line_6 = QFrame(self.layoutWidget1)
|
204
|
+
self.line_6.setObjectName(u"line_6")
|
205
|
+
self.line_6.setFrameShape(QFrame.Shape.HLine)
|
206
|
+
self.line_6.setFrameShadow(QFrame.Shadow.Sunken)
|
256
207
|
|
257
|
-
self.verticalLayout_2.addWidget(self.
|
208
|
+
self.verticalLayout_2.addWidget(self.line_6)
|
258
209
|
|
210
|
+
self.answersLabel = QLabel(self.layoutWidget1)
|
211
|
+
self.answersLabel.setObjectName(u"answersLabel")
|
212
|
+
self.answersLabel.setMargin(10)
|
259
213
|
|
260
|
-
self.
|
214
|
+
self.verticalLayout_2.addWidget(self.answersLabel)
|
261
215
|
|
216
|
+
self.graphicsView = QGraphicsView(self.layoutWidget1)
|
217
|
+
self.graphicsView.setObjectName(u"graphicsView")
|
218
|
+
brush = QBrush(QColor(231, 243, 245, 255))
|
219
|
+
brush.setStyle(Qt.BrushStyle.SolidPattern)
|
220
|
+
self.graphicsView.setBackgroundBrush(brush)
|
262
221
|
|
263
|
-
self.
|
222
|
+
self.verticalLayout_2.addWidget(self.graphicsView)
|
264
223
|
|
265
|
-
self.
|
224
|
+
self.splitter.addWidget(self.layoutWidget1)
|
225
|
+
self.splitter_2.addWidget(self.splitter)
|
226
|
+
self.layoutWidget2 = QWidget(self.splitter_2)
|
227
|
+
self.layoutWidget2.setObjectName(u"layoutWidget2")
|
228
|
+
self.verticalLayout = QVBoxLayout(self.layoutWidget2)
|
229
|
+
self.verticalLayout.setObjectName(u"verticalLayout")
|
230
|
+
self.verticalLayout.setSizeConstraint(QLayout.SizeConstraint.SetMinimumSize)
|
231
|
+
self.verticalLayout.setContentsMargins(0, 3, 0, 0)
|
232
|
+
self.label_4 = QLabel(self.layoutWidget2)
|
266
233
|
self.label_4.setObjectName(u"label_4")
|
234
|
+
sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Minimum)
|
235
|
+
sizePolicy1.setHorizontalStretch(0)
|
236
|
+
sizePolicy1.setVerticalStretch(0)
|
237
|
+
sizePolicy1.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth())
|
238
|
+
self.label_4.setSizePolicy(sizePolicy1)
|
239
|
+
self.label_4.setMinimumSize(QSize(0, 20))
|
240
|
+
self.label_4.setMaximumSize(QSize(16777215, 20))
|
241
|
+
self.label_4.setBaseSize(QSize(0, 20))
|
242
|
+
self.label_4.setIndent(8)
|
267
243
|
|
268
244
|
self.verticalLayout.addWidget(self.label_4)
|
269
245
|
|
270
|
-
self.loggerWindow = QTextEdit(self.
|
246
|
+
self.loggerWindow = QTextEdit(self.layoutWidget2)
|
271
247
|
self.loggerWindow.setObjectName(u"loggerWindow")
|
248
|
+
self.loggerWindow.setEnabled(True)
|
249
|
+
sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
|
250
|
+
sizePolicy2.setHorizontalStretch(0)
|
251
|
+
sizePolicy2.setVerticalStretch(0)
|
252
|
+
sizePolicy2.setHeightForWidth(self.loggerWindow.sizePolicy().hasHeightForWidth())
|
253
|
+
self.loggerWindow.setSizePolicy(sizePolicy2)
|
272
254
|
self.loggerWindow.setMinimumSize(QSize(0, 0))
|
273
|
-
self.loggerWindow.setMaximumSize(QSize(16777215,
|
274
|
-
self.loggerWindow.setBaseSize(QSize(0,
|
255
|
+
self.loggerWindow.setMaximumSize(QSize(16777215, 800))
|
256
|
+
self.loggerWindow.setBaseSize(QSize(0, 29))
|
275
257
|
self.loggerWindow.setTextInteractionFlags(Qt.TextInteractionFlag.NoTextInteraction)
|
276
258
|
|
277
259
|
self.verticalLayout.addWidget(self.loggerWindow)
|
278
260
|
|
261
|
+
self.splitter_2.addWidget(self.layoutWidget2)
|
262
|
+
|
263
|
+
self.verticalLayout_3.addWidget(self.splitter_2)
|
264
|
+
|
279
265
|
MoodleTestGenerator.setCentralWidget(self.mainWidget)
|
280
266
|
self.menubar = QMenuBar(MoodleTestGenerator)
|
281
267
|
self.menubar.setObjectName(u"menubar")
|
282
|
-
self.menubar.setGeometry(QRect(0, 0,
|
268
|
+
self.menubar.setGeometry(QRect(0, 0, 1101, 33))
|
283
269
|
self.menuFile = QMenu(self.menubar)
|
284
270
|
self.menuFile.setObjectName(u"menuFile")
|
285
271
|
self.menuTools = QMenu(self.menubar)
|
@@ -290,31 +276,29 @@ class Ui_MoodleTestGenerator(object):
|
|
290
276
|
self.statusbar = QStatusBar(MoodleTestGenerator)
|
291
277
|
self.statusbar.setObjectName(u"statusbar")
|
292
278
|
MoodleTestGenerator.setStatusBar(self.statusbar)
|
293
|
-
self.toolBar = QToolBar(MoodleTestGenerator)
|
294
|
-
self.toolBar.setObjectName(u"toolBar")
|
295
|
-
MoodleTestGenerator.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolBar)
|
296
279
|
self.toolBar_3 = QToolBar(MoodleTestGenerator)
|
297
280
|
self.toolBar_3.setObjectName(u"toolBar_3")
|
298
281
|
MoodleTestGenerator.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolBar_3)
|
299
|
-
self.
|
300
|
-
self.
|
301
|
-
MoodleTestGenerator.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.
|
282
|
+
self.toolBar = QToolBar(MoodleTestGenerator)
|
283
|
+
self.toolBar.setObjectName(u"toolBar")
|
284
|
+
MoodleTestGenerator.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolBar)
|
302
285
|
|
303
286
|
self.menubar.addAction(self.menuFile.menuAction())
|
304
287
|
self.menubar.addAction(self.menuTools.menuAction())
|
305
288
|
self.menubar.addAction(self.menuHelp.menuAction())
|
306
|
-
self.menuFile.addAction(self.
|
307
|
-
self.
|
289
|
+
self.menuFile.addAction(self.actionExport)
|
290
|
+
self.menuFile.addAction(self.actionSpreadsheet)
|
308
291
|
self.menuTools.addAction(self.actionParseAll)
|
309
|
-
self.menuTools.addAction(self.
|
292
|
+
self.menuTools.addAction(self.actionEquationChecker)
|
310
293
|
self.menuTools.addAction(self.actionSetting)
|
311
|
-
self.
|
312
|
-
self.
|
313
|
-
self.toolBar.addSeparator()
|
294
|
+
self.menuHelp.addAction(self.actionAbout)
|
295
|
+
self.menuHelp.addAction(self.actionDocumentation)
|
314
296
|
self.toolBar_3.addAction(self.actionEquationChecker)
|
315
|
-
self.toolBar_3.addAction(self.
|
316
|
-
self.
|
317
|
-
self.
|
297
|
+
self.toolBar_3.addAction(self.actionDocumentation)
|
298
|
+
self.toolBar_3.addAction(self.actionAbout)
|
299
|
+
self.toolBar.addAction(self.actionSpreadsheet)
|
300
|
+
self.toolBar.addAction(self.actionParseAll)
|
301
|
+
self.toolBar.addAction(self.actionExport)
|
318
302
|
|
319
303
|
self.retranslateUi(MoodleTestGenerator)
|
320
304
|
|
@@ -323,53 +307,64 @@ class Ui_MoodleTestGenerator(object):
|
|
323
307
|
|
324
308
|
def retranslateUi(self, MoodleTestGenerator):
|
325
309
|
MoodleTestGenerator.setWindowTitle(QCoreApplication.translate("MoodleTestGenerator", u"excel 2 moodle", None))
|
326
|
-
self.
|
310
|
+
self.actionSpreadsheet.setText(QCoreApplication.translate("MoodleTestGenerator", u"&Input Spreadsheet", None))
|
311
|
+
#if QT_CONFIG(tooltip)
|
312
|
+
self.actionSpreadsheet.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"Open the question spreadsheet", None))
|
313
|
+
#endif // QT_CONFIG(tooltip)
|
327
314
|
#if QT_CONFIG(shortcut)
|
328
|
-
self.
|
315
|
+
self.actionSpreadsheet.setShortcut(QCoreApplication.translate("MoodleTestGenerator", u"Ctrl+O", None))
|
329
316
|
#endif // QT_CONFIG(shortcut)
|
330
|
-
self.actionOutput_Folder.setText(QCoreApplication.translate("MoodleTestGenerator", u"&Output Folder", None))
|
331
317
|
self.actionEquationChecker.setText(QCoreApplication.translate("MoodleTestGenerator", u"&Equation Checker", None))
|
332
318
|
self.actionParseAll.setText(QCoreApplication.translate("MoodleTestGenerator", u"&Parse all Questions", None))
|
333
319
|
#if QT_CONFIG(tooltip)
|
334
|
-
self.actionParseAll.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"
|
320
|
+
self.actionParseAll.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"Parse all questions inside the spreadsheet", None))
|
335
321
|
#endif // QT_CONFIG(tooltip)
|
336
322
|
#if QT_CONFIG(shortcut)
|
337
323
|
self.actionParseAll.setShortcut(QCoreApplication.translate("MoodleTestGenerator", u"Ctrl+R", None))
|
338
324
|
#endif // QT_CONFIG(shortcut)
|
339
|
-
self.
|
325
|
+
self.actionSetting.setText(QCoreApplication.translate("MoodleTestGenerator", u"Settings", None))
|
326
|
+
self.actionExport.setText(QCoreApplication.translate("MoodleTestGenerator", u"Export the question selection ", None))
|
340
327
|
#if QT_CONFIG(shortcut)
|
341
|
-
self.
|
328
|
+
self.actionExport.setShortcut(QCoreApplication.translate("MoodleTestGenerator", u"Ctrl+E", None))
|
342
329
|
#endif // QT_CONFIG(shortcut)
|
343
330
|
self.actionAbout.setText(QCoreApplication.translate("MoodleTestGenerator", u"About", None))
|
344
|
-
self.
|
331
|
+
self.actionDocumentation.setText(QCoreApplication.translate("MoodleTestGenerator", u"Documentation", None))
|
332
|
+
#if QT_CONFIG(tooltip)
|
333
|
+
self.actionDocumentation.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"Open the documentation for excel2moodle", None))
|
334
|
+
#endif // QT_CONFIG(tooltip)
|
335
|
+
#if QT_CONFIG(shortcut)
|
336
|
+
self.actionDocumentation.setShortcut(QCoreApplication.translate("MoodleTestGenerator", u"F1", None))
|
337
|
+
#endif // QT_CONFIG(shortcut)
|
345
338
|
self.checkBoxQuestionListSelectAll.setText(QCoreApplication.translate("MoodleTestGenerator", u"Select all", None))
|
346
|
-
|
339
|
+
#if QT_CONFIG(tooltip)
|
340
|
+
self.questionCounter.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"The number of selected questions", None))
|
341
|
+
#endif // QT_CONFIG(tooltip)
|
342
|
+
self.questionCounter.setPrefix("")
|
343
|
+
self.questionCounter.setSuffix(QCoreApplication.translate("MoodleTestGenerator", u" Qst.", None))
|
344
|
+
#if QT_CONFIG(tooltip)
|
345
|
+
self.pointCounter.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"The total number of points of all selected questions.", None))
|
346
|
+
#endif // QT_CONFIG(tooltip)
|
347
|
+
self.pointCounter.setPrefix("")
|
348
|
+
self.pointCounter.setSuffix(QCoreApplication.translate("MoodleTestGenerator", u" Pts.", None))
|
349
|
+
self.buttonSpreadsheet.setText(QCoreApplication.translate("MoodleTestGenerator", u"Open Spreadsheet", None))
|
350
|
+
#if QT_CONFIG(tooltip)
|
351
|
+
self.buttonExport.setToolTip(QCoreApplication.translate("MoodleTestGenerator", u"Export the selected questions to a xml file", None))
|
352
|
+
#endif // QT_CONFIG(tooltip)
|
353
|
+
self.buttonExport.setText(QCoreApplication.translate("MoodleTestGenerator", u"Export", None))
|
347
354
|
___qtreewidgetitem = self.treeWidget.headerItem()
|
348
355
|
___qtreewidgetitem.setText(3, QCoreApplication.translate("MoodleTestGenerator", u"Variants", None));
|
349
356
|
___qtreewidgetitem.setText(2, QCoreApplication.translate("MoodleTestGenerator", u"Points", None));
|
350
357
|
___qtreewidgetitem.setText(1, QCoreApplication.translate("MoodleTestGenerator", u"Description", None));
|
351
358
|
___qtreewidgetitem.setText(0, QCoreApplication.translate("MoodleTestGenerator", u"Question ID", None));
|
352
|
-
self.
|
353
|
-
self.
|
354
|
-
self.
|
355
|
-
self.
|
356
|
-
self.
|
357
|
-
self.label_2.setText(QCoreApplication.translate("MoodleTestGenerator", u"Input", None))
|
358
|
-
self.buttonSpreadSheet.setText(QCoreApplication.translate("MoodleTestGenerator", u"Select spreadsheet", None))
|
359
|
-
self.label_3.setText(QCoreApplication.translate("MoodleTestGenerator", u"Output", None))
|
360
|
-
self.label_10.setText(QCoreApplication.translate("MoodleTestGenerator", u"Default Question Variant", None))
|
361
|
-
#if QT_CONFIG(tooltip)
|
362
|
-
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))
|
363
|
-
#endif // QT_CONFIG(tooltip)
|
364
|
-
self.label_9.setText(QCoreApplication.translate("MoodleTestGenerator", u"Include Questions in Categories", None))
|
365
|
-
self.checkBoxIncludeCategories.setText("")
|
366
|
-
self.buttonTestGen.setText(QCoreApplication.translate("MoodleTestGenerator", u"export selected Questions to examfile", None))
|
367
|
-
self.label_4.setText(QCoreApplication.translate("MoodleTestGenerator", u"Logger", None))
|
359
|
+
self.label.setText(QCoreApplication.translate("MoodleTestGenerator", u"Question Preview", None))
|
360
|
+
self.questionNameLabel.setText(QCoreApplication.translate("MoodleTestGenerator", u"Question:", None))
|
361
|
+
self.questionText.setText(QCoreApplication.translate("MoodleTestGenerator", u"QuestionText", None))
|
362
|
+
self.answersLabel.setText(QCoreApplication.translate("MoodleTestGenerator", u"Answers", None))
|
363
|
+
self.label_4.setText(QCoreApplication.translate("MoodleTestGenerator", u"Logging Messages", None))
|
368
364
|
self.menuFile.setTitle(QCoreApplication.translate("MoodleTestGenerator", u"File", None))
|
369
365
|
self.menuTools.setTitle(QCoreApplication.translate("MoodleTestGenerator", u"Tools", None))
|
370
366
|
self.menuHelp.setTitle(QCoreApplication.translate("MoodleTestGenerator", u"Help", None))
|
371
|
-
self.toolBar.setWindowTitle(QCoreApplication.translate("MoodleTestGenerator", u"toolBar", None))
|
372
367
|
self.toolBar_3.setWindowTitle(QCoreApplication.translate("MoodleTestGenerator", u"toolBar_3", None))
|
373
|
-
self.
|
368
|
+
self.toolBar.setWindowTitle(QCoreApplication.translate("MoodleTestGenerator", u"toolBar", None))
|
374
369
|
# retranslateUi
|
375
370
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
excel2moodle/__init__.py,sha256=qdQJY0xbSiEhnmqbgJpqBe0kHec7yLOeAdcArScioE8,1925
|
2
|
+
excel2moodle/__main__.py,sha256=WAqQPg1DycB7nXK6VwDvnwHxWP5SGGVpQ_beE36l5L8,1190
|
3
|
+
excel2moodle/logger.py,sha256=e3i6ECB8x-qyR4mP5WhdDGs1WbFXma2tzBjKbMumfOw,3086
|
4
|
+
excel2moodle/core/__init__.py,sha256=H4Bt6u076RKb6BH5F58nHLQvYPDUoayosM_Onyr9yT0,398
|
5
|
+
excel2moodle/core/category.py,sha256=QIl8nh1ryvlVMtNy8hWRfhZZMgGOhQZ3rwDFqf4woa4,1809
|
6
|
+
excel2moodle/core/dataStructure.py,sha256=xEb24WHMSTXnR5JtpLeacfYyBkP418znQXYBTaUix6k,13209
|
7
|
+
excel2moodle/core/etHelpers.py,sha256=i8DAx7YBxrQqzbXFsU-pIvYMPHSRhYci-JvuzY1MzeI,2299
|
8
|
+
excel2moodle/core/exceptions.py,sha256=VgbxrnoR9RRnmDYK2rbB_Bv00r7NLWET6FgddPwo3uw,748
|
9
|
+
excel2moodle/core/globals.py,sha256=Dg46AveftuGTGpxaFdxF87Kc1Azf0dIFQy8dAdgy0cE,3293
|
10
|
+
excel2moodle/core/numericMultiQ.py,sha256=vr-gYogu2sf2a_Bhvhnu1ZSZFZXM32MfhJesjTkoOQM,2618
|
11
|
+
excel2moodle/core/parser.py,sha256=biXKznQdrK0_UNBB4TsV54RqTpAmEnGwZJVC5_wneA0,8549
|
12
|
+
excel2moodle/core/question.py,sha256=mr0T8qc7C-m-A8_A59JeCyu80SmruRB-iTV5JEAHjAk,8599
|
13
|
+
excel2moodle/core/settings.py,sha256=6Do6A1VWlVMJYgT0Je4YyFsIS8rEMcghu-MUXBGk1b0,6842
|
14
|
+
excel2moodle/core/stringHelpers.py,sha256=OzFZ6Eu3PeBLKb61K-aeVfUZmVuBerr9KfyOsuNRd7Y,2403
|
15
|
+
excel2moodle/core/validator.py,sha256=4U0HEJREtZ7d6K7b4F1NA7P_AC3_uv6Th_1YGLKJwgU,4969
|
16
|
+
excel2moodle/extra/__init__.py,sha256=PM-id60HD21A3IcGC_fCYFihS8osBGZMIJCcN-ZRsIM,293
|
17
|
+
excel2moodle/extra/equationVerification.py,sha256=GLJl1r90d8AAiNy0H2hooZrg3D6aEwNfifYKAe3aGxM,3921
|
18
|
+
excel2moodle/question_types/__init__.py,sha256=ZYGg_tYop9c5yUfN8St6FddeaDxbyE2hneKKUFVzcGM,955
|
19
|
+
excel2moodle/question_types/mc.py,sha256=DEloENXMME7zpHgUIdQlH_HKMyPbWdNs45r05nseQ8c,4804
|
20
|
+
excel2moodle/question_types/nf.py,sha256=QcLIGFLTOyZyTouOTbSb9oaqXZAo1wYJz-Ek9oqEVHc,773
|
21
|
+
excel2moodle/question_types/nfm.py,sha256=ndwZdsCb71MrdPGaftqWxD7IuWFNXKRIN7Qcxe1qTHM,3231
|
22
|
+
excel2moodle/ui/__init__.py,sha256=4EdGtpzwH3rgw4xW9E5x9kdPQYwKbo9rehHRZTNxCrQ,44
|
23
|
+
excel2moodle/ui/appUi.py,sha256=3uYIuuLJlUhud5yHo8Uiya3ZOlMUlyWVMtFxHU3ZATk,11284
|
24
|
+
excel2moodle/ui/dialogs.py,sha256=Xvhkvp4U-0yN5dWK9BaP6j3LzeNLd3YMiA1JvtyCZyw,5636
|
25
|
+
excel2moodle/ui/exportSettingsDialog.py,sha256=_BldaX74LsaAfy4rG6g7f55tra3OQETnfyRQ-wClvHU,3610
|
26
|
+
excel2moodle/ui/questionPreviewDialog.py,sha256=_rJvz1GM90aNnj3P6SugEezK7JW6m74ZALgkChohWLM,4980
|
27
|
+
excel2moodle/ui/treewidget.py,sha256=mTRqmZHMZT3QTTvt5Gw9L-yl4KdhhulkF7O1KBwW-_E,2449
|
28
|
+
excel2moodle/ui/variantDialog.py,sha256=snVaF3_YAc7NWjMRg7NzbjL_PzNbOpt4eiqElkE46io,5414
|
29
|
+
excel2moodle/ui/windowDoc.py,sha256=WvzHj6F4JvHP82WlTsyFeOXW024Xq3BUqtp--T4twuI,661
|
30
|
+
excel2moodle/ui/windowEquationChecker.py,sha256=fLyal3sbJwpthWCAxLB5vbSFOX23JoivoYksNp3mZVY,7925
|
31
|
+
excel2moodle/ui/windowMain.py,sha256=iHEq9HRRGduPIxV4QOYUkGgKkbmphJT1vKHsrokQbsM,19668
|
32
|
+
excel2moodle-0.4.0.dist-info/licenses/LICENSE,sha256=ywQqe6Sitymkf2lV2NRcx_aGsaC-KbSl_EfEsRXmNRw,35135
|
33
|
+
excel2moodle-0.4.0.dist-info/METADATA,sha256=xj6dLT6Sf8lT2Cmokk_0Lld_J6HLlrxZa-XXi2lk1m4,2972
|
34
|
+
excel2moodle-0.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
35
|
+
excel2moodle-0.4.0.dist-info/entry_points.txt,sha256=r6Dy9TGktIJUdr1QpKni_ANneugiuEtLYUbsKVMn96w,117
|
36
|
+
excel2moodle-0.4.0.dist-info/top_level.txt,sha256=5V1xRUQ9o7UmOCmNoWCZPAuy5nXp3Qbzyqch8fUGT_c,13
|
37
|
+
excel2moodle-0.4.0.dist-info/RECORD,,
|