diff --git a/openlp/plugins/songs/forms/maintenanceform.py b/openlp/plugins/songs/forms/maintenanceform.py
new file mode 100644
index 000000000..efd826d63
--- /dev/null
+++ b/openlp/plugins/songs/forms/maintenanceform.py
@@ -0,0 +1,133 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file '/home/raoul/Projects/openlp/songmaintenance/resources/forms/songmaintenance.ui'
+#
+# Created: Wed Jul 22 10:03:53 2009
+# by: PyQt4 UI code generator 4.4.4
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_SongMaintenanceDialog(object):
+ def setupUi(self, SongMaintenanceDialog):
+ SongMaintenanceDialog.setObjectName("SongMaintenanceDialog")
+ SongMaintenanceDialog.resize(486, 361)
+ self.verticalLayout = QtGui.QVBoxLayout(SongMaintenanceDialog)
+ self.verticalLayout.setSpacing(8)
+ self.verticalLayout.setMargin(8)
+ self.verticalLayout.setObjectName("verticalLayout")
+ self.ContentWidget = QtGui.QWidget(SongMaintenanceDialog)
+ self.ContentWidget.setObjectName("ContentWidget")
+ self.horizontalLayout = QtGui.QHBoxLayout(self.ContentWidget)
+ self.horizontalLayout.setSpacing(8)
+ self.horizontalLayout.setMargin(0)
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.TypeListWidget = QtGui.QListWidget(self.ContentWidget)
+ self.TypeListWidget.setMaximumSize(QtCore.QSize(150, 16777215))
+ self.TypeListWidget.setProperty("showDropIndicator", QtCore.QVariant(False))
+ self.TypeListWidget.setIconSize(QtCore.QSize(32, 32))
+ self.TypeListWidget.setFlow(QtGui.QListView.TopToBottom)
+ self.TypeListWidget.setSpacing(0)
+ self.TypeListWidget.setViewMode(QtGui.QListView.IconMode)
+ self.TypeListWidget.setUniformItemSizes(True)
+ self.TypeListWidget.setObjectName("TypeListWidget")
+ #self.TypeListWidget.setColumnWidth(0, self.TypeListWidget.viewport().size().width())
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(":/songs/author_maintenance.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ item = QtGui.QListWidgetItem(self.TypeListWidget)
+ item.setIcon(icon)
+ icon1 = QtGui.QIcon()
+ icon1.addPixmap(QtGui.QPixmap(":/songs/topic_maintenance.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ item = QtGui.QListWidgetItem(self.TypeListWidget)
+ item.setIcon(icon1)
+ icon2 = QtGui.QIcon()
+ icon2.addPixmap(QtGui.QPixmap(":/songs/book_maintenance.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ item = QtGui.QListWidgetItem(self.TypeListWidget)
+ item.setIcon(icon2)
+ self.horizontalLayout.addWidget(self.TypeListWidget)
+ self.TypeStackedWidget = QtGui.QStackedWidget(self.ContentWidget)
+ self.TypeStackedWidget.setObjectName("TypeStackedWidget")
+ self.AuthorsPage = QtGui.QWidget()
+ self.AuthorsPage.setObjectName("AuthorsPage")
+ self.verticalLayout_2 = QtGui.QVBoxLayout(self.AuthorsPage)
+ self.verticalLayout_2.setSpacing(8)
+ self.verticalLayout_2.setMargin(0)
+ self.verticalLayout_2.setObjectName("verticalLayout_2")
+ self.AuthorsListWidget = QtGui.QListWidget(self.AuthorsPage)
+ self.AuthorsListWidget.setObjectName("AuthorsListWidget")
+ self.verticalLayout_2.addWidget(self.AuthorsListWidget)
+ self.AuthorWidget = QtGui.QWidget(self.AuthorsPage)
+ self.AuthorWidget.setObjectName("AuthorWidget")
+ self.horizontalLayout_2 = QtGui.QHBoxLayout(self.AuthorWidget)
+ self.horizontalLayout_2.setSpacing(8)
+ self.horizontalLayout_2.setMargin(0)
+ self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+ spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+ self.horizontalLayout_2.addItem(spacerItem)
+ self.AuthorAddButton = QtGui.QPushButton(self.AuthorWidget)
+ icon3 = QtGui.QIcon()
+ icon3.addPixmap(QtGui.QPixmap(":/songs/song_author_edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.AuthorAddButton.setIcon(icon3)
+ self.AuthorAddButton.setObjectName("AuthorAddButton")
+ self.horizontalLayout_2.addWidget(self.AuthorAddButton)
+ self.AuthorEditButton = QtGui.QPushButton(self.AuthorWidget)
+ icon4 = QtGui.QIcon()
+ icon4.addPixmap(QtGui.QPixmap(":/songs/song_edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.AuthorEditButton.setIcon(icon4)
+ self.AuthorEditButton.setObjectName("AuthorEditButton")
+ self.horizontalLayout_2.addWidget(self.AuthorEditButton)
+ self.AuthorDeleteButton = QtGui.QPushButton(self.AuthorWidget)
+ icon5 = QtGui.QIcon()
+ icon5.addPixmap(QtGui.QPixmap(":/songs/song_delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.AuthorDeleteButton.setIcon(icon5)
+ self.AuthorDeleteButton.setObjectName("AuthorDeleteButton")
+ self.horizontalLayout_2.addWidget(self.AuthorDeleteButton)
+ self.verticalLayout_2.addWidget(self.AuthorWidget)
+ self.TypeStackedWidget.addWidget(self.AuthorsPage)
+ self.TopicsPage = QtGui.QWidget()
+ self.TopicsPage.setObjectName("TopicsPage")
+ self.TypeStackedWidget.addWidget(self.TopicsPage)
+ self.BooksPage = QtGui.QWidget()
+ self.BooksPage.setObjectName("BooksPage")
+ self.listWidget = QtGui.QListWidget(self.BooksPage)
+ self.listWidget.setGeometry(QtCore.QRect(30, 20, 256, 192))
+ self.listWidget.setObjectName("listWidget")
+ self.TypeStackedWidget.addWidget(self.BooksPage)
+ self.horizontalLayout.addWidget(self.TypeStackedWidget)
+ self.verticalLayout.addWidget(self.ContentWidget)
+ self.MaintenanceButtonBox = QtGui.QDialogButtonBox(SongMaintenanceDialog)
+ self.MaintenanceButtonBox.setOrientation(QtCore.Qt.Horizontal)
+ self.MaintenanceButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Close)
+ self.MaintenanceButtonBox.setObjectName("MaintenanceButtonBox")
+ self.verticalLayout.addWidget(self.MaintenanceButtonBox)
+
+ self.retranslateUi(SongMaintenanceDialog)
+ self.TypeStackedWidget.setCurrentIndex(0)
+ QtCore.QObject.connect(self.MaintenanceButtonBox, QtCore.SIGNAL("rejected()"), SongMaintenanceDialog.accept)
+ QtCore.QObject.connect(self.TypeListWidget, QtCore.SIGNAL("currentRowChanged(int)"), self.TypeStackedWidget.setCurrentIndex)
+ QtCore.QMetaObject.connectSlotsByName(SongMaintenanceDialog)
+
+ def retranslateUi(self, SongMaintenanceDialog):
+ SongMaintenanceDialog.setWindowTitle(QtGui.QApplication.translate("SongMaintenanceDialog", "Song Maintenance", None, QtGui.QApplication.UnicodeUTF8))
+ __sortingEnabled = self.TypeListWidget.isSortingEnabled()
+ self.TypeListWidget.setSortingEnabled(False)
+ self.TypeListWidget.item(0).setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Authors", None, QtGui.QApplication.UnicodeUTF8))
+ self.TypeListWidget.item(1).setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Topics", None, QtGui.QApplication.UnicodeUTF8))
+ self.TypeListWidget.item(2).setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Books/Hymnals", None, QtGui.QApplication.UnicodeUTF8))
+ self.TypeListWidget.setSortingEnabled(__sortingEnabled)
+ self.AuthorAddButton.setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Add", None, QtGui.QApplication.UnicodeUTF8))
+ self.AuthorEditButton.setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Edit", None, QtGui.QApplication.UnicodeUTF8))
+ self.AuthorDeleteButton.setText(QtGui.QApplication.translate("SongMaintenanceDialog", "Delete", None, QtGui.QApplication.UnicodeUTF8))
+
+from openlp.core.resources import *
+
+if __name__ == "__main__":
+ import sys
+ app = QtGui.QApplication(sys.argv)
+ SongMaintenanceDialog = QtGui.QDialog()
+ ui = Ui_SongMaintenanceDialog()
+ ui.setupUi(SongMaintenanceDialog)
+ SongMaintenanceDialog.show()
+ sys.exit(app.exec_())
+
diff --git a/resources/forms/songmaintenance.ui b/resources/forms/songmaintenance.ui
new file mode 100644
index 000000000..444e444ec
--- /dev/null
+++ b/resources/forms/songmaintenance.ui
@@ -0,0 +1,251 @@
+
+
+ SongMaintenanceDialog
+
+
+
+ 0
+ 0
+ 486
+ 361
+
+
+
+ Song Maintenance
+
+
+
+ 8
+
+
+ 8
+
+ -
+
+
+
+ 8
+
+
+ 0
+
+
-
+
+
+
+ 150
+ 16777215
+
+
+
+ false
+
+
+
+ 32
+ 32
+
+
+
+ QListView::TopToBottom
+
+
+ 0
+
+
+ QListView::IconMode
+
+
+ true
+
+
-
+
+ Authors
+
+
+ AlignHCenter|AlignVCenter|AlignCenter
+
+
+
+ :/songs/author_maintenance.png:/songs/author_maintenance.png
+
+
+ ItemIsSelectable|ItemIsEnabled
+
+
+ -
+
+ Topics
+
+
+ AlignHCenter|AlignVCenter|AlignCenter
+
+
+
+ :/songs/topic_maintenance.png:/songs/topic_maintenance.png
+
+
+ ItemIsSelectable|ItemIsEnabled
+
+
+ -
+
+ Books/Hymnals
+
+
+ AlignHCenter|AlignVCenter|AlignCenter
+
+
+
+ :/songs/book_maintenance.png:/songs/book_maintenance.png
+
+
+ ItemIsSelectable|ItemIsEnabled
+
+
+
+
+ -
+
+
+ 0
+
+
+
+
+ 8
+
+
+ 0
+
+
-
+
+
+ -
+
+
+
+ 8
+
+
+ 0
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Add
+
+
+
+ :/songs/song_author_edit.png:/songs/song_author_edit.png
+
+
+
+ -
+
+
+ Edit
+
+
+
+ :/songs/song_edit.png:/songs/song_edit.png
+
+
+
+ -
+
+
+ Delete
+
+
+
+ :/songs/song_delete.png:/songs/song_delete.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 30
+ 20
+ 256
+ 192
+
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Close
+
+
+
+
+
+
+
+
+
+
+ MaintenanceButtonBox
+ accepted()
+ SongMaintenanceDialog
+ accept()
+
+
+ 242
+ 340
+
+
+ 242
+ 180
+
+
+
+
+ TypeListWidget
+ currentRowChanged(int)
+ TypeStackedWidget
+ setCurrentIndex(int)
+
+
+ 82
+ 163
+
+
+ 321
+ 163
+
+
+
+
+
diff --git a/resources/images/author_maintenance.png b/resources/images/author_maintenance.png
new file mode 100644
index 000000000..9a1f55159
Binary files /dev/null and b/resources/images/author_maintenance.png differ
diff --git a/resources/images/book_maintenance.png b/resources/images/book_maintenance.png
new file mode 100644
index 000000000..062249fe9
Binary files /dev/null and b/resources/images/book_maintenance.png differ
diff --git a/resources/images/openlp-2.qrc b/resources/images/openlp-2.qrc
index 14f05e56e..de5da6a9f 100644
--- a/resources/images/openlp-2.qrc
+++ b/resources/images/openlp-2.qrc
@@ -1,5 +1,8 @@
+ book_maintenance.png
+ author_maintenance.png
+ topic_maintenance.png
song_delete.png
song_edit.png
song_export.png
diff --git a/resources/images/topic_maintenance.png b/resources/images/topic_maintenance.png
new file mode 100644
index 000000000..e3b8555dd
Binary files /dev/null and b/resources/images/topic_maintenance.png differ