forked from openlp/openlp
Mediamanageritem converted
This commit is contained in:
parent
f99e22fd4a
commit
90ac714c0d
@ -54,7 +54,7 @@ class ListWidgetWithDnD(QtGui.QListWidget):
|
||||
"""
|
||||
self.setAcceptDrops(True)
|
||||
self.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
|
||||
Registry().register_function((u'%s_dnd' % self.mimeDataText), self.parent().loadFile)
|
||||
Registry().register_function((u'%s_dnd' % self.mimeDataText), self.parent().load_file)
|
||||
|
||||
def mouseMoveEvent(self, event):
|
||||
"""
|
||||
|
@ -63,11 +63,11 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
|
||||
When creating a descendant class from this class for your plugin, the following member variables should be set.
|
||||
|
||||
``self.onNewPrompt``
|
||||
``self.on_new_prompt``
|
||||
|
||||
Defaults to *'Select Image(s)'*.
|
||||
|
||||
``self.onNewFileMasks``
|
||||
``self.on_new_file_masks``
|
||||
Defaults to *'Images (*.jpg *jpeg *.gif *.png *.bmp)'*. This assumes that the new action is to load a file. If
|
||||
not, you need to override the ``OnNew`` method.
|
||||
|
||||
@ -91,30 +91,30 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
Registry().register(self.plugin.name, self)
|
||||
self.settings_section = self.plugin.name
|
||||
self.toolbar = None
|
||||
self.remoteTriggered = None
|
||||
self.singleServiceItem = True
|
||||
self.quickPreviewAllowed = False
|
||||
self.remote_triggered = None
|
||||
self.single_service_item = True
|
||||
self.quick_preview_allowed = False
|
||||
self.hasSearch = False
|
||||
self.pageLayout = QtGui.QVBoxLayout(self)
|
||||
self.pageLayout.setSpacing(0)
|
||||
self.pageLayout.setMargin(0)
|
||||
self.requiredIcons()
|
||||
self.page_layout = QtGui.QVBoxLayout(self)
|
||||
self.page_layout.setSpacing(0)
|
||||
self.page_layout.setMargin(0)
|
||||
self.required_icons()
|
||||
self.setupUi()
|
||||
self.retranslateUi()
|
||||
self.autoSelectId = -1
|
||||
Registry().register_function(u'%s_service_load' % self.plugin.name, self.serviceLoad)
|
||||
Registry().register_function(u'%s_service_load' % self.plugin.name, self.service_load)
|
||||
|
||||
def requiredIcons(self):
|
||||
def required_icons(self):
|
||||
"""
|
||||
This method is called to define the icons for the plugin. It provides a default set and the plugin is able to
|
||||
override the if required.
|
||||
"""
|
||||
self.hasImportIcon = False
|
||||
self.hasNewIcon = True
|
||||
self.hasEditIcon = True
|
||||
self.hasFileIcon = False
|
||||
self.hasDeleteIcon = True
|
||||
self.addToServiceItem = False
|
||||
self.has_import_icon = False
|
||||
self.has_new_icon = True
|
||||
self.has_edit_icon = True
|
||||
self.has_file_icon = False
|
||||
self.has_delete_icon = True
|
||||
self.add_to_service_item = False
|
||||
|
||||
def retranslateUi(self):
|
||||
"""
|
||||
@ -123,13 +123,13 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
"""
|
||||
pass
|
||||
|
||||
def addToolbar(self):
|
||||
def add_toolbar(self):
|
||||
"""
|
||||
A method to help developers easily add a toolbar to the media manager item.
|
||||
"""
|
||||
if self.toolbar is None:
|
||||
self.toolbar = OpenLPToolbar(self)
|
||||
self.pageLayout.addWidget(self.toolbar)
|
||||
self.page_layout.addWidget(self.toolbar)
|
||||
|
||||
def setupUi(self):
|
||||
"""
|
||||
@ -137,45 +137,45 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
rest of the interface of the media manager item.
|
||||
"""
|
||||
# Add a toolbar
|
||||
self.addToolbar()
|
||||
self.add_toolbar()
|
||||
# Allow the plugin to define buttons at start of bar
|
||||
self.addStartHeaderBar()
|
||||
self.add_start_header_bar()
|
||||
# Add the middle of the tool bar (pre defined)
|
||||
self.addMiddleHeaderBar()
|
||||
self.add_middle_header_bar()
|
||||
# Allow the plugin to define buttons at end of bar
|
||||
self.addEndHeaderBar()
|
||||
self.add_end_header_bar()
|
||||
# Add the list view
|
||||
self.addListViewToToolBar()
|
||||
self.add_list_view_to_toolbar()
|
||||
|
||||
def addMiddleHeaderBar(self):
|
||||
def add_middle_header_bar(self):
|
||||
"""
|
||||
Create buttons for the media item toolbar
|
||||
"""
|
||||
toolbar_actions = []
|
||||
## Import Button ##
|
||||
if self.hasImportIcon:
|
||||
if self.has_import_icon:
|
||||
toolbar_actions.append([u'Import', StringContent.Import,
|
||||
u':/general/general_import.png', self.on_import_click])
|
||||
## Load Button ##
|
||||
if self.hasFileIcon:
|
||||
toolbar_actions.append([u'Load', StringContent.Load, u':/general/general_open.png', self.onFileClick])
|
||||
if self.has_file_icon:
|
||||
toolbar_actions.append([u'Load', StringContent.Load, u':/general/general_open.png', self.on_file_click])
|
||||
## New Button ##
|
||||
if self.hasNewIcon:
|
||||
toolbar_actions.append([u'New', StringContent.New, u':/general/general_new.png', self.onNewClick])
|
||||
if self.has_new_icon:
|
||||
toolbar_actions.append([u'New', StringContent.New, u':/general/general_new.png', self.on_new_click])
|
||||
## Edit Button ##
|
||||
if self.hasEditIcon:
|
||||
toolbar_actions.append([u'Edit', StringContent.Edit, u':/general/general_edit.png', self.onEditClick])
|
||||
if self.has_edit_icon:
|
||||
toolbar_actions.append([u'Edit', StringContent.Edit, u':/general/general_edit.png', self.on_edit_click])
|
||||
## Delete Button ##
|
||||
if self.hasDeleteIcon:
|
||||
if self.has_delete_icon:
|
||||
toolbar_actions.append([u'Delete', StringContent.Delete,
|
||||
u':/general/general_delete.png', self.onDeleteClick])
|
||||
u':/general/general_delete.png', self.on_delete_click])
|
||||
## Preview ##
|
||||
toolbar_actions.append([u'Preview', StringContent.Preview,
|
||||
u':/general/general_preview.png', self.onPreviewClick])
|
||||
u':/general/general_preview.png', self.on_preview_click])
|
||||
## Live Button ##
|
||||
toolbar_actions.append([u'Live', StringContent.Live, u':/general/general_live.png', self.onLiveClick])
|
||||
toolbar_actions.append([u'Live', StringContent.Live, u':/general/general_live.png', self.on_live_click])
|
||||
## Add to service Button ##
|
||||
toolbar_actions.append([u'Service', StringContent.Service, u':/general/general_add.png', self.onAddClick])
|
||||
toolbar_actions.append([u'Service', StringContent.Service, u':/general/general_add.png', self.on_add_click])
|
||||
for action in toolbar_actions:
|
||||
if action[0] == StringContent.Preview:
|
||||
self.toolbar.addSeparator()
|
||||
@ -184,96 +184,96 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
tooltip=self.plugin.get_string(action[1])[u'tooltip'],
|
||||
triggers=action[3])
|
||||
|
||||
def addListViewToToolBar(self):
|
||||
def add_list_view_to_toolbar(self):
|
||||
"""
|
||||
Creates the main widget for listing items the media item is tracking
|
||||
"""
|
||||
# Add the List widget
|
||||
self.listView = ListWidgetWithDnD(self, self.plugin.name)
|
||||
self.listView.setSpacing(1)
|
||||
self.listView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
|
||||
self.listView.setAlternatingRowColors(True)
|
||||
self.listView.setObjectName(u'%sListView' % self.plugin.name)
|
||||
# Add to pageLayout
|
||||
self.pageLayout.addWidget(self.listView)
|
||||
self.list_view = ListWidgetWithDnD(self, self.plugin.name)
|
||||
self.list_view.setSpacing(1)
|
||||
self.list_view.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
|
||||
self.list_view.setAlternatingRowColors(True)
|
||||
self.list_view.setObjectName(u'%sListView' % self.plugin.name)
|
||||
# Add to page_layout
|
||||
self.page_layout.addWidget(self.list_view)
|
||||
# define and add the context menu
|
||||
self.listView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||
if self.hasEditIcon:
|
||||
create_widget_action(self.listView,
|
||||
self.list_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||
if self.has_edit_icon:
|
||||
create_widget_action(self.list_view,
|
||||
text=self.plugin.get_string(StringContent.Edit)[u'title'],
|
||||
icon=u':/general/general_edit.png',
|
||||
triggers=self.onEditClick)
|
||||
create_widget_action(self.listView, separator=True)
|
||||
if self.hasDeleteIcon:
|
||||
create_widget_action(self.listView,
|
||||
triggers=self.on_edit_click)
|
||||
create_widget_action(self.list_view, separator=True)
|
||||
if self.has_delete_icon:
|
||||
create_widget_action(self.list_view,
|
||||
u'listView%s%sItem' % (self.plugin.name.title(), StringContent.Delete.title()),
|
||||
text=self.plugin.get_string(StringContent.Delete)[u'title'],
|
||||
icon=u':/general/general_delete.png',
|
||||
can_shortcuts=True, triggers=self.onDeleteClick)
|
||||
create_widget_action(self.listView, separator=True)
|
||||
create_widget_action(self.listView,
|
||||
can_shortcuts=True, triggers=self.on_delete_click)
|
||||
create_widget_action(self.list_view, separator=True)
|
||||
create_widget_action(self.list_view,
|
||||
u'listView%s%sItem' % (self.plugin.name.title(), StringContent.Preview.title()),
|
||||
text=self.plugin.get_string(StringContent.Preview)[u'title'],
|
||||
icon=u':/general/general_preview.png',
|
||||
can_shortcuts=True,
|
||||
triggers=self.onPreviewClick)
|
||||
create_widget_action(self.listView,
|
||||
triggers=self.on_preview_click)
|
||||
create_widget_action(self.list_view,
|
||||
u'listView%s%sItem' % (self.plugin.name.title(), StringContent.Live.title()),
|
||||
text=self.plugin.get_string(StringContent.Live)[u'title'],
|
||||
icon=u':/general/general_live.png',
|
||||
can_shortcuts=True,
|
||||
triggers=self.onLiveClick)
|
||||
create_widget_action(self.listView,
|
||||
triggers=self.on_live_click)
|
||||
create_widget_action(self.list_view,
|
||||
u'listView%s%sItem' % (self.plugin.name.title(), StringContent.Service.title()),
|
||||
can_shortcuts=True,
|
||||
text=self.plugin.get_string(StringContent.Service)[u'title'],
|
||||
icon=u':/general/general_add.png',
|
||||
triggers=self.onAddClick)
|
||||
if self.addToServiceItem:
|
||||
create_widget_action(self.listView, separator=True)
|
||||
create_widget_action(self.listView,
|
||||
triggers=self.on_add_click)
|
||||
if self.add_to_service_item:
|
||||
create_widget_action(self.list_view, separator=True)
|
||||
create_widget_action(self.list_view,
|
||||
text=translate('OpenLP.MediaManagerItem', '&Add to selected Service Item'),
|
||||
icon=u':/general/general_add.png',
|
||||
triggers=self.onAddEditClick)
|
||||
self.addCustomContextActions()
|
||||
# Create the context menu and add all actions from the listView.
|
||||
triggers=self.on_add_edit_click)
|
||||
self.add_custom_context_actions()
|
||||
# Create the context menu and add all actions from the list_view.
|
||||
self.menu = QtGui.QMenu()
|
||||
self.menu.addActions(self.listView.actions())
|
||||
self.listView.doubleClicked.connect(self.onDoubleClicked)
|
||||
self.listView.itemSelectionChanged.connect(self.onSelectionChange)
|
||||
self.listView.customContextMenuRequested.connect(self.contextMenu)
|
||||
self.menu.addActions(self.list_view.actions())
|
||||
self.list_view.doubleClicked.connect(self.on_double_clicked)
|
||||
self.list_view.itemSelectionChanged.connect(self.on_selection_change)
|
||||
self.list_view.customContextMenuRequested.connect(self.context_menu)
|
||||
|
||||
def addSearchToToolBar(self):
|
||||
def add_search_to_toolbar(self):
|
||||
"""
|
||||
Creates a search field with button and related signal handling.
|
||||
"""
|
||||
self.searchWidget = QtGui.QWidget(self)
|
||||
self.searchWidget.setObjectName(u'searchWidget')
|
||||
self.searchLayout = QtGui.QVBoxLayout(self.searchWidget)
|
||||
self.searchLayout.setObjectName(u'searchLayout')
|
||||
self.searchTextLayout = QtGui.QFormLayout()
|
||||
self.searchTextLayout.setObjectName(u'searchTextLayout')
|
||||
self.searchTextLabel = QtGui.QLabel(self.searchWidget)
|
||||
self.searchTextLabel.setObjectName(u'searchTextLabel')
|
||||
self.searchTextEdit = SearchEdit(self.searchWidget)
|
||||
self.searchTextEdit.setObjectName(u'searchTextEdit')
|
||||
self.searchTextLabel.setBuddy(self.searchTextEdit)
|
||||
self.searchTextLayout.addRow(self.searchTextLabel, self.searchTextEdit)
|
||||
self.searchLayout.addLayout(self.searchTextLayout)
|
||||
self.searchButtonLayout = QtGui.QHBoxLayout()
|
||||
self.searchButtonLayout.setObjectName(u'searchButtonLayout')
|
||||
self.searchButtonLayout.addStretch()
|
||||
self.searchTextButton = QtGui.QPushButton(self.searchWidget)
|
||||
self.searchTextButton.setObjectName(u'searchTextButton')
|
||||
self.searchButtonLayout.addWidget(self.searchTextButton)
|
||||
self.searchLayout.addLayout(self.searchButtonLayout)
|
||||
self.pageLayout.addWidget(self.searchWidget)
|
||||
self.search_widget = QtGui.QWidget(self)
|
||||
self.search_widget.setObjectName(u'search_widget')
|
||||
self.search_layout = QtGui.QVBoxLayout(self.search_widget)
|
||||
self.search_layout.setObjectName(u'search_layout')
|
||||
self.search_text_layout = QtGui.QFormLayout()
|
||||
self.search_text_layout.setObjectName(u'search_text_layout')
|
||||
self.search_text_label = QtGui.QLabel(self.search_widget)
|
||||
self.search_text_label.setObjectName(u'search_text_label')
|
||||
self.search_text_edit = SearchEdit(self.search_widget)
|
||||
self.search_text_edit.setObjectName(u'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_layout.addLayout(self.search_text_layout)
|
||||
self.search_button_layout = QtGui.QHBoxLayout()
|
||||
self.search_button_layout.setObjectName(u'search_button_layout')
|
||||
self.search_button_layout.addStretch()
|
||||
self.search_text_button = QtGui.QPushButton(self.search_widget)
|
||||
self.search_text_button.setObjectName(u'search_text_button')
|
||||
self.search_button_layout.addWidget(self.search_text_button)
|
||||
self.search_layout.addLayout(self.search_button_layout)
|
||||
self.page_layout.addWidget(self.search_widget)
|
||||
# Signals and slots
|
||||
self.searchTextEdit.returnPressed.connect(self.onSearchTextButtonClicked)
|
||||
self.searchTextButton.clicked.connect(self.onSearchTextButtonClicked)
|
||||
self.searchTextEdit.textChanged.connect(self.onSearchTextEditChanged)
|
||||
self.search_text_edit.returnPressed.connect(self.on_search_text_button_clicked)
|
||||
self.search_text_button.clicked.connect(self.on_search_text_button_clicked)
|
||||
self.search_text_edit.textChanged.connect(self.on_search_text_edit_changed)
|
||||
|
||||
def addCustomContextActions(self):
|
||||
def add_custom_context_actions(self):
|
||||
"""
|
||||
Implement this method in your descendent media manager item to
|
||||
add any context menu items. This method is called automatically.
|
||||
@ -287,31 +287,31 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
"""
|
||||
pass
|
||||
|
||||
def addStartHeaderBar(self):
|
||||
def add_start_header_bar(self):
|
||||
"""
|
||||
Slot at start of toolbar for plugin to addwidgets
|
||||
"""
|
||||
pass
|
||||
|
||||
def addEndHeaderBar(self):
|
||||
def add_end_header_bar(self):
|
||||
"""
|
||||
Slot at end of toolbar for plugin to add widgets
|
||||
"""
|
||||
pass
|
||||
|
||||
def onFileClick(self):
|
||||
def on_file_click(self):
|
||||
"""
|
||||
Add a file to the list widget to make it available for showing
|
||||
"""
|
||||
files = QtGui.QFileDialog.getOpenFileNames(self, self.onNewPrompt,
|
||||
Settings().value(self.settings_section + u'/last directory'), self.onNewFileMasks)
|
||||
files = QtGui.QFileDialog.getOpenFileNames(self, self.on_new_prompt,
|
||||
Settings().value(self.settings_section + u'/last directory'), self.on_new_file_masks)
|
||||
log.info(u'New files(s) %s', files)
|
||||
if files:
|
||||
self.application.set_busy_cursor()
|
||||
self.validateAndLoad(files)
|
||||
self.validate_and_load(files)
|
||||
self.application.set_normal_cursor()
|
||||
|
||||
def loadFile(self, data):
|
||||
def load_file(self, data):
|
||||
"""
|
||||
Turn file from Drag and Drop into an array so the Validate code can run it.
|
||||
|
||||
@ -322,7 +322,7 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
error_shown = False
|
||||
for file_name in data['files']:
|
||||
file_type = file_name.split(u'.')[-1]
|
||||
if file_type.lower() not in self.onNewFileMasks:
|
||||
if file_type.lower() not in self.on_new_file_masks:
|
||||
if not error_shown:
|
||||
critical_error_message_box(translate('OpenLP.MediaManagerItem', 'Invalid File Type'),
|
||||
translate('OpenLP.MediaManagerItem', 'Invalid File %s.\nSuffix not supported') % file_name)
|
||||
@ -330,7 +330,7 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
else:
|
||||
new_files.append(file_name)
|
||||
if new_files:
|
||||
self.validateAndLoad(new_files, data['target'])
|
||||
self.validate_and_load(new_files, data['target'])
|
||||
|
||||
def dnd_move_internal(self, target):
|
||||
"""
|
||||
@ -341,7 +341,7 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
"""
|
||||
pass
|
||||
|
||||
def validateAndLoad(self, files, target_group=None):
|
||||
def validate_and_load(self, files, target_group=None):
|
||||
"""
|
||||
Process a list for files either from the File Dialog or from Drag and
|
||||
Drop
|
||||
@ -354,9 +354,9 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
"""
|
||||
names = []
|
||||
full_list = []
|
||||
for count in range(self.listView.count()):
|
||||
names.append(self.listView.item(count).text())
|
||||
full_list.append(self.listView.item(count).data(QtCore.Qt.UserRole))
|
||||
for count in range(self.list_view.count()):
|
||||
names.append(self.list_view.item(count).text())
|
||||
full_list.append(self.list_view.item(count).data(QtCore.Qt.UserRole))
|
||||
duplicates_found = False
|
||||
files_added = False
|
||||
for file_path in files:
|
||||
@ -368,61 +368,61 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
full_list.append(filename)
|
||||
if full_list and files_added:
|
||||
if target_group is None:
|
||||
self.listView.clear()
|
||||
self.loadList(full_list, target_group)
|
||||
self.list_view.clear()
|
||||
self.load_list(full_list, target_group)
|
||||
last_dir = os.path.split(unicode(files[0]))[0]
|
||||
Settings().setValue(self.settings_section + u'/last directory', last_dir)
|
||||
Settings().setValue(u'%s/%s files' % (self.settings_section, self.settings_section), self.getFileList())
|
||||
Settings().setValue(u'%s/%s files' % (self.settings_section, self.settings_section), self.get_file_list())
|
||||
if duplicates_found:
|
||||
critical_error_message_box(UiStrings().Duplicate,
|
||||
translate('OpenLP.MediaManagerItem', 'Duplicate files were found on import and were ignored.'))
|
||||
|
||||
def contextMenu(self, point):
|
||||
def context_menu(self, point):
|
||||
"""
|
||||
Display a context menu
|
||||
"""
|
||||
item = self.listView.itemAt(point)
|
||||
item = self.list_view.itemAt(point)
|
||||
# Decide if we have to show the context menu or not.
|
||||
if item is None:
|
||||
return
|
||||
if not item.flags() & QtCore.Qt.ItemIsSelectable:
|
||||
return
|
||||
self.menu.exec_(self.listView.mapToGlobal(point))
|
||||
self.menu.exec_(self.list_view.mapToGlobal(point))
|
||||
|
||||
def getFileList(self):
|
||||
def get_file_list(self):
|
||||
"""
|
||||
Return the current list of files
|
||||
"""
|
||||
file_list = []
|
||||
for index in xrange(self.listView.count()):
|
||||
bitem = self.listView.item(index)
|
||||
for index in xrange(self.list_view.count()):
|
||||
bitem = self.list_view.item(index)
|
||||
filename = bitem.data(QtCore.Qt.UserRole)
|
||||
file_list.append(filename)
|
||||
return file_list
|
||||
|
||||
def loadList(self, list, target_group):
|
||||
def load_list(self, list, target_group):
|
||||
"""
|
||||
Load a list. Needs to be implemented by the plugin.
|
||||
"""
|
||||
raise NotImplementedError(u'MediaManagerItem.loadList needs to be defined by the plugin')
|
||||
|
||||
def onNewClick(self):
|
||||
def on_new_click(self):
|
||||
"""
|
||||
Hook for plugins to define behaviour for adding new items.
|
||||
"""
|
||||
pass
|
||||
|
||||
def onEditClick(self):
|
||||
def on_edit_click(self):
|
||||
"""
|
||||
Hook for plugins to define behaviour for editing items.
|
||||
"""
|
||||
pass
|
||||
|
||||
def onDeleteClick(self):
|
||||
def on_delete_click(self):
|
||||
"""
|
||||
Delete an item. Needs to be implemented by the plugin.
|
||||
"""
|
||||
raise NotImplementedError(u'MediaManagerItem.onDeleteClick needs to be defined by the plugin')
|
||||
raise NotImplementedError(u'MediaManagerItem.on_delete_click needs to be defined by the plugin')
|
||||
|
||||
def onFocus(self):
|
||||
"""
|
||||
@ -431,65 +431,65 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
"""
|
||||
pass
|
||||
|
||||
def generateSlideData(self, service_item, item=None, xml_version=False, remote=False,
|
||||
def generate_slide_data(self, service_item, item=None, xml_version=False, remote=False,
|
||||
context=ServiceItemContext.Live):
|
||||
"""
|
||||
Generate the slide data. Needs to be implemented by the plugin.
|
||||
"""
|
||||
raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin')
|
||||
raise NotImplementedError(u'MediaManagerItem.generate_slide_data needs to be defined by the plugin')
|
||||
|
||||
def onDoubleClicked(self):
|
||||
def on_double_clicked(self):
|
||||
"""
|
||||
Allows the list click action to be determined dynamically
|
||||
"""
|
||||
if Settings().value(u'advanced/double click live'):
|
||||
self.onLiveClick()
|
||||
self.on_live_click()
|
||||
else:
|
||||
self.onPreviewClick()
|
||||
self.on_preview_click()
|
||||
|
||||
def onSelectionChange(self):
|
||||
def on_selection_change(self):
|
||||
"""
|
||||
Allows the change of current item in the list to be actioned
|
||||
"""
|
||||
if Settings().value(u'advanced/single click preview') and self.quickPreviewAllowed \
|
||||
and self.listView.selectedIndexes() and self.autoSelectId == -1:
|
||||
self.onPreviewClick(True)
|
||||
if Settings().value(u'advanced/single click preview') and self.quick_preview_allowed \
|
||||
and self.list_view.selectedIndexes() and self.autoSelectId == -1:
|
||||
self.on_preview_click(True)
|
||||
|
||||
def onPreviewClick(self, keepFocus=False):
|
||||
def on_preview_click(self, keepFocus=False):
|
||||
"""
|
||||
Preview an item by building a service item then adding that service item to the preview slide controller.
|
||||
"""
|
||||
if not self.listView.selectedIndexes() and not self.remoteTriggered:
|
||||
if not self.list_view.selectedIndexes() and not self.remote_triggered:
|
||||
QtGui.QMessageBox.information(self, UiStrings().NISp,
|
||||
translate('OpenLP.MediaManagerItem', 'You must select one or more items to preview.'))
|
||||
else:
|
||||
log.debug(u'%s Preview requested', self.plugin.name)
|
||||
service_item = self.buildServiceItem()
|
||||
service_item = self.build_service_item()
|
||||
if service_item:
|
||||
service_item.from_plugin = True
|
||||
self.preview_controller.add_service_item(service_item)
|
||||
if keepFocus:
|
||||
self.listView.setFocus()
|
||||
self.list_view.setFocus()
|
||||
|
||||
def onLiveClick(self):
|
||||
def on_live_click(self):
|
||||
"""
|
||||
Send an item live by building a service item then adding that service item to the live slide controller.
|
||||
"""
|
||||
if not self.listView.selectedIndexes():
|
||||
if not self.list_view.selectedIndexes():
|
||||
QtGui.QMessageBox.information(self, UiStrings().NISp,
|
||||
translate('OpenLP.MediaManagerItem', 'You must select one or more items to send live.'))
|
||||
else:
|
||||
self.goLive()
|
||||
self.go_live()
|
||||
|
||||
def goLive(self, item_id=None, remote=False):
|
||||
def go_live(self, item_id=None, remote=False):
|
||||
"""
|
||||
Make the currently selected item go live.
|
||||
"""
|
||||
log.debug(u'%s Live requested', self.plugin.name)
|
||||
item = None
|
||||
if item_id:
|
||||
item = self.createItemFromId(item_id)
|
||||
service_item = self.buildServiceItem(item, remote=remote)
|
||||
item = self.create_item_from_id(item_id)
|
||||
service_item = self.build_service_item(item, remote=remote)
|
||||
if service_item:
|
||||
if not item_id:
|
||||
service_item.from_plugin = True
|
||||
@ -497,7 +497,7 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
service_item.will_auto_start = True
|
||||
self.live_controller.add_service_item(service_item)
|
||||
|
||||
def createItemFromId(self, item_id):
|
||||
def create_item_from_id(self, item_id):
|
||||
"""
|
||||
Create a media item from an item id.
|
||||
"""
|
||||
@ -505,38 +505,38 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
item.setData(QtCore.Qt.UserRole, item_id)
|
||||
return item
|
||||
|
||||
def onAddClick(self):
|
||||
def on_add_click(self):
|
||||
"""
|
||||
Add a selected item to the current service
|
||||
"""
|
||||
if not self.listView.selectedIndexes():
|
||||
if not self.list_view.selectedIndexes():
|
||||
QtGui.QMessageBox.information(self, UiStrings().NISp,
|
||||
translate('OpenLP.MediaManagerItem', 'You must select one or more items to add.'))
|
||||
else:
|
||||
# Is it possible to process multiple list items to generate
|
||||
# multiple service items?
|
||||
if self.singleServiceItem:
|
||||
if self.single_service_item:
|
||||
log.debug(u'%s Add requested', self.plugin.name)
|
||||
self.addToService(replace=self.remoteTriggered)
|
||||
self.add_to_service(replace=self.remote_triggered)
|
||||
else:
|
||||
items = self.listView.selectedIndexes()
|
||||
items = self.list_view.selectedIndexes()
|
||||
for item in items:
|
||||
self.addToService(item)
|
||||
self.add_to_service(item)
|
||||
|
||||
def addToService(self, item=None, replace=None, remote=False):
|
||||
def add_to_service(self, item=None, replace=None, remote=False):
|
||||
"""
|
||||
Add this item to the current service.
|
||||
"""
|
||||
service_item = self.buildServiceItem(item, True, remote=remote, context=ServiceItemContext.Service)
|
||||
service_item = self.build_service_item(item, True, remote=remote, context=ServiceItemContext.Service)
|
||||
if service_item:
|
||||
service_item.from_plugin = False
|
||||
self.service_manager.add_service_item(service_item, replace=replace)
|
||||
|
||||
def onAddEditClick(self):
|
||||
def on_add_edit_click(self):
|
||||
"""
|
||||
Add a selected item to an existing item in the current service.
|
||||
"""
|
||||
if not self.listView.selectedIndexes() and not self.remoteTriggered:
|
||||
if not self.list_view.selectedIndexes() and not self.remote_triggered:
|
||||
QtGui.QMessageBox.information(self, UiStrings().NISp,
|
||||
translate('OpenLP.MediaManagerItem', 'You must select one or more items.'))
|
||||
else:
|
||||
@ -546,36 +546,36 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
QtGui.QMessageBox.information(self, UiStrings().NISs,
|
||||
translate('OpenLP.MediaManagerItem', 'You must select an existing service item to add to.'))
|
||||
elif self.plugin.name == service_item.name:
|
||||
self.generateSlideData(service_item)
|
||||
self.generate_slide_data(service_item)
|
||||
self.service_manager.add_service_item(service_item, replace=True)
|
||||
else:
|
||||
# Turn off the remote edit update message indicator
|
||||
QtGui.QMessageBox.information(self, translate('OpenLP.MediaManagerItem', 'Invalid Service Item'),
|
||||
translate('OpenLP.MediaManagerItem', 'You must select a %s service item.') % self.title)
|
||||
|
||||
def buildServiceItem(self, item=None, xmlVersion=False, remote=False, context=ServiceItemContext.Live):
|
||||
def build_service_item(self, item=None, xmlVersion=False, remote=False, context=ServiceItemContext.Live):
|
||||
"""
|
||||
Common method for generating a service item
|
||||
"""
|
||||
service_item = ServiceItem(self.plugin)
|
||||
service_item.add_icon(self.plugin.icon_path)
|
||||
if self.generateSlideData(service_item, item, xmlVersion, remote, context):
|
||||
if self.generate_slide_data(service_item, item, xmlVersion, remote, context):
|
||||
return service_item
|
||||
else:
|
||||
return None
|
||||
|
||||
def serviceLoad(self, message):
|
||||
def service_load(self, message):
|
||||
"""
|
||||
Method to add processing when a service has been loaded and individual service items need to be processed by the
|
||||
plugins.
|
||||
"""
|
||||
pass
|
||||
|
||||
def checkSearchResult(self):
|
||||
def check_search_result(self):
|
||||
"""
|
||||
Checks if the listView is empty and adds a "No Search Results" item.
|
||||
Checks if the list_view is empty and adds a "No Search Results" item.
|
||||
"""
|
||||
if self.listView.count():
|
||||
if self.list_view.count():
|
||||
return
|
||||
message = translate('OpenLP.MediaManagerItem', 'No Search Results')
|
||||
item = QtGui.QListWidgetItem(message)
|
||||
@ -583,9 +583,9 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
font = QtGui.QFont()
|
||||
font.setItalic(True)
|
||||
item.setFont(font)
|
||||
self.listView.addItem(item)
|
||||
self.list_view.addItem(item)
|
||||
|
||||
def _getIdOfItemToGenerate(self, item, remoteItem):
|
||||
def _get_id_of_item_to_generate(self, item, remoteItem):
|
||||
"""
|
||||
Utility method to check items being submitted for slide generation.
|
||||
|
||||
@ -596,8 +596,8 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
The id to assign if the slide generation was remotely triggered.
|
||||
"""
|
||||
if item is None:
|
||||
if self.remoteTriggered is None:
|
||||
item = self.listView.currentItem()
|
||||
if self.remote_triggered is None:
|
||||
item = self.list_view.currentItem()
|
||||
if item is None:
|
||||
return False
|
||||
item_id = item.data(QtCore.Qt.UserRole)
|
||||
@ -607,13 +607,13 @@ class MediaManagerItem(QtGui.QWidget):
|
||||
item_id = item.data(QtCore.Qt.UserRole)
|
||||
return item_id
|
||||
|
||||
def saveAutoSelectId(self):
|
||||
def save_auto_select_id(self):
|
||||
"""
|
||||
Sorts out, what item to select after loading a list.
|
||||
"""
|
||||
# The item to select has not been set.
|
||||
if self.autoSelectId == -1:
|
||||
item = self.listView.currentItem()
|
||||
item = self.list_view.currentItem()
|
||||
if item:
|
||||
self.autoSelectId = item.data(QtCore.Qt.UserRole)
|
||||
|
||||
|
@ -276,9 +276,9 @@ class Plugin(QtCore.QObject):
|
||||
"""
|
||||
log.debug(u'process_add_service_event event called for plugin %s' % self.name)
|
||||
if replace:
|
||||
self.media_item.onAddEditClick()
|
||||
self.media_item.on_add_edit_click()
|
||||
else:
|
||||
self.media_item.onAddClick()
|
||||
self.media_item.on_add_click()
|
||||
|
||||
def about(self):
|
||||
"""
|
||||
|
@ -59,7 +59,7 @@ class TreeWidgetWithDnD(QtGui.QTreeWidget):
|
||||
"""
|
||||
self.setAcceptDrops(True)
|
||||
self.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
|
||||
Registry().register_function((u'%s_dnd' % self.mimeDataText), self.parent().loadFile)
|
||||
Registry().register_function((u'%s_dnd' % self.mimeDataText), self.parent().load_file)
|
||||
Registry().register_function((u'%s_dnd_internal' % self.mimeDataText), self.parent().dnd_move_internal)
|
||||
|
||||
def mouseMoveEvent(self, event):
|
||||
|
@ -66,21 +66,21 @@ class BibleMediaItem(MediaManagerItem):
|
||||
MediaManagerItem.__init__(self, parent, plugin)
|
||||
# Place to store the search results for both bibles.
|
||||
self.settings = self.plugin.settings_tab
|
||||
self.quickPreviewAllowed = True
|
||||
self.quick_preview_allowed = True
|
||||
self.hasSearch = True
|
||||
self.search_results = {}
|
||||
self.second_search_results = {}
|
||||
self.checkSearchResult()
|
||||
self.check_search_result()
|
||||
Registry().register_function(u'bibles_load_list', self.reload_bibles)
|
||||
|
||||
def __checkSecondBible(self, bible, second_bible):
|
||||
"""
|
||||
Check if the first item is a second bible item or not.
|
||||
"""
|
||||
bitem = self.listView.item(0)
|
||||
bitem = self.list_view.item(0)
|
||||
if not bitem.flags() & QtCore.Qt.ItemIsSelectable:
|
||||
# The item is the "No Search Results" item.
|
||||
self.listView.clear()
|
||||
self.list_view.clear()
|
||||
self.displayResults(bible, second_bible)
|
||||
return
|
||||
else:
|
||||
@ -92,7 +92,7 @@ class BibleMediaItem(MediaManagerItem):
|
||||
'You cannot combine single and dual Bible verse search results. '
|
||||
'Do you want to delete your search results and start a new search?'),
|
||||
parent=self, question=True) == QtGui.QMessageBox.Yes:
|
||||
self.listView.clear()
|
||||
self.list_view.clear()
|
||||
self.displayResults(bible, second_bible)
|
||||
|
||||
def _decodeQtObject(self, bitem, key):
|
||||
@ -100,13 +100,16 @@ class BibleMediaItem(MediaManagerItem):
|
||||
obj = reference[unicode(key)]
|
||||
return unicode(obj).strip()
|
||||
|
||||
def requiredIcons(self):
|
||||
MediaManagerItem.requiredIcons(self)
|
||||
self.hasImportIcon = True
|
||||
self.hasNewIcon = False
|
||||
self.hasEditIcon = True
|
||||
self.hasDeleteIcon = True
|
||||
self.addToServiceItem = False
|
||||
def required_icons(self):
|
||||
"""
|
||||
Set which icons the media manager tab should show
|
||||
"""
|
||||
MediaManagerItem.required_icons(self)
|
||||
self.has_import_icon = True
|
||||
self.has_new_icon = False
|
||||
self.has_edit_icon = True
|
||||
self.has_delete_icon = True
|
||||
self.add_to_service_item = False
|
||||
|
||||
def addSearchTab(self, prefix, name):
|
||||
self.searchTabBar.addTab(name)
|
||||
@ -152,19 +155,19 @@ class BibleMediaItem(MediaManagerItem):
|
||||
styleComboBox = create_horizontal_adjusting_combo_box(tab, prefix + u'StyleComboBox')
|
||||
styleComboBox.addItems([u'', u'', u''])
|
||||
layout.addWidget(styleComboBox, idx + 2, 1, 1, 2)
|
||||
searchButtonLayout = QtGui.QHBoxLayout()
|
||||
searchButtonLayout.setObjectName(prefix + u'SearchButtonLayout')
|
||||
searchButtonLayout.addStretch()
|
||||
search_button_layout = QtGui.QHBoxLayout()
|
||||
search_button_layout.setObjectName(prefix + u'search_button_layout')
|
||||
search_button_layout.addStretch()
|
||||
lockButton = QtGui.QToolButton(tab)
|
||||
lockButton.setIcon(self.unlockIcon)
|
||||
lockButton.setCheckable(True)
|
||||
lockButton.setObjectName(prefix + u'LockButton')
|
||||
searchButtonLayout.addWidget(lockButton)
|
||||
search_button_layout.addWidget(lockButton)
|
||||
searchButton = QtGui.QPushButton(tab)
|
||||
searchButton.setObjectName(prefix + u'SearchButton')
|
||||
searchButtonLayout.addWidget(searchButton)
|
||||
layout.addLayout(searchButtonLayout, idx + 3, 1, 1, 2)
|
||||
self.pageLayout.addWidget(tab)
|
||||
search_button_layout.addWidget(searchButton)
|
||||
layout.addLayout(search_button_layout, idx + 3, 1, 1, 2)
|
||||
self.page_layout.addWidget(tab)
|
||||
tab.setVisible(False)
|
||||
lockButton.toggled.connect(self.onLockButtonToggled)
|
||||
setattr(self, prefix + u'VersionLabel', versionLabel)
|
||||
@ -174,14 +177,14 @@ class BibleMediaItem(MediaManagerItem):
|
||||
setattr(self, prefix + u'StyleLabel', styleLabel)
|
||||
setattr(self, prefix + u'StyleComboBox', styleComboBox)
|
||||
setattr(self, prefix + u'LockButton', lockButton)
|
||||
setattr(self, prefix + u'SearchButtonLayout', searchButtonLayout)
|
||||
setattr(self, prefix + u'SearchButtonLayout', search_button_layout)
|
||||
setattr(self, prefix + u'SearchButton', searchButton)
|
||||
|
||||
def addEndHeaderBar(self):
|
||||
def add_end_header_bar(self):
|
||||
self.searchTabBar = QtGui.QTabBar(self)
|
||||
self.searchTabBar.setExpanding(False)
|
||||
self.searchTabBar.setObjectName(u'searchTabBar')
|
||||
self.pageLayout.addWidget(self.searchTabBar)
|
||||
self.page_layout.addWidget(self.searchTabBar)
|
||||
# Add the Quick Search tab.
|
||||
self.addSearchTab(u'quick', translate('BiblesPlugin.MediaItem', 'Quick'))
|
||||
self.quickSearchLabel = QtGui.QLabel(self.quickTab)
|
||||
@ -468,7 +471,7 @@ class BibleMediaItem(MediaManagerItem):
|
||||
if self.import_wizard.exec_():
|
||||
self.reload_bibles()
|
||||
|
||||
def onEditClick(self):
|
||||
def on_edit_click(self):
|
||||
if self.quickTab.isVisible():
|
||||
bible = self.quickVersionComboBox.currentText()
|
||||
elif self.advancedTab.isVisible():
|
||||
@ -479,7 +482,7 @@ class BibleMediaItem(MediaManagerItem):
|
||||
if self.editBibleForm.exec_():
|
||||
self.reload_bibles()
|
||||
|
||||
def onDeleteClick(self):
|
||||
def on_delete_click(self):
|
||||
if self.quickTab.isVisible():
|
||||
bible = self.quickVersionComboBox.currentText()
|
||||
elif self.advancedTab.isVisible():
|
||||
@ -628,13 +631,13 @@ class BibleMediaItem(MediaManagerItem):
|
||||
if second_bible:
|
||||
self.second_search_results = self.plugin.manager.get_verses(second_bible, versetext, book_ref_id)
|
||||
if not self.advancedLockButton.isChecked():
|
||||
self.listView.clear()
|
||||
if self.listView.count() != 0:
|
||||
self.list_view.clear()
|
||||
if self.list_view.count() != 0:
|
||||
self.__checkSecondBible(bible, second_bible)
|
||||
elif self.search_results:
|
||||
self.displayResults(bible, second_bible)
|
||||
self.advancedSearchButton.setEnabled(True)
|
||||
self.checkSearchResult()
|
||||
self.check_search_result()
|
||||
self.application.set_normal_cursor()
|
||||
|
||||
def onQuickSearchButton(self):
|
||||
@ -684,13 +687,13 @@ class BibleMediaItem(MediaManagerItem):
|
||||
self.search_results = new_search_results
|
||||
self.second_search_results = bibles[second_bible].get_verses(text)
|
||||
if not self.quickLockButton.isChecked():
|
||||
self.listView.clear()
|
||||
if self.listView.count() != 0 and self.search_results:
|
||||
self.list_view.clear()
|
||||
if self.list_view.count() != 0 and self.search_results:
|
||||
self.__checkSecondBible(bible, second_bible)
|
||||
elif self.search_results:
|
||||
self.displayResults(bible, second_bible)
|
||||
self.quickSearchButton.setEnabled(True)
|
||||
self.checkSearchResult()
|
||||
self.check_search_result()
|
||||
self.application.set_normal_cursor()
|
||||
|
||||
def displayResults(self, bible, second_bible=u''):
|
||||
@ -700,8 +703,8 @@ class BibleMediaItem(MediaManagerItem):
|
||||
"""
|
||||
items = self.buildDisplayResults(bible, second_bible, self.search_results)
|
||||
for bible_verse in items:
|
||||
self.listView.addItem(bible_verse)
|
||||
self.listView.selectAll()
|
||||
self.list_view.addItem(bible_verse)
|
||||
self.list_view.selectAll()
|
||||
self.search_results = {}
|
||||
self.second_search_results = {}
|
||||
|
||||
@ -764,7 +767,7 @@ class BibleMediaItem(MediaManagerItem):
|
||||
items.append(bible_verse)
|
||||
return items
|
||||
|
||||
def generateSlideData(self, service_item, item=None, xmlVersion=False,
|
||||
def generate_slide_data(self, service_item, item=None, xmlVersion=False,
|
||||
remote=False, context=ServiceItemContext.Service):
|
||||
"""
|
||||
Generates and formats the slides for the service item as well as the
|
||||
@ -774,7 +777,7 @@ class BibleMediaItem(MediaManagerItem):
|
||||
if item:
|
||||
items = item
|
||||
else:
|
||||
items = self.listView.selectedItems()
|
||||
items = self.list_view.selectedItems()
|
||||
if not items:
|
||||
return False
|
||||
bible_text = u''
|
||||
@ -963,7 +966,10 @@ class BibleMediaItem(MediaManagerItem):
|
||||
return [[string, versetext]]
|
||||
return []
|
||||
|
||||
def createItemFromId(self, item_id):
|
||||
def create_item_from_id(self, item_id):
|
||||
"""
|
||||
Create a media item from an item id.
|
||||
"""
|
||||
item = QtGui.QListWidgetItem()
|
||||
bible = self.quickVersionComboBox.currentText()
|
||||
search_results = self.plugin.manager.get_verses(bible, item_id, False)
|
||||
|
@ -58,23 +58,23 @@ class CustomMediaItem(MediaManagerItem):
|
||||
self.icon_path = u'custom/custom'
|
||||
MediaManagerItem.__init__(self, parent, plugin)
|
||||
self.edit_custom_form = EditCustomForm(self, self.main_window, self.plugin.manager)
|
||||
self.singleServiceItem = False
|
||||
self.quickPreviewAllowed = True
|
||||
self.single_service_item = False
|
||||
self.quick_preview_allowed = True
|
||||
self.hasSearch = True
|
||||
# Holds information about whether the edit is remotely triggered and
|
||||
# which Custom is required.
|
||||
self.remoteCustom = -1
|
||||
self.manager = plugin.manager
|
||||
|
||||
def addEndHeaderBar(self):
|
||||
def add_end_header_bar(self):
|
||||
self.toolbar.addSeparator()
|
||||
self.addSearchToToolBar()
|
||||
self.add_search_to_toolbar()
|
||||
# Signals and slots
|
||||
QtCore.QObject.connect(self.searchTextEdit, QtCore.SIGNAL(u'cleared()'), self.onClearTextButtonClick)
|
||||
QtCore.QObject.connect(self.searchTextEdit, QtCore.SIGNAL(u'searchTypeChanged(int)'),
|
||||
self.onSearchTextButtonClicked)
|
||||
Registry().register_function(u'custom_load_list', self.loadList)
|
||||
Registry().register_function(u'custom_preview', self.onPreviewClick)
|
||||
QtCore.QObject.connect(self.search_text_edit, QtCore.SIGNAL(u'cleared()'), self.onClearTextButtonClick)
|
||||
QtCore.QObject.connect(self.search_text_edit, QtCore.SIGNAL(u'searchTypeChanged(int)'),
|
||||
self.on_search_text_button_clicked)
|
||||
Registry().register_function(u'custom_load_list', self.load_list)
|
||||
Registry().register_function(u'custom_preview', self.on_preview_click)
|
||||
Registry().register_function(u'custom_create_from_service', self.create_from_service_item)
|
||||
|
||||
def config_update(self):
|
||||
@ -85,42 +85,42 @@ class CustomMediaItem(MediaManagerItem):
|
||||
self.add_custom_from_service = Settings().value(self.settings_section + u'/add custom from service')
|
||||
|
||||
def retranslateUi(self):
|
||||
self.searchTextLabel.setText(u'%s:' % UiStrings().Search)
|
||||
self.searchTextButton.setText(UiStrings().Search)
|
||||
self.search_text_label.setText(u'%s:' % UiStrings().Search)
|
||||
self.search_text_button.setText(UiStrings().Search)
|
||||
|
||||
def initialise(self):
|
||||
self.searchTextEdit.set_search_types([
|
||||
self.search_text_edit.set_search_types([
|
||||
(CustomSearch.Titles, u':/songs/song_search_title.png',
|
||||
translate('SongsPlugin.MediaItem', 'Titles'),
|
||||
translate('SongsPlugin.MediaItem', 'Search Titles...')),
|
||||
(CustomSearch.Themes, u':/slides/slide_theme.png', UiStrings().Themes, UiStrings().SearchThemes)
|
||||
])
|
||||
self.searchTextEdit.set_current_search_type(Settings().value(u'%s/last search type' % self.settings_section))
|
||||
self.loadList(self.manager.get_all_objects(CustomSlide, order_by_ref=CustomSlide.title))
|
||||
self.search_text_edit.set_current_search_type(Settings().value(u'%s/last search type' % self.settings_section))
|
||||
self.load_list(self.manager.get_all_objects(CustomSlide, order_by_ref=CustomSlide.title))
|
||||
self.config_update()
|
||||
|
||||
def loadList(self, custom_slides, target_group=None):
|
||||
def load_list(self, custom_slides, target_group=None):
|
||||
# Sort out what custom we want to select after loading the list.
|
||||
self.saveAutoSelectId()
|
||||
self.listView.clear()
|
||||
self.save_auto_select_id()
|
||||
self.list_view.clear()
|
||||
custom_slides.sort()
|
||||
for custom_slide in custom_slides:
|
||||
custom_name = QtGui.QListWidgetItem(custom_slide.title)
|
||||
custom_name.setData(QtCore.Qt.UserRole, custom_slide.id)
|
||||
self.listView.addItem(custom_name)
|
||||
self.list_view.addItem(custom_name)
|
||||
# Auto-select the custom.
|
||||
if custom_slide.id == self.autoSelectId:
|
||||
self.listView.setCurrentItem(custom_name)
|
||||
self.list_view.setCurrentItem(custom_name)
|
||||
self.autoSelectId = -1
|
||||
# Called to redisplay the custom list screen edith from a search
|
||||
# or from the exit of the Custom edit dialog. If remote editing is
|
||||
# active trigger it and clean up so it will not update again.
|
||||
|
||||
def onNewClick(self):
|
||||
def on_new_click(self):
|
||||
self.edit_custom_form.load_custom(0)
|
||||
self.edit_custom_form.exec_()
|
||||
self.onClearTextButtonClick()
|
||||
self.onSelectionChange()
|
||||
self.on_selection_change()
|
||||
|
||||
def onRemoteEdit(self, custom_id, preview=False):
|
||||
"""
|
||||
@ -133,35 +133,35 @@ class CustomMediaItem(MediaManagerItem):
|
||||
if valid:
|
||||
self.edit_custom_form.load_custom(custom_id, preview)
|
||||
if self.edit_custom_form.exec_() == QtGui.QDialog.Accepted:
|
||||
self.remoteTriggered = True
|
||||
self.remote_triggered = True
|
||||
self.remoteCustom = custom_id
|
||||
self.autoSelectId = -1
|
||||
self.onSearchTextButtonClicked()
|
||||
item = self.buildServiceItem(remote=True)
|
||||
self.remoteTriggered = None
|
||||
self.on_search_text_button_clicked()
|
||||
item = self.build_service_item(remote=True)
|
||||
self.remote_triggered = None
|
||||
self.remoteCustom = 1
|
||||
if item:
|
||||
return item
|
||||
return None
|
||||
|
||||
def onEditClick(self):
|
||||
def on_edit_click(self):
|
||||
"""
|
||||
Edit a custom item
|
||||
"""
|
||||
if check_item_selected(self.listView, UiStrings().SelectEdit):
|
||||
item = self.listView.currentItem()
|
||||
if check_item_selected(self.list_view, UiStrings().SelectEdit):
|
||||
item = self.list_view.currentItem()
|
||||
item_id = item.data(QtCore.Qt.UserRole)
|
||||
self.edit_custom_form.load_custom(item_id, False)
|
||||
self.edit_custom_form.exec_()
|
||||
self.autoSelectId = -1
|
||||
self.onSearchTextButtonClicked()
|
||||
self.on_search_text_button_clicked()
|
||||
|
||||
def onDeleteClick(self):
|
||||
def on_delete_click(self):
|
||||
"""
|
||||
Remove a custom item from the list and database
|
||||
"""
|
||||
if check_item_selected(self.listView, UiStrings().SelectDelete):
|
||||
items = self.listView.selectedIndexes()
|
||||
if check_item_selected(self.list_view, UiStrings().SelectDelete):
|
||||
items = self.list_view.selectedIndexes()
|
||||
if QtGui.QMessageBox.question(self,
|
||||
UiStrings().ConfirmDelete,
|
||||
translate('CustomPlugin.MediaItem',
|
||||
@ -170,20 +170,23 @@ class CustomMediaItem(MediaManagerItem):
|
||||
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
|
||||
QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No:
|
||||
return
|
||||
row_list = [item.row() for item in self.listView.selectedIndexes()]
|
||||
row_list = [item.row() for item in self.list_view.selectedIndexes()]
|
||||
row_list.sort(reverse=True)
|
||||
id_list = [(item.data(QtCore.Qt.UserRole))
|
||||
for item in self.listView.selectedIndexes()]
|
||||
for item in self.list_view.selectedIndexes()]
|
||||
for id in id_list:
|
||||
self.plugin.manager.delete_object(CustomSlide, id)
|
||||
self.onSearchTextButtonClicked()
|
||||
self.on_search_text_button_clicked()
|
||||
|
||||
def onFocus(self):
|
||||
self.searchTextEdit.setFocus()
|
||||
self.search_text_edit.setFocus()
|
||||
|
||||
def generateSlideData(self, service_item, item=None, xmlVersion=False,
|
||||
def generate_slide_data(self, service_item, item=None, xmlVersion=False,
|
||||
remote=False, context=ServiceItemContext.Service):
|
||||
item_id = self._getIdOfItemToGenerate(item, self.remoteCustom)
|
||||
"""
|
||||
Generate the slide data. Needs to be implemented by the plugin.
|
||||
"""
|
||||
item_id = self._get_id_of_item_to_generate(item, self.remoteCustom)
|
||||
service_item.add_capability(ItemCapabilities.CanEdit)
|
||||
service_item.add_capability(ItemCapabilities.CanPreview)
|
||||
service_item.add_capability(ItemCapabilities.CanLoop)
|
||||
@ -208,28 +211,28 @@ class CustomMediaItem(MediaManagerItem):
|
||||
service_item.raw_footer.append(u'')
|
||||
return True
|
||||
|
||||
def onSearchTextButtonClicked(self):
|
||||
def on_search_text_button_clicked(self):
|
||||
# Save the current search type to the configuration.
|
||||
Settings().setValue(u'%s/last search type' % self.settings_section, self.searchTextEdit.current_search_type())
|
||||
Settings().setValue(u'%s/last search type' % self.settings_section, self.search_text_edit.current_search_type())
|
||||
# Reload the list considering the new search type.
|
||||
search_keywords = self.searchTextEdit.displayText()
|
||||
search_keywords = self.search_text_edit.displayText()
|
||||
search_results = []
|
||||
search_type = self.searchTextEdit.current_search_type()
|
||||
search_type = self.search_text_edit.current_search_type()
|
||||
if search_type == CustomSearch.Titles:
|
||||
log.debug(u'Titles Search')
|
||||
search_results = self.plugin.manager.get_all_objects(CustomSlide,
|
||||
CustomSlide.title.like(u'%' + self.whitespace.sub(u' ', search_keywords) + u'%'),
|
||||
order_by_ref=CustomSlide.title)
|
||||
self.loadList(search_results)
|
||||
self.load_list(search_results)
|
||||
elif search_type == CustomSearch.Themes:
|
||||
log.debug(u'Theme Search')
|
||||
search_results = self.plugin.manager.get_all_objects(CustomSlide,
|
||||
CustomSlide.theme_name.like(u'%' + self.whitespace.sub(u' ', search_keywords) + u'%'),
|
||||
order_by_ref=CustomSlide.title)
|
||||
self.loadList(search_results)
|
||||
self.checkSearchResult()
|
||||
self.load_list(search_results)
|
||||
self.check_search_result()
|
||||
|
||||
def onSearchTextEditChanged(self, text):
|
||||
def on_search_text_edit_changed(self, text):
|
||||
"""
|
||||
If search as type enabled invoke the search on each key press.
|
||||
If the Title is being searched do not start until 2 characters
|
||||
@ -237,15 +240,15 @@ class CustomMediaItem(MediaManagerItem):
|
||||
"""
|
||||
search_length = 2
|
||||
if len(text) > search_length:
|
||||
self.onSearchTextButtonClicked()
|
||||
self.on_search_text_button_clicked()
|
||||
elif not text:
|
||||
self.onClearTextButtonClick()
|
||||
|
||||
def serviceLoad(self, item):
|
||||
def service_load(self, item):
|
||||
"""
|
||||
Triggered by a song being loaded by the service manager.
|
||||
"""
|
||||
log.debug(u'serviceLoad')
|
||||
log.debug(u'service_load')
|
||||
if self.plugin.status != PluginStatus.Active:
|
||||
return
|
||||
custom = self.plugin.manager.get_object_filtered(CustomSlide,
|
||||
@ -280,7 +283,7 @@ class CustomMediaItem(MediaManagerItem):
|
||||
custom_xml.add_verse_to_lyrics(u'custom', unicode(idx + 1), slide['raw_slide'])
|
||||
custom.text = unicode(custom_xml.extract_xml(), u'utf-8')
|
||||
self.plugin.manager.save_object(custom)
|
||||
self.onSearchTextButtonClicked()
|
||||
self.on_search_text_button_clicked()
|
||||
if item.name.lower() == u'custom':
|
||||
Registry().execute(u'service_item_update', u'%s:%s:%s' % (custom.id, item.unique_identifier, False))
|
||||
|
||||
@ -288,8 +291,8 @@ class CustomMediaItem(MediaManagerItem):
|
||||
"""
|
||||
Clear the search text.
|
||||
"""
|
||||
self.searchTextEdit.clear()
|
||||
self.onSearchTextButtonClicked()
|
||||
self.search_text_edit.clear()
|
||||
self.on_search_text_button_clicked()
|
||||
|
||||
def search(self, string, showError):
|
||||
search_results = self.manager.get_all_objects(CustomSlide,
|
||||
|
@ -52,7 +52,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
def __init__(self, parent, plugin):
|
||||
self.icon_path = u'images/image'
|
||||
MediaManagerItem.__init__(self, parent, plugin)
|
||||
self.quickPreviewAllowed = True
|
||||
self.quick_preview_allowed = True
|
||||
self.hasSearch = True
|
||||
self.manager = plugin.manager
|
||||
self.choose_group_form = ChooseGroupForm(self)
|
||||
@ -61,13 +61,13 @@ class ImageMediaItem(MediaManagerItem):
|
||||
self.fill_groups_combobox(self.add_group_form.parent_group_combobox)
|
||||
Registry().register_function(u'live_theme_changed', self.live_theme_changed)
|
||||
# Allow DnD from the desktop
|
||||
self.listView.activateDnD()
|
||||
self.list_view.activateDnD()
|
||||
|
||||
def retranslateUi(self):
|
||||
self.onNewPrompt = translate('ImagePlugin.MediaItem',
|
||||
self.on_new_prompt = translate('ImagePlugin.MediaItem',
|
||||
'Select Image(s)')
|
||||
file_formats = get_images_filter()
|
||||
self.onNewFileMasks = u'%s;;%s (*.*) (*)' % (file_formats, UiStrings().AllFiles)
|
||||
self.on_new_file_masks = u'%s;;%s (*.*) (*)' % (file_formats, UiStrings().AllFiles)
|
||||
self.addGroupAction.setText(UiStrings().AddGroup)
|
||||
self.addGroupAction.setToolTip(UiStrings().AddGroup)
|
||||
self.replaceAction.setText(UiStrings().ReplaceBG)
|
||||
@ -75,104 +75,107 @@ class ImageMediaItem(MediaManagerItem):
|
||||
self.resetAction.setText(UiStrings().ResetBG)
|
||||
self.resetAction.setToolTip(UiStrings().ResetLiveBG)
|
||||
|
||||
def requiredIcons(self):
|
||||
MediaManagerItem.requiredIcons(self)
|
||||
self.hasFileIcon = True
|
||||
self.hasNewIcon = False
|
||||
self.hasEditIcon = False
|
||||
self.addToServiceItem = True
|
||||
def required_icons(self):
|
||||
"""
|
||||
Set which icons the media manager tab should show
|
||||
"""
|
||||
MediaManagerItem.required_icons(self)
|
||||
self.has_file_icon = True
|
||||
self.has_new_icon = False
|
||||
self.has_edit_icon = False
|
||||
self.add_to_service_item = True
|
||||
|
||||
def initialise(self):
|
||||
log.debug(u'initialise')
|
||||
self.listView.clear()
|
||||
self.listView.setIconSize(QtCore.QSize(88, 50))
|
||||
self.listView.setIndentation(self.listView.defaultIndentation)
|
||||
self.listView.allow_internal_dnd = True
|
||||
self.list_view.clear()
|
||||
self.list_view.setIconSize(QtCore.QSize(88, 50))
|
||||
self.list_view.setIndentation(self.list_view.defaultIndentation)
|
||||
self.list_view.allow_internal_dnd = True
|
||||
self.servicePath = os.path.join(AppLocation.get_section_data_path(self.settings_section), u'thumbnails')
|
||||
check_directory_exists(self.servicePath)
|
||||
# Load images from the database
|
||||
self.loadFullList(
|
||||
self.manager.get_all_objects(ImageFilenames, order_by_ref=ImageFilenames.filename), initial_load=True)
|
||||
|
||||
def addListViewToToolBar(self):
|
||||
def add_list_view_to_toolbar(self):
|
||||
"""
|
||||
Creates the main widget for listing items the media item is tracking.
|
||||
This method overloads MediaManagerItem.addListViewToToolBar
|
||||
This method overloads MediaManagerItem.add_list_view_to_toolbar
|
||||
"""
|
||||
# Add the List widget
|
||||
self.listView = TreeWidgetWithDnD(self, self.plugin.name)
|
||||
self.listView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
|
||||
self.listView.setAlternatingRowColors(True)
|
||||
self.listView.setObjectName(u'%sTreeView' % self.plugin.name)
|
||||
self.list_view = TreeWidgetWithDnD(self, self.plugin.name)
|
||||
self.list_view.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
|
||||
self.list_view.setAlternatingRowColors(True)
|
||||
self.list_view.setObjectName(u'%sTreeView' % self.plugin.name)
|
||||
# Add to pageLayout
|
||||
self.pageLayout.addWidget(self.listView)
|
||||
self.page_layout.addWidget(self.list_view)
|
||||
# define and add the context menu
|
||||
self.listView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||
if self.hasEditIcon:
|
||||
create_widget_action(self.listView,
|
||||
self.list_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||
if self.has_edit_icon:
|
||||
create_widget_action(self.list_view,
|
||||
text=self.plugin.get_string(StringContent.Edit)[u'title'],
|
||||
icon=u':/general/general_edit.png',
|
||||
triggers=self.onEditClick)
|
||||
create_widget_action(self.listView, separator=True)
|
||||
if self.hasDeleteIcon:
|
||||
create_widget_action(self.listView,
|
||||
triggers=self.on_edit_click)
|
||||
create_widget_action(self.list_view, separator=True)
|
||||
if self.has_delete_icon:
|
||||
create_widget_action(self.list_view,
|
||||
text=self.plugin.get_string(StringContent.Delete)[u'title'],
|
||||
icon=u':/general/general_delete.png',
|
||||
shortcuts=[QtCore.Qt.Key_Delete], triggers=self.onDeleteClick)
|
||||
create_widget_action(self.listView, separator=True)
|
||||
create_widget_action(self.listView,
|
||||
shortcuts=[QtCore.Qt.Key_Delete], triggers=self.on_delete_click)
|
||||
create_widget_action(self.list_view, separator=True)
|
||||
create_widget_action(self.list_view,
|
||||
text=self.plugin.get_string(StringContent.Preview)[u'title'],
|
||||
icon=u':/general/general_preview.png',
|
||||
shortcuts=[QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return],
|
||||
triggers=self.onPreviewClick)
|
||||
create_widget_action(self.listView,
|
||||
triggers=self.on_preview_click)
|
||||
create_widget_action(self.list_view,
|
||||
text=self.plugin.get_string(StringContent.Live)[u'title'],
|
||||
icon=u':/general/general_live.png',
|
||||
shortcuts=[QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Enter,
|
||||
QtCore.Qt.ShiftModifier | QtCore.Qt.Key_Return],
|
||||
triggers=self.onLiveClick)
|
||||
create_widget_action(self.listView,
|
||||
triggers=self.on_live_click)
|
||||
create_widget_action(self.list_view,
|
||||
text=self.plugin.get_string(StringContent.Service)[u'title'],
|
||||
icon=u':/general/general_add.png',
|
||||
shortcuts=[QtCore.Qt.Key_Plus, QtCore.Qt.Key_Equal],
|
||||
triggers=self.onAddClick)
|
||||
if self.addToServiceItem:
|
||||
create_widget_action(self.listView, separator=True)
|
||||
create_widget_action(self.listView,
|
||||
triggers=self.on_add_click)
|
||||
if self.add_to_service_item:
|
||||
create_widget_action(self.list_view, separator=True)
|
||||
create_widget_action(self.list_view,
|
||||
text=translate('OpenLP.MediaManagerItem', '&Add to selected Service Item'),
|
||||
icon=u':/general/general_add.png',
|
||||
triggers=self.onAddEditClick)
|
||||
self.addCustomContextActions()
|
||||
# Create the context menu and add all actions from the listView.
|
||||
triggers=self.on_add_edit_click)
|
||||
self.add_custom_context_actions()
|
||||
# Create the context menu and add all actions from the list_view.
|
||||
self.menu = QtGui.QMenu()
|
||||
self.menu.addActions(self.listView.actions())
|
||||
self.listView.doubleClicked.connect(self.onDoubleClicked)
|
||||
self.listView.itemSelectionChanged.connect(self.onSelectionChange)
|
||||
self.listView.customContextMenuRequested.connect(self.contextMenu)
|
||||
self.listView.addAction(self.replaceAction)
|
||||
self.menu.addActions(self.list_view.actions())
|
||||
self.list_view.doubleClicked.connect(self.on_double_clicked)
|
||||
self.list_view.itemSelectionChanged.connect(self.on_selection_change)
|
||||
self.list_view.customContextMenuRequested.connect(self.context_menu)
|
||||
self.list_view.addAction(self.replaceAction)
|
||||
|
||||
def addCustomContextActions(self):
|
||||
def add_custom_context_actions(self):
|
||||
"""
|
||||
Add custom actions to the context menu
|
||||
"""
|
||||
create_widget_action(self.listView, separator=True)
|
||||
create_widget_action(self.listView,
|
||||
create_widget_action(self.list_view, separator=True)
|
||||
create_widget_action(self.list_view,
|
||||
text=UiStrings().AddGroup,
|
||||
icon=u':/images/image_new_group.png',
|
||||
triggers=self.onAddGroupClick)
|
||||
create_widget_action(self.listView,
|
||||
create_widget_action(self.list_view,
|
||||
text=self.plugin.get_string(StringContent.Load)[u'tooltip'],
|
||||
icon=u':/general/general_open.png',
|
||||
triggers=self.onFileClick)
|
||||
triggers=self.on_file_click)
|
||||
|
||||
def addStartHeaderBar(self):
|
||||
def add_start_header_bar(self):
|
||||
"""
|
||||
Add custom buttons to the start of the toolbar
|
||||
"""
|
||||
self.addGroupAction = self.toolbar.add_toolbar_action(u'addGroupAction',
|
||||
icon=u':/images/image_new_group.png', triggers=self.onAddGroupClick)
|
||||
|
||||
def addEndHeaderBar(self):
|
||||
def add_end_header_bar(self):
|
||||
"""
|
||||
Add custom buttons to the end of the toolbar
|
||||
"""
|
||||
@ -197,15 +200,15 @@ class ImageMediaItem(MediaManagerItem):
|
||||
self.recursively_delete_group(group)
|
||||
self.manager.delete_object(ImageGroups, group.id)
|
||||
|
||||
def onDeleteClick(self):
|
||||
def on_delete_click(self):
|
||||
"""
|
||||
Remove an image item from the list
|
||||
"""
|
||||
# Turn off auto preview triggers.
|
||||
self.listView.blockSignals(True)
|
||||
if check_item_selected(self.listView, translate('ImagePlugin.MediaItem',
|
||||
self.list_view.blockSignals(True)
|
||||
if check_item_selected(self.list_view, translate('ImagePlugin.MediaItem',
|
||||
'You must select an image or group to delete.')):
|
||||
item_list = self.listView.selectedItems()
|
||||
item_list = self.list_view.selectedItems()
|
||||
self.application.set_busy_cursor()
|
||||
self.main_window.display_progress_bar(len(item_list))
|
||||
for row_item in item_list:
|
||||
@ -214,12 +217,12 @@ class ImageMediaItem(MediaManagerItem):
|
||||
if isinstance(item_data, ImageFilenames):
|
||||
delete_file(os.path.join(self.servicePath, row_item.text(0)))
|
||||
if item_data.group_id == 0:
|
||||
self.listView.takeTopLevelItem(self.listView.indexOfTopLevelItem(row_item))
|
||||
self.list_view.takeTopLevelItem(self.list_view.indexOfTopLevelItem(row_item))
|
||||
else:
|
||||
row_item.parent().removeChild(row_item)
|
||||
self.manager.delete_object(ImageFilenames, row_item.data(0, QtCore.Qt.UserRole).id)
|
||||
elif isinstance(item_data, ImageGroups):
|
||||
if QtGui.QMessageBox.question(self.listView.parent(),
|
||||
if QtGui.QMessageBox.question(self.list_view.parent(),
|
||||
translate('ImagePlugin.MediaItem', 'Remove group'),
|
||||
translate('ImagePlugin.MediaItem',
|
||||
'Are you sure you want to remove "%s" and everything in it?') % item_data.group_name,
|
||||
@ -228,7 +231,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
self.recursively_delete_group(item_data)
|
||||
self.manager.delete_object(ImageGroups, row_item.data(0, QtCore.Qt.UserRole).id)
|
||||
if item_data.parent_id == 0:
|
||||
self.listView.takeTopLevelItem(self.listView.indexOfTopLevelItem(row_item))
|
||||
self.list_view.takeTopLevelItem(self.list_view.indexOfTopLevelItem(row_item))
|
||||
else:
|
||||
row_item.parent().removeChild(row_item)
|
||||
self.fill_groups_combobox(self.choose_group_form.group_combobox)
|
||||
@ -236,7 +239,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
self.main_window.increment_progress_bar()
|
||||
self.main_window.finished_progress_bar()
|
||||
self.application.set_normal_cursor()
|
||||
self.listView.blockSignals(False)
|
||||
self.list_view.blockSignals(False)
|
||||
|
||||
def add_sub_groups(self, group_list, parent_group_id):
|
||||
"""
|
||||
@ -257,7 +260,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
group.setData(0, QtCore.Qt.UserRole, image_group)
|
||||
group.setIcon(0, folder_icon)
|
||||
if parent_group_id == 0:
|
||||
self.listView.addTopLevelItem(group)
|
||||
self.list_view.addTopLevelItem(group)
|
||||
else:
|
||||
group_list[parent_group_id].addChild(group)
|
||||
group_list[image_group.id] = group
|
||||
@ -297,7 +300,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
"""
|
||||
return_value = False
|
||||
if root_item is None:
|
||||
root_item = self.listView.invisibleRootItem()
|
||||
root_item = self.list_view.invisibleRootItem()
|
||||
for i in range(root_item.childCount()):
|
||||
child = root_item.child(i)
|
||||
if self.expand_group(group_id, child):
|
||||
@ -324,7 +327,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
if not initial_load:
|
||||
self.application.set_busy_cursor()
|
||||
self.main_window.display_progress_bar(len(images))
|
||||
self.listView.clear()
|
||||
self.list_view.clear()
|
||||
# Load the list of groups and add them to the treeView
|
||||
group_items = {}
|
||||
self.add_sub_groups(group_items, parent_group_id=0)
|
||||
@ -350,7 +353,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
item_name.setToolTip(0, imageFile.filename)
|
||||
item_name.setData(0, QtCore.Qt.UserRole, imageFile)
|
||||
if imageFile.group_id == 0:
|
||||
self.listView.addTopLevelItem(item_name)
|
||||
self.list_view.addTopLevelItem(item_name)
|
||||
else:
|
||||
group_items[imageFile.group_id].addChild(item_name)
|
||||
if not initial_load:
|
||||
@ -359,7 +362,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
self.main_window.finished_progress_bar()
|
||||
self.application.set_normal_cursor()
|
||||
|
||||
def validateAndLoad(self, files, target_group=None):
|
||||
def validate_and_load(self, files, target_group=None):
|
||||
"""
|
||||
Process a list for files either from the File Dialog or from Drag and Drop.
|
||||
This method is overloaded from MediaManagerItem.
|
||||
@ -371,11 +374,11 @@ class ImageMediaItem(MediaManagerItem):
|
||||
The QTreeWidgetItem of the group that will be the parent of the added files
|
||||
"""
|
||||
self.application.set_normal_cursor()
|
||||
self.loadList(files, target_group)
|
||||
self.load_list(files, target_group)
|
||||
last_dir = os.path.split(unicode(files[0]))[0]
|
||||
Settings().setValue(self.settings_section + u'/last directory', last_dir)
|
||||
|
||||
def loadList(self, images, target_group=None, initial_load=False):
|
||||
def load_list(self, images, target_group=None, initial_load=False):
|
||||
"""
|
||||
Add new images to the database. This method is called when adding images using the Add button or DnD.
|
||||
|
||||
@ -391,7 +394,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
if target_group is None:
|
||||
# Find out if a group must be pre-selected
|
||||
preselect_group = None
|
||||
selected_items = self.listView.selectedItems()
|
||||
selected_items = self.list_view.selectedItems()
|
||||
if selected_items:
|
||||
selected_item = selected_items[0]
|
||||
if isinstance(selected_item.data(0, QtCore.Qt.UserRole), ImageFilenames):
|
||||
@ -485,14 +488,14 @@ class ImageMediaItem(MediaManagerItem):
|
||||
``target``
|
||||
This contains the QTreeWidget that is the target of the DnD action
|
||||
"""
|
||||
items_to_move = self.listView.selectedItems()
|
||||
items_to_move = self.list_view.selectedItems()
|
||||
# Determine group to move images to
|
||||
target_group = target
|
||||
if target_group is not None and isinstance(target_group.data(0, QtCore.Qt.UserRole), ImageFilenames):
|
||||
target_group = target.parent()
|
||||
# Move to toplevel
|
||||
if target_group is None:
|
||||
target_group = self.listView.invisibleRootItem()
|
||||
target_group = self.list_view.invisibleRootItem()
|
||||
target_group.setData(0, QtCore.Qt.UserRole, ImageGroups())
|
||||
target_group.data(0, QtCore.Qt.UserRole).id = 0
|
||||
# Move images in the treeview
|
||||
@ -502,7 +505,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
if isinstance(item.parent(), QtGui.QTreeWidgetItem):
|
||||
item.parent().removeChild(item)
|
||||
else:
|
||||
self.listView.invisibleRootItem().removeChild(item)
|
||||
self.list_view.invisibleRootItem().removeChild(item)
|
||||
target_group.addChild(item)
|
||||
item.setSelected(True)
|
||||
item_data = item.data(0, QtCore.Qt.UserRole)
|
||||
@ -524,13 +527,16 @@ class ImageMediaItem(MediaManagerItem):
|
||||
image_items.sort(cmp=locale_compare, key=lambda item: item.text(0))
|
||||
target_group.addChildren(image_items)
|
||||
|
||||
def generateSlideData(self, service_item, item=None, xmlVersion=False,
|
||||
def generate_slide_data(self, service_item, item=None, xmlVersion=False,
|
||||
remote=False, context=ServiceItemContext.Service):
|
||||
"""
|
||||
Generate the slide data. Needs to be implemented by the plugin.
|
||||
"""
|
||||
background = QtGui.QColor(Settings().value(self.settings_section + u'/background color'))
|
||||
if item:
|
||||
items = [item]
|
||||
else:
|
||||
items = self.listView.selectedItems()
|
||||
items = self.list_view.selectedItems()
|
||||
if not items:
|
||||
return False
|
||||
# Determine service item title
|
||||
@ -605,7 +611,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||
"""
|
||||
# Find out if a group must be pre-selected
|
||||
preselect_group = 0
|
||||
selected_items = self.listView.selectedItems()
|
||||
selected_items = self.list_view.selectedItems()
|
||||
if selected_items:
|
||||
selected_item = selected_items[0]
|
||||
if isinstance(selected_item.data(0, QtCore.Qt.UserRole), ImageFilenames):
|
||||
@ -649,10 +655,10 @@ class ImageMediaItem(MediaManagerItem):
|
||||
"""
|
||||
Called to replace Live backgound with the image selected.
|
||||
"""
|
||||
if check_item_selected(self.listView,
|
||||
if check_item_selected(self.list_view,
|
||||
translate('ImagePlugin.MediaItem', 'You must select an image to replace the background with.')):
|
||||
background = QtGui.QColor(Settings().value(self.settings_section + u'/background color'))
|
||||
bitem = self.listView.selectedItems()[0]
|
||||
bitem = self.list_view.selectedItems()[0]
|
||||
if not isinstance(bitem.data(0, QtCore.Qt.UserRole), ImageFilenames):
|
||||
# Only continue when an image is selected
|
||||
return
|
||||
|
@ -58,7 +58,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||
self.background = False
|
||||
self.automatic = u''
|
||||
MediaManagerItem.__init__(self, parent, plugin)
|
||||
self.singleServiceItem = False
|
||||
self.single_service_item = False
|
||||
self.hasSearch = True
|
||||
self.media_object = None
|
||||
self.display_controller = DisplayController(parent)
|
||||
@ -75,10 +75,10 @@ class MediaMediaItem(MediaManagerItem):
|
||||
Registry().register_function(u'mediaitem_media_rebuild', self.rebuild_players)
|
||||
Registry().register_function(u'config_screen_changed', self.display_setup)
|
||||
# Allow DnD from the desktop
|
||||
self.listView.activateDnD()
|
||||
self.list_view.activateDnD()
|
||||
|
||||
def retranslateUi(self):
|
||||
self.onNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media')
|
||||
self.on_new_prompt = translate('MediaPlugin.MediaItem', 'Select Media')
|
||||
self.replaceAction.setText(UiStrings().ReplaceBG)
|
||||
self.replaceAction.setToolTip(UiStrings().ReplaceLiveBG)
|
||||
self.resetAction.setText(UiStrings().ResetBG)
|
||||
@ -87,17 +87,20 @@ class MediaMediaItem(MediaManagerItem):
|
||||
self.displayTypeLabel.setText(translate('MediaPlugin.MediaItem', 'Use Player:'))
|
||||
self.rebuild_players()
|
||||
|
||||
def requiredIcons(self):
|
||||
MediaManagerItem.requiredIcons(self)
|
||||
self.hasFileIcon = True
|
||||
self.hasNewIcon = False
|
||||
self.hasEditIcon = False
|
||||
def required_icons(self):
|
||||
"""
|
||||
Set which icons the media manager tab should show
|
||||
"""
|
||||
MediaManagerItem.required_icons(self)
|
||||
self.has_file_icon = True
|
||||
self.has_new_icon = False
|
||||
self.has_edit_icon = False
|
||||
|
||||
def addListViewToToolBar(self):
|
||||
MediaManagerItem.addListViewToToolBar(self)
|
||||
self.listView.addAction(self.replaceAction)
|
||||
def add_list_view_to_toolbar(self):
|
||||
MediaManagerItem.add_list_view_to_toolbar(self)
|
||||
self.list_view.addAction(self.replaceAction)
|
||||
|
||||
def addEndHeaderBar(self):
|
||||
def add_end_header_bar(self):
|
||||
# Replace backgrounds do not work at present so remove functionality.
|
||||
self.replaceAction = self.toolbar.add_toolbar_action(u'replaceAction', icon=u':/slides/slide_blank.png',
|
||||
triggers=self.onReplaceClick)
|
||||
@ -114,7 +117,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||
self.displayTypeLabel.setBuddy(self.displayTypeComboBox)
|
||||
self.displayLayout.addRow(self.displayTypeLabel, self.displayTypeComboBox)
|
||||
# Add the Media widget to the page layout
|
||||
self.pageLayout.addWidget(self.mediaWidget)
|
||||
self.page_layout.addWidget(self.mediaWidget)
|
||||
self.displayTypeComboBox.currentIndexChanged.connect(self.overridePlayerChanged)
|
||||
|
||||
def overridePlayerChanged(self, index):
|
||||
@ -141,9 +144,9 @@ class MediaMediaItem(MediaManagerItem):
|
||||
"""
|
||||
Called to replace Live background with the media selected.
|
||||
"""
|
||||
if check_item_selected(self.listView,
|
||||
if check_item_selected(self.list_view,
|
||||
translate('MediaPlugin.MediaItem', 'You must select a media file to replace the background with.')):
|
||||
item = self.listView.currentItem()
|
||||
item = self.list_view.currentItem()
|
||||
filename = item.data(QtCore.Qt.UserRole)
|
||||
if os.path.exists(filename):
|
||||
service_item = ServiceItem()
|
||||
@ -161,10 +164,13 @@ class MediaMediaItem(MediaManagerItem):
|
||||
translate('MediaPlugin.MediaItem',
|
||||
'There was a problem replacing your background, the media file "%s" no longer exists.') % filename)
|
||||
|
||||
def generateSlideData(self, service_item, item=None, xmlVersion=False, remote=False,
|
||||
def generate_slide_data(self, service_item, item=None, xmlVersion=False, remote=False,
|
||||
context=ServiceItemContext.Live):
|
||||
"""
|
||||
Generate the slide data. Needs to be implemented by the plugin.
|
||||
"""
|
||||
if item is None:
|
||||
item = self.listView.currentItem()
|
||||
item = self.list_view.currentItem()
|
||||
if item is None:
|
||||
return False
|
||||
filename = item.data(QtCore.Qt.UserRole)
|
||||
@ -194,11 +200,11 @@ class MediaMediaItem(MediaManagerItem):
|
||||
return True
|
||||
|
||||
def initialise(self):
|
||||
self.listView.clear()
|
||||
self.listView.setIconSize(QtCore.QSize(88, 50))
|
||||
self.list_view.clear()
|
||||
self.list_view.setIconSize(QtCore.QSize(88, 50))
|
||||
self.servicePath = os.path.join(AppLocation.get_section_data_path(self.settings_section), u'thumbnails')
|
||||
check_directory_exists(self.servicePath)
|
||||
self.loadList(Settings().value(self.settings_section + u'/media files'))
|
||||
self.load_list(Settings().value(self.settings_section + u'/media files'))
|
||||
self.populateDisplayTypes()
|
||||
|
||||
def rebuild_players(self):
|
||||
@ -207,7 +213,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||
the settings
|
||||
"""
|
||||
self.populateDisplayTypes()
|
||||
self.onNewFileMasks = translate('MediaPlugin.MediaItem', 'Videos (%s);;Audio (%s);;%s (*)') % (
|
||||
self.on_new_file_masks = translate('MediaPlugin.MediaItem', 'Videos (%s);;Audio (%s);;%s (*)') % (
|
||||
u' '.join(self.media_controller.video_extensions_list),
|
||||
u' '.join(self.media_controller.audio_extensions_list), UiStrings().AllFiles)
|
||||
|
||||
@ -240,19 +246,19 @@ class MediaMediaItem(MediaManagerItem):
|
||||
self.mediaWidget.hide()
|
||||
self.displayTypeComboBox.blockSignals(False)
|
||||
|
||||
def onDeleteClick(self):
|
||||
def on_delete_click(self):
|
||||
"""
|
||||
Remove a media item from the list.
|
||||
"""
|
||||
if check_item_selected(self.listView,
|
||||
if check_item_selected(self.list_view,
|
||||
translate('MediaPlugin.MediaItem', 'You must select a media file to delete.')):
|
||||
row_list = [item.row() for item in self.listView.selectedIndexes()]
|
||||
row_list = [item.row() for item in self.list_view.selectedIndexes()]
|
||||
row_list.sort(reverse=True)
|
||||
for row in row_list:
|
||||
self.listView.takeItem(row)
|
||||
Settings().setValue(self.settings_section + u'/media files', self.getFileList())
|
||||
self.list_view.takeItem(row)
|
||||
Settings().setValue(self.settings_section + u'/media files', self.get_file_list())
|
||||
|
||||
def loadList(self, media, target_group=None):
|
||||
def load_list(self, media, target_group=None):
|
||||
# Sort the media by its filename considering language specific
|
||||
# characters.
|
||||
media.sort(cmp=locale_compare, key=lambda filename: os.path.split(unicode(filename))[1])
|
||||
@ -277,7 +283,7 @@ class MediaMediaItem(MediaManagerItem):
|
||||
item_name.setIcon(build_icon(DVDICON))
|
||||
item_name.setData(QtCore.Qt.UserRole, track)
|
||||
item_name.setToolTip(track)
|
||||
self.listView.addItem(item_name)
|
||||
self.list_view.addItem(item_name)
|
||||
|
||||
def getList(self, type=MediaType.Audio):
|
||||
media = Settings().value(self.settings_section + u'/media files')
|
||||
|
@ -59,17 +59,17 @@ class PresentationMediaItem(MediaManagerItem):
|
||||
MediaManagerItem.__init__(self, parent, plugin)
|
||||
self.message_listener = MessageListener(self)
|
||||
self.hasSearch = True
|
||||
self.singleServiceItem = False
|
||||
self.single_service_item = False
|
||||
Registry().register_function(u'mediaitem_presentation_rebuild', self.populate_display_types)
|
||||
Registry().register_function(u'mediaitem_suffixes', self.build_file_mask_string)
|
||||
# Allow DnD from the desktop
|
||||
self.listView.activateDnD()
|
||||
self.list_view.activateDnD()
|
||||
|
||||
def retranslateUi(self):
|
||||
"""
|
||||
The name of the plugin media displayed in UI
|
||||
"""
|
||||
self.onNewPrompt = translate('PresentationPlugin.MediaItem', 'Select Presentation(s)')
|
||||
self.on_new_prompt = translate('PresentationPlugin.MediaItem', 'Select Presentation(s)')
|
||||
self.Automatic = translate('PresentationPlugin.MediaItem', 'Automatic')
|
||||
self.displayTypeLabel.setText(translate('PresentationPlugin.MediaItem', 'Present using:'))
|
||||
|
||||
@ -85,18 +85,18 @@ class PresentationMediaItem(MediaManagerItem):
|
||||
if fileType.find(type) == -1:
|
||||
fileType += u'*.%s ' % type
|
||||
self.service_manager.supported_suffixes(type)
|
||||
self.onNewFileMasks = translate('PresentationPlugin.MediaItem', 'Presentations (%s)') % fileType
|
||||
self.on_new_file_masks = translate('PresentationPlugin.MediaItem', 'Presentations (%s)') % fileType
|
||||
|
||||
def requiredIcons(self):
|
||||
def required_icons(self):
|
||||
"""
|
||||
Set which icons the media manager tab should show
|
||||
"""
|
||||
MediaManagerItem.requiredIcons(self)
|
||||
self.hasFileIcon = True
|
||||
self.hasNewIcon = False
|
||||
self.hasEditIcon = False
|
||||
MediaManagerItem.required_icons(self)
|
||||
self.has_file_icon = True
|
||||
self.has_new_icon = False
|
||||
self.has_edit_icon = False
|
||||
|
||||
def addEndHeaderBar(self):
|
||||
def add_end_header_bar(self):
|
||||
"""
|
||||
Display custom media manager items for presentations
|
||||
"""
|
||||
@ -112,15 +112,15 @@ class PresentationMediaItem(MediaManagerItem):
|
||||
self.displayTypeLabel.setBuddy(self.displayTypeComboBox)
|
||||
self.displayLayout.addRow(self.displayTypeLabel, self.displayTypeComboBox)
|
||||
# Add the Presentation widget to the page layout
|
||||
self.pageLayout.addWidget(self.presentationWidget)
|
||||
self.page_layout.addWidget(self.presentationWidget)
|
||||
|
||||
def initialise(self):
|
||||
"""
|
||||
Populate the media manager tab
|
||||
"""
|
||||
self.listView.setIconSize(QtCore.QSize(88, 50))
|
||||
self.list_view.setIconSize(QtCore.QSize(88, 50))
|
||||
files = Settings().value(self.settings_section + u'/presentations files')
|
||||
self.loadList(files, initialLoad=True)
|
||||
self.load_list(files, initialLoad=True)
|
||||
self.populate_display_types()
|
||||
|
||||
def populate_display_types(self):
|
||||
@ -141,13 +141,13 @@ class PresentationMediaItem(MediaManagerItem):
|
||||
else:
|
||||
self.presentationWidget.hide()
|
||||
|
||||
def loadList(self, files, target_group=None, initialLoad=False):
|
||||
def load_list(self, files, target_group=None, initialLoad=False):
|
||||
"""
|
||||
Add presentations into the media manager
|
||||
This is called both on initial load of the plugin to populate with
|
||||
existing files, and when the user adds new files via the media manager
|
||||
"""
|
||||
currlist = self.getFileList()
|
||||
currlist = self.get_file_list()
|
||||
titles = [os.path.split(file)[1] for file in currlist]
|
||||
self.application.set_busy_cursor()
|
||||
if not initialLoad:
|
||||
@ -166,7 +166,7 @@ class PresentationMediaItem(MediaManagerItem):
|
||||
item_name.setIcon(build_icon(ERROR))
|
||||
item_name.setData(QtCore.Qt.UserRole, file)
|
||||
item_name.setToolTip(file)
|
||||
self.listView.addItem(item_name)
|
||||
self.list_view.addItem(item_name)
|
||||
else:
|
||||
if titles.count(filename) > 0:
|
||||
if not initialLoad:
|
||||
@ -203,17 +203,17 @@ class PresentationMediaItem(MediaManagerItem):
|
||||
item_name.setData(QtCore.Qt.UserRole, file)
|
||||
item_name.setIcon(icon)
|
||||
item_name.setToolTip(file)
|
||||
self.listView.addItem(item_name)
|
||||
self.list_view.addItem(item_name)
|
||||
if not initialLoad:
|
||||
self.main_window.finished_progress_bar()
|
||||
self.application.set_normal_cursor()
|
||||
|
||||
def onDeleteClick(self):
|
||||
def on_delete_click(self):
|
||||
"""
|
||||
Remove a presentation item from the list
|
||||
"""
|
||||
if check_item_selected(self.listView, UiStrings().SelectDelete):
|
||||
items = self.listView.selectedIndexes()
|
||||
if check_item_selected(self.list_view, UiStrings().SelectDelete):
|
||||
items = self.list_view.selectedIndexes()
|
||||
row_list = [item.row() for item in items]
|
||||
row_list.sort(reverse=True)
|
||||
self.application.set_busy_cursor()
|
||||
@ -228,10 +228,10 @@ class PresentationMediaItem(MediaManagerItem):
|
||||
self.main_window.finished_progress_bar()
|
||||
self.application.set_busy_cursor()
|
||||
for row in row_list:
|
||||
self.listView.takeItem(row)
|
||||
Settings().setValue(self.settings_section + u'/presentations files', self.getFileList())
|
||||
self.list_view.takeItem(row)
|
||||
Settings().setValue(self.settings_section + u'/presentations files', self.get_file_list())
|
||||
|
||||
def generateSlideData(self, service_item, item=None, xmlVersion=False,
|
||||
def generate_slide_data(self, service_item, item=None, xmlVersion=False,
|
||||
remote=False, context=ServiceItemContext.Service):
|
||||
"""
|
||||
Load the relevant information for displaying the presentation
|
||||
@ -241,7 +241,7 @@ class PresentationMediaItem(MediaManagerItem):
|
||||
if item:
|
||||
items = [item]
|
||||
else:
|
||||
items = self.listView.selectedItems()
|
||||
items = self.list_view.selectedItems()
|
||||
if len(items) > 1:
|
||||
return False
|
||||
service_item.title = self.displayTypeComboBox.currentText()
|
||||
|
@ -525,7 +525,7 @@ class HttpConnection(object):
|
||||
return HttpResponse(code=u'400 Bad Request')
|
||||
plugin = self.plugin_manager.get_plugin_by_name(plugin_name)
|
||||
if plugin.status == PluginStatus.Active and plugin.media_item:
|
||||
plugin.media_item.goLive(id, remote=True)
|
||||
plugin.media_item.go_live(id, remote=True)
|
||||
return HttpResponse(code=u'200 OK')
|
||||
|
||||
def add_to_service(self, plugin_name):
|
||||
@ -539,7 +539,7 @@ class HttpConnection(object):
|
||||
plugin = self.plugin_manager.get_plugin_by_name(plugin_name)
|
||||
if plugin.status == PluginStatus.Active and plugin.media_item:
|
||||
item_id = plugin.media_item.createItemFromId(id)
|
||||
plugin.media_item.addToService(item_id, remote=True)
|
||||
plugin.media_item.add_to_service(item_id, remote=True)
|
||||
return HttpResponse(code=u'200 OK')
|
||||
|
||||
def send_response(self, response):
|
||||
|
@ -74,13 +74,13 @@ class SongMediaItem(MediaManagerItem):
|
||||
MediaManagerItem.__init__(self, parent, plugin)
|
||||
self.editSongForm = EditSongForm(self, self.main_window, self.plugin.manager)
|
||||
self.openLyrics = OpenLyrics(self.plugin.manager)
|
||||
self.singleServiceItem = False
|
||||
self.single_service_item = False
|
||||
self.songMaintenanceForm = SongMaintenanceForm(self.plugin.manager, self)
|
||||
# Holds information about whether the edit is remotely triggered and
|
||||
# which Song is required.
|
||||
self.remoteSong = -1
|
||||
self.editItem = None
|
||||
self.quickPreviewAllowed = True
|
||||
self.quick_preview_allowed = True
|
||||
self.hasSearch = True
|
||||
|
||||
def _updateBackgroundAudio(self, song, item):
|
||||
@ -95,28 +95,28 @@ class SongMediaItem(MediaManagerItem):
|
||||
weight=i, file_name=dest_file))
|
||||
self.plugin.manager.save_object(song, True)
|
||||
|
||||
def addEndHeaderBar(self):
|
||||
def add_end_header_bar(self):
|
||||
self.toolbar.addSeparator()
|
||||
## Song Maintenance Button ##
|
||||
self.maintenanceAction = self.toolbar.add_toolbar_action('maintenanceAction',
|
||||
icon=':/songs/song_maintenance.png',
|
||||
triggers=self.onSongMaintenanceClick)
|
||||
self.addSearchToToolBar()
|
||||
self.add_search_to_toolbar()
|
||||
# Signals and slots
|
||||
Registry().register_function(u'songs_load_list', self.on_song_list_load)
|
||||
Registry().register_function(u'songs_preview', self.onPreviewClick)
|
||||
QtCore.QObject.connect(self.searchTextEdit, QtCore.SIGNAL(u'cleared()'), self.onClearTextButtonClick)
|
||||
QtCore.QObject.connect(self.searchTextEdit, QtCore.SIGNAL(u'searchTypeChanged(int)'),
|
||||
self.onSearchTextButtonClicked)
|
||||
Registry().register_function(u'songs_preview', self.on_preview_click)
|
||||
QtCore.QObject.connect(self.search_text_edit, QtCore.SIGNAL(u'cleared()'), self.onClearTextButtonClick)
|
||||
QtCore.QObject.connect(self.search_text_edit, QtCore.SIGNAL(u'searchTypeChanged(int)'),
|
||||
self.on_search_text_button_clicked)
|
||||
|
||||
def addCustomContextActions(self):
|
||||
create_widget_action(self.listView, separator=True)
|
||||
create_widget_action(self.listView,
|
||||
def add_custom_context_actions(self):
|
||||
create_widget_action(self.list_view, separator=True)
|
||||
create_widget_action(self.list_view,
|
||||
text=translate('OpenLP.MediaManagerItem', '&Clone'), icon=u':/general/general_clone.png',
|
||||
triggers=self.onCloneClick)
|
||||
|
||||
def onFocus(self):
|
||||
self.searchTextEdit.setFocus()
|
||||
self.search_text_edit.setFocus()
|
||||
|
||||
def config_update(self):
|
||||
"""
|
||||
@ -128,14 +128,14 @@ class SongMediaItem(MediaManagerItem):
|
||||
self.addSongFromService = Settings().value(self.settings_section + u'/add song from service',)
|
||||
|
||||
def retranslateUi(self):
|
||||
self.searchTextLabel.setText(u'%s:' % UiStrings().Search)
|
||||
self.searchTextButton.setText(UiStrings().Search)
|
||||
self.search_text_label.setText(u'%s:' % UiStrings().Search)
|
||||
self.search_text_button.setText(UiStrings().Search)
|
||||
self.maintenanceAction.setText(SongStrings.SongMaintenance)
|
||||
self.maintenanceAction.setToolTip(translate('SongsPlugin.MediaItem',
|
||||
'Maintain the lists of authors, topics and books.'))
|
||||
|
||||
def initialise(self):
|
||||
self.searchTextEdit.set_search_types([
|
||||
self.search_text_edit.set_search_types([
|
||||
(SongSearch.Entire, u':/songs/song_search_all.png',
|
||||
translate('SongsPlugin.MediaItem', 'Entire Song'),
|
||||
translate('SongsPlugin.MediaItem', 'Search Entire Song...')),
|
||||
@ -152,16 +152,16 @@ class SongMediaItem(MediaManagerItem):
|
||||
(SongSearch.Themes, u':/slides/slide_theme.png',
|
||||
UiStrings().Themes, UiStrings().SearchThemes)
|
||||
])
|
||||
self.searchTextEdit.set_current_search_type(Settings().value(u'%s/last search type' % self.settings_section))
|
||||
self.search_text_edit.set_current_search_type(Settings().value(u'%s/last search type' % self.settings_section))
|
||||
self.config_update()
|
||||
|
||||
def onSearchTextButtonClicked(self):
|
||||
def on_search_text_button_clicked(self):
|
||||
# Save the current search type to the configuration.
|
||||
Settings().setValue(u'%s/last search type' % self.settings_section, self.searchTextEdit.current_search_type())
|
||||
Settings().setValue(u'%s/last search type' % self.settings_section, self.search_text_edit.current_search_type())
|
||||
# Reload the list considering the new search type.
|
||||
search_keywords = unicode(self.searchTextEdit.displayText())
|
||||
search_keywords = unicode(self.search_text_edit.displayText())
|
||||
search_results = []
|
||||
search_type = self.searchTextEdit.current_search_type()
|
||||
search_type = self.search_text_edit.current_search_type()
|
||||
if search_type == SongSearch.Entire:
|
||||
log.debug(u'Entire Song Search')
|
||||
search_results = self.searchEntire(search_keywords)
|
||||
@ -197,7 +197,7 @@ class SongMediaItem(MediaManagerItem):
|
||||
search_results = self.plugin.manager.get_all_objects(Song,
|
||||
Song.theme_name.like(u'%' + search_keywords + u'%'))
|
||||
self.displayResultsSong(search_results)
|
||||
self.checkSearchResult()
|
||||
self.check_search_result()
|
||||
|
||||
def searchEntire(self, search_keywords):
|
||||
return self.plugin.manager.get_all_objects(Song,
|
||||
@ -215,16 +215,16 @@ class SongMediaItem(MediaManagerItem):
|
||||
# or from the exit of the Song edit dialog. If remote editing is active
|
||||
# Trigger it and clean up so it will not update again.
|
||||
# Push edits to the service manager to update items
|
||||
if self.editItem and self.updateServiceOnEdit and not self.remoteTriggered:
|
||||
item = self.buildServiceItem(self.editItem)
|
||||
if self.editItem and self.updateServiceOnEdit and not self.remote_triggered:
|
||||
item = self.build_service_item(self.editItem)
|
||||
self.service_manager.replace_service_item(item)
|
||||
self.onSearchTextButtonClicked()
|
||||
self.on_search_text_button_clicked()
|
||||
log.debug(u'on_song_list_load - finished')
|
||||
|
||||
def displayResultsSong(self, searchresults):
|
||||
log.debug(u'display results Song')
|
||||
self.saveAutoSelectId()
|
||||
self.listView.clear()
|
||||
self.save_auto_select_id()
|
||||
self.list_view.clear()
|
||||
searchresults.sort(cmp=natcmp, key=lambda song: song.sort_key)
|
||||
for song in searchresults:
|
||||
# Do not display temporary songs
|
||||
@ -235,15 +235,15 @@ class SongMediaItem(MediaManagerItem):
|
||||
song_detail = u'%s (%s)' % (song_title, create_separated_list(author_list))
|
||||
song_name = QtGui.QListWidgetItem(song_detail)
|
||||
song_name.setData(QtCore.Qt.UserRole, song.id)
|
||||
self.listView.addItem(song_name)
|
||||
self.list_view.addItem(song_name)
|
||||
# Auto-select the item if name has been set
|
||||
if song.id == self.autoSelectId:
|
||||
self.listView.setCurrentItem(song_name)
|
||||
self.list_view.setCurrentItem(song_name)
|
||||
self.autoSelectId = -1
|
||||
|
||||
def displayResultsAuthor(self, searchresults):
|
||||
log.debug(u'display results Author')
|
||||
self.listView.clear()
|
||||
self.list_view.clear()
|
||||
for author in searchresults:
|
||||
for song in author.songs:
|
||||
# Do not display temporary songs
|
||||
@ -252,11 +252,11 @@ class SongMediaItem(MediaManagerItem):
|
||||
song_detail = u'%s (%s)' % (author.display_name, song.title)
|
||||
song_name = QtGui.QListWidgetItem(song_detail)
|
||||
song_name.setData(QtCore.Qt.UserRole, song.id)
|
||||
self.listView.addItem(song_name)
|
||||
self.list_view.addItem(song_name)
|
||||
|
||||
def displayResultsBook(self, searchresults, song_number=False):
|
||||
log.debug(u'display results Book')
|
||||
self.listView.clear()
|
||||
self.list_view.clear()
|
||||
for book in searchresults:
|
||||
songs = sorted(book.songs, key=lambda song:
|
||||
int(re.match(r'[0-9]+', u'0' + song.song_number).group()))
|
||||
@ -269,16 +269,16 @@ class SongMediaItem(MediaManagerItem):
|
||||
song_detail = u'%s - %s (%s)' % (book.name, song.song_number, song.title)
|
||||
song_name = QtGui.QListWidgetItem(song_detail)
|
||||
song_name.setData(QtCore.Qt.UserRole, song.id)
|
||||
self.listView.addItem(song_name)
|
||||
self.list_view.addItem(song_name)
|
||||
|
||||
def onClearTextButtonClick(self):
|
||||
"""
|
||||
Clear the search text.
|
||||
"""
|
||||
self.searchTextEdit.clear()
|
||||
self.onSearchTextButtonClicked()
|
||||
self.search_text_edit.clear()
|
||||
self.on_search_text_button_clicked()
|
||||
|
||||
def onSearchTextEditChanged(self, text):
|
||||
def on_search_text_edit_changed(self, text):
|
||||
"""
|
||||
If search as type enabled invoke the search on each key press.
|
||||
If the Lyrics are being searched do not start till 7 characters
|
||||
@ -286,12 +286,12 @@ class SongMediaItem(MediaManagerItem):
|
||||
"""
|
||||
if self.searchAsYouType:
|
||||
search_length = 1
|
||||
if self.searchTextEdit.current_search_type() == SongSearch.Entire:
|
||||
if self.search_text_edit.current_search_type() == SongSearch.Entire:
|
||||
search_length = 4
|
||||
elif self.searchTextEdit.current_search_type() == SongSearch.Lyrics:
|
||||
elif self.search_text_edit.current_search_type() == SongSearch.Lyrics:
|
||||
search_length = 3
|
||||
if len(text) > search_length:
|
||||
self.onSearchTextButtonClicked()
|
||||
self.on_search_text_button_clicked()
|
||||
elif not text:
|
||||
self.onClearTextButtonClick()
|
||||
|
||||
@ -307,12 +307,12 @@ class SongMediaItem(MediaManagerItem):
|
||||
self.exportWizard = SongExportForm(self, self.plugin)
|
||||
self.exportWizard.exec_()
|
||||
|
||||
def onNewClick(self):
|
||||
log.debug(u'onNewClick')
|
||||
def on_new_click(self):
|
||||
log.debug(u'on_new_click')
|
||||
self.editSongForm.new_song()
|
||||
self.editSongForm.exec_()
|
||||
self.onClearTextButtonClick()
|
||||
self.onSelectionChange()
|
||||
self.on_selection_change()
|
||||
self.autoSelectId = -1
|
||||
|
||||
def onSongMaintenanceClick(self):
|
||||
@ -333,21 +333,21 @@ class SongMediaItem(MediaManagerItem):
|
||||
self.autoSelectId = -1
|
||||
self.on_song_list_load()
|
||||
self.remoteSong = song_id
|
||||
self.remoteTriggered = True
|
||||
item = self.buildServiceItem(remote=True)
|
||||
self.remote_triggered = True
|
||||
item = self.build_service_item(remote=True)
|
||||
self.remoteSong = -1
|
||||
self.remoteTriggered = None
|
||||
self.remote_triggered = None
|
||||
if item:
|
||||
return item
|
||||
return None
|
||||
|
||||
def onEditClick(self):
|
||||
def on_edit_click(self):
|
||||
"""
|
||||
Edit a song
|
||||
"""
|
||||
log.debug(u'onEditClick')
|
||||
if check_item_selected(self.listView, UiStrings().SelectEdit):
|
||||
self.editItem = self.listView.currentItem()
|
||||
log.debug(u'on_edit_click')
|
||||
if check_item_selected(self.list_view, UiStrings().SelectEdit):
|
||||
self.editItem = self.list_view.currentItem()
|
||||
item_id = self.editItem.data(QtCore.Qt.UserRole)
|
||||
self.editSongForm.load_song(item_id, False)
|
||||
self.editSongForm.exec_()
|
||||
@ -355,12 +355,12 @@ class SongMediaItem(MediaManagerItem):
|
||||
self.on_song_list_load()
|
||||
self.editItem = None
|
||||
|
||||
def onDeleteClick(self):
|
||||
def on_delete_click(self):
|
||||
"""
|
||||
Remove a song from the list and database
|
||||
"""
|
||||
if check_item_selected(self.listView, UiStrings().SelectDelete):
|
||||
items = self.listView.selectedIndexes()
|
||||
if check_item_selected(self.list_view, UiStrings().SelectDelete):
|
||||
items = self.list_view.selectedIndexes()
|
||||
if QtGui.QMessageBox.question(self,
|
||||
UiStrings().ConfirmDelete,
|
||||
translate('SongsPlugin.MediaItem', 'Are you sure you want to delete the %n selected song(s)?', '',
|
||||
@ -388,15 +388,15 @@ class SongMediaItem(MediaManagerItem):
|
||||
self.main_window.increment_progress_bar()
|
||||
self.main_window.finished_progress_bar()
|
||||
self.application.set_normal_cursor()
|
||||
self.onSearchTextButtonClicked()
|
||||
self.on_search_text_button_clicked()
|
||||
|
||||
def onCloneClick(self):
|
||||
"""
|
||||
Clone a Song
|
||||
"""
|
||||
log.debug(u'onCloneClick')
|
||||
if check_item_selected(self.listView, UiStrings().SelectEdit):
|
||||
self.editItem = self.listView.currentItem()
|
||||
if check_item_selected(self.list_view, UiStrings().SelectEdit):
|
||||
self.editItem = self.list_view.currentItem()
|
||||
item_id = self.editItem.data(QtCore.Qt.UserRole)
|
||||
old_song = self.plugin.manager.get_object(Song, item_id)
|
||||
song_xml = self.openLyrics.song_to_xml(old_song)
|
||||
@ -406,10 +406,13 @@ class SongMediaItem(MediaManagerItem):
|
||||
self.plugin.manager.save_object(new_song)
|
||||
self.on_song_list_load()
|
||||
|
||||
def generateSlideData(self, service_item, item=None, xmlVersion=False,
|
||||
def generate_slide_data(self, service_item, item=None, xmlVersion=False,
|
||||
remote=False, context=ServiceItemContext.Service):
|
||||
log.debug(u'generateSlideData: %s, %s, %s' % (service_item, item, self.remoteSong))
|
||||
item_id = self._getIdOfItemToGenerate(item, self.remoteSong)
|
||||
"""
|
||||
Generate the slide data. Needs to be implemented by the plugin.
|
||||
"""
|
||||
log.debug(u'generate_slide_data: %s, %s, %s' % (service_item, item, self.remoteSong))
|
||||
item_id = self._get_id_of_item_to_generate(item, self.remoteSong)
|
||||
service_item.add_capability(ItemCapabilities.CanEdit)
|
||||
service_item.add_capability(ItemCapabilities.CanPreview)
|
||||
service_item.add_capability(ItemCapabilities.CanLoop)
|
||||
@ -478,11 +481,11 @@ class SongMediaItem(MediaManagerItem):
|
||||
service_item.background_audio = [m.file_name for m in song.media_files]
|
||||
return True
|
||||
|
||||
def serviceLoad(self, item):
|
||||
def service_load(self, item):
|
||||
"""
|
||||
Triggered by a song being loaded by the service manager.
|
||||
"""
|
||||
log.debug(u'serviceLoad')
|
||||
log.debug(u'service_load')
|
||||
if self.plugin.status != PluginStatus.Active or not item.data_string:
|
||||
return
|
||||
if item.data_string[u'title'].find(u'@') == -1:
|
||||
@ -522,7 +525,7 @@ class SongMediaItem(MediaManagerItem):
|
||||
if item.background_audio:
|
||||
self._updateBackgroundAudio(song, item)
|
||||
editId = song.id
|
||||
self.onSearchTextButtonClicked()
|
||||
self.on_search_text_button_clicked()
|
||||
elif add_song and not self.addSongFromService:
|
||||
# Make sure we temporary import formatting tags.
|
||||
song = self.openLyrics.xml_to_song(item.xml_version, True)
|
||||
|
@ -167,7 +167,7 @@ class SongsPlugin(Plugin):
|
||||
clean_song(self.manager, song)
|
||||
progress_dialog.setValue(number + 1)
|
||||
self.manager.save_objects(songs)
|
||||
self.media_item.onSearchTextButtonClicked()
|
||||
self.media_item.on_search_text_button_clicked()
|
||||
|
||||
def on_song_import_item_clicked(self):
|
||||
if self.media_item:
|
||||
@ -275,7 +275,7 @@ class SongsPlugin(Plugin):
|
||||
importer.doImport(progress)
|
||||
self.application.process_events()
|
||||
progress.setValue(song_count)
|
||||
self.media_item.onSearchTextButtonClicked()
|
||||
self.media_item.on_search_text_button_clicked()
|
||||
|
||||
def finalise(self):
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user