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

📄 complete_preferences.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * preferences.cpp : "Normal preferences" **************************************************************************** * Copyright (C) 2006-2007 the VideoLAN team * $Id$ * * Authors: Clément Stenac <zorglub@videolan.org> * * 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. *****************************************************************************/#ifdef HAVE_CONFIG_H# include "config.h"#endif#include <QApplication>#include <QLabel>#include <QTreeWidget>#include <QTreeWidgetItem>#include <QVariant>#include <QString>#include <QFont>#include <QGroupBox>#include <QScrollArea>#include <QVBoxLayout>#include <QHBoxLayout>#include <QGridLayout>#include <QHeaderView>#include <QPalette>#include <QColor>#include "components/complete_preferences.hpp"#include "components/preferences_widgets.hpp"#include <vlc_config_cat.h>#include <vlc_intf_strings.h>#include <assert.h>#define ITEM_HEIGHT 25/********************************************************************* * The Tree *********************************************************************/PrefsTree::PrefsTree( intf_thread_t *_p_intf, QWidget *_parent ) :                            QTreeWidget( _parent ), p_intf( _p_intf ){    /* General Qt options */    setColumnCount( 1 );    setAlternatingRowColors( true );    header()->hide();    setIconSize( QSize( ITEM_HEIGHT,ITEM_HEIGHT ) );    setTextElideMode( Qt::ElideNone );    /* Nice icons */#define BI( a,b) QIcon a##_icon = QIcon( QPixmap( b ))    BI( audio, ":/advprefs_audio" );    BI( video, ":/advprefs_video" );    BI( input, ":/advprefs_codec" );    BI( sout, ":/advprefs_sout" );    BI( advanced, ":/advprefs_extended" );    BI( playlist, ":/advprefs_playlist" );    BI( interface, ":/advprefs_intf" );#undef BI    /* Build the tree for the main module */    module_t *p_module = module_GetMainModule( p_intf );    /* Initialisation and get the confsize */    PrefsItemData *data = NULL;    PrefsItemData *data_sub = NULL;    QTreeWidgetItem *current_item = NULL;    unsigned confsize;    module_config_t *const p_config = module_GetConfig (p_module, &confsize);    /* Go through the list of conf */    for( size_t i = 0; i < confsize; i++ )    {        const char *psz_help;        QIcon icon;        /* Work on a new item */        module_config_t *p_item = p_config + i;        switch( p_item->i_type )        {        /* This is a category */        case CONFIG_CATEGORY:            if( p_item->value.i == -1 ) break;            /* PrefsItemData Init */            data = new PrefsItemData();            data->name = qtr( config_CategoryNameGet( p_item->value.i ) );            psz_help = config_CategoryHelpGet( p_item->value.i );            if( psz_help )                data->help = qtr( psz_help );            else                data->help.clear();            data->i_type = TYPE_CATEGORY;            data->i_object_id = p_item->value.i;            /* This is a category, put a nice icon */            switch( p_item->value.i )            {#define CI(a,b) case a: icon = b##_icon;break            CI( CAT_AUDIO, audio );            CI( CAT_VIDEO, video );            CI( CAT_INPUT, input );            CI( CAT_SOUT, sout );            CI( CAT_ADVANCED, advanced );            CI( CAT_PLAYLIST, playlist );            CI( CAT_INTERFACE, interface );            }#undef CI            /* Create a new QTreeItem to display it in the tree at top level */            current_item = new QTreeWidgetItem();            current_item->setText( 0, data->name );            current_item->setIcon( 0 , icon );            current_item->setSizeHint( 0, QSize( -1, ITEM_HEIGHT ) );            current_item->setData( 0, Qt::UserRole,                                   qVariantFromValue( data ) );            addTopLevelItem( current_item );            break;        /* This is a subcategory */        case CONFIG_SUBCATEGORY:            if( p_item->value.i == -1 ) break;            /* Special cases: move the main subcategories to the parent cat*/            if( data &&                ( p_item->value.i == SUBCAT_VIDEO_GENERAL ||                  p_item->value.i == SUBCAT_ADVANCED_MISC ||                  p_item->value.i == SUBCAT_INPUT_GENERAL ||                  p_item->value.i == SUBCAT_INTERFACE_GENERAL ||                  p_item->value.i == SUBCAT_SOUT_GENERAL||                  p_item->value.i == SUBCAT_PLAYLIST_GENERAL||                  p_item->value.i == SUBCAT_AUDIO_GENERAL ) )            {                /* Data still contains the correct thing */                data->i_type = TYPE_CATSUBCAT;                data->i_subcat_id = p_item->value.i;                data->name = qtr( config_CategoryNameGet( p_item->value.i ) );                psz_help = config_CategoryHelpGet( p_item->value.i );                if( psz_help )                    data->help = qtr( psz_help );                else                    data->help.clear();                current_item->setData( 0, Qt::UserRole,                                       QVariant::fromValue( data ) );                continue;            }            /* Normal Subcategories */            /* Process the Data */            data_sub = new PrefsItemData();            data_sub->name = qtr( config_CategoryNameGet( p_item->value.i) );            psz_help = config_CategoryHelpGet( p_item->value.i );            if( psz_help )                data_sub->help = qtr( psz_help );            else                data_sub->help.clear();            data_sub->i_type = TYPE_SUBCATEGORY;            data_sub->i_object_id = p_item->value.i;            /* Create a new TreeWidget */            QTreeWidgetItem *subcat_item = new QTreeWidgetItem();            subcat_item->setText( 0, data_sub->name );            subcat_item->setData( 0, Qt::UserRole,                                  qVariantFromValue( data_sub ) );            subcat_item->setSizeHint( 0, QSize( -1, ITEM_HEIGHT ) );            /* Add it to the parent */            assert( current_item );            current_item->addChild( subcat_item );            break;        /* Other items don't need yet a place on the tree */        }    }    module_PutConfig( p_config );    vlc_object_release( (vlc_object_t*)p_module );    vlc_list_t *p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE,                                        FIND_ANYWHERE );    /* Build the tree of plugins */    for( int i_index = 0; i_index < p_list->i_count; i_index++ )    {        /* Take every module */        p_module = (module_t *)p_list->p_values[i_index].p_object;        // Main module excluded        if( module_IsMainModule( p_module) ) continue;        unsigned i_subcategory = 0, i_category = 0, confsize;        bool b_options = false;        module_config_t *const p_config = module_GetConfig (p_module, &confsize);        /* Loop through the configurations items */        for (size_t i = 0; i < confsize; i++)        {            const module_config_t *p_item = p_config + i;            if( p_item->i_type == CONFIG_CATEGORY )                i_category = p_item->value.i;            else if( p_item->i_type == CONFIG_SUBCATEGORY )                i_subcategory = p_item->value.i;            if( p_item->i_type & CONFIG_ITEM )                b_options = true;            if( b_options && i_category && i_subcategory )                break;        }        module_PutConfig (p_config);        /* Dummy item, please proceed */        if( !b_options || i_category == 0 || i_subcategory == 0 ) continue;        // Locate the category item;        QTreeWidgetItem *subcat_item = NULL;        bool b_found = false;        for( int i_cat_index = 0 ; i_cat_index < topLevelItemCount();                                   i_cat_index++ )        {            /* Get the treeWidgetItem that correspond to the category */            QTreeWidgetItem *cat_item = topLevelItem( i_cat_index );            PrefsItemData *data = cat_item->data( 0, Qt::UserRole ).                                             value<PrefsItemData *>();            /* If we match the good category */            if( data->i_object_id == i_category )            {                for( int i_sc_index = 0; i_sc_index < cat_item->childCount();                         i_sc_index++ )                {                    subcat_item = cat_item->child( i_sc_index );                    PrefsItemData *sc_data = subcat_item->data(0, Qt::UserRole).                                                value<PrefsItemData *>();                    if( sc_data && sc_data->i_object_id == i_subcategory )                    {                        b_found = true;                        break;                    }                }                if( !b_found )                {                    subcat_item = cat_item;                    b_found = true;

⌨️ 快捷键说明

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