void CGUIDialogSeekBar::FrameMove() { if (!g_application.m_pPlayer) { Close(true); return; } // update controls if (!g_application.GetSeekHandler()->InProgress() && !g_infoManager.m_performingSeek) { // position the bar at our current time CGUISliderControl *pSlider = (CGUISliderControl*)GetControl(POPUP_SEEK_SLIDER); if (pSlider && g_infoManager.GetTotalPlayTime()) pSlider->SetPercentage((float)g_infoManager.GetPlayTime()/g_infoManager.GetTotalPlayTime() * 0.1f); CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), POPUP_SEEK_LABEL); msg.SetLabel(g_infoManager.GetCurrentPlayTime()); OnMessage(msg); } else { CGUISliderControl *pSlider = (CGUISliderControl*)GetControl(POPUP_SEEK_SLIDER); if (pSlider) pSlider->SetPercentage(g_application.GetSeekHandler()->GetPercent()); CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), POPUP_SEEK_LABEL); msg.SetLabel(g_infoManager.GetCurrentSeekTime()); OnMessage(msg); } CGUIDialog::FrameMove(); }
bool CGUIDialogSlider::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_CLICKED: if (message.GetSenderId() == CONTROL_SLIDER) { CGUISliderControl *slider = (CGUISliderControl *)GetControl(CONTROL_SLIDER); if (slider && m_callback) { m_callback->OnSliderChange(m_callbackData, slider); SET_CONTROL_LABEL(CONTROL_LABEL, slider->GetDescription()); } } break; } return CGUIDialog::OnMessage(message); }
void Interface_GUIControlSlider::SetFloatValue(void* kodiBase, void* handle, float value) { CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); if (!addon) { CLog::Log(LOGERROR, "ADDON::Interface_GUIControlSlider::%s - invalid data", __FUNCTION__); return; } if (!handle) { CLog::Log(LOGERROR, "ADDON::Interface_GUIControlSlider::%s - invalid handler data on addon '%s'", __FUNCTION__, addon->ID().c_str()); return; } CGUISliderControl* pControl = static_cast<CGUISliderControl *>(handle); pControl->SetType(SLIDER_CONTROL_TYPE_FLOAT); pControl->SetFloatValue(value); }
bool CGUIDialogSeekBar::OnAction(const CAction &action) { if (action.GetID() == ACTION_ANALOG_SEEK_FORWARD || action.GetID() == ACTION_ANALOG_SEEK_BACK) { if (!m_bRequireSeek) { // start of seeking if (g_infoManager.GetTotalPlayTime()) m_fSeekPercentage = (float)g_infoManager.GetPlayTime() / g_infoManager.GetTotalPlayTime() * 0.1f; else m_fSeekPercentage = 0.0f; // tell info manager that we have started a seekbar operation m_bRequireSeek = true; g_infoManager.SetSeeking(true); } // calculate our seek amount if (g_application.m_pPlayer && !g_infoManager.m_performingSeek) { //100% over 1 second. float speed = 100.0f; if( action.GetRepeat() ) speed *= action.GetRepeat(); else speed /= g_infoManager.GetFPS(); if (action.GetID() == ACTION_ANALOG_SEEK_FORWARD) m_fSeekPercentage += action.GetAmount() * action.GetAmount() * speed; else m_fSeekPercentage -= action.GetAmount() * action.GetAmount() * speed; if (m_fSeekPercentage > 100.0f) m_fSeekPercentage = 100.0f; if (m_fSeekPercentage < 0.0f) m_fSeekPercentage = 0.0f; CGUISliderControl *pSlider = (CGUISliderControl*)GetControl(POPUP_SEEK_SLIDER); if (pSlider) pSlider->SetPercentage((int)m_fSeekPercentage); // Update our seek bar accordingly } ResetTimer(); return true; } return CGUIDialog::OnAction(action); }
void Interface_GUIControlSlider::Reset(void* kodiBase, void* handle) { CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); if (!addon) { CLog::Log(LOGERROR, "ADDON::Interface_GUIControlSlider::%s - invalid data", __FUNCTION__); return; } if (!handle) { CLog::Log(LOGERROR, "ADDON::Interface_GUIControlSlider::%s - invalid handler data on addon '%s'", __FUNCTION__, addon->ID().c_str()); return; } CGUISliderControl* pControl = static_cast<CGUISliderControl*>(handle); CGUIMessage msg(GUI_MSG_LABEL_RESET, pControl->GetParentID(), pControl->GetID()); g_windowManager.SendThreadMessage(msg, pControl->GetParentID()); }
void CGUIDialogSeekBar::FrameMove() { if (!g_application.m_pPlayer) { Close(true); return; } // check if we should seek or exit if (!g_infoManager.m_performingSeek && CTimeUtils::GetFrameTime() - m_timer > SEEK_BAR_DISPLAY_TIME) g_infoManager.SetSeeking(false); // render our controls if (!m_bRequireSeek && !g_infoManager.m_performingSeek) { // position the bar at our current time CGUISliderControl *pSlider = (CGUISliderControl*)GetControl(POPUP_SEEK_SLIDER); if (pSlider && g_infoManager.GetTotalPlayTime()) pSlider->SetPercentage((int)((float)g_infoManager.GetPlayTime()/g_infoManager.GetTotalPlayTime() * 0.1f)); CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), POPUP_SEEK_LABEL); msg.SetLabel(g_infoManager.GetCurrentPlayTime()); OnMessage(msg); } else { CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), POPUP_SEEK_LABEL); msg.SetLabel(GetSeekTimeLabel()); OnMessage(msg); } // Check for seek timeout, and perform the seek if (m_bRequireSeek && CTimeUtils::GetFrameTime() - m_timer > SEEK_BAR_SEEK_TIME) { g_infoManager.m_performingSeek = true; double time = g_infoManager.GetTotalPlayTime() * m_fSeekPercentage * 0.01; g_application.SeekTime(time); m_bRequireSeek = false; } CGUIDialog::FrameMove(); }
void CGUIDialogSeekBar::FrameMove() { #if defined(__VIDONME_MEDIACENTER__) if (VidOnMe::VDMUtils::Instance().GetRunningMode() == VidOnMe::RM_VIDONME) { return; } #endif if (!g_application.m_pPlayer) { Close(true); return; } // update controls if (!g_application.GetSeekHandler()->InProgress() && !g_infoManager.m_performingSeek) { // position the bar at our current time CGUISliderControl *pSlider = (CGUISliderControl*)GetControl(POPUP_SEEK_SLIDER); if (pSlider && g_infoManager.GetTotalPlayTime()) pSlider->SetPercentage((float)g_infoManager.GetPlayTime()/g_infoManager.GetTotalPlayTime() * 0.1f); CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), POPUP_SEEK_LABEL); msg.SetLabel(g_infoManager.GetCurrentPlayTime()); OnMessage(msg); } else { CGUISliderControl *pSlider = (CGUISliderControl*)GetControl(POPUP_SEEK_SLIDER); if (pSlider) pSlider->SetPercentage(g_application.GetSeekHandler()->GetPercent()); CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), POPUP_SEEK_LABEL); msg.SetLabel(g_infoManager.GetCurrentSeekTime()); OnMessage(msg); } CGUIDialog::FrameMove(); }
bool CGUIDialogSeekBar::OnAction(const CAction &action) { if (action.wID == ACTION_ANALOG_SEEK_FORWARD || action.wID == ACTION_ANALOG_SEEK_BACK) { if (!m_bRequireSeek) { // start of seeking if (g_infoManager.GetTotalPlayTime()) m_fSeekPercentage = (float)g_infoManager.GetPlayTime() / g_infoManager.GetTotalPlayTime() * 0.1f; else m_fSeekPercentage = 0.0f; // tell info manager that we have started a seekbar operation m_bRequireSeek = true; g_infoManager.SetSeeking(true); } // calculate our seek amount if (g_application.m_pPlayer && !g_infoManager.m_performingSeek) { // 100% over a couple seconds. float speed = 1.0f; // This is a bit of hack right now, to match what we're getting. m_fSeekPercentage += action.fAmount1 * speed; if (m_fSeekPercentage > 100.0f) m_fSeekPercentage = 100.0f; if (m_fSeekPercentage < 0.0f) m_fSeekPercentage = 0.0f; CGUISliderControl *pSlider = (CGUISliderControl*)GetControl(POPUP_SEEK_SLIDER); if (pSlider) pSlider->SetPercentage((int)m_fSeekPercentage); // Update our seek bar accordingly } ResetTimer(); return true; } return CGUIDialog::OnAction(action); }
void CGUIDialogSlider::SetSlider(const CStdString &label, float value, float min, float delta, float max, ISliderCallback *callback, void *callbackData) { SET_CONTROL_LABEL(CONTROL_HEADING, label); CGUISliderControl *slider = (CGUISliderControl *)GetControl(CONTROL_SLIDER); m_callback = callback; m_callbackData = callbackData; if (slider) { slider->SetType(SPIN_CONTROL_TYPE_FLOAT); slider->SetFloatRange(min, max); slider->SetFloatInterval(delta); slider->SetFloatValue(value); if (m_callback) { m_callback->OnSliderChange(m_callbackData, slider); SET_CONTROL_LABEL(CONTROL_LABEL, slider->GetDescription()); } } }