- only show the context menu if we are over an item

- ServiceManager clean ups

bzr-revno: 1539
This commit is contained in:
Andreas Preikschat 2011-05-13 18:42:48 +02:00
commit 998411ed9b
3 changed files with 80 additions and 86 deletions

View File

@ -244,7 +244,7 @@ class MediaManagerItem(QtGui.QWidget):
""" """
# Add the List widget # Add the List widget
self.listView = ListWidgetWithDnD(self, self.plugin.name) self.listView = ListWidgetWithDnD(self, self.plugin.name)
self.listView.uniformItemSizes = True self.listView.setUniformItemSizes(True)
self.listView.setSpacing(1) self.listView.setSpacing(1)
self.listView.setSelectionMode( self.listView.setSelectionMode(
QtGui.QAbstractItemView.ExtendedSelection) QtGui.QAbstractItemView.ExtendedSelection)
@ -254,54 +254,49 @@ class MediaManagerItem(QtGui.QWidget):
# Add to pageLayout # Add to pageLayout
self.pageLayout.addWidget(self.listView) self.pageLayout.addWidget(self.listView)
# define and add the context menu # define and add the context menu
self.listView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.listView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
if self.hasEditIcon: if self.hasEditIcon:
self.listView.addAction( context_menu_action(
context_menu_action( self.listView, u':/general/general_edit.png',
self.listView, u':/general/general_edit.png', self.plugin.getString(StringContent.Edit)[u'title'],
self.plugin.getString(StringContent.Edit)[u'title'], self.onEditClick)
self.onEditClick, context=QtCore.Qt.WidgetShortcut)) context_menu_separator(self.listView)
self.listView.addAction(context_menu_separator(self.listView))
if self.hasDeleteIcon: if self.hasDeleteIcon:
self.listView.addAction(
context_menu_action(
self.listView, u':/general/general_delete.png',
self.plugin.getString(StringContent.Delete)[u'title'],
self.onDeleteClick, [QtCore.Qt.Key_Delete],
context=QtCore.Qt.WidgetShortcut))
self.listView.addAction(context_menu_separator(self.listView))
self.listView.addAction(
context_menu_action( context_menu_action(
self.listView, u':/general/general_preview.png', self.listView, u':/general/general_delete.png',
self.plugin.getString(StringContent.Preview)[u'title'], self.plugin.getString(StringContent.Delete)[u'title'],
self.onPreviewClick, [QtCore.Qt.Key_Enter, self.onDeleteClick, [QtCore.Qt.Key_Delete])
QtCore.Qt.Key_Return], context=QtCore.Qt.WidgetShortcut)) context_menu_separator(self.listView)
self.listView.addAction( context_menu_action(
context_menu_action( self.listView, u':/general/general_preview.png',
self.listView, u':/general/general_live.png', self.plugin.getString(StringContent.Preview)[u'title'],
self.plugin.getString(StringContent.Live)[u'title'], self.onPreviewClick, [QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return])
self.onLiveClick, [QtCore.Qt.ShiftModifier + \ context_menu_action(
QtCore.Qt.Key_Enter, QtCore.Qt.ShiftModifier + \ self.listView, u':/general/general_live.png',
QtCore.Qt.Key_Return], context=QtCore.Qt.WidgetShortcut)) self.plugin.getString(StringContent.Live)[u'title'],
self.listView.addAction( self.onLiveClick, [QtCore.Qt.ShiftModifier + QtCore.Qt.Key_Enter,
QtCore.Qt.ShiftModifier + QtCore.Qt.Key_Return])
context_menu_action(
self.listView, u':/general/general_add.png',
self.plugin.getString(StringContent.Service)[u'title'],
self.onAddClick, [QtCore.Qt.Key_Plus, QtCore.Qt.Key_Equal])
if self.addToServiceItem:
context_menu_action( context_menu_action(
self.listView, u':/general/general_add.png', self.listView, u':/general/general_add.png',
self.plugin.getString(StringContent.Service)[u'title'], translate('OpenLP.MediaManagerItem',
self.onAddClick, [QtCore.Qt.Key_Plus, QtCore.Qt.Key_Equal], '&Add to selected Service Item'), self.onAddEditClick)
context=QtCore.Qt.WidgetShortcut)) # Create the context menu and add all actions from the listView.
if self.addToServiceItem: self.menu = QtGui.QMenu()
self.listView.addAction( self.menu.addActions(self.listView.actions())
context_menu_action(
self.listView, u':/general/general_add.png',
translate('OpenLP.MediaManagerItem',
'&Add to selected Service Item'),
self.onAddEditClick, context=QtCore.Qt.WidgetShortcut))
QtCore.QObject.connect(self.listView, QtCore.QObject.connect(self.listView,
QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), QtCore.SIGNAL(u'doubleClicked(QModelIndex)'),
self.onClickPressed) self.onClickPressed)
QtCore.QObject.connect(self.listView, QtCore.QObject.connect(self.listView,
QtCore.SIGNAL(u'itemSelectionChanged()'), QtCore.SIGNAL(u'itemSelectionChanged()'),
self.onSelectionChange) self.onSelectionChange)
QtCore.QObject.connect(self.listView,
QtCore.SIGNAL('customContextMenuRequested(QPoint)'),
self.contextMenu)
def initialise(self): def initialise(self):
""" """
@ -354,6 +349,15 @@ class MediaManagerItem(QtGui.QWidget):
self.settingsSection, self.getFileList()) self.settingsSection, self.getFileList())
Receiver.send_message(u'cursor_normal') Receiver.send_message(u'cursor_normal')
def contextMenu(self, point):
item = self.listView.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))
def getFileList(self): def getFileList(self):
""" """
Return the current list of files Return the current list of files

