📄 info_panels.cpp
字号:
/***************************************************************************** * 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 + -