⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 theme_repository.cpp

📁 uclinux 下的vlc播放器源代码
💻 CPP
字号:
/***************************************************************************** * theme_repository.cpp ***************************************************************************** * Copyright (C) 2004 the VideoLAN team * $Id: theme_repository.cpp 15008 2006-03-31 19:24:33Z zorglub $ * * Authors: Cyril Deguet     <asmax@via.ecp.fr> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/#include "theme_repository.hpp"#include "os_factory.hpp"#include "../commands/async_queue.hpp"#include "../commands/cmd_dialogs.hpp"#ifdef HAVE_UNISTD_H#   include <unistd.h>#elif defined( WIN32 ) && !defined( UNDER_CE )#   include <direct.h>#endif#ifdef HAVE_DIRENT_H#   include <dirent.h>#endifconst char *ThemeRepository::kOpenDialog = "{openSkin}";ThemeRepository *ThemeRepository::instance( intf_thread_t *pIntf ){    if( pIntf->p_sys->p_repository == NULL )    {        pIntf->p_sys->p_repository = new ThemeRepository( pIntf );    }    return pIntf->p_sys->p_repository;}void ThemeRepository::destroy( intf_thread_t *pIntf ){    if( pIntf->p_sys->p_repository )    {        delete pIntf->p_sys->p_repository;        pIntf->p_sys->p_repository = NULL;    }}ThemeRepository::ThemeRepository( intf_thread_t *pIntf ): SkinObject( pIntf ){    vlc_value_t val, text;    // Create a variable to add items in wxwindows popup menu    var_Create( pIntf, "intf-skins", VLC_VAR_STRING |                VLC_VAR_HASCHOICE | VLC_VAR_ISCOMMAND );    text.psz_string = _("Select skin");    var_Change( pIntf, "intf-skins", VLC_VAR_SETTEXT, &text, NULL );    // Scan vlt files in the resource path    OSFactory *pOsFactory = OSFactory::instance( pIntf );    list<string> resPath = pOsFactory->getResourcePath();    list<string>::const_iterator it;    for( it = resPath.begin(); it != resPath.end(); it++ )    {        parseDirectory( *it );    }    // Add an entry for the "open skin" dialog    val.psz_string = (char*)kOpenDialog;    text.psz_string = _("Open skin...");    var_Change( getIntf(), "intf-skins", VLC_VAR_ADDCHOICE, &val,                &text );    // Set the callback    var_AddCallback( pIntf, "intf-skins", changeSkin, this );}ThemeRepository::~ThemeRepository(){    var_Destroy( getIntf(), "intf-skins" );}void ThemeRepository::parseDirectory( const string &rDir ){    DIR *pDir;    struct dirent *pDirContent;    vlc_value_t val, text;    // Path separator    const string &sep = OSFactory::instance( getIntf() )->getDirSeparator();    // Open the dir    pDir = opendir( rDir.c_str() );    if( pDir == NULL )    {        // An error occurred        msg_Dbg( getIntf(), "cannot open directory %s", rDir.c_str() );        return;    }    // Get the first directory entry    pDirContent = (dirent*)readdir( pDir );    // While we still have entries in the directory    while( pDirContent != NULL )    {        string name = pDirContent->d_name;        string extension;        if( name.size() > 4 )        {            extension = name.substr( name.size() - 4, 4 );        }        if( extension == ".vlt" || extension == ".wsz" )        {            string path = rDir + sep + name;            msg_Dbg( getIntf(), "found skin %s", path.c_str() );            // Add the theme in the popup menu            string shortname = name.substr( 0, name.size() - 4 );            val.psz_string = new char[path.size() + 1];            text.psz_string = new char[shortname.size() + 1];            strcpy( val.psz_string, path.c_str() );            strcpy( text.psz_string, shortname.c_str() );            var_Change( getIntf(), "intf-skins", VLC_VAR_ADDCHOICE, &val,                        &text );            delete[] val.psz_string;            delete[] text.psz_string;        }        pDirContent = (dirent*)readdir( pDir );    }    closedir( pDir );}int ThemeRepository::changeSkin( vlc_object_t *pIntf, char const *pCmd,                                 vlc_value_t oldval, vlc_value_t newval,                                 void *pData ){    ThemeRepository *pThis = (ThemeRepository*)(pData);    // Special menu entry for the open skin dialog    if( !strcmp( newval.psz_string, kOpenDialog ) )    {        CmdDlgChangeSkin cmd( pThis->getIntf() );        cmd.execute();    }    else    {        // Try to load the new skin        CmdChangeSkin *pCmd = new CmdChangeSkin( pThis->getIntf(),                                                 newval.psz_string );        AsyncQueue *pQueue = AsyncQueue::instance( pThis->getIntf() );        pQueue->push( CmdGenericPtr( pCmd ) );    }    return VLC_SUCCESS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -