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

📄 vlm_slider_manager.cpp

📁 uclinux 下的vlc播放器源代码
💻 CPP
字号:
/***************************************************************************** * vlm_slider_manager.cpp : Manage an input slider for a VLM stream ***************************************************************************** * Copyright (C) 2000-2005 the VideoLAN team * $Id: vlm_slider_manager.cpp 14187 2006-02-07 16:37:40Z courmisch $ * * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include "dialogs/vlm/vlm_slider_manager.hpp"#include "dialogs/vlm/vlm_stream.hpp"#include "dialogs/vlm/vlm_streampanel.hpp"/***************************************************************************** * Constructor. *****************************************************************************/VLMSliderManager::VLMSliderManager( intf_thread_t *_p_intf,                                    VLMBroadcastStreamPanel *_p_sp ){    p_intf = _p_intf;    p_input = NULL;    p_sp = _p_sp;    slider = p_sp->p_slider;    b_slider_free = VLC_TRUE;    time_string = wxU( "0:00:00 / 0:00:00");}VLMSliderManager::~VLMSliderManager(){}/***************************************************************************** * Public methods. *****************************************************************************/void VLMSliderManager::Update(){    /* Update the input */    if( p_input == NULL )    {        UpdateInput();        if( p_input )        {            slider->SetValue( 0 );            UpdateButtons( VLC_TRUE );        }    }    else if( p_input->b_dead )    {        HideSlider();        UpdateButtons( VLC_FALSE );        vlc_object_release( p_input );        p_input = NULL;    }    if( p_input && !p_input->b_die )    {        vlc_value_t pos;        /* Really manage the slider */        var_Get( p_input, "position", &pos );        if( pos.f_float > 0.0 && ! IsShown() ) ShowSlider();        else if( pos.f_float <= 0.0 ) HideSlider();        if( IsPlaying() && IsShown() )        {            /* Update the slider if the user isn't dragging it. */            if( IsFree() )            {                char psz_time[ MSTRTIME_MAX_SIZE ];                char psz_total[ MSTRTIME_MAX_SIZE ];                vlc_value_t time;                mtime_t i_seconds;                /* Update the value */                if( pos.f_float >= 0.0 )                {                    i_slider_pos = (int)(SLIDER_MAX_POS * pos.f_float);                    slider->SetValue( i_slider_pos );                    var_Get( p_input, "time", &time );                    i_seconds = time.i_time / 1000000;                    secstotimestr ( psz_time, i_seconds );                    var_Get( p_input, "length",  &time );                    i_seconds = time.i_time / 1000000;                    secstotimestr ( psz_total, i_seconds );                    UpdateTime( psz_time, psz_total );                }            }        }    }}/***************************************************************************** * Private methods. *****************************************************************************/void VLMSliderManager::UpdateInput(){    if( p_sp->GetStream()->p_media->i_instance == 0 )    {        p_input = NULL;        return;    }    /** FIXME !! */    p_input = p_sp->GetStream()->p_media->instance[0]->p_input;}void VLMSliderManager::UpdateButtons( vlc_bool_t b_play ){    if( b_play )    {        p_sp->TogglePlayButton( PLAYING_S );    }    else    {        p_sp->TogglePlayButton( PAUSE_S );    }}vlc_bool_t VLMSliderManager::IsShown(){    return slider->IsEnabled();}void VLMSliderManager::ShowSlider(){    slider->Enable();}void VLMSliderManager::HideSlider(){    slider->SetValue( 0 );    slider->Disable();    UpdateTime( "0:00:00", "0:00:00" );}vlc_bool_t VLMSliderManager::IsFree(){    return b_slider_free;}vlc_bool_t VLMSliderManager::IsPlaying(){    return VLC_TRUE; /* Is it really useful ? */}void VLMSliderManager::UpdateTime( char *psz_time, char *psz_total ){    time_string = wxU(psz_time) + wxString(wxT(" / ") ) +wxU(psz_total) ;}void VLMSliderManager::ProcessUpdate( wxScrollEvent &event ){#ifdef WIN32    if( event.GetEventType() == wxEVT_SCROLL_THUMBRELEASE        || event.GetEventType() == wxEVT_SCROLL_ENDSCROLL )    {#endif        if( i_slider_pos != event.GetPosition() && p_input )        {            vlc_value_t pos;            pos.f_float = (float)event.GetPosition() / (float)SLIDER_MAX_POS;            var_Set( p_input, "position", pos );        }#ifdef WIN32        b_slider_free = VLC_TRUE;    }    else    {        b_slider_free = VLC_FALSE;        if( p_input )        {            /* Update stream date */            char psz_time[ MSTRTIME_MAX_SIZE ], psz_total[ MSTRTIME_MAX_SIZE ];            mtime_t i_seconds;            i_seconds = var_GetTime( p_input, "length" ) / I64C(1000000 );            secstotimestr( psz_total, i_seconds );            i_seconds = var_GetTime( p_input, "time" ) /   I64C(1000000 );            secstotimestr( psz_time, i_seconds );            time_string = wxU(psz_time) + wxString(wxT(" / ") ) +wxU(psz_total) ;        }    }#endif#undef WIN32}

⌨️ 快捷键说明

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