mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 02:34:06 -04:00
Edit metadata: In the drop down list for languages, show the five most recently used languages first. Fixes #1594089 [[Enhancement] Language drop down box population](https://bugs.launchpad.net/calibre/+bug/1594089)
This commit is contained in:
parent
dcc2e3bc26
commit
0692c4a3fb
@ -786,6 +786,15 @@ def decouple(prefix):
|
||||
from calibre.gui2.widgets import history
|
||||
history.decouple(prefix)
|
||||
|
||||
_gui_prefs = gprefs
|
||||
|
||||
def gui_prefs():
|
||||
return _gui_prefs
|
||||
|
||||
def set_gui_prefs(prefs):
|
||||
global _gui_prefs
|
||||
_gui_prefs = prefs
|
||||
|
||||
class ResizableDialog(QDialog):
|
||||
|
||||
# This class is present only for backwards compat with third party plugins
|
||||
|
@ -7,6 +7,7 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2011, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
from calibre.gui2 import gui_prefs
|
||||
from calibre.gui2.complete2 import EditWithComplete
|
||||
from calibre.utils.localization import lang_map
|
||||
from calibre.utils.icu import sort_key, lower
|
||||
@ -23,8 +24,10 @@ def get_lang_map():
|
||||
|
||||
class LanguagesEdit(EditWithComplete):
|
||||
|
||||
def __init__(self, parent=None, db=None):
|
||||
EditWithComplete.__init__(self, parent)
|
||||
def __init__(self, parent=None, db=None, prefs=None):
|
||||
self.prefs = prefs or gui_prefs()
|
||||
self.refresh_recently_used()
|
||||
EditWithComplete.__init__(self, parent, sort_func=self.sort_language_items_key)
|
||||
|
||||
self.setSizeAdjustPolicy(self.AdjustToMinimumContentsLengthWithIcon)
|
||||
self.setMinimumContentsLength(20)
|
||||
@ -34,17 +37,28 @@ class LanguagesEdit(EditWithComplete):
|
||||
self.comma_rmap = {v:k for k, v in self.comma_map.iteritems()}
|
||||
self._rmap = {lower(v):k for k,v in self._lang_map.iteritems()}
|
||||
self.init_langs(db)
|
||||
self.item_selected.connect(self.update_recently_used)
|
||||
|
||||
def init_langs(self, db):
|
||||
if db is not None:
|
||||
pmap = {self._lang_map.get(x[1], x[1]):1 for x in
|
||||
db.get_languages_with_ids()}
|
||||
all_items = sorted(self._lang_map.itervalues(),
|
||||
key=lambda x: (-pmap.get(x, 0), sort_key(x)))
|
||||
else:
|
||||
all_items = sorted(self._lang_map.itervalues(),
|
||||
key=lambda x: sort_key(x))
|
||||
self.update_items_cache(all_items)
|
||||
self.update_items_cache(self._lang_map.itervalues())
|
||||
|
||||
def refresh_recently_used(self):
|
||||
recently_used = self.prefs.get('recently_used_languages') or ()
|
||||
self.recently_used = {x:i for i, x in enumerate(recently_used) if x}
|
||||
|
||||
def update_recently_used(self):
|
||||
recently_used = self.prefs.get('recently_used_languages') or []
|
||||
vals = self.vals
|
||||
for x in vals:
|
||||
if x:
|
||||
if x in recently_used:
|
||||
recently_used.remove(x)
|
||||
recently_used.insert(0, x)
|
||||
self.prefs.set('recently_used_languages', recently_used[:5])
|
||||
|
||||
def sort_language_items_key(self, val):
|
||||
idx = self.recently_used.get(val, 100000)
|
||||
return (idx, sort_key(val))
|
||||
|
||||
@property
|
||||
def vals(self):
|
||||
|
@ -391,6 +391,7 @@ class LanguagesDelegate(QStyledItemDelegate, UpdateEditorGeometry): # {{{
|
||||
|
||||
def setModelData(self, editor, model, index):
|
||||
val = ','.join(editor.lang_codes)
|
||||
editor.update_recently_used()
|
||||
model.setData(index, (val), Qt.EditRole)
|
||||
# }}}
|
||||
|
||||
|
@ -1378,6 +1378,7 @@ class LanguagesEdit(LE, ToMetadataMixin): # {{{
|
||||
cv = self.current_val
|
||||
if cv != self.original_val:
|
||||
db.set_languages(id_, cv)
|
||||
self.update_recently_used()
|
||||
# }}}
|
||||
|
||||
# Identifiers {{{
|
||||
|
@ -434,8 +434,10 @@ class NewBook(Dialog): # {{{
|
||||
self.fmt = fmt
|
||||
|
||||
def accept(self):
|
||||
tprefs.set('previous_new_book_authors', unicode(self.authors.text()))
|
||||
tprefs.set('previous_new_book_lang', (self.languages.lang_codes or [get_lang()])[0])
|
||||
with tprefs:
|
||||
tprefs.set('previous_new_book_authors', unicode(self.authors.text()))
|
||||
tprefs.set('previous_new_book_lang', (self.languages.lang_codes or [get_lang()])[0])
|
||||
self.languages.update_recently_used()
|
||||
super(NewBook, self).accept()
|
||||
|
||||
@property
|
||||
|
@ -11,7 +11,7 @@ import sys, os, importlib, time
|
||||
from PyQt5.Qt import QIcon
|
||||
|
||||
from calibre.constants import islinux, iswindows
|
||||
from calibre.gui2 import Application, ORG_NAME, APP_UID, setup_gui_option_parser, decouple
|
||||
from calibre.gui2 import Application, ORG_NAME, APP_UID, setup_gui_option_parser, decouple, set_gui_prefs
|
||||
from calibre.ptempfile import reset_base_dir
|
||||
from calibre.utils.config import OptionParser
|
||||
|
||||
@ -60,7 +60,7 @@ def _run(args, notify=None):
|
||||
|
||||
parser = option_parser()
|
||||
opts, args = parser.parse_args(args)
|
||||
decouple('edit-book-')
|
||||
decouple('edit-book-'), set_gui_prefs(tprefs)
|
||||
override = 'calibre-edit-book' if islinux else None
|
||||
app = Application(args, override_program_name=override, color_prefs=tprefs)
|
||||
app.file_event_hook = EventAccumulator()
|
||||
|
@ -316,6 +316,7 @@ class ManageUserDictionaries(Dialog):
|
||||
l.addRow(bb)
|
||||
if d.exec_() != d.Accepted:
|
||||
return
|
||||
d.loc.update_recently_used()
|
||||
word = unicode(w.text())
|
||||
lang = (loc.lang_codes or [canonicalize_lang(get_lang())])[0]
|
||||
if not word:
|
||||
|
Loading…
x
Reference in New Issue
Block a user