bool CSeekHandler::OnAction(const CAction &action) { if (!g_application.m_pPlayer->IsPlaying() || !g_application.m_pPlayer->CanSeek()) return false; SeekType type = g_application.CurrentFileItem().IsAudio() ? SEEK_TYPE_MUSIC : SEEK_TYPE_VIDEO; switch (action.GetID()) { case ACTION_SMALL_STEP_BACK: case ACTION_STEP_BACK: { Seek(false, action.GetAmount(), action.GetRepeat(), false, type); return true; } case ACTION_STEP_FORWARD: { Seek(true, action.GetAmount(), action.GetRepeat(), false, type); return true; } case ACTION_BIG_STEP_BACK: case ACTION_CHAPTER_OR_BIG_STEP_BACK: { g_application.m_pPlayer->Seek(false, true, action.GetID() == ACTION_CHAPTER_OR_BIG_STEP_BACK); return true; } case ACTION_BIG_STEP_FORWARD: case ACTION_CHAPTER_OR_BIG_STEP_FORWARD: { g_application.m_pPlayer->Seek(true, true, action.GetID() == ACTION_CHAPTER_OR_BIG_STEP_FORWARD); return true; } case ACTION_NEXT_SCENE: { g_application.m_pPlayer->SeekScene(true); return true; } case ACTION_PREV_SCENE: { g_application.m_pPlayer->SeekScene(false); return true; } case ACTION_ANALOG_SEEK_FORWARD: case ACTION_ANALOG_SEEK_BACK: { if (action.GetAmount()) Seek(action.GetID() == ACTION_ANALOG_SEEK_FORWARD, action.GetAmount(), action.GetRepeat(), true); return true; } default: break; } return false; }
void Action::setFromCAction(const CAction& action) { TRACE; id = action.GetID(); buttonCode = action.GetButtonCode(); fAmount1 = action.GetAmount(0); fAmount2 = action.GetAmount(1); fRepeat = action.GetRepeat(); strAction = action.GetName(); }
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); }
bool CSeekHandler::OnAction(const CAction &action) { if (!g_application.m_pPlayer->IsPlaying() || !g_application.m_pPlayer->CanSeek()) return false; SeekType type = g_application.CurrentFileItem().IsAudio() ? SEEK_TYPE_MUSIC : SEEK_TYPE_VIDEO; if (SeekTimeCode(action)) return true; switch (action.GetID()) { case ACTION_SMALL_STEP_BACK: case ACTION_STEP_BACK: { Seek(false, action.GetAmount(), action.GetRepeat(), false, type); return true; } case ACTION_STEP_FORWARD: { Seek(true, action.GetAmount(), action.GetRepeat(), false, type); return true; } case ACTION_BIG_STEP_BACK: case ACTION_CHAPTER_OR_BIG_STEP_BACK: { g_application.m_pPlayer->Seek(false, true, action.GetID() == ACTION_CHAPTER_OR_BIG_STEP_BACK); return true; } case ACTION_BIG_STEP_FORWARD: case ACTION_CHAPTER_OR_BIG_STEP_FORWARD: { g_application.m_pPlayer->Seek(true, true, action.GetID() == ACTION_CHAPTER_OR_BIG_STEP_FORWARD); return true; } case ACTION_NEXT_SCENE: { g_application.m_pPlayer->SeekScene(true); return true; } case ACTION_PREV_SCENE: { g_application.m_pPlayer->SeekScene(false); return true; } case ACTION_ANALOG_SEEK_FORWARD: case ACTION_ANALOG_SEEK_BACK: { if (action.GetAmount()) Seek(action.GetID() == ACTION_ANALOG_SEEK_FORWARD, action.GetAmount(), action.GetRepeat(), true); return true; } case REMOTE_0: case REMOTE_1: case REMOTE_2: case REMOTE_3: case REMOTE_4: case REMOTE_5: case REMOTE_6: case REMOTE_7: case REMOTE_8: case REMOTE_9: case ACTION_JUMP_SMS2: case ACTION_JUMP_SMS3: case ACTION_JUMP_SMS4: case ACTION_JUMP_SMS5: case ACTION_JUMP_SMS6: case ACTION_JUMP_SMS7: case ACTION_JUMP_SMS8: case ACTION_JUMP_SMS9: { if (!g_application.CurrentFileItem().IsLiveTV()) { ChangeTimeCode(action.GetID()); return true; } } break; default: break; } return false; }