mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add edit link context menu item to tag browser
Make edit_authors remember geometry
This commit is contained in:
parent
7da2a25617
commit
e762f41d46
@ -4,10 +4,11 @@ __docformat__ = 'restructuredtext en'
|
|||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
|
|
||||||
from PyQt4.Qt import (Qt, QDialog, QTableWidgetItem, QAbstractItemView, QIcon,
|
from PyQt4.Qt import (Qt, QDialog, QTableWidgetItem, QAbstractItemView, QIcon,
|
||||||
QDialogButtonBox, QFrame, QLabel, QTimer, QMenu, QApplication)
|
QDialogButtonBox, QFrame, QLabel, QTimer, QMenu, QApplication,
|
||||||
|
QByteArray)
|
||||||
|
|
||||||
from calibre.ebooks.metadata import author_to_author_sort
|
from calibre.ebooks.metadata import author_to_author_sort
|
||||||
from calibre.gui2 import error_dialog
|
from calibre.gui2 import error_dialog, gprefs
|
||||||
from calibre.gui2.dialogs.edit_authors_dialog_ui import Ui_EditAuthorsDialog
|
from calibre.gui2.dialogs.edit_authors_dialog_ui import Ui_EditAuthorsDialog
|
||||||
from calibre.utils.icu import sort_key
|
from calibre.utils.icu import sort_key
|
||||||
|
|
||||||
@ -20,7 +21,7 @@ class tableItem(QTableWidgetItem):
|
|||||||
|
|
||||||
class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
||||||
|
|
||||||
def __init__(self, parent, db, id_to_select, select_sort):
|
def __init__(self, parent, db, id_to_select, select_sort, select_link):
|
||||||
QDialog.__init__(self, parent)
|
QDialog.__init__(self, parent)
|
||||||
Ui_EditAuthorsDialog.__init__(self)
|
Ui_EditAuthorsDialog.__init__(self)
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
@ -29,6 +30,14 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
self.setWindowFlags(self.windowFlags()&(~Qt.WindowContextHelpButtonHint))
|
self.setWindowFlags(self.windowFlags()&(~Qt.WindowContextHelpButtonHint))
|
||||||
self.setWindowIcon(icon)
|
self.setWindowIcon(icon)
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.table_column_widths = \
|
||||||
|
gprefs.get('manage_authors_table_widths', None)
|
||||||
|
geom = gprefs.get('manage_authors_dialog_geometry', bytearray(''))
|
||||||
|
self.restoreGeometry(QByteArray(geom))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
self.buttonBox.accepted.connect(self.accepted)
|
self.buttonBox.accepted.connect(self.accepted)
|
||||||
|
|
||||||
# Set up the column headings
|
# Set up the column headings
|
||||||
@ -65,6 +74,8 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
if id == id_to_select:
|
if id == id_to_select:
|
||||||
if select_sort:
|
if select_sort:
|
||||||
select_item = sort
|
select_item = sort
|
||||||
|
elif select_link:
|
||||||
|
select_item = link
|
||||||
else:
|
else:
|
||||||
select_item = aut
|
select_item = aut
|
||||||
self.table.resizeColumnsToContents()
|
self.table.resizeColumnsToContents()
|
||||||
@ -122,6 +133,28 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
self.table.setContextMenuPolicy(Qt.CustomContextMenu)
|
self.table.setContextMenuPolicy(Qt.CustomContextMenu)
|
||||||
self.table.customContextMenuRequested .connect(self.show_context_menu)
|
self.table.customContextMenuRequested .connect(self.show_context_menu)
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
self.table_column_widths = []
|
||||||
|
for c in range(0, self.table.columnCount()):
|
||||||
|
self.table_column_widths.append(self.table.columnWidth(c))
|
||||||
|
gprefs['manage_authors_table_widths'] = self.table_column_widths
|
||||||
|
gprefs['manage_authors_dialog_geometry'] = bytearray(self.saveGeometry())
|
||||||
|
|
||||||
|
def resizeEvent(self, *args):
|
||||||
|
QDialog.resizeEvent(self, *args)
|
||||||
|
if self.table_column_widths is not None:
|
||||||
|
for c,w in enumerate(self.table_column_widths):
|
||||||
|
self.table.setColumnWidth(c, w)
|
||||||
|
else:
|
||||||
|
# the vertical scroll bar might not be rendered, so might not yet
|
||||||
|
# have a width. Assume 25. Not a problem because user-changed column
|
||||||
|
# widths will be remembered
|
||||||
|
w = self.table.width() - 25 - self.table.verticalHeader().width()
|
||||||
|
w /= self.table.columnCount()
|
||||||
|
for c in range(0, self.table.columnCount()):
|
||||||
|
self.table.setColumnWidth(c, w)
|
||||||
|
self.save_state()
|
||||||
|
|
||||||
def show_context_menu(self, point):
|
def show_context_menu(self, point):
|
||||||
self.context_item = self.table.itemAt(point)
|
self.context_item = self.table.itemAt(point)
|
||||||
case_menu = QMenu(_('Change Case'))
|
case_menu = QMenu(_('Change Case'))
|
||||||
@ -238,6 +271,7 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
self.auth_col.setIcon(self.blank_icon)
|
self.auth_col.setIcon(self.blank_icon)
|
||||||
|
|
||||||
def accepted(self):
|
def accepted(self):
|
||||||
|
self.save_state()
|
||||||
self.result = []
|
self.result = []
|
||||||
for row in range(0,self.table.rowCount()):
|
for row in range(0,self.table.rowCount()):
|
||||||
id = self.table.item(row, 0).data(Qt.UserRole).toInt()[0]
|
id = self.table.item(row, 0).data(Qt.UserRole).toInt()[0]
|
||||||
|
@ -262,12 +262,12 @@ class TagBrowserMixin(object): # {{{
|
|||||||
self.library_view.select_rows(ids)
|
self.library_view.select_rows(ids)
|
||||||
# refreshing the tags view happens at the emit()/call() site
|
# refreshing the tags view happens at the emit()/call() site
|
||||||
|
|
||||||
def do_author_sort_edit(self, parent, id, select_sort=True):
|
def do_author_sort_edit(self, parent, id, select_sort=True, select_link=False):
|
||||||
'''
|
'''
|
||||||
Open the manage authors dialog
|
Open the manage authors dialog
|
||||||
'''
|
'''
|
||||||
db = self.library_view.model().db
|
db = self.library_view.model().db
|
||||||
editor = EditAuthorsDialog(parent, db, id, select_sort)
|
editor = EditAuthorsDialog(parent, db, id, select_sort, select_link)
|
||||||
d = editor.exec_()
|
d = editor.exec_()
|
||||||
if d:
|
if d:
|
||||||
for (id, old_author, new_author, new_sort, new_link) in editor.result:
|
for (id, old_author, new_author, new_sort, new_link) in editor.result:
|
||||||
|
@ -66,7 +66,7 @@ class TagsView(QTreeView): # {{{
|
|||||||
tag_list_edit = pyqtSignal(object, object)
|
tag_list_edit = pyqtSignal(object, object)
|
||||||
saved_search_edit = pyqtSignal(object)
|
saved_search_edit = pyqtSignal(object)
|
||||||
rebuild_saved_searches = pyqtSignal()
|
rebuild_saved_searches = pyqtSignal()
|
||||||
author_sort_edit = pyqtSignal(object, object)
|
author_sort_edit = pyqtSignal(object, object, object, object)
|
||||||
tag_item_renamed = pyqtSignal()
|
tag_item_renamed = pyqtSignal()
|
||||||
search_item_renamed = pyqtSignal()
|
search_item_renamed = pyqtSignal()
|
||||||
drag_drop_finished = pyqtSignal(object)
|
drag_drop_finished = pyqtSignal(object)
|
||||||
@ -277,7 +277,10 @@ class TagsView(QTreeView): # {{{
|
|||||||
self.saved_search_edit.emit(category)
|
self.saved_search_edit.emit(category)
|
||||||
return
|
return
|
||||||
if action == 'edit_author_sort':
|
if action == 'edit_author_sort':
|
||||||
self.author_sort_edit.emit(self, index)
|
self.author_sort_edit.emit(self, index, True, False)
|
||||||
|
return
|
||||||
|
if action == 'edit_author_link':
|
||||||
|
self.author_sort_edit.emit(self, index, False, True)
|
||||||
return
|
return
|
||||||
|
|
||||||
reset_filter_categories = True
|
reset_filter_categories = True
|
||||||
@ -346,6 +349,9 @@ class TagsView(QTreeView): # {{{
|
|||||||
self.context_menu.addAction(_('Edit sort for %s')%display_name(tag),
|
self.context_menu.addAction(_('Edit sort for %s')%display_name(tag),
|
||||||
partial(self.context_menu_handler,
|
partial(self.context_menu_handler,
|
||||||
action='edit_author_sort', index=tag.id))
|
action='edit_author_sort', index=tag.id))
|
||||||
|
self.context_menu.addAction(_('Edit link for %s')%display_name(tag),
|
||||||
|
partial(self.context_menu_handler,
|
||||||
|
action='edit_author_link', index=tag.id))
|
||||||
|
|
||||||
# is_editable is also overloaded to mean 'can be added
|
# is_editable is also overloaded to mean 'can be added
|
||||||
# to a user category'
|
# to a user category'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user