Drag n drop from songdb to playlist, doesn't add a playlist item yet though
[kworship.git] / kworship / songdb / KwSongdbTree.cpp
blob68308df6230a03f18b4cb9ec6aecdd72defb67bf
1 /**
2 * @file KwSongdbTree.h
3 * @brief A tree widget with songs from songdb.
4 * @author James Hogan <james@albanarts.com>
5 */
7 #include "KwSongdbTree.h"
8 #include "KwSongdbTreeGroupAction.h"
9 #include "KwSongdbModel.h"
10 #include "KwSongdbFilterNode.h"
12 #include <QActionGroup>
15 * Constructors + destructor.
18 /// Primary constructor.
19 KwSongdbTree::KwSongdbTree(QWidget* parent)
20 : QTreeView(parent)
21 , m_model(new KwSongdbModel(this))
22 , m_groupByActions(new QActionGroup(this))
24 KwSongdbFilterLevelList* filters;
26 filters = new KwSongdbFilterLevelList;
27 filters->resize(2);
28 (*filters)[0].tableName = "Song";
29 (*filters)[0].idExpression = "Song.id";
30 (*filters)[0].labelExpression = "Song.name";
31 (*filters)[0].orderBy << "Song.name ASC";
32 (*filters)[1].tableName = "SongVersion";
33 (*filters)[1].idExpression = "SongVersion.id";
34 (*filters)[1].labelExpression = "SongVersion.name";
35 (*filters)[1].innerJoinClauses << "SongVersion ON SongVersion.song_id = Song.id";
36 (*filters)[1].orderBy << "SongVersion.name ASC";
37 KwSongdbTreeGroupAction* actionNameVersion = new KwSongdbTreeGroupAction("Song name / Version", filters, m_groupByActions);
38 connect(actionNameVersion, SIGNAL(triggered(const KwSongdbFilterLevelList*)), this, SLOT(groupBy(const KwSongdbFilterLevelList*)));
40 filters = new KwSongdbFilterLevelList;
41 filters->resize(2);
42 (*filters)[0].tableName = "SongBook";
43 (*filters)[0].idExpression = "SongBook.id";
44 (*filters)[0].labelExpression = "CONCAT(SongBook.abreviation, \" \", SongBook.name)";
45 (*filters)[0].orderBy << "SongBook.name ASC";
46 (*filters)[1].tableName = "SongVersion";
47 (*filters)[1].idExpression = "SongVersion.id";
48 (*filters)[1].labelExpression = "CONCAT(SongBookSong.book_number, \" - \", Song.name)";
49 (*filters)[1].innerJoinClauses << "SongBookSong ON SongBookSong.book_id = SongBook.id"
50 << "SongVersion ON SongVersion.id = SongBookSong.version_id"
51 << "Song ON Song.id = SongVersion.song_id";
52 (*filters)[1].orderBy << "SongBookSong.book_number ASC";
53 KwSongdbTreeGroupAction* actionBookNumber = new KwSongdbTreeGroupAction("Song book / Song number", filters, m_groupByActions);
54 connect(actionBookNumber, SIGNAL(triggered(const KwSongdbFilterLevelList*)), this, SLOT(groupBy(const KwSongdbFilterLevelList*)));
56 filters = new KwSongdbFilterLevelList;
57 KwSongdbTreeGroupAction* actionLabelNameVersion = new KwSongdbTreeGroupAction("Label / Song name / Version", filters, m_groupByActions);
58 //connect(actionLabelNameVersion, SIGNAL(triggered(const KwSongdbFilterLevelList*)), this, SLOT(groupBy(const KwSongdbFilterLevelList*)));
60 actionNameVersion->trigger();
62 // setup tree view
63 setModel(m_model);
64 setDragEnabled(true);
65 setSelectionMode(QAbstractItemView::ExtendedSelection);
68 /// Destructor.
69 KwSongdbTree::~KwSongdbTree()
74 * Actions
77 /// Get the group by actions.
78 QActionGroup* KwSongdbTree::groupByActions()
80 return m_groupByActions;
84 * Private slots
87 /// Activate a grouping.
88 void KwSongdbTree::groupBy(const KwSongdbFilterLevelList* filters)
90 m_model->setRootNode(new KwSongdbFilterNode(filters, "", 0));