← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/svg into lp:openlp

 

Tim Bentley has proposed merging lp:~trb143/openlp/svg into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~trb143/openlp/svg/+merge/343242
-- 
Your team OpenLP Core is requested to review the proposed merge of lp:~trb143/openlp/svg into lp:openlp.
=== modified file 'openlp/core/api/tab.py'
--- openlp/core/api/tab.py	2018-02-11 21:52:04 +0000
+++ openlp/core/api/tab.py	2018-04-13 20:29:40 +0000
@@ -41,8 +41,6 @@
         self.icon_path = ':/plugins/plugin_remote.png'
         advanced_translated = translate('OpenLP.AdvancedTab', 'Advanced')
         super(ApiTab, self).__init__(parent, 'api', advanced_translated)
-        self.define_main_window_icon()
-        self.generate_icon()
 
     def setupUi(self):
         self.setObjectName('ApiTab')
@@ -155,24 +153,6 @@
         self.thumbnails_check_box.stateChanged.connect(self.on_thumbnails_check_box_changed)
         self.address_edit.textChanged.connect(self.set_urls)
 
-    def define_main_window_icon(self):
-        """
-        Define an icon on the main window to show the state of the server
-        :return:
-        """
-        self.remote_server_icon = QtWidgets.QLabel(self.main_window.status_bar)
-        size_policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
-        size_policy.setHorizontalStretch(0)
-        size_policy.setVerticalStretch(0)
-        size_policy.setHeightForWidth(self.remote_server_icon.sizePolicy().hasHeightForWidth())
-        self.remote_server_icon.setSizePolicy(size_policy)
-        self.remote_server_icon.setFrameShadow(QtWidgets.QFrame.Plain)
-        self.remote_server_icon.setLineWidth(1)
-        self.remote_server_icon.setScaledContents(True)
-        self.remote_server_icon.setFixedSize(20, 20)
-        self.remote_server_icon.setObjectName('remote_server_icon')
-        self.main_window.status_bar.insertPermanentWidget(2, self.remote_server_icon)
-
     def retranslateUi(self):
         self.tab_title_visible = translate('RemotePlugin.RemoteTab', 'Remote Interface')
         self.server_settings_group_box.setTitle(translate('RemotePlugin.RemoteTab', 'Server Settings'))
@@ -280,19 +260,3 @@
         # we have a set value convert to True/False
         if check_state == QtCore.Qt.Checked:
             self.thumbnails = True
-
-    def generate_icon(self):
-        """
-        Generate icon for main window
-        """
-        self.remote_server_icon.hide()
-        icon = QtGui.QImage(':/remote/network_server.png')
-        icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
-        if Settings().value(self.settings_section + '/authentication enabled'):
-            overlay = QtGui.QImage(':/remote/network_auth.png')
-            overlay = overlay.scaled(60, 60, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
-            painter = QtGui.QPainter(icon)
-            painter.drawImage(20, 0, overlay)
-            painter.end()
-        self.remote_server_icon.setPixmap(QtGui.QPixmap.fromImage(icon))
-        self.remote_server_icon.show()

=== modified file 'openlp/core/app.py'
--- openlp/core/app.py	2018-03-29 16:25:10 +0000
+++ openlp/core/app.py	2018-04-13 20:29:40 +0000
@@ -404,6 +404,7 @@
     if not Settings().value('core/has run wizard'):
         if not FirstTimeLanguageForm().exec():
             # if cancel then stop processing
+            server.close_server()
             sys.exit()
     # i18n Set Language
     language = LanguageManager.get_language()

=== modified file 'openlp/core/common/i18n.py'
--- openlp/core/common/i18n.py	2018-03-29 15:16:55 +0000
+++ openlp/core/common/i18n.py	2018-04-13 20:29:40 +0000
@@ -339,9 +339,10 @@
         """
         if not cls.__instance__:
             cls.__instance__ = object.__new__(cls)
+            cls.load(cls)
         return cls.__instance__
 
-    def __init__(self):
+    def load(self):
         """
         These strings should need a good reason to be retranslated elsewhere.
         Should some/more/less of these have an & attached?

=== modified file 'openlp/core/lib/mediamanageritem.py'
--- openlp/core/lib/mediamanageritem.py	2017-12-29 09:15:48 +0000
+++ openlp/core/lib/mediamanageritem.py	2018-04-13 20:29:40 +0000
@@ -28,6 +28,7 @@
 from PyQt5 import QtCore, QtWidgets
 
 from openlp.core.common.i18n import UiStrings, translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.mixins import RegistryProperties
 from openlp.core.common.path import path_to_str, str_to_path
 from openlp.core.common.registry import Registry
@@ -165,28 +166,25 @@
         toolbar_actions = []
         # Import Button
         if self.has_import_icon:
-            toolbar_actions.append(['Import', StringContent.Import,
-                                    ':/general/general_import.png', self.on_import_click])
+            toolbar_actions.append(['Import', StringContent.Import, UiIcons().download, self.on_import_click])
         # Load Button
         if self.has_file_icon:
-            toolbar_actions.append(['Load', StringContent.Load, ':/general/general_open.png', self.on_file_click])
+            toolbar_actions.append(['Load', StringContent.Load, UiIcons().open, self.on_file_click])
         # New Button
         if self.has_new_icon:
-            toolbar_actions.append(['New', StringContent.New, ':/general/general_new.png', self.on_new_click])
+            toolbar_actions.append(['New', StringContent.New, UiIcons().new, self.on_new_click])
         # Edit Button
         if self.has_edit_icon:
-            toolbar_actions.append(['Edit', StringContent.Edit, ':/general/general_edit.png', self.on_edit_click])
+            toolbar_actions.append(['Edit', StringContent.Edit, UiIcons().edit, self.on_edit_click])
         # Delete Button
         if self.has_delete_icon:
-            toolbar_actions.append(['Delete', StringContent.Delete,
-                                    ':/general/general_delete.png', self.on_delete_click])
+            toolbar_actions.append(['Delete', StringContent.Delete, UiIcons().delete, self.on_delete_click])
         # Preview
-        toolbar_actions.append(['Preview', StringContent.Preview,
-                                ':/general/general_preview.png', self.on_preview_click])
+        toolbar_actions.append(['Preview', StringContent.Preview, UiIcons().preview, self.on_preview_click])
         # Live Button
-        toolbar_actions.append(['Live', StringContent.Live, ':/general/general_live.png', self.on_live_click])
+        toolbar_actions.append(['Live', StringContent.Live, UiIcons().live, self.on_live_click])
         # Add to service Button
-        toolbar_actions.append(['Service', StringContent.Service, ':/general/general_add.png', self.on_add_click])
+        toolbar_actions.append(['Service', StringContent.Service, UiIcons().add, self.on_add_click])
         for action in toolbar_actions:
             if action[0] == StringContent.Preview:
                 self.toolbar.addSeparator()
@@ -207,21 +205,21 @@
         if self.has_edit_icon:
             create_widget_action(self.list_view,
                                  text=self.plugin.get_string(StringContent.Edit)['title'],
-                                 icon=':/general/general_edit.png',
+                                 icon=UiIcons().edit,
                                  triggers=self.on_edit_click)
             create_widget_action(self.list_view, separator=True)
         create_widget_action(self.list_view,
                              'listView{plugin}{preview}Item'.format(plugin=self.plugin.name.title(),
                                                                     preview=StringContent.Preview.title()),
                              text=self.plugin.get_string(StringContent.Preview)['title'],
-                             icon=':/general/general_preview.png',
+                             icon=UiIcons().preview,
                              can_shortcuts=True,
                              triggers=self.on_preview_click)
         create_widget_action(self.list_view,
                              'listView{plugin}{live}Item'.format(plugin=self.plugin.name.title(),
                                                                  live=StringContent.Live.title()),
                              text=self.plugin.get_string(StringContent.Live)['title'],
-                             icon=':/general/general_live.png',
+                             icon=UiIcons().live,
                              can_shortcuts=True,
                              triggers=self.on_live_click)
         create_widget_action(self.list_view,
@@ -229,7 +227,7 @@
                                                                     service=StringContent.Service.title()),
                              can_shortcuts=True,
                              text=self.plugin.get_string(StringContent.Service)['title'],
-                             icon=':/general/general_add.png',
+                             icon=UiIcons().add,
                              triggers=self.on_add_click)
         if self.has_delete_icon:
             create_widget_action(self.list_view, separator=True)
@@ -237,13 +235,13 @@
                                  'listView{plugin}{delete}Item'.format(plugin=self.plugin.name.title(),
                                                                        delete=StringContent.Delete.title()),
                                  text=self.plugin.get_string(StringContent.Delete)['title'],
-                                 icon=':/general/general_delete.png',
+                                 icon=UiIcons().delete,
                                  can_shortcuts=True, triggers=self.on_delete_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=':/general/general_add.png',
+                                 icon=UiIcons().add,
                                  triggers=self.on_add_edit_click)
         self.add_custom_context_actions()
         # Create the context menu and add all actions from the list_view.

=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py	2018-02-18 16:16:52 +0000
+++ openlp/core/lib/serviceitem.py	2018-04-13 20:29:40 +0000
@@ -35,6 +35,7 @@
 from openlp.core.common import md5_hash
 from openlp.core.common.applocation import AppLocation
 from openlp.core.common.i18n import translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.mixins import RegistryProperties
 from openlp.core.common.path import Path
 from openlp.core.common.settings import Settings
@@ -236,7 +237,18 @@
         :param icon: A string to an icon in the resources or on disk.
         """
         self.icon = icon
-        self.iconic_representation = build_icon(icon)
+        if self.name == 'songs':
+            self.iconic_representation = UiIcons().music
+        elif self.name == 'bibles':
+            self.iconic_representation = UiIcons().bible
+        elif self.name == 'presentations':
+            self.iconic_representation = UiIcons().presentation
+        elif self.name == 'images':
+            self.iconic_representation = UiIcons().picture
+        elif self.name == 'medias':
+            self.iconic_representation = UiIcons().video
+        else:
+            self.iconic_representation = UiIcons().clone
 
     def render(self, provides_own_theme_data=False):
         """

=== modified file 'openlp/core/lib/ui.py'
--- openlp/core/lib/ui.py	2017-12-29 09:15:48 +0000
+++ openlp/core/lib/ui.py	2018-04-13 20:29:40 +0000
@@ -31,6 +31,7 @@
 from openlp.core.common.i18n import UiStrings, translate
 from openlp.core.common.registry import Registry
 from openlp.core.lib import build_icon
+from openlp.core.ui.icons import UiIcons
 
 log = logging.getLogger(__name__)
 
@@ -161,10 +162,10 @@
             kwargs.setdefault('text', UiStrings().Delete)
             kwargs.setdefault('tooltip', translate('OpenLP.Ui', 'Delete the selected item.'))
         elif role == 'up':
-            kwargs.setdefault('icon', ':/services/service_up.png')
+            kwargs.setdefault('icon', UiIcons().arrow_up)
             kwargs.setdefault('tooltip', translate('OpenLP.Ui', 'Move selection up one position.'))
         elif role == 'down':
-            kwargs.setdefault('icon', ':/services/service_down.png')
+            kwargs.setdefault('icon', UiIcons().arrow_down)
             kwargs.setdefault('tooltip', translate('OpenLP.Ui', 'Move selection down one position.'))
         else:
             log.warning('The role "{role}" is not defined in create_push_button().'.format(role=role))

=== modified file 'openlp/core/projectors/manager.py'
--- openlp/core/projectors/manager.py	2018-02-11 11:42:13 +0000
+++ openlp/core/projectors/manager.py	2018-04-13 20:29:40 +0000
@@ -30,6 +30,7 @@
 from PyQt5 import QtCore, QtGui, QtWidgets
 
 from openlp.core.common.i18n import translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.mixins import LogMixin, RegistryProperties
 from openlp.core.common.registry import RegistryBase
 from openlp.core.common.settings import Settings
@@ -103,18 +104,18 @@
         self.one_toolbar = OpenLPToolbar(widget)
         self.one_toolbar.add_toolbar_action('new_projector',
                                             text=translate('OpenLP.ProjectorManager', 'Add Projector'),
-                                            icon=':/projector/projector_new.png',
+                                            icon=UiIcons().new,
                                             tooltip=translate('OpenLP.ProjectorManager', 'Add a new projector.'),
                                             triggers=self.on_add_projector)
         # Show edit/delete when projector not connected
         self.one_toolbar.add_toolbar_action('edit_projector',
                                             text=translate('OpenLP.ProjectorManager', 'Edit Projector'),
-                                            icon=':/general/general_edit.png',
+                                            icon=UiIcons().edit,
                                             tooltip=translate('OpenLP.ProjectorManager', 'Edit selected projector.'),
                                             triggers=self.on_edit_projector)
         self.one_toolbar.add_toolbar_action('delete_projector',
                                             text=translate('OpenLP.ProjectorManager', 'Delete Projector'),
-                                            icon=':/general/general_delete.png',
+                                            icon=UiIcons().delete,
                                             tooltip=translate('OpenLP.ProjectorManager', 'Delete selected projector.'),
                                             triggers=self.on_delete_projector)
         # Show source/view when projector connected
@@ -126,7 +127,7 @@
                                             triggers=self.on_select_input)
         self.one_toolbar.add_toolbar_action('view_projector',
                                             text=translate('OpenLP.ProjectorManager', 'View Projector'),
-                                            icon=':/system/system_about.png',
+                                            icon=UiIcons().info,
                                             tooltip=translate('OpenLP.ProjectorManager',
                                                               'View selected projector information.'),
                                             triggers=self.on_status_projector)
