mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Enhancement #2000037: Check Library: Open book folder
This commit is contained in:
parent
85eac7a5b4
commit
015bf3c71b
@ -11,11 +11,12 @@ from qt.core import (
|
|||||||
QApplication, QCheckBox, QCursor, QDialog, QDialogButtonBox, QGridLayout,
|
QApplication, QCheckBox, QCursor, QDialog, QDialogButtonBox, QGridLayout,
|
||||||
QHBoxLayout, QIcon, QLabel, QLineEdit, QProgressBar, QPushButton,
|
QHBoxLayout, QIcon, QLabel, QLineEdit, QProgressBar, QPushButton,
|
||||||
QStackedLayout, Qt, QTextEdit, QTreeWidget, QTreeWidgetItem, QVBoxLayout,
|
QStackedLayout, Qt, QTextEdit, QTreeWidget, QTreeWidgetItem, QVBoxLayout,
|
||||||
QWidget, pyqtSignal, QSplitter
|
QWidget, pyqtSignal, QSplitter, QToolButton
|
||||||
)
|
)
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
||||||
from calibre import as_unicode, prints
|
from calibre import as_unicode, prints
|
||||||
|
from calibre.gui2 import open_local_file
|
||||||
from calibre.gui2.dialogs.confirm_delete import confirm
|
from calibre.gui2.dialogs.confirm_delete import confirm
|
||||||
from calibre.library.check_library import CHECKS, CheckLibrary
|
from calibre.library.check_library import CHECKS, CheckLibrary
|
||||||
from calibre.utils.recycle_bin import delete_file, delete_tree
|
from calibre.utils.recycle_bin import delete_file, delete_tree
|
||||||
@ -107,8 +108,34 @@ class DBCheck(QDialog): # {{{
|
|||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
|
||||||
class Item(QTreeWidgetItem):
|
class TextWithButtonWidget(QWidget):
|
||||||
pass
|
|
||||||
|
button_icon = None
|
||||||
|
|
||||||
|
def __init__(self, library_path, text, item_path):
|
||||||
|
QWidget.__init__(self)
|
||||||
|
if self.button_icon is None:
|
||||||
|
self.button_icon = QIcon.ic('document_open.png')
|
||||||
|
self.library_path = library_path
|
||||||
|
self.item_path = item_path
|
||||||
|
l = QHBoxLayout()
|
||||||
|
l.setContentsMargins(0, 0, 0, 0)
|
||||||
|
b = QToolButton()
|
||||||
|
b.setContentsMargins(0, 0, 0, 0)
|
||||||
|
b.clicked.connect(self.button_clicked)
|
||||||
|
b.setIcon(self.button_icon)
|
||||||
|
l.addWidget(b)
|
||||||
|
t = QLabel(text)
|
||||||
|
t.setContentsMargins(0, 0, 0, 0)
|
||||||
|
l.addWidget(t)
|
||||||
|
self.setLayout(l)
|
||||||
|
self.setContentsMargins(0, 0, 0, 0)
|
||||||
|
|
||||||
|
def button_clicked(self):
|
||||||
|
p = os.path.join(self.library_path, self.item_path)
|
||||||
|
if not os.path.isdir(p):
|
||||||
|
p = os.path.dirname(p)
|
||||||
|
open_local_file(p)
|
||||||
|
|
||||||
|
|
||||||
class CheckLibraryDialog(QDialog):
|
class CheckLibraryDialog(QDialog):
|
||||||
@ -301,9 +328,9 @@ class CheckLibraryDialog(QDialog):
|
|||||||
else:
|
else:
|
||||||
self.problem_count[attr] = len(list_)
|
self.problem_count[attr] = len(list_)
|
||||||
|
|
||||||
tl = Item()
|
tl = QTreeWidgetItem()
|
||||||
tl.setText(0, h)
|
tl.setText(0, h)
|
||||||
if fixable and list:
|
if fixable:
|
||||||
tl.setData(1, Qt.ItemDataRole.UserRole, self.is_fixable)
|
tl.setData(1, Qt.ItemDataRole.UserRole, self.is_fixable)
|
||||||
tl.setText(1, _('(fixable)'))
|
tl.setText(1, _('(fixable)'))
|
||||||
tl.setFlags(Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsUserCheckable)
|
tl.setFlags(Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsUserCheckable)
|
||||||
@ -322,17 +349,17 @@ class CheckLibraryDialog(QDialog):
|
|||||||
self.top_level_items[attr] = tl
|
self.top_level_items[attr] = tl
|
||||||
|
|
||||||
for problem in list_:
|
for problem in list_:
|
||||||
it = Item()
|
it = QTreeWidgetItem()
|
||||||
|
tl.addChild(it)
|
||||||
if checkable:
|
if checkable:
|
||||||
it.setFlags(Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsUserCheckable)
|
it.setFlags(Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsUserCheckable)
|
||||||
it.setCheckState(2, Qt.CheckState.Unchecked)
|
it.setCheckState(2, Qt.CheckState.Unchecked)
|
||||||
it.setData(2, Qt.ItemDataRole.UserRole, self.is_deletable)
|
it.setData(2, Qt.ItemDataRole.UserRole, self.is_deletable)
|
||||||
else:
|
else:
|
||||||
it.setFlags(Qt.ItemFlag.ItemIsEnabled)
|
it.setFlags(Qt.ItemFlag.ItemIsEnabled)
|
||||||
it.setText(0, problem[0])
|
tree.setItemWidget(it, 0, TextWithButtonWidget(self.db.library_path, problem[0], problem[1]))
|
||||||
it.setData(0, Qt.ItemDataRole.UserRole, problem[2])
|
it.setData(0, Qt.ItemDataRole.UserRole, problem[2])
|
||||||
it.setText(2, problem[1])
|
it.setText(2, problem[1])
|
||||||
tl.addChild(it)
|
|
||||||
self.all_items.append(it)
|
self.all_items.append(it)
|
||||||
plaintext.append(','.join([h, problem[0], problem[1]]))
|
plaintext.append(','.join([h, problem[0], problem[1]]))
|
||||||
tree.addTopLevelItem(tl)
|
tree.addTopLevelItem(tl)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user