vlc_value_t, vlc_value_t, void * );
static int ItemChanged( vlc_object_t *, const char *,
vlc_value_t, vlc_value_t, void * );
+static int ItemAppended( vlc_object_t *p_this, const char *psz_variable,
+ vlc_value_t oval, vlc_value_t nval, void *param );
+
/*****************************************************************************
* Event Table.
/* custom events */
UpdateItem_Event,
+ AppendItem_Event,
MenuDummy_Event = wxID_HIGHEST + 999,
font.SetPointSize(8);
treectrl->SetFont( font );
- /* Create the Up-Down buttons */
-#if 0
- wxButton *up_button =
- new wxButton( playlist_panel, Up_Event, wxU(_("Up") ) );
- wxButton *down_button =
- new wxButton( playlist_panel, Down_Event, wxU(_("Down") ) );
-
- wxBoxSizer *updown_sizer = new wxBoxSizer( wxHORIZONTAL );
- updown_sizer->Layout();
- /* The top and bottom sizers */
- wxBoxSizer *bottom_sizer = new wxBoxSizer( wxHORIZONTAL );
- bottom_sizer->Add( up_button, 0, wxALIGN_LEFT | wxRIGHT, 3);
- bottom_sizer->Add( down_button, 0, wxALIGN_LEFT | wxLEFT, 3);
- bottom_sizer->Layout();
-#endif
wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
panel_sizer->Add( treectrl, 1, wxEXPAND | wxALL, 5 );
-#if 0
- panel_sizer->Add( bottom_sizer, 0, wxALL, 5);
-#endif
panel_sizer->Layout();
playlist_panel->SetSizerAndFit( panel_sizer );
/* One item has been updated */
var_AddCallback( p_playlist, "item-change", ItemChanged, this );
+ var_AddCallback( p_playlist, "item-append", ItemAppended, this );
+
vlc_object_release( p_playlist );
/* Update the playlist */
void Playlist::OnSize( wxSizeEvent& event)
{
-#if 0
- wxSize size = GetClientSize();
- if( listview )
- listview->SetColumnWidth( 0, size.x - listview->GetColumnWidth(1)
- - 15 /* margins */ );
-#endif
event.Skip();
}
wxTreeItemId item = treectrl->GetFirstChild( root, cookie );
wxTreeItemId child;
+ if( !p_item )
+ {
+ wxTreeItemId dummy;
+ return dummy;
+ }
+
while( item.IsOk() )
{
p_wxcurrent = (PlaylistItem *)treectrl->GetItemData( item );
}
}
+void Playlist::AppendItem( wxCommandEvent& event )
+{
+ playlist_add_t *p_add = (playlist_add_t *)event.GetClientData();
+
+ playlist_t *p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( p_playlist == NULL )
+ {
+ event.Skip();
+ return;
+ }
+
+ if( p_add->i_view != i_current_view )
+ {
+ vlc_object_release( p_playlist );
+ event.Skip();
+ return;
+ }
+
+ wxTreeItemId node = FindItem( treectrl->GetRootItem(), p_add->p_node );
+ if( !node.IsOk() )
+ {
+ vlc_object_release( p_playlist );
+ event.Skip();
+ return;
+ }
+
+ wxTreeItemId item = treectrl->AppendItem( node,
+ wxL2U( p_add->p_item->input.psz_name ), -1,-1,
+ new PlaylistItem( p_add->p_item ) );
+ treectrl->SetItemImage( item, p_add->p_item->input.i_type );
+
+ if( item.IsOk() && p_add->p_item->i_children == -1 )
+ {
+ UpdateTreeItem( p_playlist, item );
+ }
+ vlc_object_release( p_playlist );
+}
+
void Playlist::UpdateItem( int i )
{
if( i < 0 ) return; /* Sanity check */
vlc_object_release(p_playlist);
}
-void Playlist::UpdateTreeItem( playlist_t *p_playlist ,wxTreeItemId item )
+void Playlist::UpdateTreeItem( playlist_t *p_playlist, wxTreeItemId item )
{
playlist_item_t *p_item =
((PlaylistItem *)treectrl->GetItemData( item ))->p_item;
{
switch( event.GetId() )
{
- case UpdateItem_Event:
- UpdateItem( event.GetInt() );
- break;
+ case UpdateItem_Event:
+ UpdateItem( event.GetInt() );
+ break;
+ case AppendItem_Event:
+ AppendItem( event );
+ break;
}
}
return 0;
}
+
+static int ItemAppended( vlc_object_t *p_this, const char *psz_variable,
+ vlc_value_t oval, vlc_value_t nval, void *param )
+{
+ Playlist *p_playlist_dialog = (Playlist *)param;
+
+ playlist_add_t *p_add = (playlist_add_t *)malloc(sizeof( playlist_add_t));
+ memcpy( p_add, nval.p_address, sizeof( playlist_add_t ) );
+
+ wxCommandEvent event( wxEVT_PLAYLIST, AppendItem_Event );
+ event.SetClientData( (void *)p_add );
+ p_playlist_dialog->AddPendingEvent( event );
+
+ return VLC_SUCCESS;
+}
vlc_bool_t b_end = VLC_FALSE;
playlist_view_t *p_view = NULL;
+ playlist_add_t *p_add = (playlist_add_t *)malloc(sizeof( playlist_add_t));
+
vlc_mutex_lock( &p_playlist->object_lock );
/*
{
playlist_NodeAppend( p_playlist, VIEW_CATEGORY, p_item,
p_playlist->p_general );
+ p_add->p_item = p_item;
+ p_add->p_node = p_playlist->p_general;
+ p_add->i_view = VIEW_CATEGORY;
+ val.p_address = p_add;
+ var_Set( p_playlist, "item-append", val );
}
else
{
playlist_NodeInsert( p_playlist, VIEW_CATEGORY, p_item,
p_playlist->p_general, i_pos );
}
+
+
p_view = playlist_ViewFind( p_playlist, VIEW_ALL );
playlist_ItemAddParent( p_item, VIEW_ALL, p_view->p_root );
{
playlist_NodeAppend( p_playlist, VIEW_SIMPLE,p_item,
p_view->p_root );
+ p_add->p_item = p_item;
+ p_add->p_node = p_view->p_root;
+ p_add->i_view = VIEW_SIMPLE;
+ val.p_address = p_add;
+ var_Set( p_playlist, "item-append", val );
+
}
else
{
p_view->p_root, i_pos );
}
+
/* FIXME : Update sorted views */
if( p_playlist->i_index >= i_pos )
vlc_mutex_unlock( &p_playlist->object_lock );
- val.b_bool = VLC_TRUE;
- var_Set( p_playlist, "intf-change", val );
+ if( b_end == VLC_FALSE )
+ {
+ val.b_bool = VLC_TRUE;
+ var_Set( p_playlist, "intf-change", val );
+ }
return p_item->input.i_id;
}
int i_position;
playlist_view_t *p_view;
+ playlist_add_t *p_add = (playlist_add_t *)malloc(sizeof( playlist_add_t));
+
vlc_mutex_lock( &p_playlist->object_lock );
/* Sanity checks */
/* TODO: Handle modes */
playlist_NodeAppend( p_playlist, i_view, p_item, p_parent );
+ p_add->p_item = p_item;
+ p_add->p_node = p_parent;
+ p_add->i_view = i_view;
+ val.p_address = p_add;
+ var_Set( p_playlist, "item-append", val );
+
/* We update the ALL view directly */
p_view = playlist_ViewFind( p_playlist, VIEW_ALL );
playlist_ItemAddParent( p_item, VIEW_ALL, p_view->p_root );
vlc_mutex_unlock( &p_playlist->object_lock );
val.b_bool = VLC_TRUE;
- var_Set( p_playlist, "intf-change", val );
+// var_Set( p_playlist, "intf-change", val );
return p_item->input.i_id;
}