@@ -190,7 +191,7 @@
         self.one_toolbar.add_toolbar_action('blank_projector',
                                             text=translate('OpenLP.ProjectorManager',
                                                            'Blank selected projector screen'),
-                                            icon=':/projector/projector_blank.png',
+                                            icon=UiIcons().blank,
                                             tooltip=translate('OpenLP.ProjectorManager',
                                                               'Blank selected projector screen'),
                                             triggers=self.on_blank_projector)
@@ -233,12 +234,12 @@
         self.status_action = create_widget_action(self.menu,
                                                   text=translate('OpenLP.ProjectorManager',
                                                                  '&View Projector Information'),
-                                                  icon=':/system/system_about.png',
+                                                  icon=UiIcons().info,
                                                   triggers=self.on_status_projector)
         self.edit_action = create_widget_action(self.menu,
                                                 text=translate('OpenLP.ProjectorManager',
                                                                '&Edit Projector'),
-                                                icon=':/projector/projector_edit.png',
+                                                icon=UiIcons().edit,
                                                 triggers=self.on_edit_projector)
         self.menu.addSeparator()
         self.connect_action = create_widget_action(self.menu,
@@ -271,12 +272,12 @@
         self.edit_input_action = create_widget_action(self.menu,
                                                       text=translate('OpenLP.ProjectorManager',
                                                                      'Edit Input Source'),
-                                                      icon=':/general/general_edit.png',
+                                                      icon=UiIcons().edit,
                                                       triggers=self.on_edit_input)
         self.blank_action = create_widget_action(self.menu,
                                                  text=translate('OpenLP.ProjectorManager',
                                                                 '&Blank Projector Screen'),
-                                                 icon=':/projector/projector_blank.png',
+                                                 icon=UiIcons().blank,
                                                  triggers=self.on_blank_projector)
         self.show_action = create_widget_action(self.menu,
                                                 text=translate('OpenLP.ProjectorManager',
@@ -287,7 +288,7 @@
         self.delete_action = create_widget_action(self.menu,
                                                   text=translate('OpenLP.ProjectorManager',
                                                                  '&Delete Projector'),
-                                                  icon=':/general/general_delete.png',
+                                                  icon=UiIcons().delete,
                                                   triggers=self.on_delete_projector)
         self.update_icons()
 

=== modified file 'openlp/core/server.py'
--- openlp/core/server.py	2018-03-29 19:52:59 +0000
+++ openlp/core/server.py	2018-04-13 20:29:40 +0000
@@ -53,12 +53,13 @@
         if 'OpenLP' in args:
             args.remove('OpenLP')
         # Yes, there is.
-        self.out_stream = QtCore.QTextStream(self.out_socket)
-        self.out_stream.setCodec('UTF-8')
-        self.out_socket.write(str.encode("".join(args)))
-        if not self.out_socket.waitForBytesWritten(10):
-            raise Exception(str(self.out_socket.errorString()))
-        self.out_socket.disconnectFromServer()
+        if len(args):
+            self.out_stream = QtCore.QTextStream(self.out_socket)
+            self.out_stream.setCodec('UTF-8')
+            self.out_socket.write(str.encode("".join(args)))
+            if not self.out_socket.waitForBytesWritten(10):
+                raise Exception(str(self.out_socket.errorString()))
+            self.out_socket.disconnectFromServer()
 
     def start_server(self):
         """

=== modified file 'openlp/core/ui/advancedtab.py'
--- openlp/core/ui/advancedtab.py	2017-12-29 09:15:48 +0000
+++ openlp/core/ui/advancedtab.py	2018-04-13 20:29:40 +0000
@@ -33,6 +33,7 @@
 from openlp.core.common.settings import Settings
 from openlp.core.lib import SettingsTab, build_icon
 from openlp.core.ui.style import HAS_DARK_STYLE
+from openlp.core.ui.icons import UiIcons
 from openlp.core.widgets.edits import PathEdit
 from openlp.core.widgets.enums import PathEditType
 
@@ -131,7 +132,7 @@
         self.new_data_directory_has_files_label.setWordWrap(True)
         self.data_directory_cancel_button = QtWidgets.QToolButton(self.data_directory_group_box)
         self.data_directory_cancel_button.setObjectName('data_directory_cancel_button')
-        self.data_directory_cancel_button.setIcon(build_icon(':/general/general_delete.png'))
+        self.data_directory_cancel_button.setIcon(UiIcons().delete)
         self.data_directory_copy_check_layout = QtWidgets.QHBoxLayout()
         self.data_directory_copy_check_layout.setObjectName('data_directory_copy_check_layout')
         self.data_directory_copy_check_box = QtWidgets.QCheckBox(self.data_directory_group_box)
@@ -211,7 +212,7 @@
         self.service_name_edit.setValidator(QtGui.QRegExpValidator(QtCore.QRegExp(r'[^/\\?*|<>\[\]":+]+'), self))
         self.service_name_revert_button = QtWidgets.QToolButton(self.service_name_group_box)
         self.service_name_revert_button.setObjectName('service_name_revert_button')
-        self.service_name_revert_button.setIcon(build_icon(':/general/general_revert.png'))
+        self.service_name_revert_button.setIcon(UiIcons().undo)
         self.service_name_button_layout = QtWidgets.QHBoxLayout()
         self.service_name_button_layout.setObjectName('service_name_button_layout')
         self.service_name_button_layout.addWidget(self.service_name_edit)

=== modified file 'openlp/core/ui/exceptiondialog.py'
--- openlp/core/ui/exceptiondialog.py	2017-12-29 09:15:48 +0000
+++ openlp/core/ui/exceptiondialog.py	2018-04-13 20:29:40 +0000
@@ -26,6 +26,7 @@
 from PyQt5 import QtGui, QtWidgets
 
 from openlp.core.common.i18n import translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.lib import build_icon
 from openlp.core.lib.ui import create_button, create_button_box
 
@@ -75,10 +76,10 @@
                                                 icon=':/general/general_email.png',
                                                 click=self.on_send_report_button_clicked)
         self.save_report_button = create_button(exception_dialog, 'save_report_button',
-                                                icon=':/general/general_save.png',
+                                                icon=UiIcons().save,
                                                 click=self.on_save_report_button_clicked)
         self.attach_tile_button = create_button(exception_dialog, 'attach_tile_button',
-                                                icon=':/general/general_open.png',
+                                                icon=UiIcons().open,
                                                 click=self.on_attach_file_button_clicked)
         self.button_box = create_button_box(exception_dialog, 'button_box', ['close'],
                                             [self.send_report_button, self.save_report_button, self.attach_tile_button])

=== modified file 'openlp/core/ui/formattingtagdialog.py'
--- openlp/core/ui/formattingtagdialog.py	2017-12-29 09:15:48 +0000
+++ openlp/core/ui/formattingtagdialog.py	2018-04-13 20:29:40 +0000
@@ -25,6 +25,7 @@
 from PyQt5 import QtCore, QtWidgets
 
 from openlp.core.common.i18n import UiStrings, translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.lib import build_icon
 from openlp.core.lib.ui import create_button_box
 
@@ -87,11 +88,11 @@
         self.list_data_grid_layout.addWidget(self.tag_table_widget)
         self.edit_button_layout = QtWidgets.QHBoxLayout()
         self.new_button = QtWidgets.QPushButton(formatting_tag_dialog)
-        self.new_button.setIcon(build_icon(':/general/general_new.png'))
+        self.new_button.setIcon(UiIcons().new)
         self.new_button.setObjectName('new_button')
         self.edit_button_layout.addWidget(self.new_button)
         self.delete_button = QtWidgets.QPushButton(formatting_tag_dialog)
-        self.delete_button.setIcon(build_icon(':/general/general_delete.png'))
+        self.delete_button.setIcon(UiIcons().delete)
         self.delete_button.setObjectName('delete_button')
         self.edit_button_layout.addWidget(self.delete_button)
         self.edit_button_layout.addStretch()
@@ -100,7 +101,7 @@
         self.save_button = self.button_box.button(QtWidgets.QDialogButtonBox.Save)
         self.save_button.setObjectName('save_button')
         self.restore_button = self.button_box.button(QtWidgets.QDialogButtonBox.RestoreDefaults)
-        self.restore_button.setIcon(build_icon(':/general/general_revert.png'))
+        self.restore_button.setIcon(UiIcons().undo)
         self.restore_button.setObjectName('restore_button')
         self.list_data_grid_layout.addWidget(self.button_box)
         self.retranslateUi(formatting_tag_dialog)

=== added file 'openlp/core/ui/icons.py'
--- openlp/core/ui/icons.py	1970-01-01 00:00:00 +0000
+++ openlp/core/ui/icons.py	2018-04-13 20:29:40 +0000
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection                                      #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2018 OpenLP Developers                                   #
+# --------------------------------------------------------------------------- #
+# This program is free software; you can redistribute it and/or modify it     #
+# under the terms of the GNU General Public License as published by the Free  #
+# Software Foundation; version 2 of the License.                              #
+#                                                                             #
+# This program is distributed in the hope that it will be useful, but WITHOUT #
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    #
+# more details.                                                               #
+#                                                                             #
+# You should have received a copy of the GNU General Public License along     #
+# with this program; if not, write to the Free Software Foundation, Inc., 59  #
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA                          #
+###############################################################################
+"""
+The :mod:`languages` module provides a list of icons.
+"""
+import qtawesome as qta
+
+from PyQt5 import QtGui, QtWidgets
+
+
+class UiIcons(object):
+    """
+    Provide standard icons for objects to use.
+    """
+    __instance__ = None
+
+    def __new__(cls):
+        """
+        Override the default object creation method to return a single instance.
+        """
+        if not cls.__instance__:
+            cls.__instance__ = object.__new__(cls)
+            cls.load(cls)
+        return cls.__instance__
+
+    def load(self):
+        """
+        These are the font icons used in the code.
+        """
+        palette = QtWidgets.QApplication.palette()
+        qta.set_defaults(color=palette.color(QtGui.QPalette.Active,
+                                             QtGui.QPalette.ButtonText),
+                         color_disabled=palette.color(QtGui.QPalette.Disabled,
+                                                      QtGui.QPalette.ButtonText))
+        icon_list = {
+            'add': 'fa.plus-circle',
+            'alert': 'fa.exclamation-triangle',
+            'arrow_down': 'fa.arrow-down',
+            'arrow_left': 'fa.arrow-left',
+            'arrow_right': 'fa.arrow-right',
+            'arrow_up': 'fa.arrow-up',
+            'address': 'fa.book',
+            'bible': 'fa.book',
+            'blank': 'fa.times-circle',
+            'bottom': 'fa.angle-double-down',
+            'clock': 'fa.clock-o',
+            'clone': 'fa.clone',
+            'copy': 'fa.copy',
+            'copyright': 'fa.copyright',
+            'database': 'fa.database',
+            'default': 'fa.info-circle',
+            'desktop': 'fa.desktop',
+            'delete': 'fa.trash',
+            'edit': 'fa.edit',
+            'exit': 'fa.sign-out',
+            'download': 'fa.cloud-download',
+            'info': 'fa.info',
+            'live': 'fa.camera',
+            'manual': 'fa.graduation-cap',
+            'minus': 'fa.minus',
+            'music': 'fa.music',
+            'new': 'fa.file',
+            'notes': 'fa.sticky-note',
+            'open': 'fa.map',
+            'pause': 'fa.pause',
+            'play': 'fa.play',
+            'plus': 'fa.plus',
+            'presentation': 'fa.bar-chart',
+            'preview': 'fa.laptop',
+            'picture': 'fa.picture-o',
+            'print': 'fa.print',
+            'remote': 'fa.rss',
+            'save': 'fa.save',
+            'search': 'fa.search',
+            'search_minus': 'fa.search-minus',
+            'search_plus': 'fa.search-plus',
+            'settings': 'fa.cogs',
+            'shortcuts': 'fa.wrench',
+            'stop': 'fa.stop',
+            'theme': 'fa.file-image-o',
+            'top': 'fa.angle-double-up',
+            'undo': 'fa.undo',
+            'upload': 'fa.cloud-upload',
+            'user': 'fa.user',
+            'users': 'fa.users',
+            'video': 'fa.file-video-o'
+        }
+
+        for key in icon_list:
+            try:
+                setattr(self, key, qta.icon(icon_list[key]))
+            except:
+                setattr(self, key, qta.icon('fa.plus-circle', color='red'))
+
+    @staticmethod
+    def _print_icons():
+        """
+        Have ability to dump icons to see what is available.  Can only run within an application
+        :return:
+        """
+        ico = qta._resource['iconic']
+        fa = ico.charmap['fa']
+        for ky in fa.keys():
+            print(ky, fa[ky])

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2018-02-03 14:07:07 +0000
+++ openlp/core/ui/mainwindow.py	2018-04-13 20:29:40 +0000
@@ -22,7 +22,6 @@
 """
 This is the main window, where all the action happens.
 """
-import logging
 import sys
 from datetime import datetime
 from distutils import dir_util
@@ -37,6 +36,7 @@
 from openlp.core.common.actions import ActionList, CategoryOrder
 from openlp.core.common.applocation import AppLocation
 from openlp.core.common.i18n import LanguageManager, UiStrings, translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.mixins import LogMixin, RegistryProperties
 from openlp.core.common.path import Path, copyfile, create_paths
 from openlp.core.common.registry import Registry
@@ -97,11 +97,11 @@
         self.recent_files_menu.setObjectName('recentFilesMenu')
         self.file_import_menu = QtWidgets.QMenu(self.file_menu)
         if not is_macosx():
-            self.file_import_menu.setIcon(build_icon(u':/general/general_import.png'))
+            self.file_import_menu.setIcon(UiIcons().download)
         self.file_import_menu.setObjectName('file_import_menu')
         self.file_export_menu = QtWidgets.QMenu(self.file_menu)
         if not is_macosx():
-            self.file_export_menu.setIcon(build_icon(u':/general/general_export.png'))
+            self.file_export_menu.setIcon(UiIcons().upload)
         self.file_export_menu.setObjectName('file_export_menu')
         # View Menu
         self.view_menu = QtWidgets.QMenu(self.menu_bar)
@@ -166,13 +166,13 @@
         # Create the menu items
         action_list = ActionList.get_instance()
         action_list.add_category(UiStrings().File, CategoryOrder.standard_menu)
-        self.file_new_item = create_action(main_window, 'fileNewItem', icon=':/general/general_new.png',
+        self.file_new_item = create_action(main_window, 'fileNewItem', icon=UiIcons().new,
                                            can_shortcuts=True, category=UiStrings().File,
                                            triggers=self.service_manager_contents.on_new_service_clicked)
-        self.file_open_item = create_action(main_window, 'fileOpenItem', icon=':/general/general_open.png',
+        self.file_open_item = create_action(main_window, 'fileOpenItem', icon=UiIcons().open,
                                             can_shortcuts=True, category=UiStrings().File,
                                             triggers=self.service_manager_contents.on_load_service_clicked)
-        self.file_save_item = create_action(main_window, 'fileSaveItem', icon=':/general/general_save.png',
+        self.file_save_item = create_action(main_window, 'fileSaveItem', icon=UiIcons().save,
                                             can_shortcuts=True, category=UiStrings().File,
                                             triggers=self.service_manager_contents.decide_save_method)
         self.file_save_as_item = create_action(main_window, 'fileSaveAsItem', can_shortcuts=True,
@@ -181,7 +181,7 @@
         self.print_service_order_item = create_action(main_window, 'printServiceItem', can_shortcuts=True,
                                                       category=UiStrings().File,
                                                       triggers=lambda x: PrintServiceForm().exec())
-        self.file_exit_item = create_action(main_window, 'fileExitItem', icon=':/system/system_exit.png',
+        self.file_exit_item = create_action(main_window, 'fileExitItem', icon=UiIcons().exit,
                                             can_shortcuts=True,
                                             category=UiStrings().File, triggers=main_window.close)
         # Give QT Extra Hint that this is the Exit Menu Item
@@ -239,13 +239,13 @@
         self.mode_default_item.setChecked(True)
         action_list.add_category(UiStrings().Tools, CategoryOrder.standard_menu)
         self.tools_add_tool_item = create_action(main_window,
-                                                 'toolsAddToolItem', icon=':/tools/tools_add.png',
+                                                 'toolsAddToolItem', icon=UiIcons().add,
                                                  category=UiStrings().Tools, can_shortcuts=True)
         self.tools_open_data_folder = create_action(main_window,
-                                                    'toolsOpenDataFolder', icon=':/general/general_open.png',
+                                                    'toolsOpenDataFolder', icon=UiIcons().open,
                                                     category=UiStrings().Tools, can_shortcuts=True)
         self.tools_first_time_wizard = create_action(main_window,
-                                                     'toolsFirstTimeWizard', icon=':/general/general_revert.png',
+                                                     'toolsFirstTimeWizard', icon=UiIcons().undo,
                                                      category=UiStrings().Tools, can_shortcuts=True)
         self.update_theme_images = create_action(main_window,
                                                  'updateThemeImages', category=UiStrings().Tools, can_shortcuts=True)
@@ -268,14 +268,14 @@
             language_item = create_action(main_window, key, checked=qm_list[key] == saved_language)
             add_actions(self.language_group, [language_item])
         self.settings_shortcuts_item = create_action(main_window, 'settingsShortcutsItem',
-                                                     icon=':/system/system_configure_shortcuts.png',
+                                                     icon=UiIcons().shortcuts,
                                                      category=UiStrings().Settings, can_shortcuts=True)
         # Formatting Tags were also known as display tags.
         self.formatting_tag_item = create_action(main_window, 'displayTagItem',
-                                                 icon=':/system/tag_editor.png', category=UiStrings().Settings,
+                                                 icon=UiIcons().edit, category=UiStrings().Settings,
                                                  can_shortcuts=True)
         self.settings_configure_item = create_action(main_window, 'settingsConfigureItem',
-                                                     icon=':/system/system_settings.png', can_shortcuts=True,
+                                                     icon=UiIcons().settings, can_shortcuts=True,
                                                      category=UiStrings().Settings)
         # Give QT Extra Hint that this is the Preferences Menu Item
         self.settings_configure_item.setMenuRole(QtWidgets.QAction.PreferencesRole)
@@ -284,7 +284,7 @@
         self.settings_export_item = create_action(main_window, 'settingsExportItem',
                                                   category=UiStrings().Export, can_shortcuts=True)
         action_list.add_category(UiStrings().Help, CategoryOrder.standard_menu)
-        self.about_item = create_action(main_window, 'aboutItem', icon=':/system/system_about.png',
+        self.about_item = create_action(main_window, 'aboutItem', icon=UiIcons().info,
                                         can_shortcuts=True, category=UiStrings().Help,
                                         triggers=self.on_about_item_clicked)
         # Give QT Extra Hint that this is an About Menu Item
@@ -293,7 +293,7 @@
             self.local_help_file = AppLocation.get_directory(AppLocation.AppDir) / 'OpenLP.chm'
         elif is_macosx():
             self.local_help_file = AppLocation.get_directory(AppLocation.AppDir) / '..' / 'Resources' / 'OpenLP.help'
-        self.user_manual_item = create_action(main_window, 'userManualItem', icon=':/system/system_help_contents.png',
+        self.user_manual_item = create_action(main_window, 'userManualItem', icon=UiIcons().manual,
                                               can_shortcuts=True, category=UiStrings().Help,
                                               triggers=self.on_help_clicked)
         self.web_site_item = create_action(main_window, 'webSiteItem', can_shortcuts=True, category=UiStrings().Help)
@@ -625,7 +625,7 @@
         """
         version_text = translate('OpenLP.MainWindow', 'Version {new} of OpenLP is now available for download (you are '
                                  'currently running version {current}). \n\nYou can download the latest version from '
-                                 'http://openlp.org/.').format(new=version, current=get_version()[u'full'])
+                                 'https://openlp.org/.').format(new=version, current=get_version()[u'full'])
         QtWidgets.QMessageBox.question(self, translate('OpenLP.MainWindow', 'OpenLP Version Updated'), version_text)
 
     def show(self):
@@ -775,7 +775,7 @@
         Load the OpenLP website
         """
         import webbrowser
-        webbrowser.open_new('http://openlp.org/')
+        webbrowser.open_new('https://openlp.org/')
 
     def on_help_clicked(self):
         """
@@ -786,7 +786,7 @@
             QtGui.QDesktopServices.openUrl(QtCore.QUrl.fromLocalFile(str(self.local_help_file)))
         else:
             import webbrowser
-            webbrowser.open_new('http://manual.openlp.org/')
+            webbrowser.open_new('https://manual.openlp.org/')
 
     def on_about_item_clicked(self):
         """

=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py	2018-03-29 15:16:55 +0000
+++ openlp/core/ui/servicemanager.py	2018-04-13 20:29:40 +0000
@@ -37,6 +37,7 @@
 from openlp.core.common.actions import ActionList, CategoryOrder
 from openlp.core.common.applocation import AppLocation
 from openlp.core.common.i18n import UiStrings, format_time, translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.json import OpenLPJsonDecoder, OpenLPJsonEncoder
 from openlp.core.common.mixins import LogMixin, RegistryProperties
 from openlp.core.common.path import Path, str_to_path
@@ -137,14 +138,14 @@
         self.layout.setContentsMargins(0, 0, 0, 0)
         # Create the top toolbar
         self.toolbar = OpenLPToolbar(self)
-        self.toolbar.add_toolbar_action('newService', text=UiStrings().NewService, icon=':/general/general_new.png',
+        self.toolbar.add_toolbar_action('newService', text=UiStrings().NewService, icon=UiIcons().new,
                                         tooltip=UiStrings().CreateService, triggers=self.on_new_service_clicked)
         self.toolbar.add_toolbar_action('openService', text=UiStrings().OpenService,
-                                        icon=':/general/general_open.png',
+                                        icon=UiIcons().open,
                                         tooltip=translate('OpenLP.ServiceManager', 'Load an existing service.'),
                                         triggers=self.on_load_service_clicked)
         self.toolbar.add_toolbar_action('saveService', text=UiStrings().SaveService,
-                                        icon=':/general/general_save.png',
+                                        icon=UiIcons().save,
                                         tooltip=translate('OpenLP.ServiceManager', 'Save this service.'),
                                         triggers=self.decide_save_method)
         self.toolbar.addSeparator()
@@ -178,45 +179,45 @@
         action_list.add_category(UiStrings().Service, CategoryOrder.standard_toolbar)
         self.move_top_action = self.order_toolbar.add_toolbar_action(
             'moveTop',
-            text=translate('OpenLP.ServiceManager', 'Move to &top'), icon=':/services/service_top.png',
+            text=translate('OpenLP.ServiceManager', 'Move to &top'), icon=UiIcons().top,
             tooltip=translate('OpenLP.ServiceManager', 'Move item to the top of the service.'),
             can_shortcuts=True, category=UiStrings().Service, triggers=self.on_service_top)
         self.move_up_action = self.order_toolbar.add_toolbar_action(
             'moveUp',
-            text=translate('OpenLP.ServiceManager', 'Move &up'), icon=':/services/service_up.png',
+            text=translate('OpenLP.ServiceManager', 'Move &up'), icon=UiIcons().arrow_up,
             tooltip=translate('OpenLP.ServiceManager', 'Move item up one position in the service.'),
             can_shortcuts=True, category=UiStrings().Service, triggers=self.on_service_up)
         self.move_down_action = self.order_toolbar.add_toolbar_action(
             'moveDown',
-            text=translate('OpenLP.ServiceManager', 'Move &down'), icon=':/services/service_down.png',
+            text=translate('OpenLP.ServiceManager', 'Move &down'), icon=UiIcons().arrow_down,
             tooltip=translate('OpenLP.ServiceManager', 'Move item down one position in the service.'),
             can_shortcuts=True, category=UiStrings().Service, triggers=self.on_service_down)
         self.move_bottom_action = self.order_toolbar.add_toolbar_action(
             'moveBottom',
-            text=translate('OpenLP.ServiceManager', 'Move to &bottom'), icon=':/services/service_bottom.png',
+            text=translate('OpenLP.ServiceManager', 'Move to &bottom'), icon=UiIcons().bottom,
             tooltip=translate('OpenLP.ServiceManager', 'Move item to the end of the service.'),
             can_shortcuts=True, category=UiStrings().Service, triggers=self.on_service_end)
         self.order_toolbar.addSeparator()
         self.delete_action = self.order_toolbar.add_toolbar_action(
             'delete', can_shortcuts=True,
-            text=translate('OpenLP.ServiceManager', '&Delete From Service'), icon=':/general/general_delete.png',
+            text=translate('OpenLP.ServiceManager', '&Delete From Service'), icon=UiIcons().delete,
             tooltip=translate('OpenLP.ServiceManager', 'Delete the selected item from the service.'),
             triggers=self.on_delete_from_service)
         self.order_toolbar.addSeparator()
         self.expand_action = self.order_toolbar.add_toolbar_action(
             'expand', can_shortcuts=True,
-            text=translate('OpenLP.ServiceManager', '&Expand all'), icon=':/services/service_expand_all.png',
+            text=translate('OpenLP.ServiceManager', '&Expand all'), icon=UiIcons().plus,
             tooltip=translate('OpenLP.ServiceManager', 'Expand all the service items.'),
             category=UiStrings().Service, triggers=self.on_expand_all)
         self.collapse_action = self.order_toolbar.add_toolbar_action(
             'collapse', can_shortcuts=True,
-            text=translate('OpenLP.ServiceManager', '&Collapse all'), icon=':/services/service_collapse_all.png',
+            text=translate('OpenLP.ServiceManager', '&Collapse all'), icon=UiIcons().minus,
             tooltip=translate('OpenLP.ServiceManager', 'Collapse all the service items.'),
             category=UiStrings().Service, triggers=self.on_collapse_all)
         self.order_toolbar.addSeparator()
         self.make_live_action = self.order_toolbar.add_toolbar_action(
             'make_live', can_shortcuts=True,
-            text=translate('OpenLP.ServiceManager', 'Go Live'), icon=':/general/general_live.png',
+            text=translate('OpenLP.ServiceManager', 'Go Live'), icon=UiIcons().live,
             tooltip=translate('OpenLP.ServiceManager', 'Send the selected item to Live.'),
             category=UiStrings().Service,
             triggers=self.on_make_live_action_triggered)
@@ -233,21 +234,21 @@
         # build the drag and drop context menu
         self.dnd_menu = QtWidgets.QMenu()
         self.new_action = self.dnd_menu.addAction(translate('OpenLP.ServiceManager', '&Add New Item'))
-        self.new_action.setIcon(build_icon(':/general/general_edit.png'))
+        self.new_action.setIcon(UiIcons().edit)
         self.add_to_action = self.dnd_menu.addAction(translate('OpenLP.ServiceManager', '&Add to Selected Item'))
-        self.add_to_action.setIcon(build_icon(':/general/general_edit.png'))
+        self.add_to_action.setIcon(UiIcons().edit)
         # build the context menu
         self.menu = QtWidgets.QMenu()
         self.edit_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Edit Item'),
-                                                icon=':/general/general_edit.png', triggers=self.remote_edit)
+                                                icon=UiIcons().edit, triggers=self.remote_edit)
         self.rename_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Rename...'),
-                                                  icon=':/general/general_edit.png',
+                                                  icon=UiIcons().edit,
                                                   triggers=self.on_service_item_rename)
         self.maintain_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Reorder Item'),
-                                                    icon=':/general/general_edit.png',
+                                                    icon=UiIcons().edit,
                                                     triggers=self.on_service_item_edit_form)
         self.notes_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Notes'),
-                                                 icon=':/services/service_notes.png',
+                                                 icon=UiIcons().notes,
                                                  triggers=self.on_service_item_note_form)
         self.time_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', '&Start Time'),
                                                 icon=':/media/media_time.png', triggers=self.on_start_time_form)
@@ -259,7 +260,7 @@
         self.create_custom_action = create_widget_action(self.menu,
                                                          text=translate('OpenLP.ServiceManager', 'Create New &Custom '
                                                                                                  'Slide'),
-                                                         icon=':/general/general_edit.png',
+                                                         icon=UiIcons().clone,
                                                          triggers=self.create_custom)
         self.menu.addSeparator()
         # Add AutoPlay menu actions
@@ -284,7 +285,7 @@
                                                          triggers=self.on_timed_slide_interval)
         self.menu.addSeparator()
         self.preview_action = create_widget_action(self.menu, text=translate('OpenLP.ServiceManager', 'Show &Preview'),
-                                                   icon=':/general/general_preview.png', triggers=self.make_preview)
+                                                   icon=UiIcons().preview, triggers=self.make_preview)
         # Add already existing make live action to the menu.
         self.menu.addAction(self.make_live_action)
         self.menu.addSeparator()
@@ -1169,7 +1170,7 @@
                 if service_item_from_item.notes:
                     icon = QtGui.QImage(service_item_from_item.icon)
                     icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
-                    overlay = QtGui.QImage(':/services/service_item_notes.png')
+                    overlay = QtGui.QImage(UiIcons().notes)
                     overlay = overlay.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
                     painter = QtGui.QPainter(icon)
                     painter.drawImage(0, 0, overlay)
@@ -1178,7 +1179,7 @@
                 elif service_item_from_item.temporary_edit:
                     icon = QtGui.QImage(service_item_from_item.icon)
                     icon = icon.scaled(80, 80, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
-                    overlay = QtGui.QImage(':/general/general_export.png')
+                    overlay = QtGui.QImage(UiIcons().upload)
                     overlay = overlay.scaled(40, 40, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
                     painter = QtGui.QPainter(icon)
                     painter.drawImage(40, 0, overlay)
@@ -1187,7 +1188,7 @@
                 else:
                     tree_widget_item.setIcon(0, service_item_from_item.iconic_representation)
             else:
-                tree_widget_item.setIcon(0, build_icon(':/general/general_delete.png'))
+                tree_widget_item.setIcon(0, UiIcons().delete)
             tree_widget_item.setText(0, service_item_from_item.get_display_title())
             tips = []
             if service_item_from_item.temporary_edit:

=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py	2018-03-18 07:45:46 +0000
+++ openlp/core/ui/slidecontroller.py	2018-04-13 20:29:40 +0000
@@ -39,6 +39,7 @@
 from openlp.core.lib import ItemCapabilities, ServiceItem, ImageSource, ServiceItemAction, build_icon, build_html
 from openlp.core.lib.ui import create_action
 from openlp.core.ui import HideMode, MainDisplay, Display, DisplayControllerType
+from openlp.core.ui.icons import UiIcons
 from openlp.core.widgets.toolbar import OpenLPToolbar
 from openlp.core.widgets.views import ListPreviewWidget
 
@@ -212,14 +213,14 @@
         self.toolbar.setSizePolicy(size_toolbar_policy)
         self.previous_item = create_action(self, 'previousItem_' + self.type_prefix,
                                            text=translate('OpenLP.SlideController', 'Previous Slide'),
-                                           icon=':/slides/slide_previous.png',
+                                           icon=UiIcons().arrow_left,
                                            tooltip=translate('OpenLP.SlideController', 'Move to previous.'),
                                            can_shortcuts=True, context=QtCore.Qt.WidgetWithChildrenShortcut,
                                            category=self.category, triggers=self.on_slide_selected_previous)
         self.toolbar.addAction(self.previous_item)
         self.next_item = create_action(self, 'nextItem_' + self.type_prefix,
                                        text=translate('OpenLP.SlideController', 'Next Slide'),
-                                       icon=':/slides/slide_next.png',
+                                       icon=UiIcons().arrow_right,
                                        tooltip=translate('OpenLP.SlideController', 'Move to next.'),
                                        can_shortcuts=True, context=QtCore.Qt.WidgetWithChildrenShortcut,
                                        category=self.category, triggers=self.on_slide_selected_next_action)
@@ -235,28 +236,28 @@
             self.hide_menu.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
             self.hide_menu.setMenu(QtWidgets.QMenu(translate('OpenLP.SlideController', 'Hide'), self.toolbar))
             self.toolbar.add_toolbar_widget(self.hide_menu)
-            self.toolbar.add_toolbar_action('goPreview', icon=':/general/general_live.png',
+            self.toolbar.add_toolbar_action('goPreview', icon=UiIcons().live,
                                             tooltip=translate('OpenLP.SlideController', 'Move to preview.'),
                                             triggers=self.on_go_preview)
             # The order of the blank to modes in Shortcuts list comes from here.
             self.desktop_screen_enable = create_action(self, 'desktopScreenEnable',
                                                        text=translate('OpenLP.SlideController', 'Show Desktop'),
-                                                       icon=':/slides/slide_desktop.png', can_shortcuts=True,
+                                                       icon=UiIcons().desktop, can_shortcuts=True,
                                                        context=QtCore.Qt.WidgetWithChildrenShortcut,
                                                        category=self.category, triggers=self.on_hide_display_enable)
             self.desktop_screen = create_action(self, 'desktopScreen',
                                                 text=translate('OpenLP.SlideController', 'Toggle Desktop'),
-                                                icon=':/slides/slide_desktop.png',
+                                                icon=UiIcons().desktop,
                                                 checked=False, can_shortcuts=True, category=self.category,
                                                 triggers=self.on_hide_display)
             self.theme_screen = create_action(self, 'themeScreen',
                                               text=translate('OpenLP.SlideController', 'Toggle Blank to Theme'),
-                                              icon=':/slides/slide_theme.png',
+                                              icon=UiIcons().theme,
                                               checked=False, can_shortcuts=True, category=self.category,
                                               triggers=self.on_theme_display)
             self.blank_screen = create_action(self, 'blankScreen',
                                               text=translate('OpenLP.SlideController', 'Toggle Blank Screen'),
-                                              icon=':/slides/slide_blank.png',
+                                              icon=UiIcons().blank,
                                               checked=False, can_shortcuts=True, category=self.category,
                                               triggers=self.on_blank_display)
             self.hide_menu.setDefaultAction(self.blank_screen)
@@ -287,10 +288,10 @@
                                                           self.toolbar))
             self.toolbar.add_toolbar_widget(self.play_slides_menu)
             self.play_slides_loop = create_action(self, 'playSlidesLoop', text=UiStrings().PlaySlidesInLoop,
-                                                  icon=':/media/media_time.png', checked=False, can_shortcuts=True,
+                                                  icon=UiIcons().clock, checked=False, can_shortcuts=True,
                                                   category=self.category, triggers=self.on_play_slides_loop)
             self.play_slides_once = create_action(self, 'playSlidesOnce', text=UiStrings().PlaySlidesToEnd,
-                                                  icon=':/media/media_time.png', checked=False, can_shortcuts=True,
+                                                  icon=UiIcons().clock, checked=False, can_shortcuts=True,
                                                   category=self.category, triggers=self.on_play_slides_once)
             if Settings().value(self.main_window.advanced_settings_section + '/slide limits') == SlideLimits.Wrap:
                 self.play_slides_menu.setDefaultAction(self.play_slides_loop)
@@ -307,18 +308,18 @@
             self.receive_spin_delay()
             self.toolbar.add_toolbar_widget(self.delay_spin_box)
         else:
-            self.toolbar.add_toolbar_action('goLive', icon=':/general/general_live.png',
+            self.toolbar.add_toolbar_action('goLive', icon=UiIcons().live,
                                             tooltip=translate('OpenLP.SlideController', 'Move to live.'),
                                             triggers=self.on_go_live)
-            self.toolbar.add_toolbar_action('addToService', icon=':/general/general_add.png',
+            self.toolbar.add_toolbar_action('addToService', icon=UiIcons().add,
                                             tooltip=translate('OpenLP.SlideController', 'Add to Service.'),
                                             triggers=self.on_preview_add_to_service)
             self.toolbar.addSeparator()
-            self.toolbar.add_toolbar_action('editSong', icon=':/general/general_edit.png',
+            self.toolbar.add_toolbar_action('editSong', icon=UiIcons().edit,
                                             tooltip=translate('OpenLP.SlideController',
                                                               'Edit and reload song preview.'),
                                             triggers=self.on_edit_song)
-            self.toolbar.add_toolbar_action('clear', icon=':/general/general_delete.png',
+            self.toolbar.add_toolbar_action('clear', icon=UiIcons().delete,
                                             tooltip=translate('OpenLP.SlideController',
                                                               'Clear'),
                                             triggers=self.on_clear)
@@ -337,7 +338,7 @@
             # FIXME: object name should be changed. But this requires that we migrate the shortcut.
             self.audio_pause_item = self.toolbar.add_toolbar_action(
                 'audioPauseItem',
-                icon=':/slides/media_playback_pause.png', text=translate('OpenLP.SlideController', 'Pause Audio'),
+                icon=UiIcons().pause, text=translate('OpenLP.SlideController', 'Pause Audio'),
                 tooltip=translate('OpenLP.SlideController', 'Pause audio.'),
                 checked=False, visible=False, category=self.category, context=QtCore.Qt.WindowShortcut,
                 can_shortcuts=True, triggers=self.set_audio_pause_clicked)
@@ -346,7 +347,7 @@
             self.audio_pause_item.setParent(self.toolbar)
             self.toolbar.widgetForAction(self.audio_pause_item).setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
             self.next_track_item = create_action(self, 'nextTrackItem', text=UiStrings().NextTrack,
-                                                 icon=':/slides/media_playback_next.png',
+                                                 icon=UiIcons().arrow_right,
                                                  tooltip=translate('OpenLP.SlideController',
                                                                    'Go to next audio track.'),
                                                  category=self.category,
@@ -734,10 +735,10 @@
         self.toolbar.set_widget_visible('song_menu', False)
         # Reset the button
         self.play_slides_once.setChecked(False)
-        self.play_slides_once.setIcon(build_icon(':/media/media_time.png'))
+        self.play_slides_once.setIcon(UiIcons().clock)
         self.play_slides_once.setText(UiStrings().PlaySlidesToEnd)
         self.play_slides_loop.setChecked(False)
-        self.play_slides_loop.setIcon(build_icon(':/media/media_time.png'))
+        self.play_slides_loop.setIcon(UiIcons().clock)
         self.play_slides_loop.setText(UiStrings().PlaySlidesInLoop)
         if item.is_text():
             if (Settings().value(self.main_window.songs_settings_section + '/display songbar') and
@@ -1312,16 +1313,16 @@
             self.play_slides_loop.setChecked(checked)
         self.log_debug('on_play_slides_loop {text}'.format(text=checked))
         if checked:
-            self.play_slides_loop.setIcon(build_icon(':/media/media_stop.png'))
+            self.play_slides_loop.setIcon(UiIcons().stop)
             self.play_slides_loop.setText(UiStrings().StopPlaySlidesInLoop)
-            self.play_slides_once.setIcon(build_icon(':/media/media_time.png'))
+            self.play_slides_once.setIcon(UiIcons().clock)
             self.play_slides_once.setText(UiStrings().PlaySlidesToEnd)
             self.play_slides_menu.setDefaultAction(self.play_slides_loop)
             self.play_slides_once.setChecked(False)
             if Settings().value('core/click live slide to unblank'):
                 Registry().execute('slidecontroller_live_unblank')
         else:
-            self.play_slides_loop.setIcon(build_icon(':/media/media_time.png'))
+            self.play_slides_loop.setIcon(UiIcons().clock)
             self.play_slides_loop.setText(UiStrings().PlaySlidesInLoop)
         self.on_toggle_loop()
 
@@ -1337,16 +1338,16 @@
             self.play_slides_once.setChecked(checked)
         self.log_debug('on_play_slides_once {text}'.format(text=checked))
         if checked:
-            self.play_slides_once.setIcon(build_icon(':/media/media_stop.png'))
+            self.play_slides_once.setIcon(UiIcons().stop)
             self.play_slides_once.setText(UiStrings().StopPlaySlidesToEnd)
-            self.play_slides_loop.setIcon(build_icon(':/media/media_time.png'))
+            self.play_slides_loop.setIcon(UiIcons().clock)
             self.play_slides_loop.setText(UiStrings().PlaySlidesInLoop)
             self.play_slides_menu.setDefaultAction(self.play_slides_once)
             self.play_slides_loop.setChecked(False)
             if Settings().value('core/click live slide to unblank'):
                 Registry().execute('slidecontroller_live_unblank')
         else:
-            self.play_slides_once.setIcon(build_icon(':/media/media_time'))
+            self.play_slides_once.setIcon(UiIcons().clock)
             self.play_slides_once.setText(UiStrings().PlaySlidesToEnd)
         self.on_toggle_loop()
 

=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py	2018-03-16 06:05:18 +0000
+++ openlp/core/ui/thememanager.py	2018-04-13 20:29:40 +0000
@@ -31,6 +31,7 @@
 from openlp.core.common import delete_file
 from openlp.core.common.applocation import AppLocation
 from openlp.core.common.i18n import UiStrings, translate, get_locale_key
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.mixins import LogMixin, RegistryProperties
 from openlp.core.common.path import Path, copyfile, create_paths, path_to_str
 from openlp.core.common.registry import Registry, RegistryBase
@@ -61,30 +62,30 @@
         self.toolbar = OpenLPToolbar(widget)
         self.toolbar.setObjectName('toolbar')
         self.toolbar.add_toolbar_action('newTheme',
-                                        text=UiStrings().NewTheme, icon=':/themes/theme_new.png',
+                                        text=UiStrings().NewTheme, icon=UiIcons().new,
                                         tooltip=translate('OpenLP.ThemeManager', 'Create a new theme.'),
                                         triggers=self.on_add_theme)
         self.toolbar.add_toolbar_action('editTheme',
                                         text=translate('OpenLP.ThemeManager', 'Edit Theme'),
-                                        icon=':/themes/theme_edit.png',
+                                        icon=UiIcons().edit,
                                         tooltip=translate('OpenLP.ThemeManager', 'Edit a theme.'),
                                         triggers=self.on_edit_theme)
         self.delete_toolbar_action = self.toolbar.add_toolbar_action('delete_theme',
                                                                      text=translate('OpenLP.ThemeManager',
                                                                                     'Delete Theme'),
-                                                                     icon=':/general/general_delete.png',
+                                                                     icon=UiIcons().delete,
                                                                      tooltip=translate('OpenLP.ThemeManager',
                                                                                        'Delete a theme.'),
                                                                      triggers=self.on_delete_theme)
         self.toolbar.addSeparator()
         self.toolbar.add_toolbar_action('importTheme',
                                         text=translate('OpenLP.ThemeManager', 'Import Theme'),
-                                        icon=':/general/general_import.png',
+                                        icon=build_icon(UiIcons().download),
                                         tooltip=translate('OpenLP.ThemeManager', 'Import a theme.'),
                                         triggers=self.on_import_theme)
         self.toolbar.add_toolbar_action('exportTheme',
                                         text=translate('OpenLP.ThemeManager', 'Export Theme'),
-                                        icon=':/general/general_export.png',
+                                        icon=build_icon(UiIcons().upload),
                                         tooltip=translate('OpenLP.ThemeManager', 'Export a theme.'),
                                         triggers=self.on_export_theme)
         self.layout.addWidget(self.toolbar)
@@ -102,24 +103,24 @@
         self.menu = QtWidgets.QMenu()
         self.edit_action = create_widget_action(self.menu,
                                                 text=translate('OpenLP.ThemeManager', '&Edit Theme'),
-                                                icon=':/themes/theme_edit.png', triggers=self.on_edit_theme)
+                                                icon=UiIcons().edit, triggers=self.on_edit_theme)
         self.copy_action = create_widget_action(self.menu,
                                                 text=translate('OpenLP.ThemeManager', '&Copy Theme'),
-                                                icon=':/themes/theme_edit.png', triggers=self.on_copy_theme)
+                                                icon=UiIcons().copy, triggers=self.on_copy_theme)
         self.rename_action = create_widget_action(self.menu,
                                                   text=translate('OpenLP.ThemeManager', '&Rename Theme'),
-                                                  icon=':/themes/theme_edit.png', triggers=self.on_rename_theme)
+                                                  icon=UiIcons().edit, triggers=self.on_rename_theme)
         self.delete_action = create_widget_action(self.menu,
                                                   text=translate('OpenLP.ThemeManager', '&Delete Theme'),
-                                                  icon=':/general/general_delete.png', triggers=self.on_delete_theme)
+                                                  icon=UiIcons().delete, triggers=self.on_delete_theme)
         self.menu.addSeparator()
         self.global_action = create_widget_action(self.menu,
                                                   text=translate('OpenLP.ThemeManager', 'Set As &Global Default'),
-                                                  icon=':/general/general_export.png',
+                                                  icon=UiIcons().default,
                                                   triggers=self.change_global_from_screen)
         self.export_action = create_widget_action(self.menu,
                                                   text=translate('OpenLP.ThemeManager', '&Export Theme'),
-                                                  icon=':/general/general_export.png', triggers=self.on_export_theme)
+                                                  icon=UiIcons().upload, triggers=self.on_export_theme)
         # Signals
         self.theme_list_widget.doubleClicked.connect(self.change_global_from_screen)
         self.theme_list_widget.currentItemChanged.connect(self.check_list_state)

=== modified file 'openlp/core/version.py'
--- openlp/core/version.py	2018-03-29 15:54:55 +0000
+++ openlp/core/version.py	2018-04-13 20:29:40 +0000
@@ -141,7 +141,7 @@
         full_version = file_path.read_text().rstrip()
     except OSError:
         log.exception('Error in version file.')
-        full_version = '0.0.0-bzr000'
+        full_version = '0.0.0'
     bits = full_version.split('-')
     APPLICATION_VERSION = {
         'full': full_version,

=== modified file 'openlp/core/widgets/buttons.py'
--- openlp/core/widgets/buttons.py	2017-12-29 09:15:48 +0000
+++ openlp/core/widgets/buttons.py	2018-04-13 20:29:40 +0000
@@ -49,7 +49,7 @@
         """
         Sets the _color variable and the background color.
 
-        :param color:  String representation of a hexidecimal color
+        :param color:  String representation of a hexadecimal color
         """
         self._color = color
         self.setStyleSheet('background-color: %s' % color)
@@ -59,7 +59,7 @@
         """
         Property method to return the color variable
 
-        :return:  String representation of a hexidecimal color
+        :return:  String representation of a hexadecimal color
         """
         return self._color
 
@@ -68,7 +68,7 @@
         """
         Property setter to change the instance color
 
-        :param color:  String representation of a hexidecimal color
+        :param color:  String representation of a hexadecimal color
         """
         self.change_color(color)
 

=== modified file 'openlp/core/widgets/edits.py'
--- openlp/core/widgets/edits.py	2017-12-29 09:15:48 +0000
+++ openlp/core/widgets/edits.py	2018-04-13 20:29:40 +0000
@@ -33,6 +33,7 @@
 from openlp.core.common.settings import Settings
 from openlp.core.lib import FormattingTags, build_icon
 from openlp.core.lib.ui import create_widget_action, create_action
+from openlp.core.ui.icons import UiIcons
 from openlp.core.widgets.dialogs import FileDialog
 from openlp.core.widgets.enums import PathEditType
 
@@ -229,10 +230,10 @@
         self.line_edit = QtWidgets.QLineEdit(self)
         widget_layout.addWidget(self.line_edit)
         self.browse_button = QtWidgets.QToolButton(self)
-        self.browse_button.setIcon(build_icon(':/general/general_open.png'))
+        self.browse_button.setIcon(UiIcons().open)
         widget_layout.addWidget(self.browse_button)
         self.revert_button = QtWidgets.QToolButton(self)
-        self.revert_button.setIcon(build_icon(':/general/general_revert.png'))
+        self.revert_button.setIcon(UiIcons().undo)
         self.revert_button.setVisible(show_revert)
         widget_layout.addWidget(self.revert_button)
         self.setLayout(widget_layout)

=== modified file 'openlp/core/widgets/wizard.py'
--- openlp/core/widgets/wizard.py	2017-12-29 09:15:48 +0000
+++ openlp/core/widgets/wizard.py	2018-04-13 20:29:40 +0000
@@ -28,6 +28,7 @@
 
 from openlp.core.common import is_macosx
 from openlp.core.common.i18n import UiStrings, translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.mixins import RegistryProperties
 from openlp.core.common.registry import Registry
 from openlp.core.common.settings import Settings
@@ -105,8 +106,8 @@
         self.with_progress_page = add_progress_page
         self.setFixedWidth(640)
         self.setObjectName(name)
-        self.open_icon = build_icon(':/general/general_open.png')
-        self.delete_icon = build_icon(':/general/general_delete.png')
+        self.open_icon = UiIcons().open
+        self.delete_icon = UiIcons().delete
         self.finish_button = self.button(QtWidgets.QWizard.FinishButton)
         self.cancel_button = self.button(QtWidgets.QWizard.CancelButton)
         self.setupUi(image)
@@ -197,7 +198,7 @@
         self.error_save_to_button = QtWidgets.QPushButton(self.progress_page)
         self.error_save_to_button.setObjectName('error_save_to_button')
         self.error_save_to_button.setHidden(True)
-        self.error_save_to_button.setIcon(build_icon(':/general/general_save.png'))
+        self.error_save_to_button.setIcon(build_icon(UiIcons().save))
         self.error_button_layout.addWidget(self.error_save_to_button)
         self.progress_layout.addLayout(self.error_button_layout)
         self.addPage(self.progress_page)

=== modified file 'openlp/plugins/alerts/alertsplugin.py'
--- openlp/plugins/alerts/alertsplugin.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/alerts/alertsplugin.py	2018-04-13 20:29:40 +0000
@@ -33,6 +33,7 @@
 from openlp.core.lib.theme import VerticalType
 from openlp.core.lib.ui import create_action
 from openlp.core.ui import AlertLocation
+from openlp.core.ui.icons import UiIcons
 from openlp.plugins.alerts.endpoint import api_alerts_endpoint, alerts_endpoint
 from openlp.plugins.alerts.forms import AlertForm
 from openlp.plugins.alerts.lib import AlertsManager, AlertsTab
@@ -155,7 +156,7 @@
         log.info('add tools menu')
         self.tools_alert_item = create_action(tools_menu, 'toolsAlertItem',
                                               text=translate('AlertsPlugin', '&Alert'),
-                                              icon=':/plugins/plugin_alerts.png',
+                                              icon=UiIcons().alert,
                                               statustip=translate('AlertsPlugin', 'Show an alert message.'),
                                               visible=False, can_shortcuts=True, triggers=self.on_alerts_trigger)
         self.main_window.tools_menu.addAction(self.tools_alert_item)

=== modified file 'openlp/plugins/alerts/forms/alertdialog.py'
--- openlp/plugins/alerts/forms/alertdialog.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/alerts/forms/alertdialog.py	2018-04-13 20:29:40 +0000
@@ -23,6 +23,7 @@
 from PyQt5 import QtWidgets
 
 from openlp.core.common.i18n import translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.lib import build_icon
 from openlp.core.lib.ui import create_button, create_button_box
 
@@ -64,12 +65,12 @@
         self.manage_button_layout = QtWidgets.QVBoxLayout()
         self.manage_button_layout.setObjectName('manage_button_layout')
         self.new_button = QtWidgets.QPushButton(alert_dialog)
-        self.new_button.setIcon(build_icon(':/general/general_new.png'))
+        self.new_button.setIcon(build_icon(UiIcons().new))
         self.new_button.setObjectName('new_button')
         self.manage_button_layout.addWidget(self.new_button)
         self.save_button = QtWidgets.QPushButton(alert_dialog)
         self.save_button.setEnabled(False)
-        self.save_button.setIcon(build_icon(':/general/general_save.png'))
+        self.save_button.setIcon(build_icon(UiIcons().save))
         self.save_button.setObjectName('save_button')
         self.manage_button_layout.addWidget(self.save_button)
         self.delete_button = create_button(alert_dialog, 'delete_button', role='delete', enabled=False,
@@ -77,9 +78,8 @@
         self.manage_button_layout.addWidget(self.delete_button)
         self.manage_button_layout.addStretch()
         self.alert_dialog_layout.addLayout(self.manage_button_layout, 1, 1)
-        display_icon = build_icon(':/general/general_live.png')
-        self.display_button = create_button(alert_dialog, 'display_button', icon=display_icon, enabled=False)
-        self.display_close_button = create_button(alert_dialog, 'display_close_button', icon=display_icon,
+        self.display_button = create_button(alert_dialog, 'display_button', icon=UiIcons().live, enabled=False)
+        self.display_close_button = create_button(alert_dialog, 'display_close_button', icon=UiIcons().live,
                                                   enabled=False)
         self.button_box = create_button_box(alert_dialog, 'button_box', ['close'],
                                             [self.display_button, self.display_close_button])

=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/bibles/bibleplugin.py	2018-04-13 20:29:40 +0000
@@ -25,6 +25,7 @@
 from openlp.core.api.http import register_endpoint
 from openlp.core.common.actions import ActionList
 from openlp.core.common.i18n import UiStrings, translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.lib import Plugin, StringContent, build_icon
 from openlp.core.lib.ui import create_action
 from openlp.plugins.bibles.endpoint import api_bibles_endpoint, bibles_endpoint
@@ -74,8 +75,8 @@
     def __init__(self):
         super(BiblePlugin, self).__init__('bibles', __default_settings__, BibleMediaItem, BiblesTab)
         self.weight = -9
-        self.icon_path = ':/plugins/plugin_bibles.png'
-        self.icon = build_icon(self.icon_path)
+        self.icon_path = UiIcons().bible
+        self.icon = UiIcons().bible
         self.manager = BibleManager(self)
         register_endpoint(bibles_endpoint)
         register_endpoint(api_bibles_endpoint)

=== modified file 'openlp/plugins/custom/customplugin.py'
--- openlp/plugins/custom/customplugin.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/custom/customplugin.py	2018-04-13 20:29:40 +0000
@@ -28,6 +28,7 @@
 
 from openlp.core.api.http import register_endpoint
 from openlp.core.common.i18n import translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.lib import Plugin, StringContent, build_icon
 from openlp.core.lib.db import Manager
 from openlp.plugins.custom.endpoint import api_custom_endpoint, custom_endpoint
@@ -62,7 +63,7 @@
         super(CustomPlugin, self).__init__('custom', __default_settings__, CustomMediaItem, CustomTab)
         self.weight = -5
         self.db_manager = Manager('custom', init_schema)
-        self.icon_path = ':/plugins/plugin_custom.png'
+        self.icon_path = UiIcons().clone
         self.icon = build_icon(self.icon_path)
         register_endpoint(custom_endpoint)
         register_endpoint(api_custom_endpoint)

=== modified file 'openlp/plugins/custom/forms/editcustomslidedialog.py'
--- openlp/plugins/custom/forms/editcustomslidedialog.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/custom/forms/editcustomslidedialog.py	2018-04-13 20:29:40 +0000
@@ -25,6 +25,7 @@
 from openlp.core.common.i18n import UiStrings, translate
 from openlp.core.lib import build_icon
 from openlp.core.lib.ui import create_button, create_button_box
+from openlp.core.ui.icons import UiIcons
 from openlp.core.widgets.edits import SpellTextEdit
 
 
@@ -37,9 +38,8 @@
         self.slide_text_edit = SpellTextEdit(self)
         self.slide_text_edit.setObjectName('slide_text_edit')
         self.dialog_layout.addWidget(self.slide_text_edit)
-        self.split_button = create_button(custom_slide_edit_dialog, 'splitButton', icon=':/general/general_add.png')
-        self.insert_button = create_button(custom_slide_edit_dialog, 'insertButton',
-                                           icon=':/general/general_add.png')
+        self.split_button = create_button(custom_slide_edit_dialog, 'splitButton', icon=UiIcons().add)
+        self.insert_button = create_button(custom_slide_edit_dialog, 'insertButton', icon=UiIcons().add)
         self.button_box = create_button_box(custom_slide_edit_dialog, 'button_box', ['cancel', 'save'],
                                             [self.split_button, self.insert_button])
         self.dialog_layout.addWidget(self.button_box)

=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py	2018-03-18 07:45:46 +0000
+++ openlp/plugins/custom/lib/mediaitem.py	2018-04-13 20:29:40 +0000
@@ -31,6 +31,7 @@
 from openlp.core.lib import MediaManagerItem, ItemCapabilities, ServiceItemContext, PluginStatus, \
     check_item_selected
 from openlp.core.lib.ui import create_widget_action
+from openlp.core.ui.icons import UiIcons
 from openlp.plugins.custom.forms.editcustomform import EditCustomForm
 from openlp.plugins.custom.lib import CustomXMLParser, CustomXMLBuilder
 from openlp.plugins.custom.lib.db import CustomSlide
@@ -88,7 +89,7 @@
     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=':/general/general_clone.png',
+            self.list_view, text=translate('OpenLP.MediaManagerItem', '&Clone'), icon=UiIcons().clone,
             triggers=self.on_clone_click)
 
     def config_update(self):

=== modified file 'openlp/plugins/images/imageplugin.py'
--- openlp/plugins/images/imageplugin.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/images/imageplugin.py	2018-04-13 20:29:40 +0000
@@ -26,6 +26,7 @@
 
 from openlp.core.api.http import register_endpoint
 from openlp.core.common.i18n import translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.settings import Settings
 from openlp.core.lib import Plugin, StringContent, ImageSource, build_icon
 from openlp.core.lib.db import Manager
@@ -53,7 +54,7 @@
         super(ImagePlugin, self).__init__('images', __default_settings__, ImageMediaItem, ImageTab)
         self.manager = Manager('images', init_schema, upgrade_mod=upgrade)
         self.weight = -7
-        self.icon_path = ':/plugins/plugin_images.png'
+        self.icon_path = UiIcons().picture
         self.icon = build_icon(self.icon_path)
         register_endpoint(images_endpoint)
         register_endpoint(api_images_endpoint)

=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/images/lib/mediaitem.py	2018-04-13 20:29:40 +0000
@@ -33,6 +33,7 @@
 from openlp.core.lib import ItemCapabilities, MediaManagerItem, ServiceItemContext, StringContent, build_icon, \
     check_item_selected, create_thumb, validate_thumb
 from openlp.core.lib.ui import create_widget_action, critical_error_message_box
+from openlp.core.ui.icons import UiIcons
 from openlp.core.widgets.views import TreeWidgetWithDnD
 from openlp.plugins.images.forms import AddGroupForm, ChooseGroupForm
 from openlp.plugins.images.lib.db import ImageFilenames, ImageGroups
@@ -127,21 +128,21 @@
             create_widget_action(
                 self.list_view,
                 text=self.plugin.get_string(StringContent.Edit)['title'],
-                icon=':/general/general_edit.png',
+                icon=UiIcons().edit,
                 triggers=self.on_edit_click)
             create_widget_action(self.list_view, separator=True)
         create_widget_action(
             self.list_view,
             'listView{name}{preview}Item'.format(name=self.plugin.name.title(), preview=StringContent.Preview.title()),
             text=self.plugin.get_string(StringContent.Preview)['title'],
-            icon=':/general/general_preview.png',
+            icon=UiIcons().preview,
             can_shortcuts=True,
             triggers=self.on_preview_click)
         create_widget_action(
             self.list_view,
             'listView{name}{live}Item'.format(name=self.plugin.name.title(), live=StringContent.Live.title()),
             text=self.plugin.get_string(StringContent.Live)['title'],
-            icon=':/general/general_live.png',
+            icon=UiIcons().live,
             can_shortcuts=True,
             triggers=self.on_live_click)
         create_widget_action(
@@ -149,14 +150,14 @@
             'listView{name}{service}Item'.format(name=self.plugin.name.title(), service=StringContent.Service.title()),
             can_shortcuts=True,
             text=self.plugin.get_string(StringContent.Service)['title'],
-            icon=':/general/general_add.png',
+            icon=UiIcons().add,
             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=':/general/general_add.png',
+                icon=UiIcons().add,
                 triggers=self.on_add_edit_click)
             create_widget_action(self.list_view, separator=True)
         if self.has_delete_icon:
@@ -164,7 +165,7 @@
                 self.list_view,
                 'listView{name}{delete}Item'.format(name=self.plugin.name.title(), delete=StringContent.Delete.title()),
                 text=self.plugin.get_string(StringContent.Delete)['title'],
-                icon=':/general/general_delete.png',
+                icon=UiIcons().delete,
                 can_shortcuts=True, triggers=self.on_delete_click)
         self.add_custom_context_actions()
         # Create the context menu and add all actions from the list_view.
@@ -186,7 +187,7 @@
         create_widget_action(
             self.list_view,
             text=translate('ImagePlugin', 'Add new image(s)'),
-            icon=':/general/general_open.png', triggers=self.on_file_click)
+            icon=UiIcons().open, triggers=self.on_file_click)
         create_widget_action(self.list_view, separator=True)
         self.replace_action_context = create_widget_action(
             self.list_view, text=UiStrings().ReplaceBG, icon=':/slides/slide_theme.png',
@@ -371,7 +372,7 @@
             file_name = image.file_path.name
             thumbnail_path = self.generate_thumbnail_path(image)
             if not image.file_path.exists():
-                icon = build_icon(':/general/general_delete.png')
+                icon = UiIcons().delete
             else:
                 if validate_thumb(image.file_path, thumbnail_path):
                     icon = build_icon(thumbnail_path)

=== modified file 'openlp/plugins/media/lib/mediaitem.py'
--- openlp/plugins/media/lib/mediaitem.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/media/lib/mediaitem.py	2018-04-13 20:29:40 +0000
@@ -35,6 +35,7 @@
     build_icon, check_item_selected
 from openlp.core.lib.ui import create_widget_action, critical_error_message_box, create_horizontal_adjusting_combo_box
 from openlp.core.ui import DisplayControllerType
+from openlp.core.ui.icons import UiIcons
 from openlp.core.ui.media import get_media_players, set_media_players, parse_optical_path, format_milliseconds
 from openlp.core.ui.media.vlcplayer import get_vlc
 
@@ -70,7 +71,7 @@
         self.optical_icon = build_icon(':/media/media_optical.png')
         self.video_icon = build_icon(':/media/media_video.png')
         self.audio_icon = build_icon(':/media/media_audio.png')
-        self.error_icon = build_icon(':/general/general_delete.png')
+        self.error_icon = UiIcons().delete
 
     def setup_item(self):
         """

=== modified file 'openlp/plugins/media/mediaplugin.py'
--- openlp/plugins/media/mediaplugin.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/media/mediaplugin.py	2018-04-13 20:29:40 +0000
@@ -31,6 +31,7 @@
 from openlp.core.common import check_binary_exists
 from openlp.core.common.applocation import AppLocation
 from openlp.core.common.i18n import translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.path import Path
 from openlp.core.lib import Plugin, StringContent, build_icon
 from openlp.plugins.media.endpoint import api_media_endpoint, media_endpoint
@@ -56,7 +57,7 @@
     def __init__(self):
         super(MediaPlugin, self).__init__('media', __default_settings__, MediaMediaItem)
         self.weight = -6
-        self.icon_path = ':/plugins/plugin_media.png'
+        self.icon_path = UiIcons().video
         self.icon = build_icon(self.icon_path)
         # passed with drag and drop messages
         self.dnd_id = 'Media'

=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py	2018-04-13 20:29:40 +0000
@@ -30,6 +30,7 @@
 from openlp.core.lib import MediaManagerItem, ItemCapabilities, ServiceItemContext, \
     build_icon, check_item_selected, create_thumb, validate_thumb
 from openlp.core.lib.ui import critical_error_message_box, create_horizontal_adjusting_combo_box
+from openlp.core.ui.icons import UiIcons
 from openlp.plugins.presentations.lib import MessageListener
 from openlp.plugins.presentations.lib.pdfcontroller import PDF_CONTROLLER_FILETYPES
 
@@ -196,7 +197,7 @@
                         preview_path = doc.get_thumbnail_path(1, True)
                     doc.close_presentation()
                     if not (preview_path and preview_path.exists()):
-                        icon = build_icon(':/general/general_delete.png')
+                        icon = UiIcons().delete
                     else:
                         if validate_thumb(preview_path, thumbnail_path):
                             icon = build_icon(thumbnail_path)
@@ -204,7 +205,7 @@
                             icon = create_thumb(preview_path, thumbnail_path)
                 else:
                     if initial_load:
-                        icon = build_icon(':/general/general_delete.png')
+                        icon = UiIcons().delete
                     else:
                         critical_error_message_box(UiStrings().UnsupportedFile,
                                                    translate('PresentationPlugin.MediaItem',

=== modified file 'openlp/plugins/presentations/presentationplugin.py'
--- openlp/plugins/presentations/presentationplugin.py	2018-02-02 21:33:41 +0000
+++ openlp/plugins/presentations/presentationplugin.py	2018-04-13 20:29:40 +0000
@@ -31,6 +31,7 @@
 from openlp.core.api.http import register_endpoint
 from openlp.core.common import extension_loader
 from openlp.core.common.i18n import translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.settings import Settings
 from openlp.core.lib import Plugin, StringContent, build_icon
 from openlp.plugins.presentations.endpoint import api_presentations_endpoint, presentations_endpoint
@@ -68,7 +69,7 @@
         self.controllers = {}
         Plugin.__init__(self, 'presentations', __default_settings__, __default_settings__)
         self.weight = -8
-        self.icon_path = ':/plugins/plugin_presentations.png'
+        self.icon_path = UiIcons().presentation
         self.icon = build_icon(self.icon_path)
         register_endpoint(presentations_endpoint)
         register_endpoint(api_presentations_endpoint)

=== modified file 'openlp/plugins/songs/forms/editversedialog.py'
--- openlp/plugins/songs/forms/editversedialog.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/songs/forms/editversedialog.py	2018-04-13 20:29:40 +0000
@@ -26,6 +26,7 @@
 from openlp.core.common.settings import Settings
 from openlp.core.lib import build_icon
 from openlp.core.lib.ui import create_button_box
+from openlp.core.ui.icons import UiIcons
 from openlp.core.widgets.edits import SpellTextEdit
 from openlp.plugins.songs.lib import VerseType
 
@@ -44,11 +45,11 @@
         self.verse_type_layout = QtWidgets.QHBoxLayout()
         self.verse_type_layout.setObjectName('verse_type_layout')
         self.forced_split_button = QtWidgets.QPushButton(edit_verse_dialog)
-        self.forced_split_button.setIcon(build_icon(':/general/general_add.png'))
+        self.forced_split_button.setIcon(UiIcons().add)
         self.forced_split_button.setObjectName('forced_split_button')
         self.verse_type_layout.addWidget(self.forced_split_button)
         self.overflow_split_button = QtWidgets.QPushButton(edit_verse_dialog)
-        self.overflow_split_button.setIcon(build_icon(':/general/general_add.png'))
+        self.overflow_split_button.setIcon(UiIcons().add)
         self.overflow_split_button.setObjectName('overflow_split_button')
         self.verse_type_layout.addWidget(self.overflow_split_button)
         self.verse_type_label = QtWidgets.QLabel(edit_verse_dialog)
@@ -64,7 +65,7 @@
         self.verse_number_box.setObjectName('verse_number_box')
         self.verse_type_layout.addWidget(self.verse_number_box)
         self.insert_button = QtWidgets.QPushButton(edit_verse_dialog)
-        self.insert_button.setIcon(build_icon(':/general/general_add.png'))
+        self.insert_button.setIcon(UiIcons().add)
         self.insert_button.setObjectName('insert_button')
         self.verse_type_layout.addWidget(self.insert_button)
         self.verse_type_layout.addStretch()
@@ -76,11 +77,11 @@
             self.transpose_label.setObjectName('transpose_label')
             self.transpose_layout.addWidget(self.transpose_label)
             self.transpose_up_button = QtWidgets.QPushButton(edit_verse_dialog)
-            self.transpose_up_button.setIcon(build_icon(':/services/service_up.png'))
+            self.transpose_up_button.setIcon(UiIcons().arrow_up)
             self.transpose_up_button.setObjectName('transpose_up')
             self.transpose_layout.addWidget(self.transpose_up_button)
             self.transpose_down_button = QtWidgets.QPushButton(edit_verse_dialog)
-            self.transpose_down_button.setIcon(build_icon(':/services/service_down.png'))
+            self.transpose_down_button.setIcon(UiIcons().arrow_down)
             self.transpose_down_button.setObjectName('transpose_down')
             self.transpose_layout.addWidget(self.transpose_down_button)
             self.dialog_layout.addLayout(self.transpose_layout)

=== modified file 'openlp/plugins/songs/forms/songmaintenancedialog.py'
--- openlp/plugins/songs/forms/songmaintenancedialog.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/songs/forms/songmaintenancedialog.py	2018-04-13 20:29:40 +0000
@@ -25,6 +25,7 @@
 from openlp.core.common.i18n import UiStrings
 from openlp.core.lib import build_icon
 from openlp.core.lib.ui import create_button_box
+from openlp.core.ui.icons import UiIcons
 from openlp.plugins.songs.lib.ui import SongStrings
 
 
@@ -67,15 +68,15 @@
         self.authors_buttons_layout.setObjectName('authors_buttons_layout')
         self.authors_buttons_layout.addStretch()
         self.add_author_button = QtWidgets.QPushButton(self.authors_page)
-        self.add_author_button.setIcon(build_icon(':/songs/author_add.png'))
+        self.add_author_button.setIcon(UiIcons().add)
         self.add_author_button.setObjectName('add_author_button')
         self.authors_buttons_layout.addWidget(self.add_author_button)
         self.edit_author_button = QtWidgets.QPushButton(self.authors_page)
-        self.edit_author_button.setIcon(build_icon(':/songs/author_edit.png'))
+        self.edit_author_button.setIcon(UiIcons().edit)
         self.edit_author_button.setObjectName('edit_author_button')
         self.authors_buttons_layout.addWidget(self.edit_author_button)
         self.delete_author_button = QtWidgets.QPushButton(self.authors_page)
-        self.delete_author_button.setIcon(build_icon(':/songs/author_delete.png'))
+        self.delete_author_button.setIcon(UiIcons().delete)
         self.delete_author_button.setObjectName('delete_author_button')
         self.authors_buttons_layout.addWidget(self.delete_author_button)
         self.authors_layout.addLayout(self.authors_buttons_layout)
@@ -92,15 +93,15 @@
         self.topics_buttons_layout.setObjectName('topicsButtonLayout')
         self.topics_buttons_layout.addStretch()
         self.add_topic_button = QtWidgets.QPushButton(self.topics_page)
-        self.add_topic_button.setIcon(build_icon(':/songs/topic_add.png'))
+        self.add_topic_button.setIcon(UiIcons().add)
         self.add_topic_button.setObjectName('add_topic_button')
         self.topics_buttons_layout.addWidget(self.add_topic_button)
         self.edit_topic_button = QtWidgets.QPushButton(self.topics_page)
-        self.edit_topic_button.setIcon(build_icon(':/songs/topic_edit.png'))
+        self.edit_topic_button.setIcon(UiIcons().edit)
         self.edit_topic_button.setObjectName('edit_topic_button')
         self.topics_buttons_layout.addWidget(self.edit_topic_button)
         self.delete_topic_button = QtWidgets.QPushButton(self.topics_page)
-        self.delete_topic_button.setIcon(build_icon(':/songs/topic_delete.png'))
+        self.delete_topic_button.setIcon(UiIcons().delete)
         self.delete_topic_button.setObjectName('delete_topic_button')
         self.topics_buttons_layout.addWidget(self.delete_topic_button)
         self.topics_layout.addLayout(self.topics_buttons_layout)
@@ -117,15 +118,15 @@
         self.books_buttons_layout.setObjectName('booksButtonLayout')
         self.books_buttons_layout.addStretch()
         self.add_book_button = QtWidgets.QPushButton(self.books_page)
-        self.add_book_button.setIcon(build_icon(':/songs/book_add.png'))
+        self.add_book_button.setIcon(UiIcons().add)
         self.add_book_button.setObjectName('add_book_button')
         self.books_buttons_layout.addWidget(self.add_book_button)
         self.edit_book_button = QtWidgets.QPushButton(self.books_page)
-        self.edit_book_button.setIcon(build_icon(':/songs/book_edit.png'))
+        self.edit_book_button.setIcon(UiIcons().edit)
         self.edit_book_button.setObjectName('edit_book_button')
         self.books_buttons_layout.addWidget(self.edit_book_button)
         self.delete_book_button = QtWidgets.QPushButton(self.books_page)
-        self.delete_book_button.setIcon(build_icon(':/songs/book_delete.png'))
+        self.delete_book_button.setIcon(UiIcons().delete)
         self.delete_book_button.setObjectName('delete_book_button')
         self.books_buttons_layout.addWidget(self.delete_book_button)
         self.books_layout.addLayout(self.books_buttons_layout)

=== modified file 'openlp/plugins/songs/forms/songreviewwidget.py'
--- openlp/plugins/songs/forms/songreviewwidget.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/songs/forms/songreviewwidget.py	2018-04-13 20:29:40 +0000
@@ -24,7 +24,7 @@
 """
 from PyQt5 import QtCore, QtWidgets
 
-from openlp.core.lib import build_icon
+from openlp.core.ui.icons import UiIcons
 from openlp.plugins.songs.lib import VerseType
 from openlp.plugins.songs.lib.openlyricsxml import SongXML
 
@@ -182,7 +182,7 @@
         self.song_vertical_layout.addWidget(self.song_group_box)
         self.song_remove_button = QtWidgets.QPushButton(self)
         self.song_remove_button.setObjectName('song_remove_button')
-        self.song_remove_button.setIcon(build_icon(':/general/general_delete.png'))
+        self.song_remove_button.setIcon(UiIcons().delete)
         self.song_remove_button.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
         self.song_vertical_layout.addWidget(self.song_remove_button, alignment=QtCore.Qt.AlignHCenter)
 

=== modified file 'openlp/plugins/songs/forms/songselectdialog.py'
--- openlp/plugins/songs/forms/songselectdialog.py	2017-12-29 09:15:48 +0000
+++ openlp/plugins/songs/forms/songselectdialog.py	2018-04-13 20:29:40 +0000
@@ -28,6 +28,7 @@
 from openlp.core.common.i18n import translate
 from openlp.core.lib import build_icon
 from openlp.core.ui import SingleColumnTableWidget
+from openlp.core.ui.icons import UiIcons
 from openlp.core.widgets.edits import HistoryComboBox
 
 
@@ -90,7 +91,7 @@
         self.login_progress_bar.setVisible(False)
         self.login_button_layout.addWidget(self.login_progress_bar)
         self.login_button = QtWidgets.QPushButton(self.login_page)
-        self.login_button.setIcon(build_icon(':/songs/song_author_edit.png'))
+        self.login_button.setIcon(UiIcons().edit)
         self.login_button.setObjectName('login_button')
         self.login_button_layout.addWidget(self.login_button)
         self.login_layout.setLayout(4, QtWidgets.QFormLayout.SpanningRole, self.login_button_layout)
@@ -124,7 +125,7 @@
         self.search_progress_bar.setValue(0)
         self.search_progress_layout.addWidget(self.search_progress_bar)
         self.stop_button = QtWidgets.QPushButton(self.search_page)
-        self.stop_button.setIcon(build_icon(':/songs/song_search_stop.png'))
+        self.stop_button.setIcon(UiIcons().stop)
         self.stop_button.setObjectName('stop_button')
         self.search_progress_layout.addWidget(self.stop_button)
         self.search_layout.addLayout(self.search_progress_layout)
@@ -143,7 +144,7 @@
         self.view_layout.setSpacing(8)
         self.view_layout.setObjectName('view_layout')
         self.logout_button = QtWidgets.QPushButton(self.search_page)
-        self.logout_button.setIcon(build_icon(':/songs/song_author_edit.png'))
+        self.logout_button.setIcon(UiIcons().edit)
         self.view_layout.addWidget(self.logout_button)
         self.view_spacer = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
         self.view_layout.addItem(self.view_spacer)

=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py	2018-03-09 21:58:45 +0000
+++ openlp/plugins/songs/lib/mediaitem.py	2018-04-13 20:29:40 +0000
@@ -27,6 +27,7 @@
 
 from openlp.core.common.applocation import AppLocation
 from openlp.core.common.i18n import UiStrings, translate, get_natural_key
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.path import copyfile, create_paths
 from openlp.core.common.registry import Registry
 from openlp.core.common.settings import Settings
@@ -99,7 +100,7 @@
         self.toolbar.addSeparator()
         # Song Maintenance Button
         self.maintenance_action = self.toolbar.add_toolbar_action('maintenance_action',
-                                                                  icon=':/songs/song_maintenance.png',
+                                                                  icon=UiIcons().database,
                                                                   triggers=self.on_song_maintenance_click)
         self.add_search_to_toolbar()
         # Signals and slots
@@ -111,7 +112,7 @@
     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=':/general/general_clone.png',
+            self.list_view, text=translate('OpenLP.MediaManagerItem', '&Clone'), icon=UiIcons().clone,
             triggers=self.on_clone_click)
 
     def on_focus(self):
@@ -145,7 +146,7 @@
         self.edit_song_form = EditSongForm(self, self.main_window, self.plugin.manager)
         self.open_lyrics = OpenLyrics(self.plugin.manager)
         self.search_text_edit.set_search_types([
-            (SongSearch.Entire, ':/songs/song_search_all.png',
+            (SongSearch.Entire, UiIcons().music,
                 translate('SongsPlugin.MediaItem', 'Entire Song'),
                 translate('SongsPlugin.MediaItem', 'Search Entire Song...')),
             (SongSearch.Titles, ':/songs/song_search_title.png',
@@ -158,10 +159,10 @@
                 translate('SongsPlugin.MediaItem', 'Search Authors...')),
             (SongSearch.Topics, ':/songs/song_search_topic.png', SongStrings.Topics,
                 translate('SongsPlugin.MediaItem', 'Search Topics...')),
-            (SongSearch.Books, ':/songs/song_book_edit.png', SongStrings.SongBooks,
+            (SongSearch.Books, UiIcons().address, SongStrings.SongBooks,
                 translate('SongsPlugin.MediaItem', 'Search Songbooks...')),
             (SongSearch.Themes, ':/slides/slide_theme.png', UiStrings().Themes, UiStrings().SearchThemes),
-            (SongSearch.Copyright, ':/songs/song_search_copy.png',
+            (SongSearch.Copyright, UiIcons().copyright,
                 translate('SongsPlugin.MediaItem', 'Copyright'),
                 translate('SongsPlugin.MediaItem', 'Search Copyright...')),
             (SongSearch.CCLInumber, ':/songs/song_search_ccli.png',

=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py	2018-02-23 08:27:33 +0000
+++ openlp/plugins/songs/songsplugin.py	2018-04-13 20:29:40 +0000
@@ -34,6 +34,7 @@
 from openlp.core.api.http import register_endpoint
 from openlp.core.common.actions import ActionList
 from openlp.core.common.i18n import UiStrings, translate
+from openlp.core.ui.icons import UiIcons
 from openlp.core.common.registry import Registry
 from openlp.core.lib import Plugin, StringContent, build_icon
 from openlp.core.lib.db import Manager
@@ -92,7 +93,7 @@
         super(SongsPlugin, self).__init__('songs', __default_settings__, SongMediaItem, SongsTab)
         self.manager = Manager('songs', init_schema, upgrade_mod=upgrade)
         self.weight = -10
-        self.icon_path = ':/plugins/plugin_songs.png'
+        self.icon_path = UiIcons().music
         self.icon = build_icon(self.icon_path)
         self.songselect_form = None
         register_endpoint(songs_endpoint)

=== removed file 'resources/images/author_add.png'
Binary files resources/images/author_add.png	2010-09-14 18:18:47 +0000 and resources/images/author_add.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/author_delete.png'
Binary files resources/images/author_delete.png	2010-09-14 18:18:47 +0000 and resources/images/author_delete.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/author_edit.png'
Binary files resources/images/author_edit.png	2010-09-14 18:18:47 +0000 and resources/images/author_edit.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/book_add.png'
Binary files resources/images/book_add.png	2010-09-14 18:18:47 +0000 and resources/images/book_add.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/book_delete.png'
Binary files resources/images/book_delete.png	2010-09-14 18:18:47 +0000 and resources/images/book_delete.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/book_edit.png'
Binary files resources/images/book_edit.png	2010-09-14 18:18:47 +0000 and resources/images/book_edit.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/export_load.png'
Binary files resources/images/export_load.png	2010-09-14 18:18:47 +0000 and resources/images/export_load.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_add.png'
Binary files resources/images/general_add.png	2010-09-14 18:18:47 +0000 and resources/images/general_add.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_clone.png'
Binary files resources/images/general_clone.png	2011-07-03 12:43:31 +0000 and resources/images/general_clone.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_edit.png'
Binary files resources/images/general_edit.png	2010-09-14 18:18:47 +0000 and resources/images/general_edit.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_export.png'
Binary files resources/images/general_export.png	2010-09-14 18:18:47 +0000 and resources/images/general_export.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_live.png'
Binary files resources/images/general_live.png	2010-09-14 18:18:47 +0000 and resources/images/general_live.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_new.png'
Binary files resources/images/general_new.png	2010-09-14 18:18:47 +0000 and resources/images/general_new.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_open.png'
Binary files resources/images/general_open.png	2010-09-14 18:18:47 +0000 and resources/images/general_open.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_preview.png'
Binary files resources/images/general_preview.png	2016-04-03 19:12:37 +0000 and resources/images/general_preview.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_print.png'
Binary files resources/images/general_print.png	2011-02-19 08:36:24 +0000 and resources/images/general_print.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_revert.png'
Binary files resources/images/general_revert.png	2011-04-27 09:00:37 +0000 and resources/images/general_revert.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/general_save.png'
Binary files resources/images/general_save.png	2010-09-14 18:18:47 +0000 and resources/images/general_save.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/media_playback_next.png'
Binary files resources/images/media_playback_next.png	2012-02-25 00:01:24 +0000 and resources/images/media_playback_next.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/media_stop.png'
Binary files resources/images/media_stop.png	2010-09-14 18:18:47 +0000 and resources/images/media_stop.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/network_auth.png'
Binary files resources/images/network_auth.png	2014-04-14 18:09:47 +0000 and resources/images/network_auth.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/network_server.png'
Binary files resources/images/network_server.png	2014-04-14 18:09:47 +0000 and resources/images/network_server.png	1970-01-01 00:00:00 +0000 differ
=== modified file 'resources/images/openlp-2.qrc'
--- resources/images/openlp-2.qrc	2017-10-01 06:57:11 +0000
+++ resources/images/openlp-2.qrc	2018-04-13 20:29:40 +0000
@@ -1,28 +1,14 @@
 <RCC>
   <qresource prefix="songs">
-    <file>song_search_stop.png</file>
     <file>song_search_all.png</file>
     <file>song_search_author.png</file>
     <file>song_search_ccli.png</file>
-    <file>song_search_copy.png</file>
     <file>song_search_lyrics.png</file>
     <file>song_search_title.png</file>
     <file>song_search_topic.png</file>
-    <file>topic_edit.png</file>
-    <file>author_add.png</file>
-    <file>author_delete.png</file>
-    <file>book_add.png</file>
-    <file>song_maintenance.png</file>
-    <file>topic_add.png</file>
-    <file>book_delete.png</file>
-    <file>book_edit.png</file>
-    <file>author_edit.png</file>
-    <file>topic_delete.png</file>
     <file>book_maintenance.png</file>
     <file>author_maintenance.png</file>
     <file>topic_maintenance.png</file>
-    <file>song_author_edit.png</file>
-    <file>song_book_edit.png</file>
     </qresource>
   <qresource prefix="images">
     <file>image_group.png</file>
@@ -38,47 +24,26 @@
   </qresource>
   <qresource prefix="plugins">
     <file>plugin_alerts.png</file>
-    <file>plugin_bibles.png</file>
-    <file>plugin_custom.png</file>
-    <file>plugin_images.png</file>
-    <file>plugin_media.png</file>
-    <file>plugin_presentations.png</file>
     <file>plugin_songs.png</file>
     <file>plugin_remote.png</file>
     <file>plugin_songusage.png</file>
   </qresource>
   <qresource prefix="general">
-    <file>general_preview.png</file>
-    <file>general_live.png</file>
-    <file>general_add.png</file>
     <file>general_delete.png</file>
-    <file>general_edit.png</file>
-    <file>general_export.png</file>
     <file>general_import.png</file>
-    <file>general_new.png</file>
     <file>general_zoom_out.png</file>
     <file>general_zoom_in.png</file>
     <file>general_zoom_original.png</file>
-    <file>general_print.png</file>
-    <file>general_open.png</file>
-    <file>general_save.png</file>
     <file>general_email.png</file>
-    <file>general_revert.png</file>
-    <file>general_clone.png</file>
     <file>general_find.png</file>
     <file>general_back.png</file>
   </qresource>
   <qresource prefix="slides">
-    <file>slide_next.png</file>
-    <file>slide_blank.png</file>
-    <file>slide_desktop.png</file>
     <file>slide_theme.png</file>
-    <file>slide_previous.png</file>
     <file>media_playback_start.png</file>
     <file>media_playback_stop.png</file>
     <file>media_playback_pause.png</file>
-    <file>media_playback_next.png</file>
-  </qresource>
+    </qresource>
   <qresource prefix="icon">
     <file>openlp-logo.svg</file>
   </qresource>
@@ -90,8 +55,7 @@
   <qresource prefix="imports">
     </qresource>
   <qresource prefix="exports">
-    <file>export_load.png</file>
-  </qresource>
+    </qresource>
   <qresource prefix="wizards">
     <file>openlp-osx-wizard.png</file>
     <file>wizard_song.bmp</file>
@@ -101,35 +65,21 @@
     <file>wizard_duplicateremoval.bmp</file>
     </qresource>
   <qresource prefix="services">
-    <file>service_collapse_all.png</file>
-    <file>service_expand_all.png</file>
-    <file>service_notes.png</file>
-    <file>service_item_notes.png</file>
-    <file>service_bottom.png</file>
-    <file>service_down.png</file>
-    <file>service_top.png</file>
-    <file>service_up.png</file>
-  </qresource>
+    </qresource>
   <qresource prefix="system">
     <file>system_close.png</file>
     <file>clear_shortcut.png</file>
-    <file>system_about.png</file>
-    <file>system_help_contents.png</file>
     <file>system_mediamanager.png</file>
     <file>system_volunteer.png</file>
     <file>system_servicemanager.png</file>
     <file>system_thememanager.png</file>
-    <file>system_exit.png</file>
     <file>settings_plugin_list.png</file>
     <file>system_settings.png</file>
-    <file>tag_editor.png</file>
-    <file>system_configure.png</file>
     <file>system_edit_copy.png</file>
     <file>system_configure_shortcuts.png</file>
   </qresource>
   <qresource prefix="media">
     <file>media_time.png</file>
-    <file>media_stop.png</file>
     <file>media_audio.png</file>
     <file>media_video.png</file>
     <file>media_optical.png</file>
@@ -142,22 +92,17 @@
   <qresource prefix="messagebox">
     </qresource>
   <qresource prefix="remote">
-    <file>network_server.png</file>
-    <file>network_auth.png</file>
-  </qresource>
+    </qresource>
   <qresource prefix="songusage">
     <file>song_usage_active.png</file>
     <file>song_usage_inactive.png</file>
   </qresource>
   <qresource prefix="tools">
-    <file>tools_add.png</file>
     </qresource>
   <qresource prefix="themes">
     <file>theme_new.png</file>
-    <file>theme_edit.png</file>
-  </qresource>
+    </qresource>
   <qresource prefix="projector">
-    <file>projector_blank.png</file>
     <file>projector_blank_tiled.png</file>
     <file>projector_connect.png</file>
     <file>projector_connect_tiled.png</file>
@@ -165,12 +110,10 @@
     <file>projector_cooldown.png</file>
     <file>projector_disconnect.png</file>
     <file>projector_disconnect_tiled.png</file>
-    <file>projector_edit.png</file>
     <file>projector_error.png</file>
     <file>projector_item_connect.png</file>
     <file>projector_item_disconnect.png</file>
     <file>projector_manager.png</file>
-    <file>projector_new.png</file>
     <file>projector_not_connected_error.png</file>
     <file>projector_off.png</file>
     <file>projector_on.png</file>

=== removed file 'resources/images/plugin_bibles.png'
Binary files resources/images/plugin_bibles.png	2010-09-14 18:18:47 +0000 and resources/images/plugin_bibles.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/plugin_custom.png'
Binary files resources/images/plugin_custom.png	2010-09-14 18:18:47 +0000 and resources/images/plugin_custom.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/plugin_images.png'
Binary files resources/images/plugin_images.png	2010-09-14 18:18:47 +0000 and resources/images/plugin_images.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/plugin_media.png'
Binary files resources/images/plugin_media.png	2010-09-14 18:18:47 +0000 and resources/images/plugin_media.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/plugin_presentations.png'
Binary files resources/images/plugin_presentations.png	2010-09-14 18:18:47 +0000 and resources/images/plugin_presentations.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/projector_blank.png'
Binary files resources/images/projector_blank.png	2014-10-06 19:10:03 +0000 and resources/images/projector_blank.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/projector_edit.png'
Binary files resources/images/projector_edit.png	2014-10-06 19:10:03 +0000 and resources/images/projector_edit.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/projector_new.png'
Binary files resources/images/projector_new.png	2014-10-09 01:43:34 +0000 and resources/images/projector_new.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/service_bottom.png'
Binary files resources/images/service_bottom.png	2010-09-14 18:18:47 +0000 and resources/images/service_bottom.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/service_collapse_all.png'
Binary files resources/images/service_collapse_all.png	2010-11-07 21:01:02 +0000 and resources/images/service_collapse_all.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/service_down.png'
Binary files resources/images/service_down.png	2010-09-14 18:18:47 +0000 and resources/images/service_down.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/service_expand_all.png'
Binary files resources/images/service_expand_all.png	2010-11-07 21:01:02 +0000 and resources/images/service_expand_all.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/service_item_notes.png'
Binary files resources/images/service_item_notes.png	2010-09-14 18:18:47 +0000 and resources/images/service_item_notes.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/service_notes.png'
Binary files resources/images/service_notes.png	2010-09-14 18:18:47 +0000 and resources/images/service_notes.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/service_top.png'
Binary files resources/images/service_top.png	2010-09-14 18:18:47 +0000 and resources/images/service_top.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/service_up.png'
Binary files resources/images/service_up.png	2010-09-14 18:18:47 +0000 and resources/images/service_up.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/slide_blank.png'
Binary files resources/images/slide_blank.png	2010-09-14 18:18:47 +0000 and resources/images/slide_blank.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/slide_desktop.png'
Binary files resources/images/slide_desktop.png	2010-09-14 18:18:47 +0000 and resources/images/slide_desktop.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/slide_next.png'
Binary files resources/images/slide_next.png	2010-09-14 18:18:47 +0000 and resources/images/slide_next.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/slide_previous.png'
Binary files resources/images/slide_previous.png	2010-09-14 18:18:47 +0000 and resources/images/slide_previous.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/song_author_edit.png'
Binary files resources/images/song_author_edit.png	2010-09-14 18:18:47 +0000 and resources/images/song_author_edit.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/song_book_edit.png'
Binary files resources/images/song_book_edit.png	2010-09-14 18:18:47 +0000 and resources/images/song_book_edit.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/song_maintenance.png'
Binary files resources/images/song_maintenance.png	2010-09-14 18:18:47 +0000 and resources/images/song_maintenance.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/song_search_copy.png'
Binary files resources/images/song_search_copy.png	2015-01-26 12:53:23 +0000 and resources/images/song_search_copy.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/song_search_stop.png'
Binary files resources/images/song_search_stop.png	2015-12-26 14:33:29 +0000 and resources/images/song_search_stop.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/system_about.png'
Binary files resources/images/system_about.png	2010-09-14 18:18:47 +0000 and resources/images/system_about.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/system_configure.png'
Binary files resources/images/system_configure.png	2011-02-19 08:36:24 +0000 and resources/images/system_configure.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/system_exit.png'
Binary files resources/images/system_exit.png	2010-09-14 18:18:47 +0000 and resources/images/system_exit.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/system_help_contents.png'
Binary files resources/images/system_help_contents.png	2010-09-14 18:18:47 +0000 and resources/images/system_help_contents.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/tag_editor.png'
Binary files resources/images/tag_editor.png	2011-02-20 20:34:33 +0000 and resources/images/tag_editor.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/theme_edit.png'
Binary files resources/images/theme_edit.png	2010-09-14 18:18:47 +0000 and resources/images/theme_edit.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/tools_add.png'
Binary files resources/images/tools_add.png	2010-09-14 18:18:47 +0000 and resources/images/tools_add.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/topic_add.png'
Binary files resources/images/topic_add.png	2010-09-14 18:18:47 +0000 and resources/images/topic_add.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/topic_delete.png'
Binary files resources/images/topic_delete.png	2010-09-14 18:18:47 +0000 and resources/images/topic_delete.png	1970-01-01 00:00:00 +0000 differ
=== removed file 'resources/images/topic_edit.png'
Binary files resources/images/topic_edit.png	2010-09-14 18:18:47 +0000 and resources/images/topic_edit.png	1970-01-01 00:00:00 +0000 differ

References