1 /***************************************************************************
2 * This file is part of KWorship. *
3 * Copyright 2008 James Hogan <james@albanarts.com> *
5 * KWorship is free software: you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation, either version 2 of the License, or *
8 * (at your option) any later version. *
10 * KWorship is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with KWorship. If not, write to the Free Software Foundation, *
17 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
18 ***************************************************************************/
21 * @file KwSongdbPlugin.cpp
22 * @brief Song database plugin.
23 * @author James Hogan <james@albanarts.com>
26 #include "KwSongdbPlugin.h"
27 #include "KwSongdbTree.h"
29 #include "KwSongdbSongEditDialog.h"
30 #include "KwSongdbSong.h"
31 #include "KwSongdbSongBooksEditWidget.h"
32 #include <KwApplication.h>
36 #include <KActionMenu>
37 #include <KActionCollection>
38 #include <KGenericFactory>
40 #include <KMessageBox>
43 #include <QDockWidget>
44 #include <QVBoxLayout>
47 K_EXPORT_COMPONENT_FACTORY( kworship_songdb
, KGenericFactory
<KwSongdbPlugin
>("kworship_songdb") )
50 * Constructors + destructor
53 /// Default constructor.
54 KwSongdbPlugin::KwSongdbPlugin(QObject
* parent
, const QStringList
& params
)
55 : KwPlugin(parent
, "songdb",
57 i18n("The song database plugin allows for the management and display of song lyrics."))
59 , m_unlockSongDbAction(0)
60 , m_lockSongDbAction(0)
61 , m_groupSongsByAction(0)
64 , m_editSongBooksAction(0)
68 setXMLFile("songdb/kworship_songdbui.rc");
72 m_unlockSongDbAction
= new KAction(KIcon("document-decrypt"), i18n("Unlock Song Database"), this);
73 actionCollection()->addAction( QLatin1String("unlock_song_database"), m_unlockSongDbAction
);
74 connect(m_unlockSongDbAction
, SIGNAL(triggered(bool)), this, SLOT(songdbUnlock()));
76 m_lockSongDbAction
= new KAction(KIcon("document-encrypt"), i18n("Lock Song Database"), this);
77 m_lockSongDbAction
->setVisible(false);
78 actionCollection()->addAction( QLatin1String("lock_song_database"), m_lockSongDbAction
);
79 connect(m_lockSongDbAction
, SIGNAL(triggered(bool)), this, SLOT(songdbLock()));
81 m_groupSongsByAction
= new KActionMenu(KIcon("view-filter"), i18n("Group By"), this);
82 m_groupSongsByAction
->setDelayed(false);
83 actionCollection()->addAction( QLatin1String("group_songs_by"), m_groupSongsByAction
);
85 m_addSongAction
= new KAction(KIcon("list-add"), i18n("Add Song"), this);
86 actionCollection()->addAction( QLatin1String("add_song"), m_addSongAction
);
87 connect(m_addSongAction
, SIGNAL(triggered(bool)), this, SLOT(songdbAdd()));
89 m_editSongAction
= new KAction(KIcon("view-media-lyrics"), i18n("Edit Song"), this);
90 actionCollection()->addAction( QLatin1String("edit_song"), m_editSongAction
);
91 connect(m_editSongAction
, SIGNAL(triggered(bool)), this, SLOT(songdbEdit()));
93 m_editSongBooksAction
= new KAction(KIcon("format-list-ordered"), i18n("Edit Song Books"), this);
94 actionCollection()->addAction( QLatin1String("edit_song_books"), m_editSongBooksAction
);
95 connect(m_editSongBooksAction
, SIGNAL(triggered(bool)), this, SLOT(songdbEditSongBooks()));
98 m_docker
= new QDockWidget(i18n("Song DB"));
99 m_docker
->setObjectName("dockSongdb");
100 QWidget
* mainDockWidget
= new QWidget(/*m_docker*/);
101 QVBoxLayout
* dockLayout
= new QVBoxLayout(mainDockWidget
);
102 m_docker
->setWidget(mainDockWidget
);
104 // Ensure database is connected
105 KwApplication
* app
= KwApplication::self();
106 if (app
->database().isOpen())
108 new KwSongdb(app
->database());
111 QWidget
* toolbarWidget
= new QWidget(mainDockWidget
);
112 dockLayout
->addWidget(toolbarWidget
);
113 QHBoxLayout
* toolbarLayout
= new QHBoxLayout(toolbarWidget
);
115 // Small toolbar for group by action
116 QToolBar
* songTextToolBar
= new QToolBar("Songs");
117 songTextToolBar
->setToolButtonStyle(Qt::ToolButtonTextBesideIcon
);
118 songTextToolBar
->setSizePolicy(QSizePolicy(QSizePolicy::Minimum
, QSizePolicy::Minimum
));
119 toolbarLayout
->addWidget(songTextToolBar
);
121 songTextToolBar
->addAction(m_groupSongsByAction
);
123 // Rest of the toolbar
124 QToolBar
* songToolBar
= new QToolBar("Songs");
125 songToolBar
->setSizePolicy(QSizePolicy(QSizePolicy::Minimum
, QSizePolicy::Minimum
));
126 toolbarLayout
->addWidget(songToolBar
);
128 songToolBar
->addAction(m_addSongAction
);
129 songToolBar
->addAction(m_editSongAction
);
130 songToolBar
->addAction(m_editSongBooksAction
);
131 KAction
* insertIntoPlaylistAction
= new KAction(KIcon("player_playlist"), i18n("Insert Into Playlist"), songToolBar
);
132 songToolBar
->addAction(insertIntoPlaylistAction
);
134 KMenu
* groupByMenu
= new KMenu(songToolBar
);
135 m_groupSongsByAction
->setMenu(groupByMenu
);
137 m_songDbTree
= new KwSongdbTree(mainDockWidget
);
138 dockLayout
->addWidget(m_songDbTree
);
139 groupByMenu
->addActions(m_songDbTree
->groupByActions()->actions());
143 QLabel
* labelNoDb
= new QLabel(i18n("Song database not connected: %1", app
->database().lastError().text()), mainDockWidget
);
144 dockLayout
->addWidget(labelNoDb
);
147 app
->mainWindow()->addDockWidget(Qt::LeftDockWidgetArea
, m_docker
);
151 KwSongdbPlugin::~KwSongdbPlugin()
153 delete KwSongdb::self();
160 void KwSongdbPlugin::songdbUnlock()
162 m_unlockSongDbAction
->setVisible(false);
163 m_lockSongDbAction
->setVisible(true);
166 void KwSongdbPlugin::songdbLock()
168 m_unlockSongDbAction
->setVisible(true);
169 m_lockSongDbAction
->setVisible(false);
172 void KwSongdbPlugin::songdbAdd()
174 KwSongdbSongEditDialog
* dialog
= new KwSongdbSongEditDialog(0);
175 dialog
->setCaption(i18n("Add Song"));
176 dialog
->setAttribute(Qt::WA_DeleteOnClose
, true);
180 void KwSongdbPlugin::songdbEdit()
182 /// @todo Ensure the same song isn't open twice
183 KwSongdbSong
* song
= m_songDbTree
->currentSong();
186 KwSongdbVersion
* version
= m_songDbTree
->currentSongVersion();
188 KwSongdbSongEditDialog
* dialog
= new KwSongdbSongEditDialog(song
, version
);
189 dialog
->setCaption(i18n("Edit Song - %1", song
->name()));
190 dialog
->setAttribute(Qt::WA_DeleteOnClose
, true);
195 KMessageBox::information(KwApplication::self()->mainWindow(), i18n("Please select a song."));
199 void KwSongdbPlugin::songdbEditSongBooks()
201 KwSongdbSongBooksEditWidget::showDialog();
205 * Loading and unloading virtual interface
208 void KwSongdbPlugin::_load()
212 void KwSongdbPlugin::_unload()