#if (!wxCHECK_VERSION(2,5,2))
wxNotebookSizer *notebook_sizer = new wxNotebookSizer( notebook );
#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 );
notebook->AddPage( item_info, wxU(_("General") ), true );
+ notebook->AddPage( advanced_info, wxU(_("Advanced information") ), false );
notebook->AddPage( stats_info, wxU(_("Statistics") ), false );
#if (!wxCHECK_VERSION(2,5,2))
panel_sizer->Layout();
SetSizerAndFit( panel_sizer );
-
if( p_playlist )
{
var_AddCallback( p_playlist, "item-change", ItemChanged, this );
if( !p_input || p_input->b_dead || !p_input->input.p_item->psz_name )
{
item_info->Clear();
+ advanced_info->Clear();
stats_info->Clear();
vlc_object_release( p_playlist );
return;
vlc_mutex_lock( &p_input->input.p_item->lock );
if( b_need_update == VLC_TRUE )
{
+ vlc_mutex_unlock( &p_input->input.p_item->lock );
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 );
vlc_mutex_unlock( &p_input->input.p_item->lock );
#include <wx/combobox.h>
#include <wx/statline.h>
+#include <vlc_meta.h>
+
#ifndef wxRB_SINGLE
# define wxRB_SINGLE 0
#endif
/*****************************************************************************
- * General info panel
+ * General info (URI, name, metadata)
*****************************************************************************/
-BEGIN_EVENT_TABLE( ItemInfoPanel, wxPanel )
+BEGIN_EVENT_TABLE( MetaDataPanel, wxPanel )
END_EVENT_TABLE()
-ItemInfoPanel::ItemInfoPanel( intf_thread_t *_p_intf,
+MetaDataPanel::MetaDataPanel( intf_thread_t *_p_intf,
wxWindow* _p_parent,
bool _b_modifiable ):
wxPanel( _p_parent, -1 )
name_text = new wxTextCtrl( this, -1,
wxU(""), wxDefaultPosition, wxSize( 300, -1 ), flags );
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 */
info_tree = new wxTreeCtrl( this, -1, wxDefaultPosition,
wxTR_HIDE_ROOT );
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->Layout();
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 */
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++)
{
wxTreeItemId cat = info_tree->AppendItem( info_root,
}
}
-char* ItemInfoPanel::GetURI( )
-{
- return strdup( uri_text->GetLineText(0).mb_str() );
-}
-
-char* ItemInfoPanel::GetName( )
-{
- return strdup( name_text->GetLineText(0).mb_str() );
-}
-
-void ItemInfoPanel::Clear()
+void AdvancedInfoPanel::Clear()
{
info_tree->DeleteChildren( info_root );
}
-void ItemInfoPanel::OnOk( )
+void AdvancedInfoPanel::OnOk( )
{
}
-void ItemInfoPanel::OnCancel( )
+void AdvancedInfoPanel::OnCancel( )
{
}
namespace wxvlc
{
-class ItemInfoPanel: public wxPanel
+class MetaDataPanel: public wxPanel
{
public:
/* Constructor */
- ItemInfoPanel( intf_thread_t *p_intf, wxWindow *p_parent, bool );
- virtual ~ItemInfoPanel();
+ MetaDataPanel( intf_thread_t *p_intf, wxWindow *p_parent, bool );
+ 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 Clear();