Commit 25e23b77 authored by Clément Stenac's avatar Clément Stenac

* Show meta-information separately

* Collect more meta-information in id3
parent 554134b1
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#define VLC_META_URL N_("URL") #define VLC_META_URL N_("URL")
#define VLC_META_LANGUAGE N_("Language") #define VLC_META_LANGUAGE N_("Language")
#define VLC_META_NOW_PLAYING N_("Now Playing") #define VLC_META_NOW_PLAYING N_("Now Playing")
#define VLC_META_PUBLISHER N_("Publisher")
#define VLC_META_CDDB_ARTIST N_("CDDB Artist") #define VLC_META_CDDB_ARTIST N_("CDDB Artist")
#define VLC_META_CDDB_CATEGORY N_("CDDB Category") #define VLC_META_CDDB_CATEGORY N_("CDDB Category")
......
...@@ -107,6 +107,26 @@ static void ParseID3Tag( demux_t *p_demux, uint8_t *p_data, int i_size ) ...@@ -107,6 +107,26 @@ static void ParseID3Tag( demux_t *p_demux, uint8_t *p_data, int i_size )
vlc_meta_Add( (vlc_meta_t *)p_demux->p_private, vlc_meta_Add( (vlc_meta_t *)p_demux->p_private,
VLC_META_ARTIST, psz_temp ); VLC_META_ARTIST, psz_temp );
} }
else if( !strcmp(p_frame->id, ID3_FRAME_YEAR ) )
{
vlc_meta_Add( (vlc_meta_t *)p_demux->p_private,
VLC_META_DATE, psz_temp );
}
else if( !strcmp(p_frame->id, ID3_FRAME_COMMENT ) )
{
vlc_meta_Add( (vlc_meta_t *)p_demux->p_private,
VLC_META_DESCRIPTION, psz_temp );
}
else if( strstr( (char*)p_frame->description, "Copyright" ) )
{
vlc_meta_Add( (vlc_meta_t *)p_demux->p_private,
VLC_META_COPYRIGHT, psz_temp );
}
else if( strstr( (char*)p_frame->description, "Publisher" ) )
{
vlc_meta_Add( (vlc_meta_t *)p_demux->p_private,
VLC_META_PUBLISHER, psz_temp );
}
else else
{ {
/* Unknown meta info */ /* Unknown meta info */
......
...@@ -69,10 +69,12 @@ FileInfo::FileInfo( intf_thread_t *_p_intf, wxWindow *p_parent ): ...@@ -69,10 +69,12 @@ FileInfo::FileInfo( intf_thread_t *_p_intf, wxWindow *p_parent ):
#if (!wxCHECK_VERSION(2,5,2)) #if (!wxCHECK_VERSION(2,5,2))
wxNotebookSizer *notebook_sizer = new wxNotebookSizer( notebook ); wxNotebookSizer *notebook_sizer = new wxNotebookSizer( notebook );
#endif #endif
item_info = new ItemInfoPanel( p_intf, notebook, false ); item_info = new MetaDataPanel( p_intf, notebook, false );
advanced_info = new AdvancedInfoPanel( p_intf, notebook );
stats_info = new InputStatsInfoPanel( p_intf, notebook ); stats_info = new InputStatsInfoPanel( p_intf, notebook );
notebook->AddPage( item_info, wxU(_("General") ), true ); notebook->AddPage( item_info, wxU(_("General") ), true );
notebook->AddPage( advanced_info, wxU(_("Advanced information") ), false );
notebook->AddPage( stats_info, wxU(_("Statistics") ), false ); notebook->AddPage( stats_info, wxU(_("Statistics") ), false );
#if (!wxCHECK_VERSION(2,5,2)) #if (!wxCHECK_VERSION(2,5,2))
...@@ -84,7 +86,6 @@ FileInfo::FileInfo( intf_thread_t *_p_intf, wxWindow *p_parent ): ...@@ -84,7 +86,6 @@ FileInfo::FileInfo( intf_thread_t *_p_intf, wxWindow *p_parent ):
panel_sizer->Layout(); panel_sizer->Layout();
SetSizerAndFit( panel_sizer ); SetSizerAndFit( panel_sizer );
if( p_playlist ) if( p_playlist )
{ {
var_AddCallback( p_playlist, "item-change", ItemChanged, this ); var_AddCallback( p_playlist, "item-change", ItemChanged, this );
...@@ -112,6 +113,7 @@ void FileInfo::Update() ...@@ -112,6 +113,7 @@ void FileInfo::Update()
if( !p_input || p_input->b_dead || !p_input->input.p_item->psz_name ) if( !p_input || p_input->b_dead || !p_input->input.p_item->psz_name )
{ {
item_info->Clear(); item_info->Clear();
advanced_info->Clear();
stats_info->Clear(); stats_info->Clear();
vlc_object_release( p_playlist ); vlc_object_release( p_playlist );
return; return;
...@@ -121,7 +123,10 @@ void FileInfo::Update() ...@@ -121,7 +123,10 @@ void FileInfo::Update()
vlc_mutex_lock( &p_input->input.p_item->lock ); vlc_mutex_lock( &p_input->input.p_item->lock );
if( b_need_update == VLC_TRUE ) if( b_need_update == VLC_TRUE )
{ {
vlc_mutex_unlock( &p_input->input.p_item->lock );
item_info->Update( p_input->input.p_item ); item_info->Update( p_input->input.p_item );
vlc_mutex_lock( &p_input->input.p_item->lock );
advanced_info->Update( p_input->input.p_item );
} }
stats_info->Update( p_input->input.p_item ); stats_info->Update( p_input->input.p_item );
vlc_mutex_unlock( &p_input->input.p_item->lock ); vlc_mutex_unlock( &p_input->input.p_item->lock );
......
...@@ -30,7 +30,8 @@ ...@@ -30,7 +30,8 @@
namespace wxvlc namespace wxvlc
{ {
class ItemInfoPanel; class MetaDataPanel;
class AdvancedInfoPanel;
class InputStatsInfoPanel; class InputStatsInfoPanel;
class FileInfo: public wxFrame class FileInfo: public wxFrame
{ {
...@@ -52,7 +53,8 @@ namespace wxvlc ...@@ -52,7 +53,8 @@ namespace wxvlc
mtime_t last_update; mtime_t last_update;
ItemInfoPanel *item_info; MetaDataPanel *item_info;
AdvancedInfoPanel *advanced_info;
InputStatsInfoPanel *stats_info; InputStatsInfoPanel *stats_info;
wxBoxSizer *panel_sizer; wxBoxSizer *panel_sizer;
......
...@@ -25,17 +25,19 @@ ...@@ -25,17 +25,19 @@
#include <wx/combobox.h> #include <wx/combobox.h>
#include <wx/statline.h> #include <wx/statline.h>
#include <vlc_meta.h>
#ifndef wxRB_SINGLE #ifndef wxRB_SINGLE
# define wxRB_SINGLE 0 # define wxRB_SINGLE 0
#endif #endif
/***************************************************************************** /*****************************************************************************
* General info panel * General info (URI, name, metadata)
*****************************************************************************/ *****************************************************************************/
BEGIN_EVENT_TABLE( ItemInfoPanel, wxPanel ) BEGIN_EVENT_TABLE( MetaDataPanel, wxPanel )
END_EVENT_TABLE() END_EVENT_TABLE()
ItemInfoPanel::ItemInfoPanel( intf_thread_t *_p_intf, MetaDataPanel::MetaDataPanel( intf_thread_t *_p_intf,
wxWindow* _p_parent, wxWindow* _p_parent,
bool _b_modifiable ): bool _b_modifiable ):
wxPanel( _p_parent, -1 ) wxPanel( _p_parent, -1 )
...@@ -73,6 +75,118 @@ ItemInfoPanel::ItemInfoPanel( intf_thread_t *_p_intf, ...@@ -73,6 +75,118 @@ ItemInfoPanel::ItemInfoPanel( intf_thread_t *_p_intf,
name_text = new wxTextCtrl( this, -1, name_text = new wxTextCtrl( this, -1,
wxU(""), wxDefaultPosition, wxSize( 300, -1 ), flags ); wxU(""), wxDefaultPosition, wxSize( 300, -1 ), flags );
sizer->Add( name_text, 1 , wxALL|wxEXPAND , 0 ); sizer->Add( name_text, 1 , wxALL|wxEXPAND , 0 );
sizer->Layout();
/* Metadata */
wxFlexGridSizer *meta_sizer = new wxFlexGridSizer(2,11,20);
meta_sizer->AddGrowableCol(1);
#define ADD_META( string, widget ) { \
meta_sizer->Add( new wxStaticText( this, -1, wxU(_(string) ) ),1, \
wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 0 ); \
widget = new wxStaticText( this, -1, wxU( "" ) ); \
meta_sizer->Add( widget, 1, wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 0 ); }
ADD_META( VLC_META_ARTIST, artist_text );
ADD_META( VLC_META_GENRE, genre_text );
ADD_META( VLC_META_COPYRIGHT, copyright_text );
ADD_META( VLC_META_COLLECTION, collection_text );
ADD_META( VLC_META_SEQ_NUM, seqnum_text );
ADD_META( VLC_META_DESCRIPTION, description_text );
ADD_META( VLC_META_RATING, rating_text );
ADD_META( VLC_META_DATE, date_text );
ADD_META( VLC_META_LANGUAGE, language_text );
ADD_META( VLC_META_NOW_PLAYING, nowplaying_text );
ADD_META( VLC_META_PUBLISHER, publisher_text );
meta_sizer->Layout();
panel_sizer->Add( sizer, 0, wxEXPAND | wxALL, 5 );
panel_sizer->Add( meta_sizer, 0, wxEXPAND | wxALL, 5 );
panel_sizer->Layout();
SetSizerAndFit( panel_sizer );
}
MetaDataPanel::~MetaDataPanel()
{
}
void MetaDataPanel::Update( input_item_t *p_item )
{
/* Rebuild the tree */
Clear();
uri_text->SetValue( wxU( p_item->psz_uri ) );
name_text->SetValue( wxU( p_item->psz_name ) );
#define UPDATE_META( meta, widget ) { \
char *psz_meta = vlc_input_item_GetInfo( p_item, _(VLC_META_INFO_CAT), \
_(meta) ); \
if( psz_meta != NULL ) \
{ \
widget->SetLabel( wxU( psz_meta ) ); \
} \
}
UPDATE_META( VLC_META_ARTIST, artist_text );
UPDATE_META( VLC_META_GENRE, genre_text );
UPDATE_META( VLC_META_COPYRIGHT, copyright_text );
UPDATE_META( VLC_META_COLLECTION, collection_text );
UPDATE_META( VLC_META_SEQ_NUM, seqnum_text );
UPDATE_META( VLC_META_DESCRIPTION, description_text );
UPDATE_META( VLC_META_RATING, rating_text );
UPDATE_META( VLC_META_DATE, date_text );
UPDATE_META( VLC_META_LANGUAGE, language_text );
UPDATE_META( VLC_META_NOW_PLAYING, nowplaying_text );
UPDATE_META( VLC_META_PUBLISHER, publisher_text );
#undef UPDATE_META
}
char* MetaDataPanel::GetURI( )
{
return strdup( uri_text->GetLineText(0).mb_str() );
}
char* MetaDataPanel::GetName( )
{
return strdup( name_text->GetLineText(0).mb_str() );
}
void MetaDataPanel::Clear()
{
}
void MetaDataPanel::OnOk( )
{
}
void MetaDataPanel::OnCancel( )
{
}
/*****************************************************************************
* General info panel
*****************************************************************************/
BEGIN_EVENT_TABLE( AdvancedInfoPanel, wxPanel )
END_EVENT_TABLE()
AdvancedInfoPanel::AdvancedInfoPanel( intf_thread_t *_p_intf,
wxWindow* _p_parent ):
wxPanel( _p_parent, -1 )
{
int flags= wxTE_PROCESS_ENTER;
/* Initializations */
p_intf = _p_intf;
p_parent = _p_parent;
SetAutoLayout( TRUE );
wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
wxFlexGridSizer *sizer = new wxFlexGridSizer(2,8,20);
sizer->AddGrowableCol(1);
/* Treeview */ /* Treeview */
info_tree = new wxTreeCtrl( this, -1, wxDefaultPosition, info_tree = new wxTreeCtrl( this, -1, wxDefaultPosition,
...@@ -81,25 +195,20 @@ ItemInfoPanel::ItemInfoPanel( intf_thread_t *_p_intf, ...@@ -81,25 +195,20 @@ ItemInfoPanel::ItemInfoPanel( intf_thread_t *_p_intf,
wxTR_HIDE_ROOT ); wxTR_HIDE_ROOT );
info_root = info_tree->AddRoot( wxU( "" ) ); info_root = info_tree->AddRoot( wxU( "" ) );
sizer->Layout();
panel_sizer->Add( sizer, 0, wxEXPAND | wxALL, 15 );
panel_sizer->Add( info_tree, 1, wxEXPAND | wxALL, 5 ); panel_sizer->Add( info_tree, 1, wxEXPAND | wxALL, 5 );
panel_sizer->Layout(); panel_sizer->Layout();
SetSizerAndFit( panel_sizer ); SetSizerAndFit( panel_sizer );
} }
ItemInfoPanel::~ItemInfoPanel() AdvancedInfoPanel::~AdvancedInfoPanel()
{ {
} }
void ItemInfoPanel::Update( input_item_t *p_item ) void AdvancedInfoPanel::Update( input_item_t *p_item )
{ {
/* Rebuild the tree */ /* Rebuild the tree */
Clear(); Clear();
uri_text->SetValue( wxU( p_item->psz_uri ) );
name_text->SetValue( wxU( p_item->psz_name ) );
for( int i = 0; i< p_item->i_categories ; i++) for( int i = 0; i< p_item->i_categories ; i++)
{ {
wxTreeItemId cat = info_tree->AppendItem( info_root, wxTreeItemId cat = info_tree->AppendItem( info_root,
...@@ -117,26 +226,16 @@ void ItemInfoPanel::Update( input_item_t *p_item ) ...@@ -117,26 +226,16 @@ void ItemInfoPanel::Update( input_item_t *p_item )
} }
} }
char* ItemInfoPanel::GetURI( ) void AdvancedInfoPanel::Clear()
{
return strdup( uri_text->GetLineText(0).mb_str() );
}
char* ItemInfoPanel::GetName( )
{
return strdup( name_text->GetLineText(0).mb_str() );
}
void ItemInfoPanel::Clear()
{ {
info_tree->DeleteChildren( info_root ); info_tree->DeleteChildren( info_root );
} }
void ItemInfoPanel::OnOk( ) void AdvancedInfoPanel::OnOk( )
{ {
} }
void ItemInfoPanel::OnCancel( ) void AdvancedInfoPanel::OnCancel( )
{ {
} }
......
...@@ -30,12 +30,57 @@ ...@@ -30,12 +30,57 @@
namespace wxvlc namespace wxvlc
{ {
class ItemInfoPanel: public wxPanel class MetaDataPanel: public wxPanel
{ {
public: public:
/* Constructor */ /* Constructor */
ItemInfoPanel( intf_thread_t *p_intf, wxWindow *p_parent, bool ); MetaDataPanel( intf_thread_t *p_intf, wxWindow *p_parent, bool );
virtual ~ItemInfoPanel(); virtual ~MetaDataPanel();
void Update( input_item_t *);
void Clear();
char* GetURI();
char* GetName();
void OnOk();
void OnCancel();
private:
DECLARE_EVENT_TABLE();
intf_thread_t *p_intf;
input_item_t *p_item;
wxWindow *p_parent;
wxTextCtrl *uri_text;
wxTextCtrl *name_text;
wxStaticText *uri_label;
wxStaticText *name_label;
wxStaticText *artist_text;
wxStaticText *genre_text;
wxStaticText *copyright_text;
wxStaticText *collection_text;
wxStaticText *seqnum_text;
wxStaticText *description_text;
wxStaticText *rating_text;
wxStaticText *date_text;
wxStaticText *setting_text;
wxStaticText *language_text;
wxStaticText *nowplaying_text;
wxStaticText *publisher_text;
bool b_modifiable;
};
class AdvancedInfoPanel: public wxPanel
{
public:
/* Constructor */
AdvancedInfoPanel( intf_thread_t *p_intf, wxWindow *p_parent );
virtual ~AdvancedInfoPanel();
void Update( input_item_t *); void Update( input_item_t *);
void Clear(); void Clear();
......
...@@ -69,7 +69,7 @@ ItemInfoDialog::ItemInfoDialog( intf_thread_t *_p_intf, ...@@ -69,7 +69,7 @@ ItemInfoDialog::ItemInfoDialog( intf_thread_t *_p_intf,
panel->SetAutoLayout( TRUE ); panel->SetAutoLayout( TRUE );
/* Create the standard info panel */ /* Create the standard info panel */
info_panel = new ItemInfoPanel(p_intf, panel, true ); info_panel = new MetaDataPanel(p_intf, panel, true );
info_panel->Update( &(p_item->input) ); info_panel->Update( &(p_item->input) );
/* Separation */ /* Separation */
wxStaticLine *static_line = new wxStaticLine( panel, wxID_OK ); wxStaticLine *static_line = new wxStaticLine( panel, wxID_OK );
......
...@@ -57,7 +57,7 @@ private: ...@@ -57,7 +57,7 @@ private:
/* Controls for the iteminfo dialog box */ /* Controls for the iteminfo dialog box */
wxPanel *info_subpanel; wxPanel *info_subpanel;
ItemInfoPanel *info_panel; MetaDataPanel *info_panel;
wxPanel *group_subpanel; wxPanel *group_subpanel;
wxPanel *group_panel; wxPanel *group_panel;
......
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