/*****************************************************************************
* iteminfo.cpp : wxWindows plugin for vlc
*****************************************************************************
- * Copyright (C) 2000-2001 VideoLAN
- * $Id: iteminfo.cpp,v 1.1 2003/10/06 16:23:30 zorglub Exp $
+ * Copyright (C) 2000-2004 VideoLAN
+ * $Id$
*
* Authors: Clément Stenac <zorglub@videolan.org>
*
#include <vlc/vlc.h>
-#ifdef WIN32 /* mingw32 hack */
-#undef Yield
-#undef CreateDialog
-#endif
-
-/* Let vlc take care of the i18n stuff */
-#define WXINTL_NO_GETTEXT_MACRO
-
-#include <wx/wxprec.h>
-#include <wx/wx.h>
-#include <wx/notebook.h>
-#include <wx/textctrl.h>
#include <wx/combobox.h>
-#include <wx/spinctrl.h>
#include <wx/statline.h>
#include <vlc/intf.h>
Name_Event,
Author_Event,
Enabled_Event,
+ New_Event,
};
BEGIN_EVENT_TABLE(ItemInfoDialog, wxDialog)
/* Button events */
EVT_BUTTON(wxID_OK, ItemInfoDialog::OnOk)
EVT_BUTTON(wxID_CANCEL, ItemInfoDialog::OnCancel)
-
/* Events generated by the panels */
+ EVT_BUTTON( New_Event, ItemInfoDialog::OnNewGroup)
END_EVENT_TABLE()
ItemInfoDialog::ItemInfoDialog( intf_thread_t *_p_intf,
playlist_item_t *_p_item,
wxWindow* _p_parent ):
- wxDialog( _p_parent, -1, wxU(_("Playlist Item options")),
+ wxDialog( _p_parent, -1, wxU(_("Playlist item info")),
wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE )
{
/* Initializations */
*****************************************************************************/
wxPanel *ItemInfoDialog::InfoPanel( wxWindow* parent )
{
- wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
+ wxPanel *info_panel = new wxPanel( parent, -1, wxDefaultPosition,
wxDefaultSize );
+ info_panel->SetAutoLayout( TRUE );
+ wxBoxSizer *info_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticBox *panel_box = new wxStaticBox( panel, -1,
- wxU(_("Item informations")) );
- wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box,
- wxVERTICAL );
-
- info_subpanel = new wxPanel( panel, -1 );
+ /* Create a box to surround the controls */
+ wxStaticBox *panel_box = new wxStaticBox( info_panel, -1,
+ wxU(_("Item Info")) );
- wxFlexGridSizer *subpanel_sizer =
- new wxFlexGridSizer( 3, 1 , 0 , 0 );
+ wxStaticBoxSizer *box_sizer = new wxStaticBoxSizer( panel_box,
+ wxVERTICAL );
+ wxFlexGridSizer *sizer = new wxFlexGridSizer(2,3,20);
/* URI Textbox */
wxStaticText *uri_label =
- new wxStaticText(info_subpanel, -1, wxU(_("URI")) );
+ new wxStaticText( info_panel, -1, wxU(_("URI")) );
- uri_text = new wxTextCtrl( info_subpanel, Uri_Event,
- wxT(p_item->psz_uri),
- wxDefaultPosition, wxSize( 300, -1 ),
- wxTE_PROCESS_ENTER);
-
- subpanel_sizer->Add( uri_label, 0, wxALIGN_LEFT |
- wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( uri_text, 0, wxALIGN_RIGHT |
- wxALIGN_CENTER_VERTICAL );
+ uri_text = new wxTextCtrl( info_panel, Uri_Event,
+ wxU(p_item->input.psz_uri), wxDefaultPosition, wxSize( 300, -1 ),
+ wxTE_PROCESS_ENTER );
+ sizer->Add( uri_label, 0 , wxALIGN_LEFT |wxALL , 5 );
+ sizer->Add( uri_text, 1 , wxALIGN_RIGHT | wxALL , 5 );
/* Name Textbox */
wxStaticText *name_label =
- new wxStaticText(info_subpanel, -1, wxU(_("Name")) );
+ new wxStaticText( info_panel, -1, wxU(_("Name")) );
- name_text =
- new wxTextCtrl( info_subpanel, Uri_Event,
- wxT(p_item->psz_name),
- wxDefaultPosition, wxSize( 300, -1 ),
- wxTE_PROCESS_ENTER);
+ name_text = new wxTextCtrl( info_panel, Uri_Event,
+ wxU(p_item->input.psz_name), wxDefaultPosition, wxSize( 300, -1 ),
+ wxTE_PROCESS_ENTER );
- subpanel_sizer->Add( name_label, 0, wxALIGN_LEFT |
- wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( name_text, 0, wxALIGN_RIGHT |
- wxALIGN_CENTER_VERTICAL );
+ sizer->Add( name_label, 0 , wxALIGN_LEFT |wxALL , 5 );
+ sizer->Add( name_text, 1 , wxALIGN_RIGHT | wxALL , 5 );
/* Author Textbox */
wxStaticText *author_label =
- new wxStaticText(info_subpanel, -1, wxU(_("Author")) );
+ new wxStaticText( info_panel, -1, wxU(_("Author")) );
- author_text =
- new wxTextCtrl( info_subpanel, Uri_Event,
- wxT(p_item->psz_author),
+ author_text = new wxTextCtrl( info_panel, Uri_Event,
+ wxU( playlist_ItemGetInfo( p_item,
+ _("General"), _("Author") ) ),
wxDefaultPosition, wxSize( 300, -1 ),
wxTE_PROCESS_ENTER);
- subpanel_sizer->Add( author_label, 0, wxALIGN_LEFT |
- wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( author_text, 0, wxALIGN_RIGHT |
- wxALIGN_CENTER_VERTICAL );
+ sizer->Add( author_label, 0 , wxALIGN_LEFT | wxALL , 5 );
+ sizer->Add( author_text, 1 , wxALIGN_RIGHT | wxALL , 5);
- info_subpanel->SetSizerAndFit( subpanel_sizer );
+ /* Treeview */
+ info_tree = new wxTreeCtrl( info_panel, -1, wxDefaultPosition,
+ wxSize(220,200),
+ wxSUNKEN_BORDER |wxTR_HAS_BUTTONS |
+ wxTR_HIDE_ROOT );
- /* Stuff everything into the main panel */
- panel_sizer->Add( info_subpanel, 1,
- wxEXPAND | wxALIGN_LEFT |
- wxALIGN_CENTER_VERTICAL | wxALL, 5 );
+ sizer->Layout();
+ box_sizer->Add( sizer, 0, wxEXPAND, 5 );
+ box_sizer->Add( info_tree, 0, wxEXPAND, 5 );
+ info_sizer->Add( box_sizer, 1, wxBOTTOM, 5 );
- panel->SetSizerAndFit( panel_sizer );
+ info_panel->SetSizer( info_sizer );
+ info_sizer->Layout();
+ info_sizer->SetSizeHints( info_panel );
- return panel;
+ UpdateInfo();
+
+ return info_panel;
}
wxPanel *ItemInfoDialog::GroupPanel( wxWindow* parent )
{
wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
wxDefaultSize );
-
wxStaticBox *panel_box = new wxStaticBox( panel, -1,
wxU(_("Group Info")) );
-
wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box,
wxVERTICAL);
-
wxBoxSizer *subpanel_sizer;
-
group_subpanel = new wxPanel( panel, -1 );
-
subpanel_sizer = new wxBoxSizer( wxVERTICAL) ;
-
enabled_checkbox = new wxCheckBox( group_subpanel,
- -1,
- wxU(_("Item enabled")) );
+ -1, wxU(_("Item Enabled")) );
enabled_checkbox->SetValue( p_item->b_enabled);
wxStaticText *group_label = new wxStaticText( group_subpanel,
-1, wxU(_("Group")) );
- group_spin = new wxSpinCtrl( group_subpanel,
- -1 );
- group_spin->SetValue( p_item->i_group > 0 ? p_item->i_group : 0);
+
+ playlist_t *p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( p_playlist == NULL )
+ {
+ return NULL;
+ }
+
+ group_combo = new wxComboBox( group_subpanel, -1,
+ wxT(""),wxDefaultPosition, wxDefaultSize,
+ 0, NULL, wxCB_READONLY );
+
+ wxButton *newgroup_button = new wxButton( group_subpanel, New_Event,
+ wxU(_("New Group")));
+
+ for( int i=0; i< p_playlist->i_groups ; i++)
+ {
+ group_combo->Append( wxU( p_playlist->pp_groups[i]->psz_name ) );
+ if( p_playlist->pp_groups[i]->i_id == p_item->i_group )
+ {
+ group_combo->SetSelection( i );
+ group_combo->SetValue( wxU( p_playlist->pp_groups[i]->psz_name ) );
+ }
+ }
+
+ vlc_object_release ( p_playlist );
subpanel_sizer->Add( enabled_checkbox, 0, wxALIGN_RIGHT|
wxALIGN_CENTER_VERTICAL );
subpanel_sizer->Add( group_label, 0, wxALIGN_LEFT |
wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( group_spin, 0, wxALIGN_RIGHT );
+
+ wxBoxSizer *group_sizer = new wxBoxSizer( wxHORIZONTAL);
+ group_sizer->Add(group_combo, 0, wxALIGN_LEFT|wxRIGHT, 5);
+ group_sizer->Add( newgroup_button, 0, wxALIGN_RIGHT|wxLEFT, 5);
+ group_sizer->Layout();
+
+ subpanel_sizer->Add( group_sizer, 0, wxALIGN_RIGHT );
group_subpanel->SetSizerAndFit( subpanel_sizer );
/* Stuff everything into the main panel */
- panel_sizer->Add( group_subpanel, 0,
+ panel_sizer->Add( group_subpanel, 0,
wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 );
panel->SetSizerAndFit( panel_sizer );
return panel;
}
+void ItemInfoDialog::UpdateInfo()
+{
+ if( !info_root )
+ {
+ info_root = info_tree->AddRoot( wxU( p_item->input.psz_name) );
+ }
+
+ /* Rebuild the tree */
+ for( int i = 0; i< p_item->input.i_categories ; i++)
+ {
+ if( !strcmp( p_item->input.pp_categories[i]->psz_name, _("Options") ) )
+ {
+ continue;
+ }
+ wxTreeItemId cat = info_tree->AppendItem( info_root,
+ wxU( p_item->input.pp_categories[i]->psz_name) );
+
+ for( int j = 0 ; j < p_item->input.pp_categories[i]->i_infos ; j++ )
+ {
+ info_tree->AppendItem( cat , (wxString)
+ wxU(p_item->input.pp_categories[i]->pp_infos[j]->psz_name) +
+ wxT(": ") +
+ wxU(p_item->input.pp_categories[i]->pp_infos[j]->psz_value) );
+ }
+
+ info_tree->Expand( cat );
+ }
+}
+
/*****************************************************************************
* Events methods.
*****************************************************************************/
void ItemInfoDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
{
- p_item->psz_name = strdup( name_text->GetLineText(0) );
- p_item->psz_uri = strdup( uri_text->GetLineText(0) );
- p_item->psz_author = strdup( author_text->GetLineText(0) );
+ vlc_mutex_lock( &p_item->input.lock );
+ p_item->input.psz_name = strdup( name_text->GetLineText(0).mb_str() );
+ p_item->input.psz_uri = strdup( uri_text->GetLineText(0).mb_str() );
+ playlist_ItemAddInfo( p_item,"General","Author",
+ author_text->GetLineText(0).mb_str() );
vlc_bool_t b_old_enabled = p_item->b_enabled;
playlist_t * p_playlist =
else if( b_old_enabled == VLC_TRUE && !enabled_checkbox->IsChecked() )
p_playlist->i_enabled --;
+ for (int i=0 ; i< p_playlist->i_groups ; i++)
+ {
+ if( !strcasecmp( p_playlist->pp_groups[i]->psz_name,
+ group_combo->GetValue().mb_str() ))
+ {
+ p_item->i_group = p_playlist->pp_groups[i]->i_id;
+ break;
+ }
+ }
+
vlc_object_release( p_playlist );
}
p_item->b_enabled = enabled_checkbox->IsChecked() ? VLC_TRUE : VLC_FALSE ;
- p_item->i_group = group_spin->GetValue();
+ vlc_mutex_unlock( &p_item->input.lock );
EndModal( wxID_OK );
}
EndModal( wxID_CANCEL );
}
-/******************************************************************************
- * Info panel event methods.
- ******************************************************************************/
+void ItemInfoDialog::OnNewGroup( wxCommandEvent& WXUNUSED(event) )
+{
+ NewGroup *p_newgroup = NULL;
+
+ p_newgroup = new NewGroup( p_intf, this );
+
+ if( p_newgroup)
+ {
+ if( p_newgroup->ShowModal() == wxID_OK && p_newgroup->psz_name)
+ {
+ group_combo->Append( wxU( p_newgroup->psz_name ) );
+ }
+ delete( p_newgroup );
+ }
+}