All AndBiases are now created empty
[amarok:rengelss-amarok.git] / src / dynamic / biases / IfElseBias.h
1 /****************************************************************************************
2  * Copyright (c) 2008 Daniel Jones <danielcjones@gmail.com>                             *
3  * Copyright (c) 2009 Leo Franchi <lfranchi@kde.org>                                    *
4  * Copyright (c) 2010, 2011 Ralf Engels <ralf-engels@gmx.de>                                  *
5  *                                                                                      *
6  * This program is free software; you can redistribute it and/or modify it under        *
7  * the terms of the GNU General Public License as published by the Free Software        *
8  * Foundation; either version 2 of the License, or (at your option) version 3 or        *
9  * any later version accepted by the membership of KDE e.V. (or its successor approved  *
10  * by the membership of KDE e.V.), which shall act as a proxy defined in Section 14 of  *
11  * version 3 of the license.                                                            *
12  *                                                                                      *
13  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
14  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
15  * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
16  *                                                                                      *
17  * You should have received a copy of the GNU General Public License along with         *
18  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
19  ****************************************************************************************/
20
21 #ifndef AMAROK_IFELSEBIAS_H
22 #define AMAROK_IFELSEBIAS_H
23
24 #include "Bias.h"
25 #include "BiasFactory.h"
26
27 namespace Dynamic
28 {
29
30     /** The if-else bias works like an or bias.
31         If the first sub-bias doesn't return a valid result it
32         will go to the second sub-bias and so on.
33     */
34     class IfElseBias : public OrBias
35     {
36         Q_OBJECT
37
38         public:
39             IfElseBias();
40             IfElseBias( QXmlStreamReader *reader );
41
42             virtual void toXml( QXmlStreamWriter *writer ) const;
43
44             static QString sName();
45             virtual QString name() const;
46             virtual QString toString() const;
47
48             virtual void paintOperator( QPainter* painter, const QRect &rect, Dynamic::AbstractBias* bias );
49
50             virtual TrackSet matchingTracks( int position,
51                                              const Meta::TrackList& playlist,
52                                              int contextCount,
53                                              const TrackCollectionPtr universe ) const;
54
55             virtual void resultReceived( const Dynamic::TrackSet &tracks );
56
57         private:
58
59             // buffered by matchingTracks
60             mutable int m_position;
61             mutable Meta::TrackList m_playlist;
62             mutable int m_contextCount;
63             mutable Dynamic::TrackCollectionPtr m_universe;
64
65             Q_DISABLE_COPY(IfElseBias)
66     };
67
68
69     class AMAROK_EXPORT IfElseBiasFactory : public Dynamic::AbstractBiasFactory
70     {
71         public:
72             virtual QString i18nName() const;
73             virtual QString name() const;
74             virtual QString i18nDescription() const;
75             virtual BiasPtr createBias();
76             virtual BiasPtr createBias( QXmlStreamReader *reader );
77     };
78
79 }
80
81
82 #endif
83