3 * @brief A tree widget with songs from songdb.
4 * @author James Hogan <james@albanarts.com>
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
)
21 , m_model(new KwSongdbModel(this))
22 , m_groupByActions(new QActionGroup(this))
24 KwSongdbFilterLevelList
* filters
;
26 filters
= new KwSongdbFilterLevelList
;
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
;
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();
65 setSelectionMode(QAbstractItemView::ExtendedSelection
);
69 KwSongdbTree::~KwSongdbTree()
77 /// Get the group by actions.
78 QActionGroup
* KwSongdbTree::groupByActions()
80 return m_groupByActions
;
87 /// Activate a grouping.
88 void KwSongdbTree::groupBy(const KwSongdbFilterLevelList
* filters
)
90 m_model
->setRootNode(new KwSongdbFilterNode(filters
, "", 0));