From df7a0b3da3aa39e79230aeb43553280234228154 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 17 Aug 2023 11:29:51 +0530 Subject: [PATCH] Create catalog: Add buttons to easily select all/non/visible fields when creating CSV/XML catalogs. Fixes #2031571 [[Enhancement] CSV Catalog Suggestions](https://bugs.launchpad.net/calibre/+bug/2031571) --- src/calibre/gui2/catalog/catalog_csv_xml.py | 37 +++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/catalog/catalog_csv_xml.py b/src/calibre/gui2/catalog/catalog_csv_xml.py index d6336c82c9..207c7dccfd 100644 --- a/src/calibre/gui2/catalog/catalog_csv_xml.py +++ b/src/calibre/gui2/catalog/catalog_csv_xml.py @@ -5,7 +5,10 @@ __license__ = 'GPL v3' __copyright__ = '2009, Kovid Goyal ' __docformat__ = 'restructuredtext en' -from qt.core import QWidget, QListWidgetItem, Qt, QVBoxLayout, QLabel, QListWidget, QAbstractItemView +from qt.core import ( + QAbstractItemView, QHBoxLayout, QLabel, QListWidget, QListWidgetItem, QPushButton, + Qt, QVBoxLayout, QWidget, +) from calibre.constants import ismacos from calibre.gui2 import gprefs @@ -48,12 +51,42 @@ class PluginWidget(QWidget): self.db_fields = QListWidget(self) l.addWidget(self.db_fields) self.la2 = la = QLabel(_('Drag and drop to re-arrange fields')) - l.addWidget(la) self.db_fields.setDragEnabled(True) self.db_fields.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove) self.db_fields.setDefaultDropAction(Qt.DropAction.CopyAction if ismacos else Qt.DropAction.MoveAction) self.db_fields.setAlternatingRowColors(True) self.db_fields.setObjectName("db_fields") + h = QHBoxLayout() + l.addLayout(h) + h.addWidget(la), h.addStretch(10) + self.select_all_button = b = QPushButton(_('Select &all')) + b.clicked.connect(self.select_all) + h.addWidget(b) + self.select_all_button = b = QPushButton(_('Select &none')) + b.clicked.connect(self.select_none) + h.addWidget(b) + self.select_visible_button = b = QPushButton(_('Select &visible')) + b.clicked.connect(self.select_visible) + b.setToolTip(_('Select the fields currently shown in the book list')) + h.addWidget(b) + + def select_all(self): + for row in range(self.db_fields.count()): + item = self.db_fields.item(row) + item.setCheckState(Qt.CheckState.Checked) + + def select_none(self): + for row in range(self.db_fields.count()): + item = self.db_fields.item(row) + item.setCheckState(Qt.CheckState.Unchecked) + + def select_visible(self): + state = get_gui().library_view.get_state() + hidden = frozenset(state['hidden_columns']) + for row in range(self.db_fields.count()): + item = self.db_fields.item(row) + field = item.data(Qt.ItemDataRole.UserRole) + item.setCheckState(Qt.CheckState.Unchecked if field in hidden else Qt.CheckState.Checked) def initialize(self, catalog_name, db): self.name = catalog_name