forked from openlp/openlp
Modified SaveEdit, so that it saves the chosen search type
This commit is contained in:
parent
389fb391df
commit
80793f9412
@ -266,7 +266,7 @@ class MediaManagerItem(QtWidgets.QWidget, RegistryProperties):
|
|||||||
self.search_text_layout.setObjectName('search_text_layout')
|
self.search_text_layout.setObjectName('search_text_layout')
|
||||||
self.search_text_label = QtWidgets.QLabel(self.search_widget)
|
self.search_text_label = QtWidgets.QLabel(self.search_widget)
|
||||||
self.search_text_label.setObjectName('search_text_label')
|
self.search_text_label.setObjectName('search_text_label')
|
||||||
self.search_text_edit = SearchEdit(self.search_widget)
|
self.search_text_edit = SearchEdit(self.search_widget, self.settings_section)
|
||||||
self.search_text_edit.setObjectName('search_text_edit')
|
self.search_text_edit.setObjectName('search_text_edit')
|
||||||
self.search_text_label.setBuddy(self.search_text_edit)
|
self.search_text_label.setBuddy(self.search_text_edit)
|
||||||
self.search_text_layout.addRow(self.search_text_label, self.search_text_edit)
|
self.search_text_layout.addRow(self.search_text_label, self.search_text_edit)
|
||||||
|
@ -26,6 +26,7 @@ from PyQt5 import QtCore, QtWidgets
|
|||||||
|
|
||||||
from openlp.core.lib import build_icon
|
from openlp.core.lib import build_icon
|
||||||
from openlp.core.lib.ui import create_widget_action
|
from openlp.core.lib.ui import create_widget_action
|
||||||
|
from openlp.core.common import Settings
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -37,11 +38,12 @@ class SearchEdit(QtWidgets.QLineEdit):
|
|||||||
searchTypeChanged = QtCore.pyqtSignal(QtCore.QVariant)
|
searchTypeChanged = QtCore.pyqtSignal(QtCore.QVariant)
|
||||||
cleared = QtCore.pyqtSignal()
|
cleared = QtCore.pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent, settings_section):
|
||||||
"""
|
"""
|
||||||
Constructor.
|
Constructor.
|
||||||
"""
|
"""
|
||||||
super(SearchEdit, self).__init__(parent)
|
super().__init__(parent)
|
||||||
|
self.settings_section = settings_section
|
||||||
self._current_search_type = -1
|
self._current_search_type = -1
|
||||||
self.clear_button = QtWidgets.QToolButton(self)
|
self.clear_button = QtWidgets.QToolButton(self)
|
||||||
self.clear_button.setIcon(build_icon(':/system/clear_shortcut.png'))
|
self.clear_button.setIcon(build_icon(':/system/clear_shortcut.png'))
|
||||||
@ -100,14 +102,10 @@ class SearchEdit(QtWidgets.QLineEdit):
|
|||||||
menu = self.menu_button.menu()
|
menu = self.menu_button.menu()
|
||||||
for action in menu.actions():
|
for action in menu.actions():
|
||||||
if identifier == action.data():
|
if identifier == action.data():
|
||||||
# setPlaceholderText has been implemented in Qt 4.7 and in at least PyQt 4.9 (I am not sure, if it was
|
self.setPlaceholderText(action.placeholder_text)
|
||||||
# implemented in PyQt 4.8).
|
|
||||||
try:
|
|
||||||
self.setPlaceholderText(action.placeholder_text)
|
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
self.menu_button.setDefaultAction(action)
|
self.menu_button.setDefaultAction(action)
|
||||||
self._current_search_type = identifier
|
self._current_search_type = identifier
|
||||||
|
Settings().setValue('{section}/last search type'.format(section=self.settings_section), identifier)
|
||||||
self.searchTypeChanged.emit(identifier)
|
self.searchTypeChanged.emit(identifier)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -130,14 +128,10 @@ class SearchEdit(QtWidgets.QLineEdit):
|
|||||||
(2, ":/songs/authors.png", "Authors", "Search Authors...")
|
(2, ":/songs/authors.png", "Authors", "Search Authors...")
|
||||||
"""
|
"""
|
||||||
menu = QtWidgets.QMenu(self)
|
menu = QtWidgets.QMenu(self)
|
||||||
first = None
|
|
||||||
for identifier, icon, title, placeholder in items:
|
for identifier, icon, title, placeholder in items:
|
||||||
action = create_widget_action(
|
action = create_widget_action(
|
||||||
menu, text=title, icon=icon, data=identifier, triggers=self._on_menu_action_triggered)
|
menu, text=title, icon=icon, data=identifier, triggers=self._on_menu_action_triggered)
|
||||||
action.placeholder_text = placeholder
|
action.placeholder_text = placeholder
|
||||||
if first is None:
|
|
||||||
first = action
|
|
||||||
self._current_search_type = identifier
|
|
||||||
if not hasattr(self, 'menu_button'):
|
if not hasattr(self, 'menu_button'):
|
||||||
self.menu_button = QtWidgets.QToolButton(self)
|
self.menu_button = QtWidgets.QToolButton(self)
|
||||||
self.menu_button.setIcon(build_icon(':/system/clear_shortcut.png'))
|
self.menu_button.setIcon(build_icon(':/system/clear_shortcut.png'))
|
||||||
@ -146,7 +140,8 @@ class SearchEdit(QtWidgets.QLineEdit):
|
|||||||
self.menu_button.setStyleSheet('QToolButton { border: none; padding: 0px 10px 0px 0px; }')
|
self.menu_button.setStyleSheet('QToolButton { border: none; padding: 0px 10px 0px 0px; }')
|
||||||
self.menu_button.resize(QtCore.QSize(28, 18))
|
self.menu_button.resize(QtCore.QSize(28, 18))
|
||||||
self.menu_button.setMenu(menu)
|
self.menu_button.setMenu(menu)
|
||||||
self.menu_button.setDefaultAction(first)
|
self.set_current_search_type(
|
||||||
|
Settings().value('{section}/last search type'.format(section=self.settings_section)))
|
||||||
self.menu_button.show()
|
self.menu_button.show()
|
||||||
self._update_style_sheet()
|
self._update_style_sheet()
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.quick_search_label = QtWidgets.QLabel(self.quickTab)
|
self.quick_search_label = QtWidgets.QLabel(self.quickTab)
|
||||||
self.quick_search_label.setObjectName('quick_search_label')
|
self.quick_search_label.setObjectName('quick_search_label')
|
||||||
self.quickLayout.addWidget(self.quick_search_label, 0, 0, QtCore.Qt.AlignRight)
|
self.quickLayout.addWidget(self.quick_search_label, 0, 0, QtCore.Qt.AlignRight)
|
||||||
self.quick_search_edit = SearchEdit(self.quickTab)
|
self.quick_search_edit = SearchEdit(self.quickTab, self.settings_section)
|
||||||
self.quick_search_edit.setSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Fixed)
|
self.quick_search_edit.setSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Fixed)
|
||||||
self.quick_search_edit.setObjectName('quick_search_edit')
|
self.quick_search_edit.setObjectName('quick_search_edit')
|
||||||
self.quick_search_label.setBuddy(self.quick_search_edit)
|
self.quick_search_label.setBuddy(self.quick_search_edit)
|
||||||
@ -333,8 +333,8 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
translate('BiblesPlugin.MediaItem', 'Text Search'),
|
translate('BiblesPlugin.MediaItem', 'Text Search'),
|
||||||
translate('BiblesPlugin.MediaItem', 'Search Text...'))
|
translate('BiblesPlugin.MediaItem', 'Search Text...'))
|
||||||
])
|
])
|
||||||
text = self.settings_section
|
if Settings().value(self.settings_section + '/reset to combined quick search'):
|
||||||
self.quick_search_edit.set_current_search_type(Settings().value('{text}/last search type'.format(text=text)))
|
self.quick_search_edit.set_current_search_type(BibleSearch.Combined)
|
||||||
self.config_update()
|
self.config_update()
|
||||||
log.debug('bible manager initialise complete')
|
log.debug('bible manager initialise complete')
|
||||||
|
|
||||||
@ -444,15 +444,7 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
only updated when we are doing reference or combined search, in text search the completion list is removed.
|
only updated when we are doing reference or combined search, in text search the completion list is removed.
|
||||||
"""
|
"""
|
||||||
log.debug('update_auto_completer')
|
log.debug('update_auto_completer')
|
||||||
# Save the current search type to the configuration. If setting for automatically resetting the search type to
|
# TODO: Move this else where?
|
||||||
# Combined is enabled, use that otherwise use the currently selected search type.
|
|
||||||
# Note: This setting requires a restart to take effect.
|
|
||||||
if Settings().value(self.settings_section + '/reset to combined quick search'):
|
|
||||||
Settings().setValue('{section}/last search type'.format(section=self.settings_section),
|
|
||||||
BibleSearch.Combined)
|
|
||||||
else:
|
|
||||||
Settings().setValue('{section}/last search type'.format(section=self.settings_section),
|
|
||||||
self.quick_search_edit.current_search_type())
|
|
||||||
# Save the current bible to the configuration.
|
# Save the current bible to the configuration.
|
||||||
Settings().setValue('{section}/quick bible'.format(section=self.settings_section),
|
Settings().setValue('{section}/quick bible'.format(section=self.settings_section),
|
||||||
self.quickVersionComboBox.currentText())
|
self.quickVersionComboBox.currentText())
|
||||||
|
@ -105,8 +105,6 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
[(CustomSearch.Titles, ':/songs/song_search_title.png', translate('SongsPlugin.MediaItem', 'Titles'),
|
[(CustomSearch.Titles, ':/songs/song_search_title.png', translate('SongsPlugin.MediaItem', 'Titles'),
|
||||||
translate('SongsPlugin.MediaItem', 'Search Titles...')),
|
translate('SongsPlugin.MediaItem', 'Search Titles...')),
|
||||||
(CustomSearch.Themes, ':/slides/slide_theme.png', UiStrings().Themes, UiStrings().SearchThemes)])
|
(CustomSearch.Themes, ':/slides/slide_theme.png', UiStrings().Themes, UiStrings().SearchThemes)])
|
||||||
text = '{section}/last search type'.format(section=self.settings_section)
|
|
||||||
self.search_text_edit.set_current_search_type(Settings().value(text))
|
|
||||||
self.load_list(self.plugin.db_manager.get_all_objects(CustomSlide, order_by_ref=CustomSlide.title))
|
self.load_list(self.plugin.db_manager.get_all_objects(CustomSlide, order_by_ref=CustomSlide.title))
|
||||||
self.config_update()
|
self.config_update()
|
||||||
|
|
||||||
@ -250,9 +248,6 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
"""
|
"""
|
||||||
Search the plugin database
|
Search the plugin database
|
||||||
"""
|
"""
|
||||||
# Save the current search type to the configuration.
|
|
||||||
Settings().setValue('{section}/last search type'.format(section=self.settings_section),
|
|
||||||
self.search_text_edit.current_search_type())
|
|
||||||
# Reload the list considering the new search type.
|
# Reload the list considering the new search type.
|
||||||
search_type = self.search_text_edit.current_search_type()
|
search_type = self.search_text_edit.current_search_type()
|
||||||
search_keywords = '%{search}%'.format(search=self.whitespace.sub(' ', self.search_text_edit.displayText()))
|
search_keywords = '%{search}%'.format(search=self.whitespace.sub(' ', self.search_text_edit.displayText()))
|
||||||
|
@ -166,14 +166,9 @@ class SongMediaItem(MediaManagerItem):
|
|||||||
translate('SongsPlugin.MediaItem', 'CCLI number'),
|
translate('SongsPlugin.MediaItem', 'CCLI number'),
|
||||||
translate('SongsPlugin.MediaItem', 'Search CCLI number...'))
|
translate('SongsPlugin.MediaItem', 'Search CCLI number...'))
|
||||||
])
|
])
|
||||||
self.search_text_edit.set_current_search_type(
|
|
||||||
Settings().value('{section}/last search type'.format(section=self.settings_section)))
|
|
||||||
self.config_update()
|
self.config_update()
|
||||||
|
|
||||||
def on_search_text_button_clicked(self):
|
def on_search_text_button_clicked(self):
|
||||||
# Save the current search type to the configuration.
|
|
||||||
Settings().setValue('{section}/last search type'.format(section=self.settings_section),
|
|
||||||
self.search_text_edit.current_search_type())
|
|
||||||
# Reload the list considering the new search type.
|
# Reload the list considering the new search type.
|
||||||
search_keywords = str(self.search_text_edit.displayText())
|
search_keywords = str(self.search_text_edit.displayText())
|
||||||
search_type = self.search_text_edit.current_search_type()
|
search_type = self.search_text_edit.current_search_type()
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
Module to test the EditCustomForm.
|
Module to test the EditCustomForm.
|
||||||
"""
|
"""
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
from unittest.mock import MagicMock, call, patch
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtGui, QtTest, QtWidgets
|
from PyQt5 import QtCore, QtGui, QtTest, QtWidgets
|
||||||
|
|
||||||
@ -58,7 +59,12 @@ class TestSearchEdit(TestCase, TestMixin):
|
|||||||
self.main_window = QtWidgets.QMainWindow()
|
self.main_window = QtWidgets.QMainWindow()
|
||||||
Registry().register('main_window', self.main_window)
|
Registry().register('main_window', self.main_window)
|
||||||
|
|
||||||
self.search_edit = SearchEdit(self.main_window)
|
settings_patcher = patch(
|
||||||
|
'openlp.core.lib.searchedit.Settings', return_value=MagicMock(**{'value.return_value': SearchTypes.First}))
|
||||||
|
self.addCleanup(settings_patcher.stop)
|
||||||
|
self.mocked_settings = settings_patcher.start()
|
||||||
|
|
||||||
|
self.search_edit = SearchEdit(self.main_window,'settings_section')
|
||||||
# To complete set up we have to set the search types.
|
# To complete set up we have to set the search types.
|
||||||
self.search_edit.set_search_types(SEARCH_TYPES)
|
self.search_edit.set_search_types(SEARCH_TYPES)
|
||||||
|
|
||||||
@ -78,8 +84,11 @@ class TestSearchEdit(TestCase, TestMixin):
|
|||||||
|
|
||||||
# WHEN:
|
# WHEN:
|
||||||
|
|
||||||
# THEN: The first search type should be the first one in the list.
|
# THEN: The first search type should be the first one in the list. The selected type should be saved in the
|
||||||
assert self.search_edit.current_search_type() == SearchTypes.First, "The first search type should be selected."
|
# settings
|
||||||
|
self.assertEqual(self.search_edit.current_search_type(), SearchTypes.First,
|
||||||
|
"The first search type should be selected.")
|
||||||
|
self.mocked_settings().setValue.assert_called_once_with('settings_section/last search type', 0)
|
||||||
|
|
||||||
def test_set_current_search_type(self):
|
def test_set_current_search_type(self):
|
||||||
"""
|
"""
|
||||||
@ -90,11 +99,13 @@ class TestSearchEdit(TestCase, TestMixin):
|
|||||||
result = self.search_edit.set_current_search_type(SearchTypes.Second)
|
result = self.search_edit.set_current_search_type(SearchTypes.Second)
|
||||||
|
|
||||||
# THEN:
|
# THEN:
|
||||||
assert result, "The call should return success (True)."
|
self.assertTrue(result, "The call should return success (True).")
|
||||||
assert self.search_edit.current_search_type() == SearchTypes.Second,\
|
self.assertEqual(self.search_edit.current_search_type(), SearchTypes.Second,
|
||||||
"The search type should be SearchTypes.Second"
|
"The search type should be SearchTypes.Second")
|
||||||
assert self.search_edit.placeholderText() == SECOND_PLACEHOLDER_TEXT,\
|
self.assertEqual(self.search_edit.placeholderText(), SECOND_PLACEHOLDER_TEXT,
|
||||||
"The correct placeholder text should be 'Second Placeholder Text'."
|
"The correct placeholder text should be 'Second Placeholder Text'.")
|
||||||
|
self.mocked_settings().setValue.assert_has_calls(
|
||||||
|
[call('settings_section/last search type', 0), call('settings_section/last search type', 1)])
|
||||||
|
|
||||||
def test_clear_button_visibility(self):
|
def test_clear_button_visibility(self):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user