mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Edit Book: Search and replace panel: Add arrows to open the list of recently used search and replace expressions
This commit is contained in:
parent
97b192eb7b
commit
4166178747
@ -376,16 +376,21 @@ class LineEdit(QLineEdit, LineEditECM):
|
||||
|
||||
class EditWithComplete(EnComboBox):
|
||||
|
||||
def __init__(self, *args):
|
||||
def __init__(self, *args, **kwargs):
|
||||
EnComboBox.__init__(self, *args)
|
||||
self.setLineEdit(LineEdit(self, completer_widget=self))
|
||||
self.setLineEdit(LineEdit(self, completer_widget=self, sort_func=kwargs.get('sort_func', sort_key)))
|
||||
self.setCompleter(None)
|
||||
self.eat_focus_out = True
|
||||
self.installEventFilter(self)
|
||||
|
||||
# Interface {{{
|
||||
def showPopup(self):
|
||||
self.lineEdit().complete(show_all=True)
|
||||
orig = self.disable_popup
|
||||
self.disable_popup = False
|
||||
try:
|
||||
self.lineEdit().complete(show_all=True)
|
||||
finally:
|
||||
self.disable_popup = orig
|
||||
|
||||
def update_items_cache(self, complete_items):
|
||||
self.lineEdit().update_items_cache(complete_items)
|
||||
@ -412,7 +417,15 @@ class EditWithComplete(EnComboBox):
|
||||
self.lineEdit().all_items = val
|
||||
return property(fget=fget, fset=fset)
|
||||
|
||||
@dynamic_property
|
||||
def disable_popup(self):
|
||||
def fget(self):
|
||||
return self.lineEdit().disable_popup
|
||||
def fset(self, val):
|
||||
self.lineEdit().disable_popup = bool(val)
|
||||
return property(fget=fget, fset=fset)
|
||||
# }}}
|
||||
|
||||
def text(self):
|
||||
return unicode(self.lineEdit().text())
|
||||
|
||||
|
@ -21,7 +21,7 @@ import regex
|
||||
from calibre import prepare_string_for_xml
|
||||
from calibre.gui2 import NONE, error_dialog, info_dialog, choose_files, choose_save_file
|
||||
from calibre.gui2.dialogs.message_box import MessageBox
|
||||
from calibre.gui2.widgets2 import HistoryLineEdit2
|
||||
from calibre.gui2.widgets2 import HistoryComboBox
|
||||
from calibre.gui2.tweak_book import tprefs, editors, current_container
|
||||
from calibre.gui2.tweak_book.widgets import Dialog, BusyCursor
|
||||
|
||||
@ -37,19 +37,19 @@ class PushButton(QPushButton):
|
||||
QPushButton.__init__(self, text, parent)
|
||||
self.clicked.connect(lambda : parent.search_triggered.emit(action))
|
||||
|
||||
class HistoryLineEdit(HistoryLineEdit2):
|
||||
class HistoryBox(HistoryComboBox):
|
||||
|
||||
max_history_items = 100
|
||||
save_search = pyqtSignal()
|
||||
show_saved_searches = pyqtSignal()
|
||||
|
||||
def __init__(self, parent, clear_msg):
|
||||
HistoryLineEdit2.__init__(self, parent)
|
||||
HistoryComboBox.__init__(self, parent)
|
||||
self.disable_popup = tprefs['disable_completion_popup_for_search']
|
||||
self.clear_msg = clear_msg
|
||||
|
||||
def contextMenuEvent(self, event):
|
||||
menu = self.createStandardContextMenu()
|
||||
menu = self.lineEdit().createStandardContextMenu()
|
||||
menu.addSeparator()
|
||||
menu.addAction(self.clear_msg, self.clear_history)
|
||||
menu.addAction((_('Enable completion based on search history') if self.disable_popup else _(
|
||||
@ -179,18 +179,18 @@ class SearchWidget(QWidget):
|
||||
|
||||
self.fl = fl = QLabel(_('&Find:'))
|
||||
fl.setAlignment(Qt.AlignRight | Qt.AlignCenter)
|
||||
self.find_text = ft = HistoryLineEdit(self, _('Clear search history'))
|
||||
self.find_text = ft = HistoryBox(self, _('Clear search history'))
|
||||
ft.save_search.connect(self.save_search)
|
||||
ft.show_saved_searches.connect(self.show_saved_searches)
|
||||
ft.initialize('tweak_book_find_edit')
|
||||
ft.returnPressed.connect(lambda : self.search_triggered.emit('find'))
|
||||
ft.lineEdit().returnPressed.connect(lambda : self.search_triggered.emit('find'))
|
||||
fl.setBuddy(ft)
|
||||
l.addWidget(fl, 0, 0)
|
||||
l.addWidget(ft, 0, 1)
|
||||
|
||||
self.rl = rl = QLabel(_('&Replace:'))
|
||||
rl.setAlignment(Qt.AlignRight | Qt.AlignCenter)
|
||||
self.replace_text = rt = HistoryLineEdit(self, _('Clear replace history'))
|
||||
self.replace_text = rt = HistoryBox(self, _('Clear replace history'))
|
||||
rt.save_search.connect(self.save_search)
|
||||
rt.show_saved_searches.connect(self.show_saved_searches)
|
||||
rt.initialize('tweak_book_replace_edit')
|
||||
|
@ -8,15 +8,15 @@ __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||
|
||||
from PyQt4.Qt import QPushButton, QPixmap, QIcon, QColor, Qt, QColorDialog, pyqtSignal
|
||||
|
||||
from calibre.gui2.complete2 import LineEdit
|
||||
from calibre.gui2.complete2 import LineEdit, EditWithComplete
|
||||
from calibre.gui2.widgets import history
|
||||
|
||||
class HistoryLineEdit2(LineEdit):
|
||||
class HistoryMixin(object):
|
||||
|
||||
max_history_items = None
|
||||
|
||||
def __init__(self, parent=None, completer_widget=None, sort_func=lambda x:None):
|
||||
LineEdit.__init__(self, parent=parent, completer_widget=completer_widget, sort_func=sort_func)
|
||||
def __init__(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
@property
|
||||
def store_name(self):
|
||||
@ -28,7 +28,10 @@ class HistoryLineEdit2(LineEdit):
|
||||
self.set_separator(None)
|
||||
self.update_items_cache(self.history)
|
||||
self.setText('')
|
||||
self.editingFinished.connect(self.save_history)
|
||||
try:
|
||||
self.editingFinished.connect(self.save_history)
|
||||
except AttributeError:
|
||||
self.lineEdit().editingFinished.connect(self.save_history)
|
||||
|
||||
def save_history(self):
|
||||
ct = unicode(self.text())
|
||||
@ -48,6 +51,16 @@ class HistoryLineEdit2(LineEdit):
|
||||
history.set(self.store_name, self.history)
|
||||
self.update_items_cache(self.history)
|
||||
|
||||
class HistoryLineEdit2(LineEdit, HistoryMixin):
|
||||
|
||||
def __init__(self, parent=None, completer_widget=None, sort_func=lambda x:None):
|
||||
LineEdit.__init__(self, parent=parent, completer_widget=completer_widget, sort_func=sort_func)
|
||||
|
||||
class HistoryComboBox(EditWithComplete, HistoryMixin):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
EditWithComplete.__init__(self, parent, sort_func=lambda x:None)
|
||||
|
||||
class ColorButton(QPushButton):
|
||||
|
||||
color_changed = pyqtSignal(object)
|
||||
|
Loading…
x
Reference in New Issue
Block a user