recents.cpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:3k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * recents.cpp : Recents MRL (menu)
  3.  *****************************************************************************
  4.  * Copyright © 2006-2008 the VideoLAN team
  5.  * $Id: 83317afd9532bbc4f86e293bce4454fe6deed013 $
  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. #include "recents.hpp"
  24. #include "dialogs_provider.hpp"
  25. #include "menus.hpp"
  26. #include <QList>
  27. #include <QString>
  28. #include <QAction>
  29. #include <QSettings>
  30. #include <QRegExp>
  31. #include <QSignalMapper>
  32. #ifdef WIN32
  33. #include <shlobj.h>
  34. #endif
  35. RecentsMRL* RecentsMRL::instance = NULL;
  36. RecentsMRL::RecentsMRL( intf_thread_t *_p_intf ) : p_intf( _p_intf )
  37. {
  38.     stack = new QList<QString>;
  39.     signalMapper = new QSignalMapper(this);
  40.     CONNECT( signalMapper,
  41.             mapped(const QString & ),
  42.             DialogsProvider::getInstance( p_intf ),
  43.             playMRL( const QString & ) );
  44.     isActive = config_GetInt( p_intf, "qt-recentplay" );
  45.     char* psz_tmp = config_GetPsz( p_intf, "qt-recentplay-filter" );
  46.     if( psz_tmp && *psz_tmp )
  47.         filter = new QRegExp( psz_tmp, Qt::CaseInsensitive );
  48.     else
  49.         filter = NULL;
  50.     free( psz_tmp );
  51.     load();
  52.     if( !isActive ) clear();
  53. }
  54. RecentsMRL::~RecentsMRL()
  55. {
  56.     delete filter;
  57.     delete stack;
  58. }
  59. void RecentsMRL::addRecent( const QString &mrl )
  60. {
  61.     if ( !isActive || ( filter && filter->indexIn( mrl ) >= 0 ) )
  62.         return;
  63.     msg_Dbg( p_intf, "Adding a new MRL to recent ones: %s", qtu( mrl ) );
  64. #ifdef WIN32
  65.     /* Add to the Windows 7 default list in taskbar */
  66.     SHAddToRecentDocs( 0x00000002 , qtu( mrl ) );
  67. #endif
  68.     int i_index = stack->indexOf( mrl );
  69.     if( 0 <= i_index )
  70.     {
  71.         /* move to the front */
  72.         stack->move( i_index, 0 );
  73.     }
  74.     else
  75.     {
  76.         stack->prepend( mrl );
  77.         if( stack->size() > RECENTS_LIST_SIZE )
  78.             stack->takeLast();
  79.     }
  80.     QVLCMenu::updateRecents( p_intf );
  81.     save();
  82. }
  83. void RecentsMRL::clear()
  84. {
  85.     if ( stack->isEmpty() )
  86.         return;
  87.     stack->clear();
  88.     if( isActive ) QVLCMenu::updateRecents( p_intf );
  89.     save();
  90. }
  91. QList<QString> RecentsMRL::recents()
  92. {
  93.     return QList<QString>(*stack);
  94. }
  95. void RecentsMRL::load()
  96. {
  97.     QStringList list = getSettings()->value( "RecentsMRL/list" ).toStringList();
  98.     for( int i = 0; i < list.size(); ++i )
  99.     {
  100.         if ( !filter || filter->indexIn( list.at(i) ) == -1 )
  101.             stack->append( list.at(i) );
  102.     }
  103. }
  104. void RecentsMRL::save()
  105. {
  106.     QStringList list;
  107.     for( int i = 0; i < stack->size(); ++i )
  108.         list << stack->at(i);
  109.     getSettings()->setValue( "RecentsMRL/list", list );
  110. }