View File

@ -329,9 +329,9 @@ def shortcut_action(parent, name, shortcuts, function, icon=None, checked=None,
return action return action
def context_menu_action(base, icon, text, slot, shortcuts=None, category=None, def context_menu_action(base, icon, text, slot, shortcuts=None, category=None,
context=QtCore.Qt.WindowShortcut): context=QtCore.Qt.WidgetShortcut):
""" """
Utility method to help build context menus for plugins Utility method to help build context menus.
``base`` ``base``
The parent menu to add this menu item to The parent menu to add this menu item to
@ -350,7 +350,7 @@ def context_menu_action(base, icon, text, slot, shortcuts=None, category=None,
``category`` ``category``
The category the shortcut should be listed in the shortcut dialog. If The category the shortcut should be listed in the shortcut dialog. If
left to None, then the action will be hidden in the shortcut dialog. left to ``None``, then the action will be hidden in the shortcut dialog.
``context`` ``context``
The context the shortcut is valid. The context the shortcut is valid.
@ -364,11 +364,12 @@ def context_menu_action(base, icon, text, slot, shortcuts=None, category=None,
action.setShortcutContext(context) action.setShortcutContext(context)
action_list = ActionList.get_instance() action_list = ActionList.get_instance()
action_list.add_action(action) action_list.add_action(action)
base.addAction(action)
return action return action
def context_menu(base, icon, text): def context_menu(base, icon, text):
""" """
Utility method to help build context menus for plugins Utility method to help build context menus.
``base`` ``base``
The parent object to add this menu to The parent object to add this menu to
@ -392,6 +393,7 @@ def context_menu_separator(base):
""" """
action = QtGui.QAction(u'', base) action = QtGui.QAction(u'', base)
action.setSeparator(True) action.setSeparator(True)
base.addAction(action)
return action return action
def add_widget_completer(cache, widget): def add_widget_completer(cache, widget):

View File

@ -36,7 +36,7 @@ from openlp.core.lib import OpenLPToolbar, ServiceItem, Receiver, build_icon, \
ItemCapabilities, SettingsManager, translate ItemCapabilities, SettingsManager, translate
from openlp.core.lib.theme import ThemeLevel from openlp.core.lib.theme import ThemeLevel
from openlp.core.lib.ui import UiStrings, critical_error_message_box, \ from openlp.core.lib.ui import UiStrings, critical_error_message_box, \
context_menu_action, find_and_set_in_combo_box context_menu_action, context_menu_separator, find_and_set_in_combo_box
from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm
from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.ui.printserviceform import PrintServiceForm
from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \ from openlp.core.utils import AppLocation, delete_file, file_is_unicode, \
@ -301,31 +301,34 @@ class ServiceManager(QtGui.QWidget):
self.addToAction.setIcon(build_icon(u':/general/general_edit.png')) self.addToAction.setIcon(build_icon(u':/general/general_edit.png'))
# build the context menu # build the context menu
self.menu = QtGui.QMenu() self.menu = QtGui.QMenu()
self.editAction = self.menu.addAction( self.editAction = context_menu_action(
translate('OpenLP.ServiceManager', '&Edit Item')) self.menu, u':/general/general_edit.png',
self.editAction.setIcon(build_icon(u':/general/general_edit.png')) translate('OpenLP.ServiceManager', '&Edit Item'), self.remoteEdit)
self.maintainAction = self.menu.addAction( self.maintainAction = context_menu_action(
translate('OpenLP.ServiceManager', '&Reorder Item')) self.menu, u':/general/general_edit.png',
self.maintainAction.setIcon(build_icon(u':/general/general_edit.png')) translate('OpenLP.ServiceManager', '&Reorder Item'),
self.notesAction = self.menu.addAction( self.onServiceItemEditForm)
translate('OpenLP.ServiceManager', '&Notes')) self.notesAction = context_menu_action(
self.notesAction.setIcon(build_icon(u':/services/service_notes.png')) self.menu, u':/services/service_notes.png',
self.timeAction = self.menu.addAction( translate('OpenLP.ServiceManager', '&Notes'),
translate('OpenLP.ServiceManager', '&Start Time')) self.onServiceItemNoteForm)
self.timeAction.setIcon(build_icon(u':/media/media_time.png')) self.timeAction = context_menu_action(
self.deleteAction = self.menu.addAction( self.menu, u':/media/media_time.png',
translate('OpenLP.ServiceManager', '&Delete From Service')) translate('OpenLP.ServiceManager', '&Start Time'),
self.deleteAction.setIcon(build_icon(u':/general/general_delete.png')) self.onStartTimeForm)
self.sep1 = self.menu.addAction(u'') self.deleteAction = context_menu_action(
self.sep1.setSeparator(True) self.menu, u':/general/general_delete.png',
self.previewAction = self.menu.addAction( translate('OpenLP.ServiceManager', '&Delete From Service'),
translate('OpenLP.ServiceManager', 'Show &Preview')) self.onDeleteFromService)
self.previewAction.setIcon(build_icon(u':/general/general_preview.png')) context_menu_separator(self.menu)
self.liveAction = self.menu.addAction( self.previewAction = context_menu_action(
translate('OpenLP.ServiceManager', 'Show &Live')) self.menu, u':/general/general_preview.png',
self.liveAction.setIcon(build_icon(u':/general/general_live.png')) translate('OpenLP.ServiceManager', 'Show &Preview'),
self.sep2 = self.menu.addAction(u'') self.makePreview)
self.sep2.setSeparator(True) self.liveAction = context_menu_action(
self.menu, u':/general/general_live.png',
translate('OpenLP.ServiceManager', 'Show &Live'), self.makeLive)
context_menu_separator(self.menu)
self.themeMenu = QtGui.QMenu( self.themeMenu = QtGui.QMenu(
translate('OpenLP.ServiceManager', '&Change Item Theme')) translate('OpenLP.ServiceManager', '&Change Item Theme'))
self.menu.addMenu(self.themeMenu) self.menu.addMenu(self.themeMenu)
@ -675,20 +678,6 @@ class ServiceManager(QtGui.QWidget):
if serviceItem[u'service_item'].is_text(): if serviceItem[u'service_item'].is_text():
self.themeMenu.menuAction().setVisible(True) self.themeMenu.menuAction().setVisible(True)
action = self.menu.exec_(self.serviceManagerList.mapToGlobal(point)) action = self.menu.exec_(self.serviceManagerList.mapToGlobal(point))
if action == self.editAction:
self.remoteEdit()
elif action == self.maintainAction:
self.onServiceItemEditForm()
elif action == self.deleteAction:
self.onDeleteFromService()
elif action == self.notesAction:
self.onServiceItemNoteForm()
elif action == self.timeAction:
self.onStartTimeForm()
elif action == self.previewAction:
self.makePreview()
elif action == self.liveAction:
self.makeLive()
def onServiceItemNoteForm(self): def onServiceItemNoteForm(self):
item = self.findServiceItem()[0] item = self.findServiceItem()[0]
@ -840,7 +829,7 @@ class ServiceManager(QtGui.QWidget):
correct state. correct state.
""" """
pos = item.data(0, QtCore.Qt.UserRole).toInt()[0] pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
self.serviceItems[pos -1 ][u'expanded'] = False self.serviceItems[pos - 1][u'expanded'] = False
def onExpandAll(self): def onExpandAll(self):
""" """
@ -1288,9 +1277,8 @@ class ServiceManager(QtGui.QWidget):
self.themeComboBox.addItem(u'') self.themeComboBox.addItem(u'')
for theme in theme_list: for theme in theme_list:
self.themeComboBox.addItem(theme) self.themeComboBox.addItem(theme)
action = context_menu_action(self.serviceManagerList, None, theme, context_menu_action(self.themeMenu, None, theme,
self.onThemeChangeAction, context=QtCore.Qt.WidgetShortcut) self.onThemeChangeAction)
self.themeMenu.addAction(action)
find_and_set_in_combo_box(self.themeComboBox, self.service_theme) find_and_set_in_combo_box(self.themeComboBox, self.service_theme)
self.mainwindow.renderer.set_service_theme(self.service_theme) self.mainwindow.renderer.set_service_theme(self.service_theme)
self.regenerateServiceItems() self.regenerateServiceItems()