Skip to content

Commit

Permalink
Replace Qt5 attributes with Qt6 ones
Browse files Browse the repository at this point in the history
This allows CrowdAnki on Anki 23.10rc1 to run without
ENABLE_QT5_COMPAT=1.

I believe that compatibility with Qt5 and Anki 2.1.50->2.1.66 is
preserved.

The Qt6 version of the code is in the try clause, while the Qt5 one is
in the except.  Hopefully, this will make clean up (once Qt5 is
dropped by Anki) simple.

There are still some Qt-unrelated deprecation warning with 23.10rc1,
but it's probably cleanest to deal with them separately, since I'm not
sure how easy it will be to make the relevant changes
backwards-compatible.
  • Loading branch information
aplaice committed Oct 22, 2023
1 parent 7ca9027 commit 95a24e1
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 9 deletions.
9 changes: 7 additions & 2 deletions crowd_anki/importer/anki_importer.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,13 @@ def read_import_config(directory_path, deck_json):
import_dict = yaml.full_load(meta_file)

import_dialog = ImportDialog(deck_json, import_dict)
if import_dialog.exec_() == QDialog.Rejected:
return None
# Qt5/Qt6 compat
try:
if import_dialog.exec() == QDialog.DialogCode.Rejected:
return None
except AttributeError:
if import_dialog.exec_() == QDialog.Rejected:
return None

return import_dialog.final_import_config

Expand Down
36 changes: 29 additions & 7 deletions crowd_anki/importer/import_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,15 +95,24 @@ def setup_personal_field_selection(self):

def add_header(name):
heading_ui = QListWidgetItem(name)
heading_ui.setFlags(Qt.ItemIsEnabled)
# Qt5/Qt6 compat
try:
heading_ui.setFlags(Qt.ItemFlag.ItemIsEnabled)
except AttributeError:
heading_ui.setFlags(Qt.ItemIsEnabled)
heading_ui.setSizeHint(QSize(self.form.list_personal_fields.width(), 30))
heading_ui.setFont(heading_font)
self.form.list_personal_fields.addItem(heading_ui)

def add_field(name, is_personal) -> QListWidgetItem:
field_ui = QListWidgetItem(name)
field_ui.setCheckState(Qt.Checked if is_personal else Qt.Unchecked)
field_ui.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
# Qt5/Qt6 compat
try:
field_ui.setCheckState(Qt.CheckState.Checked if is_personal else Qt.CheckState.Unchecked)
field_ui.setFlags(Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsUserCheckable)
except AttributeError:
field_ui.setCheckState(Qt.Checked if is_personal else Qt.Unchecked)
field_ui.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
self.form.list_personal_fields.addItem(field_ui)
return field_ui

Expand All @@ -121,7 +130,11 @@ def setup_misc(self):
self.form.import_message_textbox.setText(self.import_defaults.import_message)

if self.import_defaults.suggest_tag_imported_cards:
self.form.cb_tag_cards.setCheckState(Qt.Checked)
# Qt5/Qt6 compat
try:
self.form.cb_tag_cards.setCheckState(Qt.CheckState.Checked)
except AttributeError:
self.form.cb_tag_cards.setCheckState(Qt.Checked)
self.form.cb_tag_cards.setText("Tag Cards (Suggested by Deck Maintainer!)")
# else:
# set as default from config settings
Expand All @@ -131,7 +144,11 @@ def setup_misc(self):

def setup_deck_part_checkboxes(self):
def set_checked_and_text(checkbox, text, count, checked: bool = True):
checkbox.setCheckState(Qt.Checked if checked else Qt.Unchecked)
# Qt5/Qt6 compat
try:
checkbox.setCheckState(Qt.CheckState.Checked if checked else Qt.CheckState.Unchecked)
except AttributeError:
checkbox.setCheckState(Qt.Checked if checked else Qt.Unchecked)
if count is not None:
text = f"{text}: {'{:,}'.format(count)}"
checkbox.setText(text)
Expand Down Expand Up @@ -159,5 +176,10 @@ def read_import_config(self):
def read_personal_fields(self, config):
for model_name, fields_dict in self.personal_field_ui_dict.items():
for field_name, widget_item in fields_dict.items():
if widget_item.checkState() == Qt.Checked:
config.add_field(model_name, field_name)
# Qt5/Qt6 compat
try:
if widget_item.checkState() == Qt.CheckState.Checked:
config.add_field(model_name, field_name)
except AttributeError:
if widget_item.checkState() == Qt.Checked:
config.add_field(model_name, field_name)

0 comments on commit 95a24e1

Please sign in to comment.