Commit 4792d566 authored by Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf

Qt: cleaning of the MediaInfo Dialog mess.

First, assume that the core is correct now (not sure)
Then, rename a few functions and simplify the cases.

NOTA BENE, any commit on MediaInfo or Art needs to be reviewed before commiting.
NB2: any function named update() is forbidden in new commits in Qt code, thanks.
parent 7b001a2b
......@@ -71,7 +71,6 @@ class ArtLabel : public CoverArtLabel
public:
ArtLabel( QWidget *parent, intf_thread_t *intf )
: CoverArtLabel( parent, VLC_OBJECT( intf ) ) {};
virtual ~ArtLabel() {};
void mouseDoubleClickEvent( QMouseEvent *event )
{
THEDP->mediaInfoDialog();
......
......@@ -41,30 +41,26 @@ MediaInfoDialog *MediaInfoDialog::instance = NULL;
Please be Careful of not breaking one the modes behaviour... */
MediaInfoDialog::MediaInfoDialog( intf_thread_t *_p_intf,
input_item_t *_p_item,
bool _mainInput,
bool _stats ) :
QVLCFrame( _p_intf ), mainInput(_mainInput),
stats( _stats )
input_item_t *p_item ) :
QVLCFrame( _p_intf )
{
p_item = _p_item;
b_cleaned = true;
i_runs = 0;
isMainInputInfo = ( p_item == NULL );
setWindowTitle( qtr( "Media Information" ) );
/* TabWidgets and Tabs creation */
IT = new QTabWidget;
MP = new MetaPanel( IT, p_intf );
IT->addTab( MP, qtr( "&General" ) );
EMP = new ExtraMetaPanel( IT, p_intf );
IT->addTab( EMP, qtr( "&Extra Metadata" ) );
IP = new InfoPanel( IT, p_intf );
IT->addTab( IP, qtr( "&Codec Details" ) );
if( stats )
infoTabW = new QTabWidget;
MP = new MetaPanel( infoTabW, p_intf );
infoTabW->addTab( MP, qtr( "&General" ) );
EMP = new ExtraMetaPanel( infoTabW, p_intf );
infoTabW->addTab( EMP, qtr( "&Extra Metadata" ) );
IP = new InfoPanel( infoTabW, p_intf );
infoTabW->addTab( IP, qtr( "&Codec Details" ) );
if( isMainInputInfo )
{
ISP = new InputStatsPanel( IT, p_intf );
IT->addTab( ISP, qtr( "&Statistics" ) );
ISP = new InputStatsPanel( infoTabW, p_intf );
infoTabW->addTab( ISP, qtr( "&Statistics" ) );
}
QGridLayout *layout = new QGridLayout( this );
......@@ -75,10 +71,10 @@ MediaInfoDialog::MediaInfoDialog( intf_thread_t *_p_intf,
QPushButton *closeButton = new QPushButton( qtr( "&Close" ) );
closeButton->setDefault( true );
uriLine = new QLineEdit;
QLabel *uriLabel = new QLabel( qtr( "Location:" ) );
QLineEdit *uriLine = new QLineEdit;
layout->addWidget( IT, 0, 0, 1, 8 );
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 );
......@@ -91,24 +87,23 @@ MediaInfoDialog::MediaInfoDialog( intf_thread_t *_p_intf,
/* Let the MetaData Panel update the URI */
CONNECT( MP, uriSet( QString ), uriLine, setText( QString ) );
CONNECT( MP, editing(), this, showMetaSaveButton() );
CONNECT( MP, editing(), saveMetaButton, show() );
CONNECT( IT, currentChanged( int ), this, updateButtons( int ) );
CONNECT( infoTabW, currentChanged( int ), this, updateButtons( int ) );
/* If using the General Mode */
if( !p_item )
if( isMainInputInfo )
{
msg_Dbg( p_intf, "Using a general windows" );
CONNECT( THEMIM, inputChanged( input_thread_t * ),
this, update( input_thread_t * ) );
msg_Dbg( p_intf, "Using a general info windows" );
if( THEMIM->getInput() )
p_item = input_GetItem( THEMIM->getInput() );
}
else
msg_Dbg( p_intf, "Using an item specific info windows" );
/* Call update by hand, so info is shown from current item too */
/* Call update at start, so info is shown for a running input */
if( p_item )
update( p_item, true, true );
updateAllTabs( p_item );
readSettings( "Mediainfo", QSize( 600 , 480 ) );
}
......@@ -120,69 +115,37 @@ MediaInfoDialog::~MediaInfoDialog()
void MediaInfoDialog::showTab( int i_tab = 0 )
{
IT->setCurrentIndex( i_tab );
infoTabW->setCurrentIndex( i_tab );
show();
}
void MediaInfoDialog::showMetaSaveButton()
{
saveMetaButton->show();
}
void MediaInfoDialog::saveMeta()
{
MP->saveMeta();
saveMetaButton->hide();
}
/* Function called on inputChanged-update*/
void MediaInfoDialog::update( input_thread_t *p_input )
void MediaInfoDialog::updateAllTabs( input_item_t *p_item )
{
if( !p_input || p_input->b_dead )
{
if( !b_cleaned )
{
clear();
b_cleaned = true;
}
return;
}
/* Launch the update in all the panels */
vlc_object_hold( p_input );
update( input_GetItem(p_input), true, true);
IP->update( p_item );
MP->update( p_item );
EMP->update( p_item );
vlc_object_release( p_input );
}
void MediaInfoDialog::update( input_item_t *p_item,
bool update_info,
bool update_meta )
{
if( update_info )
IP->update( p_item );
if( update_meta )
{
MP->update( p_item );
EMP->update( p_item );
}
if( stats )
if( isMainInputInfo )
ISP->update( p_item );
}
void MediaInfoDialog::clear()
void MediaInfoDialog::clearAllTabs()
{
IP->clear();
MP->clear();
EMP->clear();
if( stats ) ISP->clear();
b_cleaned = true;
if( isMainInputInfo ) ISP->clear();
}
void MediaInfoDialog::close()
{
toggleVisible();
hide();
/* if dialog is closed, revert editing if not saved */
if( MP->isInEditMode() )
......@@ -190,9 +153,9 @@ void MediaInfoDialog::close()
MP->setEditMode( false );
updateButtons( 0 );
}
if( mainInput == false ) {
if( !isMainInputInfo )
deleteLater();
}
}
void MediaInfoDialog::updateButtons( int i_tab )
......@@ -202,3 +165,4 @@ void MediaInfoDialog::updateButtons( int i_tab )
else
saveMetaButton->hide();
}
......@@ -29,31 +29,24 @@
#include "components/info_panels.hpp"
class QTabWidget;
class InfoTab;
class QLineEdit;
class MediaInfoDialog : public QVLCFrame
{
Q_OBJECT;
public:
MediaInfoDialog( intf_thread_t *,
input_item_t *,
bool stats = true,
bool mainInput = false );
input_item_t * );
static MediaInfoDialog * getInstance( intf_thread_t *p_intf )
{
if( !instance) instance = new MediaInfoDialog( p_intf,
NULL,
true,
true );
if( !instance) instance = new MediaInfoDialog( p_intf, NULL );
return instance;
}
static void killInstance()
{
if( instance ) delete instance;
instance= NULL;
instance = NULL;
}
virtual ~MediaInfoDialog();
......@@ -64,32 +57,25 @@ public:
#endif
private:
input_item_t *p_item;
static MediaInfoDialog *instance;
bool isMainInputInfo;
bool mainInput;
bool stats;
bool b_cleaned;
int i_runs;
QTabWidget *infoTabW;
QTabWidget *IT;
InputStatsPanel *ISP;
MetaPanel *MP;
InfoPanel *IP;
ExtraMetaPanel *EMP;
QPushButton *saveMetaButton;
QLineEdit *uriLine;
public slots:
void update( input_thread_t * );
void update( input_item_t *, bool, bool );
private slots:
void close();
void clear();
void updateAllTabs( input_item_t * );
void clearAllTabs();
virtual void close();
void saveMeta();
void showMetaSaveButton();
void updateButtons( int i_tab );
};
......
......@@ -202,16 +202,16 @@ void InputManager::customEvent( QEvent *event )
UpdateName();
break;
case MetaChanged_Type:
UpdateMeta();
UpdateName(); /* Needed for NowPlaying */
// UpdateMeta();
UpdateArt();
UpdateArt(); /* Art is part of meta in the core */
break;
case InfoChanged_Type:
// UpdateInfo();
UpdateInfo();
break;
case ItemTitleChanged_Type:
UpdateNavigation();
UpdateName(); /* Display the name of the Chapter */
UpdateName(); /* Display the name of the Chapter, if exists */
break;
case ItemRateChanged_Type:
UpdateRate();
......@@ -230,11 +230,6 @@ void InputManager::customEvent( QEvent *event )
}
}
void InputManager::UpdateStats()
{
emit statisticsUpdated( input_GetItem( p_input ) );
}
void InputManager::UpdatePosition()
{
/* Update position */
......@@ -376,12 +371,27 @@ void InputManager::UpdateVout()
}
}
void InputManager::UpdateArt()
inline void InputManager::UpdateArt()
{
/* Update Art meta */
emit artChanged( input_GetItem( p_input ) );
}
inline void InputManager::UpdateStats()
{
emit statisticsUpdated( input_GetItem( p_input ) );
}
inline void InputManager::UpdateMeta()
{
emit metaChanged( input_GetItem( p_input ) );
}
inline void InputManager::UpdateInfo()
{
emit infoChanged( input_GetItem( p_input ) );
}
/* User update of the slider */
void InputManager::sliderUpdate( float new_pos )
{
......
......@@ -115,6 +115,8 @@ private:
void UpdatePosition();
void UpdateTeletext();
void UpdateArt();
void UpdateInfo();
void UpdateMeta();
void UpdateVout();
void UpdateStats();
......@@ -154,9 +156,11 @@ signals:
void chapterChanged( bool );
/// Statistics are updated
void statisticsUpdated( input_item_t* );
void infoChanged( input_item_t* );
void metaChanged( input_item_t* );
void artChanged( input_item_t* );
/// Play/pause status
void statusChanged( int );
void artChanged( input_item_t* );
/// Teletext
void teletextPossible( bool );
void teletextActivated( bool );
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment