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

📄 playlist.cpp

📁 video linux conference
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_FILE, 0, 0 );            b_need_update = VLC_TRUE;            break;        case ID_SEL_DELETE:            OnDeleteSelection();            b_need_update = VLC_TRUE;            break;        case Infos_Event:            OnPopupInfo( hwnd );            b_need_update = VLC_TRUE;            break;        case Up_Event:            OnUp();            b_need_update = VLC_TRUE;            break;        case Down_Event:            OnDown();            b_need_update = VLC_TRUE;            break;        case Random_Event:            OnRandom();            break;        case Loop_Event:            OnLoop();            break;        case Repeat_Event:            OnRepeat();            break;        case ID_SORT_TITLE:            OnSort( ID_SORT_TITLE );            break;        case ID_SORT_RTITLE:            OnSort( ID_SORT_RTITLE );            break;        case ID_SORT_AUTHOR:            OnSort( ID_SORT_AUTHOR );            break;        case ID_SORT_RAUTHOR:            OnSort( ID_SORT_RAUTHOR );            break;        case ID_SORT_SHUFFLE:            OnSort( ID_SORT_SHUFFLE );            break;        case ID_SEL_ENABLE:            OnEnableSelection();            break;        case ID_SEL_DISABLE:            OnDisableSelection();            break;        case ID_SEL_INVERT:            OnInvertSelection();            break;        case ID_SEL_SELECTALL:            OnSelectAll();            break;        case PopupPlay_Event:            OnPopupPlay();            b_need_update = VLC_TRUE;            break;        case PopupDel_Event:            OnPopupDel();            b_need_update = VLC_TRUE;            break;        case PopupEna_Event:            OnPopupEna();            b_need_update = VLC_TRUE;            break;        case PopupInfo_Event:            OnPopupInfo( hwnd );            b_need_update = VLC_TRUE;            break;        default:            break;        }        break;    case WM_NOTIFY:        if( ( ((LPNMHDR)lp)->hwndFrom == hListView ) &&            ( ((LPNMHDR)lp)->code == NM_CUSTOMDRAW ) )        {            SetWindowLong( hwnd, DWL_MSGRESULT,                           (LONG)ProcessCustomDraw(lp) );        }        else if( ( ((LPNMHDR)lp)->hwndFrom == hListView ) &&                 ( ((LPNMHDR)lp)->code == GN_CONTEXTMENU  ) )        {                                   HandlePopupMenu( hwnd, ((PNMRGINFO)lp)->ptAction );        }        else if( ( ((LPNMHDR)lp)->hwndFrom == hListView ) &&                 ( ((LPNMHDR)lp)->code == LVN_COLUMNCLICK  ) )        {            OnColSelect( ((LPNMLISTVIEW)lp)->iSubItem );        }        else if( ( ((LPNMHDR)lp)->hwndFrom == hListView ) &&                 ( ((LPNMHDR)lp)->code == LVN_ITEMACTIVATE  ) )        {            OnActivateItem( ((LPNMLISTVIEW)lp)->iSubItem );        }        break;    default:         // the message was not processed         // indicate if the base class handled it        break;    }    return FALSE;}LRESULT Playlist::ProcessCustomDraw( LPARAM lParam ){    LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;    switch( lplvcd->nmcd.dwDrawStage )    {    case CDDS_PREPAINT : //Before the paint cycle begins        //request notifications for individual listview items        return CDRF_NOTIFYITEMDRAW;    case CDDS_ITEMPREPAINT: //Before an item is drawn        playlist_t *p_playlist = (playlist_t *)            vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );        if( p_playlist == NULL ) return CDRF_DODEFAULT;        if( (int)lplvcd->nmcd.dwItemSpec == p_playlist->i_index )        {            lplvcd->clrText = RGB(255,0,0);            vlc_object_release(p_playlist);            return CDRF_NEWFONT;        }                playlist_item_t *p_item = playlist_ItemGetByPos( p_playlist,                                        (int)lplvcd->nmcd.dwItemSpec );        if( !p_item )        {            vlc_object_release(p_playlist);            return CDRF_DODEFAULT;        }        if( p_item->b_enabled == VLC_FALSE )        {            lplvcd->clrText = RGB(192,192,192);            vlc_object_release(p_playlist);            return CDRF_NEWFONT;        }    }    return CDRF_DODEFAULT;}/********************************************************************** * Handles the display of the "floating" popup **********************************************************************/void Playlist::HandlePopupMenu( HWND hwnd, POINT point ){    HMENU hMenuTrackPopup;    // Create the popup menu.    hMenuTrackPopup = CreatePopupMenu();    // Append some items.    AppendMenu( hMenuTrackPopup, MF_STRING, PopupPlay_Event, _T("Play") );    AppendMenu( hMenuTrackPopup, MF_STRING, PopupDel_Event, _T("Delete") );    AppendMenu( hMenuTrackPopup, MF_STRING, PopupEna_Event,                _T("Toggle enabled") );    AppendMenu( hMenuTrackPopup, MF_STRING, PopupInfo_Event, _T("Info") );    /* Draw and track the "floating" popup */    TrackPopupMenu( hMenuTrackPopup, 0, point.x, point.y, 0, hwnd, NULL );    /* Destroy the menu since were are done with it. */    DestroyMenu( hMenuTrackPopup );}/********************************************************************** * Show the playlist **********************************************************************/void Playlist::ShowPlaylist( bool b_show ){    if( b_show ) Rebuild();    Show( b_show );}/********************************************************************** * Update the playlist **********************************************************************/void Playlist::UpdatePlaylist(){    if( b_need_update )    {        Rebuild();        b_need_update = VLC_FALSE;    }            playlist_t *p_playlist = (playlist_t *)        vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );    if( p_playlist == NULL ) return;            /* Update the colour of items */    vlc_mutex_lock( &p_playlist->object_lock );    if( p_intf->p_sys->i_playing != p_playlist->i_index )    {        // p_playlist->i_index in RED        Rebuild();        // if exists, p_intf->p_sys->i_playing in BLACK        p_intf->p_sys->i_playing = p_playlist->i_index;    }    vlc_mutex_unlock( &p_playlist->object_lock );    vlc_object_release( p_playlist );}/********************************************************************** * Rebuild the playlist **********************************************************************/void Playlist::Rebuild(){    playlist_t *p_playlist = (playlist_t *)        vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );    if( p_playlist == NULL ) return;    int i_focused =        ListView_GetNextItem( hListView, -1, LVIS_SELECTED | LVNI_ALL );    /* Clear the list... */    ListView_DeleteAllItems( hListView );    /* ...and rebuild it */    vlc_mutex_lock( &p_playlist->object_lock );    for( int i = 0; i < p_playlist->i_size; i++ )    {        LVITEM lv;        lv.mask = LVIF_TEXT;        lv.pszText = _T("");        lv.cchTextMax = 1;        lv.iSubItem = 0;        lv.iItem = i;        ListView_InsertItem( hListView, &lv );        ListView_SetItemText( hListView, lv.iItem, 0,            _FROMMB(p_playlist->pp_items[i]->input.psz_name) );        UpdateItem( i );    }    vlc_mutex_unlock( &p_playlist->object_lock );    if ( i_focused )        ListView_SetItemState( hListView, i_focused, LVIS_FOCUSED |                               LVIS_SELECTED, LVIS_STATEIMAGEMASK )    else        ListView_SetItemState( hListView, i_focused, LVIS_FOCUSED,                               LVIS_STATEIMAGEMASK );    vlc_object_release( p_playlist );}/********************************************************************** * Update one playlist item **********************************************************************/void Playlist::UpdateItem( int i ){    playlist_t *p_playlist = (playlist_t *)        vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );    if( p_playlist == NULL ) return;    playlist_item_t *p_item = playlist_ItemGetByPos( p_playlist, i );    if( !p_item )    {        vlc_object_release(p_playlist);        return;    }    ListView_SetItemText( hListView, i, 0, _FROMMB(p_item->input.psz_name) );    ListView_SetItemText( hListView, i, 1,                          _FROMMB( vlc_input_item_GetInfo( &p_item->input,                                   _("General") , _("Author") ) ) );    char psz_duration[MSTRTIME_MAX_SIZE];    mtime_t dur = p_item->input.i_duration;    if( dur != -1 ) secstotimestr( psz_duration, dur/1000000 );    else memcpy( psz_duration , "-:--:--", sizeof("-:--:--") );    ListView_SetItemText( hListView, i, 3, _FROMMB(psz_duration) );    vlc_object_release(p_playlist);}/********************************************************************** * Private functions **********************************************************************/void Playlist::DeleteItem( int item ){    playlist_t *p_playlist = (playlist_t *)        vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );    if( p_playlist == NULL ) return;    playlist_Delete( p_playlist, item );    ListView_DeleteItem( hListView, item );    vlc_object_release( p_playlist );}/********************************************************************** * I/O functions **********************************************************************/static void OnOpenCB( intf_dialog_args_t *p_arg ){    intf_thread_t *p_intf = (intf_thread_t *)p_arg->p_arg;    if( p_arg->i_results && p_arg->psz_results[0] )    {        playlist_t * p_playlist = (playlist_t *)            vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );        if( p_playlist )        {            playlist_Import( p_playlist, p_arg->psz_results[0] );        }        if( p_playlist ) vlc_object_release( p_playlist );    }}void Playlist::OnOpen(){    char *psz_filters ="All playlists|*.pls;*.m3u;*.asx;*.b4s|M3U files|*.m3u";    intf_dialog_args_t *p_arg =        (intf_dialog_args_t *)malloc( sizeof(intf_dialog_args_t) );    memset( p_arg, 0, sizeof(intf_dialog_args_t) );    p_arg->psz_title = strdup( "Open playlist" );    p_arg->psz_extensions = strdup( psz_filters );    p_arg->p_arg = p_intf;    p_arg->pf_callback = OnOpenCB;    p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_FILE_GENERIC, 0, p_arg);}static void OnSaveCB( intf_dialog_args_t *p_arg ){    intf_thread_t *p_intf = (intf_thread_t *)p_arg->p_arg;    if( p_arg->i_results && p_arg->psz_results[0] )    {        playlist_t * p_playlist = (playlist_t *)            vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );        if( p_playlist )        {            char *psz_export;            char *psz_ext = strrchr( p_arg->psz_results[0], '.' );            if( psz_ext && !strcmp( psz_ext, ".pls") )                psz_export = "export-pls";            else psz_export = "export-m3u";

⌨️ 快捷键说明

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