⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playlist.cpp

📁 video linux conference
💻 CPP
📖 第 1 页 / 共 4 页
字号:
#endif    if( event.GetEventObject() == p_view_menu )    {        p_view_menu = ViewMenu();    }#if defined( __WXMSW__ )#   undef GetEventObject#endif}void Playlist::OnMenuEvent( wxCommandEvent& event ){    if( event.GetId() < FirstView_Event )    {        event.Skip();        return;    }    else if( event.GetId() < LastView_Event )    {        int i_new_view = event.GetId() - FirstView_Event;        playlist_view_t *p_view = playlist_ViewFind( p_playlist, i_new_view );        if( p_view != NULL )        {            b_changed_view = VLC_TRUE;            i_current_view = i_new_view;            playlist_ViewUpdate( p_playlist, i_new_view );            Rebuild( VLC_TRUE );            return;        }        else if( i_new_view >= VIEW_FIRST_SORTED &&                 i_new_view <= VIEW_LAST_SORTED )        {            b_changed_view = VLC_TRUE;            playlist_ViewInsert( p_playlist, i_new_view, "View" );            playlist_ViewUpdate( p_playlist, i_new_view );            i_current_view = i_new_view;            Rebuild( VLC_TRUE );        }    }    else if( event.GetId() >= FirstSD_Event && event.GetId() < LastSD_Event )    {        if( !playlist_IsServicesDiscoveryLoaded( p_playlist,                                pp_sds[event.GetId() - FirstSD_Event] ) )        {            playlist_ServicesDiscoveryAdd( p_playlist,                            pp_sds[event.GetId() - FirstSD_Event] );        }        else        {            //wxMutexGuiLeave();            playlist_ServicesDiscoveryRemove( p_playlist,                            pp_sds[event.GetId() - FirstSD_Event] );            //wxMutexGuiEnter();        }    }}wxMenu * Playlist::ViewMenu(){    if( !p_view_menu )    {        p_view_menu = new wxMenu;    }    else    {        wxMenuItemList::Node *node = p_view_menu->GetMenuItems().GetFirst();        for( ; node; )        {            wxMenuItem *item = node->GetData();            node = node->GetNext();            p_view_menu->Delete( item );        }    }    /* FIXME : have a list of "should have" views */    p_view_menu->Append( FirstView_Event + VIEW_CATEGORY,                           wxU(_("Normal") ) );    p_view_menu->Append( FirstView_Event + VIEW_S_AUTHOR,                           wxU(_("Sorted by artist") ) );    return p_view_menu;}wxMenu *Playlist::SDMenu(){    p_sd_menu = new wxMenu;    vlc_list_t *p_list = vlc_list_find( p_playlist, VLC_OBJECT_MODULE,                                        FIND_ANYWHERE );    int i_number = 0;    for( int i_index = 0; i_index < p_list->i_count; i_index++ )    {        module_t * p_parser = (module_t *)p_list->p_values[i_index].p_object ;        if( !strcmp( p_parser->psz_capability, "services_discovery" ) )            i_number++;    }    if( i_number ) pp_sds = (char **)calloc( i_number, sizeof(void *) );    i_number = 0;    for( int i_index = 0; i_index < p_list->i_count; i_index++ )    {        module_t * p_parser = (module_t *)p_list->p_values[i_index].p_object ;        if( !strcmp( p_parser->psz_capability, "services_discovery" ) )        {            p_sd_menu->AppendCheckItem( FirstSD_Event + i_number ,                wxU( p_parser->psz_longname ? p_parser->psz_longname :                     (p_parser->psz_shortname ?                      p_parser->psz_shortname : p_parser->psz_object_name) ) );            if( playlist_IsServicesDiscoveryLoaded( p_playlist,                                    p_parser->psz_object_name ) )            {                p_sd_menu->Check( FirstSD_Event + i_number, TRUE );            }            pp_sds[i_number++] = p_parser->psz_object_name;        }    }    vlc_list_release( p_list );    return p_sd_menu;}/***************************************************************************** * Popup management functions *****************************************************************************/void Playlist::OnPopup( wxContextMenuEvent& event ){    wxPoint pt = event.GetPosition();    playlist_item_t *p_item;    i_wx_popup_item = treectrl->HitTest( ScreenToClient( pt ) );    if( i_wx_popup_item.IsOk() )    {        PlaylistItem *p_wxitem = (PlaylistItem *)treectrl->GetItemData(                                                            i_wx_popup_item );        PlaylistItem *p_wxparent= (PlaylistItem *)treectrl->GetItemData(                                  treectrl->GetItemParent( i_wx_popup_item ) );        i_popup_item = p_wxitem->i_id;        i_popup_parent = p_wxparent->i_id;        treectrl->SelectItem( i_wx_popup_item );        LockPlaylist( p_intf->p_sys, p_playlist );        p_item = playlist_ItemGetById( p_playlist, i_popup_item );        if( !p_item )        {            UnlockPlaylist( p_intf->p_sys, p_playlist );            return;        }        if( p_item->i_children == -1 )        {            UnlockPlaylist( p_intf->p_sys, p_playlist );            Playlist::PopupMenu( item_popup,                                 ScreenToClient( wxGetMousePosition() ) );        }        else        {            UnlockPlaylist( p_intf->p_sys, p_playlist );            Playlist::PopupMenu( node_popup,                                 ScreenToClient( wxGetMousePosition() ) );        }    }}void Playlist::OnPopupPlay( wxCommandEvent& event ){    playlist_item_t *p_popup_item, *p_popup_parent;    LockPlaylist( p_intf->p_sys, p_playlist );    p_popup_item = playlist_ItemGetById( p_playlist, i_popup_item );    p_popup_parent = playlist_ItemGetById( p_playlist, i_popup_parent );    if( p_popup_item != NULL )    {        if( p_popup_item->i_children > -1 )        {            if( event.GetId() == PopupPlay_Event &&                p_popup_item->i_children > 0 )            {                playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,                                  i_current_view, p_popup_item,                                  p_popup_item->pp_children[0] );            }            else            {                playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,                                  i_current_view, p_popup_item, NULL );            }        }        else        {            if( event.GetId() == PopupPlay_Event )            {                playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,                                  i_current_view, p_popup_parent,                                  p_popup_item );            }        }    }    UnlockPlaylist( p_intf->p_sys, p_playlist );}void Playlist::OnPopupPreparse( wxCommandEvent& event ){    Preparse();}void Playlist::Preparse(){    playlist_item_t *p_popup_item;    LockPlaylist( p_intf->p_sys, p_playlist );    p_popup_item = playlist_ItemGetById( p_playlist, i_popup_item );    if( p_popup_item != NULL )    {        if( p_popup_item->i_children == -1 )        {            playlist_PreparseEnqueue( p_playlist, &p_popup_item->input );        }        else        {            int i = 0;            playlist_item_t *p_parent = p_popup_item;            for( i = 0; i< p_parent->i_children ; i++ )            {                wxMenuEvent dummy;                i_wx_popup_item = FindItem( treectrl->GetRootItem(),                                         p_parent->pp_children[i]->input.i_id );                i_popup_item = p_parent->pp_children[i]->input.i_id;                Preparse();            }        }    }    UnlockPlaylist( p_intf->p_sys, p_playlist );}void Playlist::OnPopupDel( wxCommandEvent& event ){    DeleteTreeItem( i_wx_popup_item );}void Playlist::OnPopupSort( wxCommandEvent& event ){    PlaylistItem *p_wxitem;    playlist_item_t *p_item;    p_wxitem = (PlaylistItem *)treectrl->GetItemData( i_wx_popup_item );    LockPlaylist( p_intf->p_sys, p_playlist );    p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id );    if( p_item->i_children >= 0 )    {        playlist_RecursiveNodeSort( p_playlist, p_item,                                    SORT_TITLE_NODES_FIRST, ORDER_NORMAL );                treectrl->DeleteChildren( i_wx_popup_item );        i_saved_id = -1;        UpdateNodeChildren( p_item, i_wx_popup_item );    }    UnlockPlaylist( p_intf->p_sys, p_playlist );}void Playlist::OnPopupInfo( wxCommandEvent& event ){    LockPlaylist( p_intf->p_sys, p_playlist );    playlist_item_t *p_popup_item = playlist_ItemGetById( p_playlist, i_popup_item );    if( p_popup_item )    {        iteminfo_dialog = new ItemInfoDialog( p_intf, p_popup_item, this );        if( iteminfo_dialog->ShowModal() == wxID_OK )        {            UpdateItem( i_wx_popup_item );        }        delete iteminfo_dialog;    }    UnlockPlaylist( p_intf->p_sys, p_playlist );}/***************************************************************************** * Custom events management *****************************************************************************/void Playlist::OnPlaylistEvent( wxCommandEvent& event ){    switch( event.GetId() )    {        case UpdateItem_Event:            UpdateItem( event.GetInt() );            break;        case AppendItem_Event:            AppendItem( event );            break;        case RemoveItem_Event:            RemoveItem( event.GetInt() );            break;    }}/***************************************************************************** * PlaylistChanged: callback triggered by the intf-change playlist variable *  We don't rebuild the playlist directly here because we don't want the *  caller to block for a too long time. *****************************************************************************/static int PlaylistChanged( 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;    p_playlist_dialog->b_need_update = VLC_TRUE;    return VLC_SUCCESS;}/***************************************************************************** * Next: callback triggered by the playlist-current playlist variable *****************************************************************************/static int PlaylistNext( 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;    wxCommandEvent event( wxEVT_PLAYLIST, UpdateItem_Event );    event.SetInt( oval.i_int );    p_playlist_dialog->AddPendingEvent( event );    event.SetInt( nval.i_int );    p_playlist_dialog->AddPendingEvent( event );    return 0;}/***************************************************************************** * ItemChanged: callback triggered by the item-change playlist variable *****************************************************************************/static int ItemChanged( vlc_object_t *p_this, const char *psz_variable,                        vlc_value_t old_val, vlc_value_t new_val, void *param ){    Playlist *p_playlist_dialog = (Playlist *)param;    wxCommandEvent event( wxEVT_PLAYLIST, UpdateItem_Event );    event.SetInt( new_val.i_int );    p_playlist_dialog->AddPendingEvent( event );    return 0;}static int ItemDeleted( vlc_object_t *p_this, const char *psz_variable,                        vlc_value_t old_val, vlc_value_t new_val, void *param ){    Playlist *p_playlist_dialog = (Playlist *)param;    wxCommandEvent event( wxEVT_PLAYLIST, RemoveItem_Event );    event.SetInt( new_val.i_int );    p_playlist_dialog->AddPendingEvent( event );    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;}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -