32
27
##########################################################################
37
29
def __init__(self):
41
v = FactView(_("Front to back"))
43
v.q_fields.append("q", _("Question"), True
45
self.fact_views.append
47
CardType.__init__(self, id=1,
48
name=_("Regular card"),
49
can_be_unregistered=False)
53
##########################################################################
57
##########################################################################
59
def generate_q(self, fact, fact_view):
61
if fact_view == TwoSided.front_to_back:
63
elif fact_view == TwoSided.back_to_front:
66
print 'Invalid subtype.'
71
##########################################################################
75
##########################################################################
77
def generate_a(self, fact, fact_view):
79
if fact_view == TwoSided.front_to_back:
81
elif fact_view == TwoSided.back_to_front:
84
print 'Invalid fact_view.'
89
##########################################################################
93
##########################################################################
95
def new_cards(self, data):
97
# Extract and remove data.
100
cat_names = data['cat_names']
101
add_vice_versa = data['add_vice_versa']
103
del data['add_vice_versa']
108
# TODO: add subtypes as a category?
113
card = Card(grade=grade, card_type=self, fact=fact,
114
fact_view=TwoSided.front_to_back, cat_names=cat_names)
118
card_2 = Card(grade=grade, card_type=self, fact=fact,
119
fact_view=TwoSided.back_to_front, cat_names=cat_names,
123
# TODO: drop the .inv suffix?
129
# TODO: add duplicate checking.
133
orig_added = self.check_duplicates_and_add(grade,q,a,cat_names)
136
if orig_added and add_vice_versa:
137
rev_added = self.check_duplicates_and_add(grade,a,q,\
138
cat_names,orig_added.id+'.inv')
140
if add_vice_versa and orig_added and not rev_added:
142
# Swap question and answer.
144
self.question.setText(a)
145
self.answer.setText(q)
146
self.addViceVersa.setChecked(False)
150
# Clear the form to make room for new question.
152
self.question.setText("")
153
self.answer.setText("")
157
##########################################################################
159
# check_duplicates_and_add
161
# TODO: check how this needs to be changed when there are multiple
162
# categories possible. Probably replace category by card types then.
164
##########################################################################
166
def check_duplicates_and_add(self, grade, q, a, cat_names, id=None):
168
if config["check_duplicates_when_adding"] == True:
170
# Find duplicate questions and refuse to add if duplicate
171
# answers are found as well.
173
allow_dif_cat = config["allow_duplicates_in_diff_cat"]
177
for card in get_cards():
181
if card.cat.name == cat_name or not allow_dif_cat:
182
QMessageBox.information(None,
184
_("Card is already in database.\n")\
185
.append(_("Duplicate not added.")),
190
elif card.cat.name == cat_name or not allow_dif_cat:
191
same_questions.append(card)
193
# Make a list of already existing answers for this question
194
# and merge if the user wishes so.
196
if len(same_questions) != 0:
199
for i in same_questions:
200
answers += ' / ' + i.a
202
status = QMessageBox.question(None,
204
_("There are different answers for this question:\n\n")\
206
_("&Merge and edit"),
208
_("&Do not add"), 0, -1)
210
if status == 0: # Merge and edit.
212
new_card = add_new_card(grade, q, a, cat_names, id)
213
self.update_combobox(cat_names)
215
for i in same_questions:
216
new_card.grade = min(new_card.grade, i.grade)
217
new_card.a += ' / ' + i.a
220
dlg = EditCardDlg(new_card, self)
226
if status == 2: # Don't add.
229
new_card = add_new_card(grade, q, a, cat_names, id)
230
self.update_combobox(cat_names)
236
##########################################################################
240
##########################################################################
242
def update_cards(self, data):
31
self.name = _("Front-to-back only")
36
self.fact_key_names['q'] = _("Question")
37
self.fact_key_names['a'] = _("Answer")
41
v = FactView(_("Front-to-back"))
43
v.q_fields.append(("q", True))
45
v.a_fields.append(("a", False))
47
self.fact_views.append(v)