Skip to content

Commit bc0a962

Browse files
committed
Add return home button and validate deck name
Added base class for study and edit widgets This class contains the return to home button Validate deck name using regular expression
1 parent 3ab4054 commit bc0a962

File tree

6 files changed

+55
-10
lines changed

6 files changed

+55
-10
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
# <img src="src/img/favicon.ico" height=64> Study and Repeat
1+
# Study and Repeat
22

33
This repository contains the code for an application aimed at improving the quality of the study, through the technique of spaced repetition.

src/view/editor_widget.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
from PyQt5 import QtWidgets, QtGui
22

33
from model import deck
4+
from view import secondary_widget
45
import config
56

67

7-
class EditorWidget(QtWidgets.QWidget):
8+
class EditorWidget(secondary_widget.SecondaryWidget):
89

910
question_prefix = '- '
1011
proportion = 6
1112

1213
def __init__(self, d: deck.Deck, *args, **kwargs) -> None:
1314
super().__init__(*args, **kwargs)
1415

16+
self.window().setWindowTitle(f'Study and Repeat - {d.name}')
17+
1518
self._deck = d
1619
h_layout = QtWidgets.QHBoxLayout()
1720

@@ -61,8 +64,7 @@ def __init__(self, d: deck.Deck, *args, **kwargs) -> None:
6164
h_layout.addWidget(left_widget, 100//self.proportion)
6265
h_layout.addWidget(right_widget,
6366
100 * (self.proportion-1) // self.proportion)
64-
self.setLayout(h_layout)
65-
self.window().setCentralWidget(self)
67+
self._central_widget.setLayout(h_layout)
6668

6769
self.disable()
6870
self._cards_list.addItems(

src/view/home_widget.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ def __init__(self, *args, **kwargs):
2424

2525
def populate_list(self) -> None:
2626
for deck_name in sorted(os.listdir(config.DECKS_DIR)):
27+
if deck_name.startswith('.'):
28+
continue
2729
widget = QtWidgets.QWidget(self._scroll_area_widget_contents)
2830
horizontal_layout = QtWidgets.QHBoxLayout(widget)
2931
horizontal_layout.setAlignment(QtCore.Qt.AlignCenter)

src/view/main_window.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import re
2+
13
from PyQt5 import QtWidgets, QtGui, QtCore
24

35
from view import home_widget, editor_widget
@@ -82,6 +84,12 @@ def __init__(self, *args, **kwargs) -> None:
8284
layout = QtWidgets.QVBoxLayout()
8385
self.setLayout(layout)
8486

87+
self._error_label = QtWidgets.QLabel('The only permitted characters are '
88+
+ 'a..z, A..Z, 0..9 and _')
89+
self._error_label.setStyleSheet("color: #ff0000")
90+
layout.addWidget(self._error_label)
91+
self._error_label.hide()
92+
8593
self._line_edit = QtWidgets.QLineEdit(self)
8694
self._line_edit.setPlaceholderText('Insert deck name')
8795
layout.addWidget(self._line_edit)
@@ -93,5 +101,8 @@ def __init__(self, *args, **kwargs) -> None:
93101
layout.addWidget(button_box)
94102

95103
def accept(self, *args, **kwargs) -> None:
96-
super().accept()
97-
self.deck = deck.Deck(self._line_edit.text())
104+
if re.fullmatch('[a-zA-Z0-9_]+', self._line_edit.text()) is None:
105+
self._error_label.show()
106+
else:
107+
super().accept()
108+
self.deck = deck.Deck(self._line_edit.text())

src/view/secondary_widget.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
2+
3+
from PyQt5 import QtWidgets
4+
from PyQt5 import QtWidgets, QtGui
5+
6+
from view import home_widget
7+
import config
8+
9+
10+
class SecondaryWidget(QtWidgets.QWidget):
11+
12+
def __init__(self, *args, **kwargs) -> None:
13+
super().__init__(*args, **kwargs)
14+
15+
self._layout = QtWidgets.QVBoxLayout()
16+
self.setLayout(self._layout)
17+
back_btn = QtWidgets.QPushButton(QtGui.QIcon(
18+
f'{config.ICONS_DIR}home.png'), '')
19+
back_btn.setFixedWidth(32)
20+
self._layout.addWidget(back_btn)
21+
back_btn.released.connect(self.back_home)
22+
self._central_widget = QtWidgets.QWidget()
23+
self._layout.addWidget(self._central_widget)
24+
self.window().setCentralWidget(self)
25+
26+
def back_home(self) -> None:
27+
self.window().setCentralWidget(home_widget.HomeWidget())
28+
self.window().setWindowTitle('Study and Repeat')
29+
self.exit()

src/view/study_widget.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
from PyQt5 import QtWidgets, QtGui
22

33
from model import deck
4-
from view import home_widget
4+
from view import home_widget, secondary_widget
55
import config
66

77

8-
class StudyWidget(QtWidgets.QWidget):
8+
class StudyWidget(secondary_widget.SecondaryWidget):
99

1010
def __init__(self, d: deck.Deck, *args, **kwargs) -> None:
1111
super().__init__(*args, **kwargs)
1212

13+
self.window().setWindowTitle(f'Study and Repeat - {d.name}')
14+
1315
self._deck = d
1416
v_layout = QtWidgets.QVBoxLayout()
1517
self._question_text = QtWidgets.QLineEdit()
@@ -36,9 +38,8 @@ def __init__(self, d: deck.Deck, *args, **kwargs) -> None:
3638
v_layout.addWidget(self._correctness_btns)
3739
self._correctness_btns.hide()
3840
self._answer_text.hide()
39-
self.setLayout(v_layout)
4041

41-
self.window().setCentralWidget(self)
42+
self._central_widget.setLayout(v_layout)
4243
self.show_question()
4344

4445
def show_question(self) -> None:

0 commit comments

Comments
 (0)