You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
6.2 KiB
208 lines
6.2 KiB
/*****************************************************************************
|
|
* mediainfo.cpp : Information about an item
|
|
****************************************************************************
|
|
* Copyright (C) 2006-2008 the VideoLAN team
|
|
* $Id$
|
|
*
|
|
* Authors: Clément Stenac <zorglub@videolan.org>
|
|
* Jean-Baptiste Kempf <jb@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 "dialogs/mediainfo.hpp"
|
|
#include "input_manager.hpp"
|
|
|
|
#include <vlc_url.h>
|
|
|
|
#include <QTabWidget>
|
|
#include <QGridLayout>
|
|
#include <QLineEdit>
|
|
#include <QLabel>
|
|
#include <QPushButton>
|
|
|
|
/* This Dialog has two main modes:
|
|
- General Mode that shows the current Played item, and the stats
|
|
- Single mode that shows the info on ONE SINGLE Item on the playlist
|
|
Please be Careful of not breaking one the modes behaviour... */
|
|
|
|
MediaInfoDialog::MediaInfoDialog( intf_thread_t *_p_intf,
|
|
input_item_t *p_item ) :
|
|
QVLCFrame( _p_intf )
|
|
{
|
|
isMainInputInfo = ( p_item == NULL );
|
|
|
|
if ( isMainInputInfo )
|
|
setWindowTitle( qtr( "Current Media Information" ) );
|
|
else
|
|
setWindowTitle( qtr( "Media Information" ) );
|
|
setWindowRole( "vlc-media-info" );
|
|
|
|
setWindowFlags( Qt::Window | Qt::CustomizeWindowHint |
|
|
Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint );
|
|
|
|
/* TabWidgets and Tabs creation */
|
|
infoTabW = new QTabWidget;
|
|
|
|
MP = new MetaPanel( infoTabW, p_intf );
|
|
infoTabW->insertTab( META_PANEL, MP, qtr( "&General" ) );
|
|
EMP = new ExtraMetaPanel( infoTabW );
|
|
infoTabW->insertTab( EXTRAMETA_PANEL, EMP, qtr( "&Metadata" ) );
|
|
IP = new InfoPanel( infoTabW );
|
|
infoTabW->insertTab( INFO_PANEL, IP, qtr( "Co&dec" ) );
|
|
if( isMainInputInfo )
|
|
{
|
|
ISP = new InputStatsPanel( infoTabW );
|
|
infoTabW->insertTab( INPUTSTATS_PANEL, ISP, qtr( "S&tatistics" ) );
|
|
}
|
|
|
|
QGridLayout *layout = new QGridLayout( this );
|
|
|
|
/* No need to use a QDialogButtonBox here */
|
|
saveMetaButton = new QPushButton( qtr( "&Save Metadata" ) );
|
|
saveMetaButton->hide();
|
|
QPushButton *closeButton = new QPushButton( qtr( "&Close" ) );
|
|
closeButton->setDefault( true );
|
|
|
|
QLabel *uriLabel = new QLabel( qtr( "Location:" ) );
|
|
uriLine = new QLineEdit;
|
|
uriLine->setReadOnly( true );
|
|
|
|
layout->addWidget( infoTabW, 0, 0, 1, 8 );
|
|
layout->addWidget( uriLabel, 1, 0, 1, 1 );
|
|
layout->addWidget( uriLine, 1, 1, 1, 7 );
|
|
layout->addWidget( saveMetaButton, 2, 6 );
|
|
layout->addWidget( closeButton, 2, 7 );
|
|
|
|
BUTTONACT( closeButton, close() );
|
|
|
|
/* The tabs buttons are shown in the main dialog for space and cosmetics */
|
|
BUTTONACT( saveMetaButton, saveMeta() );
|
|
|
|
/* Let the MetaData Panel update the URI */
|
|
CONNECT( MP, uriSet( const QString& ), this, updateURI( const QString& ) );
|
|
CONNECT( MP, editing(), saveMetaButton, show() );
|
|
|
|
/* Display the buttonBar according to the Tab selected */
|
|
CONNECT( infoTabW, currentChanged( int ), this, updateButtons( int ) );
|
|
|
|
/* If using the General Mode */
|
|
if( isMainInputInfo )
|
|
{
|
|
msg_Dbg( p_intf, "Using a general info windows" );
|
|
/**
|
|
* Connects on the various signals of input_Manager
|
|
* For the currently playing element
|
|
**/
|
|
DCONNECT( THEMIM->getIM(), infoChanged( input_item_t* ),
|
|
IP, update( input_item_t* ) );
|
|
DCONNECT( THEMIM->getIM(), currentMetaChanged( input_item_t* ),
|
|
MP, update( input_item_t* ) );
|
|
DCONNECT( THEMIM->getIM(), currentMetaChanged( input_item_t* ),
|
|
EMP, update( input_item_t* ) );
|
|
DCONNECT( THEMIM->getIM(), statisticsUpdated( input_item_t* ),
|
|
ISP, update( input_item_t* ) );
|
|
|
|
if( THEMIM->getInput() )
|
|
p_item = input_GetItem( THEMIM->getInput() );
|
|
}
|
|
else
|
|
msg_Dbg( p_intf, "Using an item specific info windows" );
|
|
|
|
/* Call update at start, so info is filled up at begginning */
|
|
if( p_item )
|
|
updateAllTabs( p_item );
|
|
|
|
restoreWidgetPosition( "Mediainfo", QSize( 600 , 480 ) );
|
|
}
|
|
|
|
MediaInfoDialog::~MediaInfoDialog()
|
|
{
|
|
saveWidgetPosition( "Mediainfo" );
|
|
}
|
|
|
|
void MediaInfoDialog::showTab( panel i_tab = META_PANEL )
|
|
{
|
|
infoTabW->setCurrentIndex( i_tab );
|
|
show();
|
|
}
|
|
|
|
void MediaInfoDialog::saveMeta()
|
|
{
|
|
MP->saveMeta();
|
|
saveMetaButton->hide();
|
|
}
|
|
|
|
void MediaInfoDialog::updateAllTabs( input_item_t *p_item )
|
|
{
|
|
IP->update( p_item );
|
|
MP->update( p_item );
|
|
EMP->update( p_item );
|
|
|
|
if( isMainInputInfo ) ISP->update( p_item );
|
|
}
|
|
|
|
void MediaInfoDialog::clearAllTabs()
|
|
{
|
|
IP->clear();
|
|
MP->clear();
|
|
EMP->clear();
|
|
|
|
if( isMainInputInfo ) ISP->clear();
|
|
}
|
|
|
|
void MediaInfoDialog::close()
|
|
{
|
|
hide();
|
|
|
|
/* if dialog is closed, revert editing if not saved */
|
|
if( MP->isInEditMode() )
|
|
{
|
|
MP->setEditMode( false );
|
|
updateButtons( 0 );
|
|
}
|
|
|
|
if( !isMainInputInfo )
|
|
deleteLater();
|
|
}
|
|
|
|
void MediaInfoDialog::updateButtons( int i_tab )
|
|
{
|
|
if( MP->isInEditMode() && i_tab == 0 )
|
|
saveMetaButton->show();
|
|
else
|
|
saveMetaButton->hide();
|
|
}
|
|
|
|
void MediaInfoDialog::updateURI( const QString& uri )
|
|
{
|
|
QString location;
|
|
|
|
/* If URI points to a local file, show the path instead of the URI */
|
|
char *path = vlc_uri2path( qtu( uri ) );
|
|
if( path != NULL )
|
|
{
|
|
location = qfu( path );
|
|
free( path );
|
|
}
|
|
else
|
|
location = uri;
|
|
|
|
uriLine->setText( location );
|
|
}
|
|
|