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

📄 playlist.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        case ID_MANAGE_ADDDIRECTORY:            p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_DIRECTORY,                                           0, 0 );            b_need_update = true;            break;        case ID_MANAGE_ADDMRL:            p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_FILE, 0, 0 );            b_need_update = true;            break;        case ID_SEL_DELETE:            OnDeleteSelection();            b_need_update = true;            break;        case Infos_Event:            OnPopupInfo( hwnd );            b_need_update = true;            break;        case Up_Event:            OnUp();            b_need_update = true;            break;        case Down_Event:            OnDown();            b_need_update = 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 = true;            break;        case PopupDel_Event:            OnPopupDel();            b_need_update = true;            break;        case PopupEna_Event:            OnPopupEna();            b_need_update = true;            break;        case PopupInfo_Event:            OnPopupInfo( hwnd );            b_need_update = 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 = pl_Yield( p_intf );        if( p_playlist == NULL ) return CDRF_DODEFAULT;        if( (int)lplvcd->nmcd.dwItemSpec == p_playlist->i_index )        {            lplvcd->clrText = RGB(255,0,0);            pl_Release( p_intf );            return CDRF_NEWFONT;        }         playlist_item_t *p_item = playlist_ItemGetByPos( p_playlist,                                        (int)lplvcd->nmcd.dwItemSpec );        if( !p_item )        {            pl_Release( p_intf );            return CDRF_DODEFAULT;        }        if( p_item->b_enabled == false )        {            lplvcd->clrText = RGB(192,192,192);            pl_Release( p_intf );            return CDRF_NEWFONT;        }        pl_Release( p_intf );    }    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 = false;    }     playlist_t *p_playlist = pl_Yield( p_intf );    if( p_playlist == NULL ) return;     /* Update the colour of items */    vlc_object_lock( p_playlist );    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_object_unlock( p_playlist );    pl_Release( p_intf );}/********************************************************************** * Rebuild the playlist **********************************************************************/void Playlist::Rebuild(){    playlist_t *p_playlist = pl_Yield( p_intf );    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_object_lock( p_playlist );    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_object_unlock( p_playlist );    if ( i_focused )        ListView_SetItemState( hListView, i_focused, LVIS_FOCUSED |                               LVIS_SELECTED, LVIS_STATEIMAGEMASK )    else        ListView_SetItemState( hListView, i_focused, LVIS_FOCUSED,                               LVIS_STATEIMAGEMASK );    pl_Release( p_intf );}/********************************************************************** * Update one playlist item **********************************************************************/void Playlist::UpdateItem( int i ){    playlist_t *p_playlist = pl_Yield( p_intf );    if( p_playlist == NULL ) return;    playlist_item_t *p_item = playlist_ItemGetByPos( p_playlist, i );    if( !p_item )    {        pl_Release( p_intf );        return;    }    ListView_SetItemText( hListView, i, 0, _FROMMB(p_item->input.psz_name) );    ListView_SetItemText( hListView, i, 1,                          _FROMMB( input_item_GetInfo( &p_item->input,                                   _("General") , _("Author") ) ) );    char psz_duration[MSTRTIME_MAX_SIZE];    mtime_t dur = input_item_GetDuration( p_item );    if( dur != -1 ) secstotimestr( psz_duration, dur/1000000 );    else memcpy( psz_duration , "-:--:--", sizeof("-:--:--") );    ListView_SetItemText( hListView, i, 3, _FROMMB(psz_duration) );    pl_Release( p_intf );}/********************************************************************** * Private functions **********************************************************************/void Playlist::DeleteItem( int item ){    playlist_t *p_playlist = pl_Yield( p_intf );    if( p_playlist == NULL ) return;    playlist_Delete( p_playlist, item );    ListView_DeleteItem( hListView, item );    pl_Release( p_intf );}/********************************************************************** * 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 = pl_Yield( p_intf );        if( p_playlist )        {            playlist_Import( p_playlist, p_arg->psz_results[0] );            pl_Release( p_intf );        }    }}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 = pl_Yield( p_intf );        if( p_playlist )

⌨️ 快捷键说明

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