]> git.sesse.net Git - vlc/blobdiff - modules/gui/wxwindows/iteminfo.cpp
* modules/video_output/x11/*:
[vlc] / modules / gui / wxwindows / iteminfo.cpp
index 03b785bfe13faf98fbf69d5e5780102cf3510fbd..1d97d9dbf80166e9494ef4d43ccc7f5524ca12d1 100644 (file)
@@ -1,8 +1,8 @@
 /*****************************************************************************
  * iteminfo.cpp : wxWindows plugin for vlc
  *****************************************************************************
- * Copyright (C) 2000-2001 VideoLAN
- * $Id: iteminfo.cpp,v 1.5 2003/12/22 02:24:52 sam 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>
@@ -84,7 +71,7 @@ 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 */
@@ -140,74 +127,72 @@ ItemInfoDialog::~ItemInfoDialog()
  *****************************************************************************/
 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,
-                                wxU(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,
-                                   wxU(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,
-                                   wxU(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 )
@@ -215,14 +200,14 @@ wxPanel *ItemInfoDialog::GroupPanel( wxWindow* parent )
     wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
                                   wxDefaultSize );
     wxStaticBox *panel_box = new wxStaticBox( panel, -1,
-                                   wxU(_("Group info")) );
+                                   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);
 
@@ -239,8 +224,7 @@ wxPanel *ItemInfoDialog::GroupPanel( wxWindow* parent )
 
     group_combo = new wxComboBox( group_subpanel, -1,
                                  wxT(""),wxDefaultPosition, wxDefaultSize,
-                                 0, NULL,
-                                 wxCB_READONLY );
+                                 0, NULL, wxCB_READONLY );
 
     wxButton *newgroup_button = new wxButton( group_subpanel, New_Event,
                                     wxU(_("New Group")));
@@ -248,6 +232,11 @@ wxPanel *ItemInfoDialog::GroupPanel( wxWindow* parent )
     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 );
@@ -276,14 +265,45 @@ wxPanel *ItemInfoDialog::GroupPanel( wxWindow* parent )
     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).mb_str() );
-    p_item->psz_uri = strdup( uri_text->GetLineText(0).mb_str() );
-    p_item->psz_author = strdup( author_text->GetLineText(0).mb_str() );
+    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 =
@@ -310,6 +330,7 @@ void ItemInfoDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
     }
 
     p_item->b_enabled = enabled_checkbox->IsChecked() ? VLC_TRUE : VLC_FALSE ;
+    vlc_mutex_unlock( &p_item->input.lock );
     EndModal( wxID_OK );
 }