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

📄 info_panels.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * infopanels.cpp : Panels for the information dialogs **************************************************************************** * Copyright (C) 2006-2007 the VideoLAN team * $Id: da90cab870faa3637a07c5e831df996450c0f014 $ * * Authors: Clément Stenac <zorglub@videolan.org> *          Jean-Baptiste Kempf <jb@videolan.org> *          Ilkka Ollakka <ileoo@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 "qt4.hpp"#include "components/info_panels.hpp"#include "components/interface_widgets.hpp"#include <QTreeWidget>#include <QListView>#include <QPushButton>#include <QHeaderView>#include <QList>#include <QStringList>#include <QGridLayout>#include <QLineEdit>#include <QLabel>#include <QSpinBox>#include <QTabWidget>/************************************************************************ * Single panels ************************************************************************//** * First Panel - Meta Info * All the usual MetaData are displayed and can be changed. **/MetaPanel::MetaPanel( QWidget *parent,                      intf_thread_t *_p_intf )                      : QWidget( parent ), p_intf( _p_intf ){    QGridLayout *metaLayout = new QGridLayout( this );    int line = 0; /* Counter for GridLayout */    p_input = NULL;#define ADD_META( string, widget ) {                                      \    metaLayout->addWidget( new QLabel( qtr( string ) + " :" ), line, 0 ); \    widget = new QLineEdit;                                               \    metaLayout->addWidget( widget, line, 1, 1, 9 );                       \    line++;            }    /* Title, artist and album*/    ADD_META( VLC_META_TITLE, title_text ); /* OK */    ADD_META( VLC_META_ARTIST, artist_text ); /* OK */    ADD_META( VLC_META_ALBUM, collection_text ); /* OK */    /* Genre Name */    /* TODO List id3genres.h is not includable yet ? */    genre_text = new QLineEdit;    metaLayout->addWidget( new QLabel( qtr( VLC_META_GENRE ) + " :" ), line, 0 );    metaLayout->addWidget( genre_text, line, 1, 1, 3 );    /* Number - on the same line */    metaLayout->addWidget( new QLabel( qtr( VLC_META_TRACK_NUMBER )  + " :" ),                  line, 5, 1, 2  );    seqnum_text = new QLineEdit;    seqnum_text->setInputMask("0000");    seqnum_text->setAlignment( Qt::AlignRight );    metaLayout->addWidget( seqnum_text, line, 7, 1, 3 );    line++;    /* Date (Should be in years) */    date_text = new QLineEdit;    date_text->setInputMask("0000");    date_text->setAlignment( Qt::AlignRight );    metaLayout->addWidget( new QLabel( qtr( VLC_META_DATE ) + " :" ), line, 0 );    metaLayout->addWidget( date_text, line, 1, 1, 3 );    /* Rating - on the same line */    /*    metaLayout->addWidget( new QLabel( qtr( VLC_META_RATING ) + " :" ), line, 4, 1, 2 );    rating_text = new QSpinBox; setSpinBounds( rating_text );    metaLayout->addWidget( rating_text, line, 6, 1, 1 );    */    /* Language on the same line */    metaLayout->addWidget( new QLabel( qfu( VLC_META_LANGUAGE ) + " :" ), line, 5, 1, 2 );    language_text = new QLineEdit;    language_text->setReadOnly( true );    metaLayout->addWidget( language_text, line,  7, 1, 3 );    line++;    /* ART_URL */    art_cover = new CoverArtLabel( VLC_OBJECT( p_intf ) );    metaLayout->addWidget( art_cover, line, 8, 4, 2, Qt::AlignRight );/* Settings is unused *//*    l->addWidget( new QLabel( qtr( VLC_META_SETTING ) + " :" ), line, 5 );    setting_text = new QLineEdit;    l->addWidget( setting_text, line, 6, 1, 4 ); *//* Less used metadata */#define ADD_META_2( string, widget ) {                                    \    metaLayout->addWidget( new QLabel( qtr( string ) + " :" ), line, 0 ); \    widget = new QLineEdit;                                               \    metaLayout->addWidget( widget, line, 1, 1, 7 );                       \    line++;            }    /* Now Playing - Useful for live feeds (HTTP, DVB, ETC...) */    ADD_META_2( VLC_META_NOW_PLAYING, nowplaying_text );    nowplaying_text->setReadOnly( true );    ADD_META_2( VLC_META_PUBLISHER, publisher_text );    ADD_META_2( VLC_META_COPYRIGHT, copyright_text );    ADD_META_2( "Comments", description_text );/* useless metadata */    //ADD_META_2( VLC_META_ENCODED_BY, encodedby_text );    /*  ADD_META( TRACKID )  Useless ? */    /*  ADD_URI - DO not show it, done outside */    metaLayout->setColumnStretch( 1, 2 );    metaLayout->setColumnMinimumWidth ( 1, 80 );#undef ADD_META#undef ADD_META_2    CONNECT( title_text, textEdited( QString ), this, enterEditMode() );    CONNECT( artist_text, textEdited( QString ), this, enterEditMode() );    CONNECT( collection_text, textEdited( QString ), this, enterEditMode() );    CONNECT( genre_text, textEdited( QString ), this, enterEditMode() );    CONNECT( seqnum_text, textEdited( QString ), this, enterEditMode() );    CONNECT( date_text, textEdited( QString ), this, enterEditMode() );    CONNECT( description_text, textEdited( QString ), this, enterEditMode() );/*    CONNECT( rating_text, valueChanged( QString ), this, enterEditMode( QString ) );*/    /* We are not yet in Edit Mode */    b_inEditMode = false;}MetaPanel::~MetaPanel(){}/** * Update all the MetaData and art on an "item-changed" event **/void MetaPanel::update( input_item_t *p_item ){    /* Don't update if you are in edit mode */    if( b_inEditMode ) return;    else p_input = p_item;    char *psz_meta;#define UPDATE_META( meta, widget ) {               \    psz_meta = input_item_Get##meta( p_item );      \    if( !EMPTY_STR( psz_meta ) )                    \        widget->setText( qfu( psz_meta ) );         \    else                                            \        widget->setText( "" ); }                    \    free( psz_meta );#define UPDATE_META_INT( meta, widget ) {           \    psz_meta = input_item_Get##meta( p_item );      \    if( !EMPTY_STR( psz_meta ) )                    \        widget->setValue( atoi( psz_meta ) ); }     \    free( psz_meta );    /* Name / Title */    psz_meta = input_item_GetTitle( p_item );    char *psz_name = input_item_GetName( p_item );    if( !EMPTY_STR( psz_meta ) )        title_text->setText( qfu( psz_meta ) );    else if( !EMPTY_STR( psz_name ) )        title_text->setText( qfu( psz_name ) );    else title_text->setText( "" );    free( psz_meta );    free( psz_name );    /* URL / URI */    psz_meta = input_item_GetURL( p_item );    if( !EMPTY_STR( psz_meta ) )        emit uriSet( QString( psz_meta ) );    else    {        free( psz_meta );        psz_meta = input_item_GetURI( p_item );        if( !EMPTY_STR( psz_meta ) )            emit uriSet( QString( psz_meta ) );    }    free( psz_meta );    /* Other classic though */    UPDATE_META( Artist, artist_text );    UPDATE_META( Genre, genre_text );    UPDATE_META( Copyright, copyright_text );    UPDATE_META( Album, collection_text );    UPDATE_META( Description, description_text );    UPDATE_META( Language, language_text );    UPDATE_META( NowPlaying, nowplaying_text );    UPDATE_META( Publisher, publisher_text );//    UPDATE_META( Setting, setting_text );//    UPDATE_META( EncodedBy, encodedby_text );    UPDATE_META( Date, date_text );    UPDATE_META( TrackNum, seqnum_text );//    UPDATE_META_INT( Rating, rating_text );#undef UPDATE_META_INT#undef UPDATE_META    /* Update Art */    art_cover->update( p_item );}/** * Save the MetaData, triggered by parent->save Button **/void MetaPanel::saveMeta(){    playlist_t *p_playlist;    meta_export_t p_export;    p_export.p_item = p_input;    if( p_input == NULL )        return;    /* we can write meta data only in a file */    vlc_mutex_lock( &p_input->lock );    int i_type = p_input->i_type;    vlc_mutex_unlock( &p_input->lock );    if( i_type == ITEM_TYPE_FILE )    {        char *psz_uri_orig = input_item_GetURI( p_input );        char *psz_uri = psz_uri_orig;        if( !strncmp( psz_uri, "file://", 7 ) )            psz_uri += 7; /* strlen("file://") = 7 */        p_export.psz_file = strndup( psz_uri, PATH_MAX );        free( psz_uri_orig );    }    else        return;    /* now we read the modified meta data */    input_item_SetTitle(  p_input, qtu( title_text->text() ) );    input_item_SetArtist( p_input, qtu( artist_text->text() ) );    input_item_SetAlbum(  p_input, qtu( collection_text->text() ) );    input_item_SetGenre(  p_input, qtu( genre_text->text() ) );    input_item_SetTrackNum(  p_input, qtu( seqnum_text->text() ) );    input_item_SetDate(  p_input, qtu( date_text->text() ) );    input_item_SetCopyright( p_input, qtu( copyright_text->text() ) );    input_item_SetPublisher( p_input, qtu( publisher_text->text() ) );    input_item_SetDescription( p_input, qtu( description_text->text() ) );    p_playlist = pl_Yield( p_intf );    PL_LOCK;    p_playlist->p_private = &p_export;    module_t *p_mod = module_Need( p_playlist, "meta writer", NULL, 0 );    if( p_mod )        module_Unneed( p_playlist, p_mod );    PL_UNLOCK;    pl_Release( p_intf );    /* Reset the status of the mode. No need to emit any signal because parent       is the only caller */    b_inEditMode = false;}bool MetaPanel::isInEditMode(){    return b_inEditMode;}void MetaPanel::enterEditMode(){    msg_Dbg( p_intf, "Entering Edit MetaData Mode" );    setEditMode( true );}void MetaPanel::setEditMode( bool b_editing ){    b_inEditMode = b_editing;

⌨️ 快捷键说明

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