bool MythBDPlayer::SwitchTitle(int title) { if (player_ctx->buffer->BD()->IsHDMVNavigation()) return false; uint total = GetNumTitles(); if (!total || title == GetCurrentTitle() || title >= (int)total) return false; Pause(); bool ok = false; if (player_ctx->buffer->BD()->SwitchTitle(title)) { ResetCaptions(); if (OpenFile() != 0) { SetErrored(QObject::tr("Failed to switch title.")); } else { ok = true; forcePositionMapSync = true; } } Play(); return ok; }
bool MythBDPlayer::PrevTitle(void) { if (player_ctx->buffer->BD()->IsHDMVNavigation()) return false; uint total = GetNumTitles(); int prev = GetCurrentTitle() - 1; if (!total || prev < 0) return false; return SwitchTitle(prev); }
bool MythBDPlayer::NextTitle(void) { if (player_ctx->buffer->BD()->IsHDMVNavigation()) return false; uint total = GetNumTitles(); int next = GetCurrentTitle() + 1; if (!total || next >= (int)total) return false; return SwitchTitle(next); }
void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt) { if (m_webBrowser == NULL) return; switch (evt.GetDispatchId()) { case DISPID_BEFORENAVIGATE2: { m_isBusy = true; wxString url = evt[1].GetString(); wxString target = evt[3].GetString(); wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATING, GetId(), url, target); //skip empty javascript events. if(url == "javascript:\"\"" && target.IsEmpty()) { event.Veto(); } else { event.SetEventObject(this); HandleWindowEvent(event); } if (!event.IsAllowed()) { wxActiveXEventNativeMSW* nativeParams = evt.GetNativeParameters(); *V_BOOLREF(&nativeParams->pDispParams->rgvarg[0]) = VARIANT_TRUE; } // at this point, either the navigation event has been cancelled // and we're not busy, either it was accepted and IWebBrowser2's // Busy property will be true; so we don't need our override // flag anymore. m_isBusy = false; break; } case DISPID_NAVIGATECOMPLETE2: { wxString url = evt[1].GetString(); // TODO: set target parameter if possible wxString target = wxEmptyString; wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED, GetId(), url, target); event.SetEventObject(this); HandleWindowEvent(event); break; } case DISPID_PROGRESSCHANGE: { // download progress break; } case DISPID_DOCUMENTCOMPLETE: { //Only send a complete even if we are actually finished, this brings //the event in to line with webkit READYSTATE rs; m_webBrowser->get_ReadyState( &rs ); if(rs != READYSTATE_COMPLETE) break; wxString url = evt[1].GetString(); //As we are complete we also add to the history list, but not if the //page is not the main page, ie it is a subframe //We also have to check if we are loading a file:// url, if so we //need to change the comparison as ie passes back a different style //of url if(m_historyEnabled && !m_historyLoadingFromList && (url == GetCurrentURL() || (GetCurrentURL().substr(0, 4) == "file" && wxFileSystem::URLToFileName(GetCurrentURL()).GetFullPath() == url))) { //If we are not at the end of the list, then erase everything //between us and the end before adding the new page if(m_historyPosition != static_cast<int>(m_historyList.size()) - 1) { m_historyList.erase(m_historyList.begin() + m_historyPosition + 1, m_historyList.end()); } wxSharedPtr<wxWebViewHistoryItem> item(new wxWebViewHistoryItem(url, GetCurrentTitle())); m_historyList.push_back(item); m_historyPosition++; } //Reset as we are done now m_historyLoadingFromList = false; // TODO: set target parameter if possible wxString target = wxEmptyString; wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_LOADED, GetId(), url, target); event.SetEventObject(this); HandleWindowEvent(event); break; } case DISPID_STATUSTEXTCHANGE: { break; } case DISPID_TITLECHANGE: { wxString title = evt[0].GetString(); wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, GetId(), GetCurrentURL(), ""); event.SetString(title); event.SetEventObject(this); HandleWindowEvent(event); break; } case DISPID_NAVIGATEERROR: { wxWebViewNavigationError errorType = wxWEB_NAV_ERR_OTHER; wxString errorCode = "?"; switch (evt[3].GetLong()) { case INET_E_INVALID_URL: // (0x800C0002L or -2146697214) errorCode = "INET_E_INVALID_URL"; errorType = wxWEB_NAV_ERR_REQUEST; break; case INET_E_NO_SESSION: // (0x800C0003L or -2146697213) errorCode = "INET_E_NO_SESSION"; errorType = wxWEB_NAV_ERR_CONNECTION; break; case INET_E_CANNOT_CONNECT: // (0x800C0004L or -2146697212) errorCode = "INET_E_CANNOT_CONNECT"; errorType = wxWEB_NAV_ERR_CONNECTION; break; case INET_E_RESOURCE_NOT_FOUND: // (0x800C0005L or -2146697211) errorCode = "INET_E_RESOURCE_NOT_FOUND"; errorType = wxWEB_NAV_ERR_NOT_FOUND; break; case INET_E_OBJECT_NOT_FOUND: // (0x800C0006L or -2146697210) errorCode = "INET_E_OBJECT_NOT_FOUND"; errorType = wxWEB_NAV_ERR_NOT_FOUND; break; case INET_E_DATA_NOT_AVAILABLE: // (0x800C0007L or -2146697209) errorCode = "INET_E_DATA_NOT_AVAILABLE"; errorType = wxWEB_NAV_ERR_NOT_FOUND; break; case INET_E_DOWNLOAD_FAILURE: // (0x800C0008L or -2146697208) errorCode = "INET_E_DOWNLOAD_FAILURE"; errorType = wxWEB_NAV_ERR_CONNECTION; break; case INET_E_AUTHENTICATION_REQUIRED: // (0x800C0009L or -2146697207) errorCode = "INET_E_AUTHENTICATION_REQUIRED"; errorType = wxWEB_NAV_ERR_AUTH; break; case INET_E_NO_VALID_MEDIA: // (0x800C000AL or -2146697206) errorCode = "INET_E_NO_VALID_MEDIA"; errorType = wxWEB_NAV_ERR_REQUEST; break; case INET_E_CONNECTION_TIMEOUT: // (0x800C000BL or -2146697205) errorCode = "INET_E_CONNECTION_TIMEOUT"; errorType = wxWEB_NAV_ERR_CONNECTION; break; case INET_E_INVALID_REQUEST: // (0x800C000CL or -2146697204) errorCode = "INET_E_INVALID_REQUEST"; errorType = wxWEB_NAV_ERR_REQUEST; break; case INET_E_UNKNOWN_PROTOCOL: // (0x800C000DL or -2146697203) errorCode = "INET_E_UNKNOWN_PROTOCOL"; errorType = wxWEB_NAV_ERR_REQUEST; break; case INET_E_SECURITY_PROBLEM: // (0x800C000EL or -2146697202) errorCode = "INET_E_SECURITY_PROBLEM"; errorType = wxWEB_NAV_ERR_SECURITY; break; case INET_E_CANNOT_LOAD_DATA: // (0x800C000FL or -2146697201) errorCode = "INET_E_CANNOT_LOAD_DATA"; errorType = wxWEB_NAV_ERR_OTHER; break; case INET_E_CANNOT_INSTANTIATE_OBJECT: // CoCreateInstance will return an error code if this happens, // we'll handle this above. return; break; case INET_E_REDIRECT_FAILED: // (0x800C0014L or -2146697196) errorCode = "INET_E_REDIRECT_FAILED"; errorType = wxWEB_NAV_ERR_OTHER; break; case INET_E_REDIRECT_TO_DIR: // (0x800C0015L or -2146697195) errorCode = "INET_E_REDIRECT_TO_DIR"; errorType = wxWEB_NAV_ERR_REQUEST; break; case INET_E_CANNOT_LOCK_REQUEST: // (0x800C0016L or -2146697194) errorCode = "INET_E_CANNOT_LOCK_REQUEST"; errorType = wxWEB_NAV_ERR_OTHER; break; case INET_E_USE_EXTEND_BINDING: // (0x800C0017L or -2146697193) errorCode = "INET_E_USE_EXTEND_BINDING"; errorType = wxWEB_NAV_ERR_OTHER; break; case INET_E_TERMINATED_BIND: // (0x800C0018L or -2146697192) errorCode = "INET_E_TERMINATED_BIND"; errorType = wxWEB_NAV_ERR_OTHER; break; case INET_E_INVALID_CERTIFICATE: // (0x800C0019L or -2146697191) errorCode = "INET_E_INVALID_CERTIFICATE"; errorType = wxWEB_NAV_ERR_CERTIFICATE; break; case INET_E_CODE_DOWNLOAD_DECLINED: // (0x800C0100L or -2146696960) errorCode = "INET_E_CODE_DOWNLOAD_DECLINED"; errorType = wxWEB_NAV_ERR_USER_CANCELLED; break; case INET_E_RESULT_DISPATCHED: // (0x800C0200L or -2146696704) // cancel request cancelled... errorCode = "INET_E_RESULT_DISPATCHED"; errorType = wxWEB_NAV_ERR_OTHER; break; case INET_E_CANNOT_REPLACE_SFP_FILE: // (0x800C0300L or -2146696448) errorCode = "INET_E_CANNOT_REPLACE_SFP_FILE"; errorType = wxWEB_NAV_ERR_SECURITY; break; case INET_E_CODE_INSTALL_BLOCKED_BY_HASH_POLICY: errorCode = "INET_E_CODE_INSTALL_BLOCKED_BY_HASH_POLICY"; errorType = wxWEB_NAV_ERR_SECURITY; break; case INET_E_CODE_INSTALL_SUPPRESSED: errorCode = "INET_E_CODE_INSTALL_SUPPRESSED"; errorType = wxWEB_NAV_ERR_SECURITY; break; } wxString url = evt[1].GetString(); wxString target = evt[2].GetString(); wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_ERROR, GetId(), url, target); event.SetEventObject(this); event.SetInt(errorType); event.SetString(errorCode); HandleWindowEvent(event); break; } case DISPID_NEWWINDOW3: { wxString url = evt[4].GetString(); wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, GetId(), url, wxEmptyString); event.SetEventObject(this); HandleWindowEvent(event); //We always cancel this event otherwise an Internet Exporer window //is opened for the url wxActiveXEventNativeMSW* nativeParams = evt.GetNativeParameters(); *V_BOOLREF(&nativeParams->pDispParams->rgvarg[3]) = VARIANT_TRUE; break; } } evt.Skip(); }