You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
7.0 KiB
204 lines
7.0 KiB
/*****************************************************************************
|
|
* iteminfo.cpp : wxWindows plugin for vlc
|
|
*****************************************************************************
|
|
* Copyright (C) 2000-2004 the VideoLAN team
|
|
* $Id$
|
|
*
|
|
* Authors: Clément Stenac <zorglub@videolan.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
|
|
*****************************************************************************/
|
|
|
|
#include "dialogs/iteminfo.hpp"
|
|
#include <wx/combobox.h>
|
|
#include <wx/statline.h>
|
|
|
|
#ifndef wxRB_SINGLE
|
|
# define wxRB_SINGLE 0
|
|
#endif
|
|
|
|
/*****************************************************************************
|
|
* Event Table.
|
|
*****************************************************************************/
|
|
|
|
/* IDs for the controls and the menu commands */
|
|
enum
|
|
{
|
|
Uri_Event,
|
|
Name_Event,
|
|
Enabled_Event,
|
|
};
|
|
|
|
BEGIN_EVENT_TABLE(ItemInfoDialog, wxDialog)
|
|
/* Button events */
|
|
EVT_BUTTON(wxID_OK, ItemInfoDialog::OnOk)
|
|
EVT_BUTTON(wxID_CANCEL, ItemInfoDialog::OnCancel)
|
|
|
|
END_EVENT_TABLE()
|
|
|
|
/*****************************************************************************
|
|
* Constructor.
|
|
*****************************************************************************/
|
|
ItemInfoDialog::ItemInfoDialog( intf_thread_t *_p_intf,
|
|
playlist_item_t *_p_item,
|
|
wxWindow* _p_parent ):
|
|
wxDialog( _p_parent, -1, wxU(_("Playlist item info")),
|
|
wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE )
|
|
{
|
|
/* Initializations */
|
|
p_intf = _p_intf;
|
|
p_parent = _p_parent;
|
|
p_item = _p_item;
|
|
SetIcon( *p_intf->p_sys->p_icon );
|
|
|
|
/* Create a panel to put everything in */
|
|
wxPanel *panel = new wxPanel( this, -1 );
|
|
panel->SetAutoLayout( TRUE );
|
|
|
|
/* Create the standard info panel */
|
|
wxPanel *info_panel = InfoPanel( panel );
|
|
|
|
/* Separation */
|
|
wxStaticLine *static_line = new wxStaticLine( panel, wxID_OK );
|
|
|
|
/* Create the buttons */
|
|
wxButton *ok_button = new wxButton( panel, wxID_OK, wxU(_("OK")) );
|
|
ok_button->SetDefault();
|
|
wxButton *cancel_button = new wxButton( panel, wxID_CANCEL,
|
|
wxU(_("Cancel")) );
|
|
|
|
/* Place everything in sizers */
|
|
wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );
|
|
button_sizer->Add( ok_button, 0, wxALL, 5 );
|
|
button_sizer->Add( cancel_button, 0, wxALL, 5 );
|
|
button_sizer->Layout();
|
|
wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
|
|
wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
|
|
panel_sizer->Add( info_panel, 0, wxEXPAND | wxALL, 5 );
|
|
panel_sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );
|
|
panel_sizer->Add( button_sizer, 0, wxALIGN_LEFT | wxALIGN_BOTTOM |
|
|
wxALL, 5 );
|
|
panel_sizer->Layout();
|
|
panel->SetSizerAndFit( panel_sizer );
|
|
main_sizer->Add( panel, 1, wxGROW, 0 );
|
|
main_sizer->Layout();
|
|
SetSizerAndFit( main_sizer );
|
|
}
|
|
|
|
ItemInfoDialog::~ItemInfoDialog()
|
|
{
|
|
}
|
|
|
|
/*****************************************************************************
|
|
* Private methods.
|
|
*****************************************************************************/
|
|
wxPanel *ItemInfoDialog::InfoPanel( wxWindow* parent )
|
|
{
|
|
wxPanel *info_panel = new wxPanel( parent, -1, wxDefaultPosition,
|
|
wxDefaultSize );
|
|
info_panel->SetAutoLayout( TRUE );
|
|
wxBoxSizer *info_sizer = new wxBoxSizer( wxHORIZONTAL );
|
|
|
|
/* Create a box to surround the controls */
|
|
wxStaticBox *panel_box = new wxStaticBox( info_panel, -1,
|
|
wxU(_("Item Info")) );
|
|
|
|
wxStaticBoxSizer *box_sizer = new wxStaticBoxSizer( panel_box,
|
|
wxVERTICAL );
|
|
|
|
wxFlexGridSizer *sizer = new wxFlexGridSizer(2,3,20);
|
|
/* URI Textbox */
|
|
wxStaticText *uri_label =
|
|
new wxStaticText( info_panel, -1, wxU(_("URI")) );
|
|
|
|
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_panel, -1, wxU(_("Name")) );
|
|
|
|
name_text = new wxTextCtrl( info_panel, Uri_Event,
|
|
wxU(p_item->input.psz_name), wxDefaultPosition, wxSize( 300, -1 ),
|
|
wxTE_PROCESS_ENTER );
|
|
|
|
sizer->Add( name_label, 0 , wxALIGN_LEFT |wxALL , 5 );
|
|
sizer->Add( name_text, 1 , wxALIGN_RIGHT | wxALL , 5 );
|
|
|
|
/* Treeview */
|
|
info_tree = new wxTreeCtrl( info_panel, -1, wxDefaultPosition,
|
|
wxSize(220,200),
|
|
wxSUNKEN_BORDER |wxTR_HAS_BUTTONS |
|
|
wxTR_HIDE_ROOT );
|
|
|
|
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 );
|
|
|
|
info_panel->SetSizer( info_sizer );
|
|
info_sizer->Layout();
|
|
info_sizer->SetSizeHints( info_panel );
|
|
|
|
UpdateInfo();
|
|
|
|
return info_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++)
|
|
{
|
|
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) )
|
|
{
|
|
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() );
|
|
vlc_mutex_unlock( &p_item->input.lock );
|
|
EndModal( wxID_OK );
|
|
}
|
|
|
|
void ItemInfoDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
|
|
{
|
|
EndModal( wxID_CANCEL );
|
|
}
|
|
|