[qt4/recents] Remove dependency on qt4.4 for QList::removeOne()
[vlc.git] / modules / gui / qt4 / recents.cpp
1 /*****************************************************************************
2  * recents.cpp : Recents MRL (menu)
3  *****************************************************************************
4  * Copyright © 2006-2008 the VideoLAN team
5  * $Id$
6  *
7  * Authors: Ludovic Fauvet <etix@l0cal.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * ( at your option ) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23
24
25 #include "recents.hpp"
26 #include "dialogs_provider.hpp"
27
28 #include <QList>
29 #include <QString>
30 #include <QAction>
31 #include <QSettings>
32 #include <QRegExp>
33 #include <QSignalMapper>
34
35 RecentsMRL* RecentsMRL::instance = NULL;
36
37 RecentsMRL::RecentsMRL( intf_thread_t *_p_intf ) : p_intf( _p_intf )
38 {
39     stack = new QList<QString>;
40     signalMapper = new QSignalMapper(this);
41     CONNECT( signalMapper,
42             mapped(const QString & ),
43             DialogsProvider::getInstance( p_intf ),
44             playMRL( const QString & ) );
45
46     isActive = config_GetInt( p_intf, "qt-recentplay" );
47     filter = new QRegExp(
48             qfu( config_GetPsz( p_intf, "qt-recentplay-filter" ) ),
49             Qt::CaseInsensitive );
50
51     load();
52     if ( !isActive ) clear();
53 }
54
55 RecentsMRL::~RecentsMRL()
56 {
57     delete stack;
58 }
59
60 void RecentsMRL::addRecent( const QString &mrl )
61 {
62     if ( !isActive || filter->indexIn( mrl ) >= 0 )
63         return;
64
65     msg_Dbg( p_intf, "Adding a new MRL to recent ones: %s", qtu( mrl ) );
66     int i_index = stack->indexOf( mrl );
67     if( 0 <= i_index )
68     {
69         /* move to the front */
70         stack->move( i_index, 0 );
71     }
72     else
73     {
74         stack->prepend( mrl );
75         if( stack->size() > RECENTS_LIST_SIZE )
76             stack->takeLast();
77     }
78     emit updated();
79     save();
80 }
81
82 void RecentsMRL::clear()
83 {
84     if ( stack->isEmpty() )
85         return;
86     stack->clear();
87     emit updated();
88     save();
89 }
90
91 QList<QString> RecentsMRL::recents()
92 {
93     return QList<QString>(*stack);
94 }
95
96 void RecentsMRL::load()
97 {
98     QStringList list = getSettings()->value( "RecentsMRL/list" ).toStringList();
99
100     for( int i = 0; i < list.size(); ++i )
101     {
102         if (filter->indexIn( list.at(i) ) == -1)
103             stack->append( list.at(i) );
104     }
105 }
106
107 void RecentsMRL::save()
108 {
109     QStringList list;
110
111     for( int i = 0; i < stack->size(); ++i )
112         list << stack->at(i);
113
114     getSettings()->setValue( "RecentsMRL/list", list );
115 }
116