bool CGUIDialogAddonSettings::OnMessage(CGUIMessage &message) { switch (message.GetMessage()) { case GUI_MSG_CLICKED: { if (message.GetSenderId() == CONTROL_SETTINGS_CUSTOM_BUTTON) { OnResetSettings(); return true; } break; } case GUI_MSG_SETTING_UPDATED: { std::string settingId = message.GetStringParam(0); std::string settingValue = message.GetStringParam(1); std::shared_ptr<CSetting> setting = GetSettingsManager()->GetSetting(settingId); if (setting != nullptr) { setting->FromString(settingValue); return true; } break; } default: break; } return CGUIDialogSettingsManagerBase::OnMessage(message); }
bool CGUIWindowGames::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_INIT: { m_rootDir.AllowNonLocalSources(true); //! @todo // Is this the first time the window is opened? if (m_vecItems->GetPath() == "?" && message.GetStringParam().empty()) message.SetStringParam(CMediaSourceSettings::GetInstance().GetDefaultSource("games")); //! @todo m_dlgProgress = dynamic_cast<CGUIDialogProgress*>(g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS)); break; } case GUI_MSG_CLICKED: { if (OnClickMsg(message.GetSenderId(), message.GetParam1())) return true; break; } default: break; } return CGUIMediaWindow::OnMessage(message); }
bool CGUIWindowSettingsCategory::OnMessage(CGUIMessage &message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_INIT: { m_iSection = (int)message.GetParam2() - (int)CGUIDialogSettingsManagerBase::GetID(); CGUIDialogSettingsManagerBase::OnMessage(message); m_returningFromSkinLoad = false; if (!message.GetStringParam(0).empty()) FocusCategory(message.GetStringParam(0)); return true; } case GUI_MSG_FOCUSED: { if (!m_returningFromSkinLoad) CGUIDialogSettingsManagerBase::OnMessage(message); return true; } case GUI_MSG_LOAD_SKIN: { if (IsActive()) m_returningFromSkinLoad = true; break; } case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1() == GUI_MSG_WINDOW_RESIZE) { if (IsActive() && CDisplaySettings::GetInstance().GetCurrentResolution() != g_graphicsContext.GetVideoResolution()) { CDisplaySettings::GetInstance().SetCurrentResolution(g_graphicsContext.GetVideoResolution(), true); CreateSettings(); } } break; } } return CGUIDialogSettingsManagerBase::OnMessage(message); }
bool CGUIDialogBoxeeBrowseMenu::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_INIT: { CStdString param = message.GetStringParam(0); m_openInSearch = (param == "openinsearch"); } break; case GUI_MSG_LABEL2_SET: { CGUIDialogBoxeeSearch *pSearchDialog = (CGUIDialogBoxeeSearch*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_SEARCH); if (pSearchDialog && pSearchDialog->ClosedByMovingRightFromTextBox()) { CAction action; action.id = ACTION_MOVE_RIGHT; OnAction(action); } } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == BROWSE_MENU_BUTTON_SEARCH) { // Get the keystroke that was pressed bool bResult = CGUIDialog::OnMessage(message); SET_CONTROL_FOCUS(BROWSE_MENU_BUTTON_SEARCH,0); CGUIEditControl* pSearchControl = (CGUIEditControl*)GetControl(BROWSE_MENU_BUTTON_SEARCH); if (pSearchControl) { CStdString strSearchTerm = pSearchControl->GetLabel2(); //pSearchControl->SetLabel2(""); CLog::Log(LOGDEBUG,"CGUIDialogBoxeeBrowseMenu::OnMessage - [term=%s] (search)", strSearchTerm.c_str()); ThreadMessage tMsg(TMSG_GUI_ACTIVATE_WINDOW , WINDOW_DIALOG_BOXEE_SEARCH , false); std::vector<CStdString> params; params.push_back(strSearchTerm); tMsg.params = params; g_application.getApplicationMessenger().SendMessage(tMsg,false); } return bResult; } OnClick(iControl); } break; } return CGUIDialog::OnMessage(message); }
bool CGUIWindowPrograms::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); } break; case GUI_MSG_WINDOW_INIT: { m_dlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); // is this the first time accessing this window? if (m_vecItems->GetPath() == "?" && message.GetStringParam().IsEmpty()) message.SetStringParam(CMediaSourceSettings::Get().GetDefaultSource("programs")); return CGUIMediaWindow::OnMessage(message); } break; case GUI_MSG_CLICKED: { if (m_viewControl.HasControl(message.GetSenderId())) // list/thumb control { int iAction = message.GetParam1(); int iItem = m_viewControl.GetSelectedItem(); if (iAction == ACTION_PLAYER_PLAY) { OnPlayMedia(iItem); return true; } else if (iAction == ACTION_SHOW_INFO) { OnInfo(iItem); return true; } } } break; } return CGUIMediaWindow::OnMessage(message); }
bool CGUIDialogAccessPoints::OnMessage(CGUIMessage& message) { bool result = CGUIDialog::OnMessage(message); switch (message.GetMessage()) { case GUI_MSG_WINDOW_INIT: { m_use_ipconfig = false; m_doing_connection = false; // fetch the param list std::string param(message.GetStringParam()); // network apply vs network connect if (param.find("name+") != std::string::npos) { m_use_ipconfig = true; // network apply, param contains a description for connecting // to an access point. we want to find this access point, // disable the others, then inject a OnAction msg to select it. DecodeAccessPointParam(param); // change the label to show we are doing a connection. CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), ACCESS_POINT_LABEL); // <string id="33203">Connecting</string> msg.SetLabel(g_localizeStrings.Get(33203)); OnMessage(msg); } UpdateConnectionList(); // if we are doing an 'apply', then inject a click on the "selected" item. if (m_use_ipconfig) CApplicationMessenger::Get().SendAction(CAction(ACTION_SELECT_ITEM), GetID()); break; } case GUI_MSG_WINDOW_DEINIT: { } } return result; }
bool CGUIWindowFileManager::OnMessage(CGUIMessage& message) { /* 歌方: 1、 卦指: 1、 傍苧: 1、 */ switch ( message.GetMessage() ) { case GUI_MSG_NOTIFY_ALL: { // Message is received even if window is inactive if (message.GetParam1() == GUI_MSG_WINDOW_RESET) { m_Directory[0]->SetPath("?"); m_Directory[1]->SetPath("?"); m_Directory[0]->m_bIsFolder = true; m_Directory[1]->m_bIsFolder = true; return true; } // handle removable media if (message.GetParam1() == GUI_MSG_REMOVED_MEDIA) { for (int i = 0; i < 2; i++) { if (m_Directory[i]->IsVirtualDirectoryRoot() && IsActive()) { int iItem = GetSelectedItem(i); Update(i, m_Directory[i]->GetPath()); CONTROL_SELECT_ITEM(CONTROL_LEFT_LIST + i, iItem); } else if (m_Directory[i]->IsRemovable() && !m_rootDir.IsInSource(m_Directory[i]->GetPath())) { // if (IsActive()) Update(i, ""); else m_Directory[i]->SetPath(""); } } return true; } else if (message.GetParam1()==GUI_MSG_UPDATE_SOURCES) { // State of the sources changed, so update our view for (int i = 0; i < 2; i++) { if (m_Directory[i]->IsVirtualDirectoryRoot() && IsActive()) { int iItem = GetSelectedItem(i); Update(i, m_Directory[i]->GetPath()); CONTROL_SELECT_ITEM(CONTROL_LEFT_LIST + i, iItem); } } return true; } } break; case GUI_MSG_PLAYBACK_STARTED: case GUI_MSG_PLAYBACK_ENDED: case GUI_MSG_PLAYBACK_STOPPED: case GUI_MSG_PLAYLIST_CHANGED: case GUI_MSG_PLAYLISTPLAYER_STOPPED: case GUI_MSG_PLAYLISTPLAYER_STARTED: case GUI_MSG_PLAYLISTPLAYER_CHANGED: { // send a notify all to all controls on this window CGUIMessage msg(GUI_MSG_NOTIFY_ALL, GetID(), 0, GUI_MSG_REFRESH_LIST); OnMessage(msg); break; } case GUI_MSG_WINDOW_DEINIT: { CGUIWindow::OnMessage(message); ClearFileItems(0); ClearFileItems(1); return true; } break; case GUI_MSG_WINDOW_INIT: { SetInitialPath(message.GetStringParam()); message.SetStringParam(""); return CGUIWindow::OnMessage(message); } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_LEFT_LIST || iControl == CONTROL_RIGHT_LIST) // list/thumb control { // get selected item int list = iControl - CONTROL_LEFT_LIST; int iItem = GetSelectedItem(list); int iAction = message.GetParam1(); // iItem is checked for validity inside these routines if (iAction == ACTION_HIGHLIGHT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK) { OnMark(list, iItem); if (!g_Mouse.IsActive()) { //move to next item CGUIMessage msg(GUI_MSG_ITEM_SELECT, GetID(), iControl, iItem + 1); g_windowManager.SendMessage(msg); } } else if (iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_DOUBLE_CLICK) { OnClick(list, iItem); } else if (iAction == ACTION_CONTEXT_MENU || iAction == ACTION_MOUSE_RIGHT_CLICK) { OnPopupMenu(list, iItem); } } } break; } return CGUIWindow::OnMessage(message); }
/*! \brief Handle messages on window. \param message GUI Message that can be reacted on. \return if a message can't be processed, return \e false On these messages this class reacts.\n When retrieving... - #GUI_MSG_WINDOW_DEINIT\n ...the last focused control is saved to m_iLastControl. - #GUI_MSG_WINDOW_INIT\n ...the musicdatabase is opend and the music extensions and shares are set. The last focused control is set. - #GUI_MSG_CLICKED\n ... the base class reacts on the following controls:\n Buttons:\n - #CONTROL_BTNVIEWASICONS - switch between list, thumb and with large items - #CONTROL_BTNTYPE - switch between music windows - #CONTROL_BTNSEARCH - Search for items\n Other Controls: - The container controls\n Have the following actions in message them clicking on them. - #ACTION_QUEUE_ITEM - add selected item to playlist - #ACTION_SHOW_INFO - retrieve album info from the internet - #ACTION_SELECT_ITEM - Item has been selected. Overwrite OnClick() to react on it */ bool CGUIWindowMusicBase::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); m_musicdatabase.Close(); } break; case GUI_MSG_WINDOW_INIT: { m_dlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); m_musicdatabase.Open(); if (!CGUIMediaWindow::OnMessage(message)) return false; // save current window, unless the current window is the music playlist window if (GetID() != WINDOW_MUSIC_PLAYLIST && CSettings::GetInstance().GetInt(CSettings::SETTING_MYMUSIC_STARTWINDOW) != GetID()) { CSettings::GetInstance().SetInt(CSettings::SETTING_MYMUSIC_STARTWINDOW, GetID()); CSettings::GetInstance().Save(); } return true; } break; case GUI_MSG_DIRECTORY_SCANNED: { CFileItem directory(message.GetStringParam(), true); // Only update thumb on a local drive if (directory.IsHD()) { std::string strParent; URIUtils::GetParentPath(directory.GetPath(), strParent); if (directory.GetPath() == m_vecItems->GetPath() || strParent == m_vecItems->GetPath()) Refresh(); } } break; // update the display case GUI_MSG_SCAN_FINISHED: case GUI_MSG_REFRESH_THUMBS: Refresh(); break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNTYPE) { CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_BTNTYPE); g_windowManager.SendMessage(msg); int nWindow = WINDOW_MUSIC_FILES + msg.GetParam1(); if (nWindow == GetID()) return true; CSettings::GetInstance().SetInt(CSettings::SETTING_MYMUSIC_STARTWINDOW, nWindow); CSettings::GetInstance().Save(); g_windowManager.ChangeActiveWindow(nWindow); CGUIMessage msg2(GUI_MSG_SETFOCUS, CSettings::GetInstance().GetInt(CSettings::SETTING_MYMUSIC_STARTWINDOW), CONTROL_BTNTYPE); g_windowManager.SendMessage(msg2); return true; } else if (iControl == CONTROL_BTNRIP) { OnRipCD(); } else if (iControl == CONTROL_BTNPLAYLISTS) { if (!m_vecItems->IsPath("special://musicplaylists/")) Update("special://musicplaylists/"); } else if (iControl == CONTROL_BTNSCAN) { OnScan(-1); } else if (iControl == CONTROL_BTNREC) { if (g_application.m_pPlayer->IsPlayingAudio() ) { if (g_application.m_pPlayer->CanRecord() ) { bool bIsRecording = g_application.m_pPlayer->IsRecording(); g_application.m_pPlayer->Record(!bIsRecording); UpdateButtons(); } } } else if (m_viewControl.HasControl(iControl)) // list/thumb control { int iItem = m_viewControl.GetSelectedItem(); int iAction = message.GetParam1(); // iItem is checked for validity inside these routines if (iAction == ACTION_QUEUE_ITEM || iAction == ACTION_MOUSE_MIDDLE_CLICK) { OnQueueItem(iItem); } else if (iAction == ACTION_SHOW_INFO) { OnInfo(iItem); } else if (iAction == ACTION_DELETE_ITEM) { // is delete allowed? // must be at the playlists directory if (m_vecItems->IsPath("special://musicplaylists/")) OnDeleteItem(iItem); // or be at the files window and have file deletion enabled else if (GetID() == WINDOW_MUSIC_FILES && CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_ALLOWFILEDELETION)) { OnDeleteItem(iItem); } else return false; } // use play button to add folders of items to temp playlist else if (iAction == ACTION_PLAYER_PLAY) { // if playback is paused or playback speed != 1, return if (g_application.m_pPlayer->IsPlayingAudio()) { if (g_application.m_pPlayer->IsPausedPlayback()) return false; if (g_application.m_pPlayer->GetPlaySpeed() != 1) return false; } // not playing audio, or playback speed == 1 PlayItem(iItem); return true; } } } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1()==GUI_MSG_REMOVED_MEDIA) CUtil::DeleteDirectoryCache("r-"); } break; } return CGUIMediaWindow::OnMessage(message); }
bool CGUIWindowMusicSongs::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); break; case GUI_MSG_WINDOW_INIT: { // removed the start window check from files view // the window translator does it by using a virtual window id (5) // check for a passed destination path CStdString strDestination = message.GetStringParam(); if (!strDestination.IsEmpty()) { message.SetStringParam(""); CLog::Log(LOGINFO, "Attempting to quickpath to: %s", strDestination.c_str()); m_history.ClearPathHistory(); } // is this the first time the window is opened? if (m_vecItems->m_strPath == "?" && strDestination.IsEmpty()) { strDestination = g_settings.m_defaultMusicSource; m_vecItems->m_strPath=strDestination; CLog::Log(LOGINFO, "Attempting to default to: %s", strDestination.c_str()); } // try to open the destination path if (!strDestination.IsEmpty()) { // open root if (strDestination.Equals("$ROOT")) { m_vecItems->m_strPath = ""; CLog::Log(LOGINFO, " Success! Opening root listing."); } // open playlists location else if (strDestination.Equals("$PLAYLISTS")) { m_vecItems->m_strPath = "special://musicplaylists/"; CLog::Log(LOGINFO, " Success! Opening destination path: %s", m_vecItems->m_strPath.c_str()); } else { // default parameters if the jump fails m_vecItems->m_strPath.Empty(); bool bIsSourceName = false; SetupShares(); VECSOURCES shares; m_rootDir.GetSources(shares); int iIndex = CUtil::GetMatchingSource(strDestination, shares, bIsSourceName); if (iIndex > -1) { bool unlocked = true; if (iIndex < (int)shares.size() && shares[iIndex].m_iHasLock == 2) { CFileItem item(shares[iIndex]); if (!g_passwordManager.IsItemUnlocked(&item,"music")) { m_vecItems->m_strPath = ""; // no u don't unlocked = false; CLog::Log(LOGINFO, " Failure! Failed to unlock destination path: %s", strDestination.c_str()); } } // set current directory to matching share if (unlocked) { if (bIsSourceName) m_vecItems->m_strPath=shares[iIndex].strPath; else m_vecItems->m_strPath=strDestination; CLog::Log(LOGINFO, " Success! Opened destination path: %s (%s)", strDestination.c_str(), m_vecItems->m_strPath.c_str()); } } else { CLog::Log(LOGERROR, " Failed! Destination parameter (%s) does not match a valid source!", strDestination.c_str()); } } // check for network up if (CUtil::IsRemote(m_vecItems->m_strPath) && !WaitForNetwork()) m_vecItems->m_strPath.Empty(); // need file filters or GetDirectory in SetHistoryPath fails SetHistoryForPath(m_vecItems->m_strPath); } return CGUIWindowMusicBase::OnMessage(message); } break; case GUI_MSG_DIRECTORY_SCANNED: { CFileItem directory(message.GetStringParam(), true); // Only update thumb on a local drive if (directory.IsHD()) { CStdString strParent; CUtil::GetParentPath(directory.m_strPath, strParent); if (directory.m_strPath == m_vecItems->m_strPath || strParent == m_vecItems->m_strPath) { Update(m_vecItems->m_strPath); } } } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1()==GUI_MSG_REMOVED_MEDIA) DeleteRemoveableMediaDirectoryCache(); } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNPLAYLISTS) { if (!m_vecItems->m_strPath.Equals("special://musicplaylists/")) Update("special://musicplaylists/"); } else if (iControl == CONTROL_BTNSCAN) { OnScan(-1); } else if (iControl == CONTROL_BTNREC) { if (g_application.IsPlayingAudio() ) { if (g_application.m_pPlayer->CanRecord() ) { bool bIsRecording = g_application.m_pPlayer->IsRecording(); g_application.m_pPlayer->Record(!bIsRecording); UpdateButtons(); } } } else if (iControl == CONTROL_BTNRIP) { OnRipCD(); } } break; } return CGUIWindowMusicBase::OnMessage(message); }
bool CGUIWindowVideoNav::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_RESET: m_vecItems->m_strPath = "?"; break; case GUI_MSG_WINDOW_DEINIT: if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); break; case GUI_MSG_WINDOW_INIT: { /* We don't want to show Autosourced items (ie removable pendrives, memorycards) in Library mode */ m_rootDir.AllowNonLocalSources(false); // is this the first time the window is opened? if (m_vecItems->m_strPath == "?" && message.GetStringParam().IsEmpty()) message.SetStringParam(g_settings.m_defaultVideoLibSource); DisplayEmptyDatabaseMessage(false); // reset message state SetProperty("flattened", g_settings.m_bMyVideoNavFlatten); if (!CGUIWindowVideoBase::OnMessage(message)) return false; // base class has opened the database, do our check m_database.Open(); DisplayEmptyDatabaseMessage(!m_database.HasContent()); if (m_bDisplayEmptyDatabaseMessage) { // no library - make sure we focus on a known control, and default to the root. SET_CONTROL_FOCUS(CONTROL_BTNTYPE, 0); m_vecItems->m_strPath = ""; SetHistoryForPath(""); Update(""); } m_database.Close(); return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNPARTYMODE) { if (g_partyModeManager.IsEnabled()) g_partyModeManager.Disable(); else { if (!g_partyModeManager.Enable(PARTYMODECONTEXT_VIDEO)) { SET_CONTROL_SELECTED(GetID(),CONTROL_BTNPARTYMODE,false); return false; } // Playlist directory is the root of the playlist window if (m_guiState.get()) m_guiState->SetPlaylistDirectory("playlistvideo://"); return true; } UpdateButtons(); } if (iControl == CONTROL_BTNSEARCH) { OnSearch(); } else if (iControl == CONTROL_BTNSHOWMODE) { g_settings.CycleWatchMode(m_vecItems->GetContent()); g_settings.Save(); // TODO: Can we perhaps filter this directly? Probably not for some of the more complicated views, // but for those perhaps we can just display them all, and only filter when we get a list // of actual videos? Update(m_vecItems->m_strPath); return true; } else if (iControl == CONTROL_BTNFLATTEN) { g_settings.m_bMyVideoNavFlatten = !g_settings.m_bMyVideoNavFlatten; g_settings.Save(); SetProperty("flattened", g_settings.m_bMyVideoNavFlatten); CUtil::DeleteVideoDatabaseDirectoryCache(); SetupShares(); Update(""); return true; } else if (iControl == CONTROL_BTNSHOWALL) { if (g_settings.GetWatchMode(m_vecItems->GetContent()) == VIDEO_SHOW_ALL) g_settings.SetWatchMode(m_vecItems->GetContent(), VIDEO_SHOW_UNWATCHED); else g_settings.SetWatchMode(m_vecItems->GetContent(), VIDEO_SHOW_ALL); g_settings.Save(); // TODO: Can we perhaps filter this directly? Probably not for some of the more complicated views, // but for those perhaps we can just display them all, and only filter when we get a list // of actual videos? Update(m_vecItems->m_strPath); return true; } } break; // update the display case GUI_MSG_SCAN_FINISHED: case GUI_MSG_REFRESH_THUMBS: { Update(m_vecItems->m_strPath); } break; } return CGUIWindowVideoBase::OnMessage(message); }
bool XBPython::SendMessage(CGUIMessage& message) { return (evalFile(message.GetStringParam().c_str()) != -1); }
bool CGUIWindowSlideShow::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { if (m_Resolution != g_guiSettings.m_LookAndFeelResolution) { //FIXME: Use GUI resolution for now //g_graphicsContext.SetVideoResolution(g_guiSettings.m_LookAndFeelResolution, TRUE); } // Reset(); if (message.GetParam1() != WINDOW_PICTURES) { m_ImageLib.Unload(); } g_windowManager.ShowOverlay(OVERLAY_STATE_SHOWN); FreeResources(); } break; case GUI_MSG_WINDOW_INIT: { m_Resolution = (RESOLUTION) g_guiSettings.GetInt("pictures.displayresolution"); //FIXME: Use GUI resolution for now if (0 /*m_Resolution != g_guiSettings.m_LookAndFeelResolution && m_Resolution != INVALID && m_Resolution!=AUTORES*/) { g_graphicsContext.SetVideoResolution(m_Resolution); } else { m_Resolution = g_graphicsContext.GetVideoResolution(); } CGUIWindow::OnMessage(message); if (message.GetParam1() != WINDOW_PICTURES) { m_ImageLib.Load(); } g_windowManager.ShowOverlay(OVERLAY_STATE_HIDDEN); // turn off slideshow if we only have 1 image if (m_slides->Size() <= 1) m_bSlideShow = false; return true; } break; case GUI_MSG_START_SLIDESHOW: { CStdString strFolder = message.GetStringParam(); unsigned int iParams = message.GetParam1(); //decode params bool bRecursive = false; bool bRandom = false; bool bNotRandom = false; if (iParams > 0) { if ((iParams & 1) == 1) bRecursive = true; if ((iParams & 2) == 2) bRandom = true; if ((iParams & 4) == 4) bNotRandom = true; } RunSlideShow(strFolder, bRecursive, bRandom, bNotRandom); } break; case GUI_MSG_PLAYLISTPLAYER_STOPPED: { m_bPlayingVideo = false; if (m_bSlideShow) g_windowManager.ActivateWindow(WINDOW_SLIDESHOW); } break; case GUI_MSG_PLAYBACK_STARTED: { if(m_bSlideShow && m_bPlayingVideo) g_windowManager.ActivateWindow(WINDOW_FULLSCREEN_VIDEO); m_bPlayingVideo = false; } break; case GUI_MSG_PLAYBACK_STOPPED: { m_bSlideShow = false; g_windowManager.PreviousWindow(); } break; } return CGUIWindow::OnMessage(message); }
bool CGUIDialogSmartPlaylistEditor::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); int iAction = message.GetParam1(); if (iControl == CONTROL_RULE_LIST && (iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK)) OnRuleList(GetSelectedItem()); else if (iControl == CONTROL_RULE_ADD) OnRuleAdd(); else if (iControl == CONTROL_RULE_EDIT) OnRuleList(GetSelectedItem()); else if (iControl == CONTROL_RULE_REMOVE) OnRuleRemove(GetSelectedItem()); else if (iControl == CONTROL_NAME) OnEditChanged(iControl, m_playlist.m_playlistName); else if (iControl == CONTROL_OK) OnOK(); else if (iControl == CONTROL_CANCEL) OnCancel(); else if (iControl == CONTROL_MATCH) OnMatch(); else if (iControl == CONTROL_LIMIT) OnLimit(); else if (iControl == CONTROL_ORDER_FIELD) OnOrder(); else if (iControl == CONTROL_ORDER_DIRECTION) OnOrderDirection(); else if (iControl == CONTROL_TYPE) OnType(); else if (iControl == CONTROL_GROUP_BY) OnGroupBy(); else if (iControl == CONTROL_GROUP_MIXED) OnGroupMixed(); else return CGUIDialog::OnMessage(message); return true; } break; case GUI_MSG_FOCUSED: if (message.GetControlId() == CONTROL_RULE_REMOVE || message.GetControlId() == CONTROL_RULE_EDIT) HighlightItem(GetSelectedItem()); else { if (message.GetControlId() == CONTROL_RULE_LIST) UpdateRuleControlButtons(); HighlightItem(-1); } break; case GUI_MSG_WINDOW_INIT: { const std::string& startupList = message.GetStringParam(0); if (!startupList.empty()) { int party = 0; if (URIUtils::PathEquals(startupList, CProfilesManager::GetInstance().GetUserDataItem("PartyMode.xsp"))) party = 1; else if (URIUtils::PathEquals(startupList, CProfilesManager::GetInstance().GetUserDataItem("PartyMode-Video.xsp"))) party = 2; if ((party && !XFILE::CFile::Exists(startupList)) || m_playlist.Load(startupList)) { m_path = startupList; if (party == 1) m_mode = "partymusic"; else if (party == 2) m_mode = "partyvideo"; else { PLAYLIST_TYPE type = ConvertType(m_playlist.GetType()); if (type == TYPE_SONGS || type == TYPE_ALBUMS || type == TYPE_ARTISTS) m_mode = "music"; else m_mode = "video"; } } else return false; } } break; } return CGUIDialog::OnMessage(message); }
bool CGUIDialogKeyboardGeneric::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); switch (iControl) { case CTL_BUTTON_DONE: OnOK(); break; case CTL_BUTTON_CANCEL: Close(); break; case CTL_BUTTON_SHIFT: OnShift(); break; case CTL_BUTTON_CAPS: if (m_keyType == LOWER) m_keyType = CAPS; else if (m_keyType == CAPS) m_keyType = LOWER; UpdateButtons(); break; case CTL_BUTTON_LAYOUT: OnLayout(); break; case CTL_BUTTON_SYMBOLS: OnSymbols(); break; case CTL_BUTTON_LEFT: MoveCursor( -1); break; case CTL_BUTTON_RIGHT: MoveCursor(1); break; case CTL_BUTTON_IP_ADDRESS: OnIPAddress(); break; case CTL_BUTTON_CLEAR: SetEditText(""); break; case CTL_EDIT: { CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CTL_EDIT); OnMessage(msg); // update callback I guess? if (m_pCharCallback) { // we did _something_, so make sure our search message filter is reset m_pCharCallback(this, msg.GetLabel()); } m_text = msg.GetLabel(); return true; } default: OnClickButton(iControl); break; } } break; case GUI_MSG_SET_TEXT: { // the edit control only handles these messages if it is either focused // or its specific control ID is set in the message. As neither is the // case here (focus is on one of the keyboard buttons) we have to force // the control ID of the message to the control ID of the edit control // (unfortunately we have to create a whole copy of the message object for that) CGUIMessage messageCopy(message.GetMessage(), message.GetSenderId(), CTL_EDIT, message.GetParam1(), message.GetParam2(), message.GetItem()); messageCopy.SetLabel(message.GetLabel()); // ensure this goes to the edit control CGUIControl *edit = GetControl(CTL_EDIT); if (edit) edit->OnMessage(messageCopy); // close the dialog if requested if (message.GetMessage() == GUI_MSG_SET_TEXT && message.GetParam1() > 0) OnOK(); return true; } case GUI_MSG_CODINGTABLE_LOOKUP_COMPLETED: { std::string code = message.GetStringParam(); if (code == m_hzcode) { int response = message.GetParam1(); auto words = m_codingtable->GetResponse(response); m_words.insert(m_words.end(), words.begin(), words.end()); ShowWordList(0); } } } return CGUIDialog::OnMessage(message); }
bool CGUIControllerWindow::OnMessage(CGUIMessage& message) { // Set to true to block the call to the super class bool bHandled = false; switch (message.GetMessage()) { case GUI_MSG_WINDOW_INIT: { //! @todo Process params here, don't just record them for later m_param = message.GetStringParam(); break; } case GUI_MSG_CLICKED: { int controlId = message.GetSenderId(); if (controlId == CONTROL_CLOSE_BUTTON) { Close(); bHandled = true; } else if (controlId == CONTROL_GET_MORE) { GetMoreControllers(); bHandled = true; } else if (controlId == CONTROL_RESET_BUTTON) { ResetController(); bHandled = true; } else if (controlId == CONTROL_HELP_BUTTON) { ShowHelp(); bHandled = true; } else if (controlId == CONTROL_FIX_SKIPPING) { ShowButtonCaptureDialog(); } else if (CONTROL_CONTROLLER_BUTTONS_START <= controlId && controlId < CONTROL_CONTROLLER_BUTTONS_END) { OnControllerSelected(controlId - CONTROL_CONTROLLER_BUTTONS_START); bHandled = true; } else if (CONTROL_FEATURE_BUTTONS_START <= controlId && controlId < CONTROL_FEATURE_BUTTONS_END) { OnFeatureSelected(controlId - CONTROL_FEATURE_BUTTONS_START); bHandled = true; } break; } case GUI_MSG_FOCUSED: { int controlId = message.GetControlId(); if (CONTROL_CONTROLLER_BUTTONS_START <= controlId && controlId < CONTROL_CONTROLLER_BUTTONS_END) { OnControllerFocused(controlId - CONTROL_CONTROLLER_BUTTONS_START); } else if (CONTROL_FEATURE_BUTTONS_START <= controlId && controlId < CONTROL_FEATURE_BUTTONS_END) { OnFeatureFocused(controlId - CONTROL_FEATURE_BUTTONS_START); } break; } case GUI_MSG_SETFOCUS: { int controlId = message.GetControlId(); if (CONTROL_CONTROLLER_BUTTONS_START <= controlId && controlId < CONTROL_CONTROLLER_BUTTONS_END) { OnControllerFocused(controlId - CONTROL_CONTROLLER_BUTTONS_START); } else if (CONTROL_FEATURE_BUTTONS_START <= controlId && controlId < CONTROL_FEATURE_BUTTONS_END) { OnFeatureFocused(controlId - CONTROL_FEATURE_BUTTONS_START); } break; } case GUI_MSG_REFRESH_LIST: { int controlId = message.GetControlId(); if (controlId == CONTROL_CONTROLLER_LIST) { if (m_controllerList && m_controllerList->Refresh()) { CGUIDialog::OnMessage(message); bHandled = true; } } break; } default: break; } if (!bHandled) bHandled = CGUIDialog::OnMessage(message); return bHandled; }
bool CGUIWindowMusicSongs::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); break; case GUI_MSG_WINDOW_INIT: { // removed the start window check from files view // the window translator does it by using a virtual window id (5) // is this the first time the window is opened? if (m_vecItems->GetPath() == "?" && message.GetStringParam().empty()) message.SetStringParam(CMediaSourceSettings::Get().GetDefaultSource("music")); return CGUIWindowMusicBase::OnMessage(message); } break; case GUI_MSG_DIRECTORY_SCANNED: { CFileItem directory(message.GetStringParam(), true); // Only update thumb on a local drive if (directory.IsHD()) { CStdString strParent; URIUtils::GetParentPath(directory.GetPath(), strParent); if (directory.GetPath() == m_vecItems->GetPath() || strParent == m_vecItems->GetPath()) Refresh(); } } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1()==GUI_MSG_REMOVED_MEDIA) DeleteRemoveableMediaDirectoryCache(); } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNPLAYLISTS) { if (!m_vecItems->GetPath().Equals("special://musicplaylists/")) Update("special://musicplaylists/"); } else if (iControl == CONTROL_BTNSCAN) { OnScan(-1); } else if (iControl == CONTROL_BTNREC) { if (g_application.m_pPlayer->IsPlayingAudio() ) { if (g_application.m_pPlayer->CanRecord() ) { bool bIsRecording = g_application.m_pPlayer->IsRecording(); g_application.m_pPlayer->Record(!bIsRecording); UpdateButtons(); } } } else if (iControl == CONTROL_BTNRIP) { OnRipCD(); } } break; } return CGUIWindowMusicBase::OnMessage(message); }
bool CGUIWindowAddonBrowser::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); } break; case GUI_MSG_WINDOW_INIT: { m_rootDir.AllowNonLocalSources(false); // is this the first time the window is opened? if (m_vecItems->GetPath() == "?" && message.GetStringParam().empty()) m_vecItems->SetPath(""); SetProperties(); } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_AUTOUPDATE) { const CGUIControl *control = GetControl(CONTROL_AUTOUPDATE); if (control && control->GetControlType() == CGUIControl::GUICONTROL_BUTTON) CSettings::GetInstance().SetInt(CSettings::SETTING_GENERAL_ADDONUPDATES, (CSettings::GetInstance().GetInt(CSettings::SETTING_GENERAL_ADDONUPDATES)+1) % AUTO_UPDATES_MAX); else CSettings::GetInstance().SetInt(CSettings::SETTING_GENERAL_ADDONUPDATES, (CSettings::GetInstance().GetInt(CSettings::SETTING_GENERAL_ADDONUPDATES) == 0) ? 1 : 0); UpdateButtons(); return true; } else if (iControl == CONTROL_SHUTUP) { CSettings::GetInstance().ToggleBool(CSettings::SETTING_GENERAL_ADDONNOTIFICATIONS); CSettings::GetInstance().Save(); return true; } else if (iControl == CONTROL_FOREIGNFILTER) { CSettings::GetInstance().ToggleBool(CSettings::SETTING_GENERAL_ADDONFOREIGNFILTER); CSettings::GetInstance().Save(); Refresh(); return true; } else if (iControl == CONTROL_BROKENFILTER) { CSettings::GetInstance().ToggleBool(CSettings::SETTING_GENERAL_ADDONBROKENFILTER); CSettings::GetInstance().Save(); Refresh(); return true; } else if (iControl == CONTROL_CHECK_FOR_UPDATES) { CRepositoryUpdater::GetInstance().CheckForUpdates(true); return true; } else if (m_viewControl.HasControl(iControl)) // list/thumb control { // get selected item int iItem = m_viewControl.GetSelectedItem(); int iAction = message.GetParam1(); // iItem is checked for validity inside these routines if (iAction == ACTION_SHOW_INFO) { if (!m_vecItems->Get(iItem)->GetProperty("Addon.ID").empty()) return CGUIDialogAddonInfo::ShowForItem((*m_vecItems)[iItem]); return false; } } } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1() == GUI_MSG_UPDATE_ITEM && IsActive() && message.GetNumStringParams() == 1) { // update this item for (int i = 0; i < m_vecItems->Size(); ++i) { CFileItemPtr item = m_vecItems->Get(i); if (item->GetProperty("Addon.ID") == message.GetStringParam()) { SetItemLabel2(item); return true; } } } else if (message.GetParam1() == GUI_MSG_UPDATE && IsActive()) SetProperties(); } break; default: break; } return CGUIMediaWindow::OnMessage(message); }
bool CGUIWindowMusicNav::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_RESET: m_vecItems->SetPath("?"); break; case GUI_MSG_WINDOW_INIT: { /* We don't want to show Autosourced items (ie removable pendrives, memorycards) in Library mode */ m_rootDir.AllowNonLocalSources(false); // is this the first time the window is opened? if (m_vecItems->GetPath() == "?" && message.GetStringParam().empty()) message.SetStringParam(CSettings::GetInstance().GetString(CSettings::SETTING_MYMUSIC_DEFAULTLIBVIEW)); if (!CGUIWindowMusicBase::OnMessage(message)) return false; return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNPARTYMODE) { if (g_partyModeManager.IsEnabled()) g_partyModeManager.Disable(); else { if (!g_partyModeManager.Enable()) { SET_CONTROL_SELECTED(GetID(),CONTROL_BTNPARTYMODE,false); return false; } // Playlist directory is the root of the playlist window if (m_guiState.get()) m_guiState->SetPlaylistDirectory("playlistmusic://"); return true; } UpdateButtons(); } else if (iControl == CONTROL_SEARCH) { if (m_searchWithEdit) { // search updated - reset timer m_searchTimer.StartZero(); // grab our search string CGUIMessage selected(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_SEARCH); OnMessage(selected); SetProperty("search", selected.GetLabel()); return true; } std::string search(GetProperty("search").asString()); CGUIKeyboardFactory::ShowAndGetFilter(search, true); SetProperty("search", search); return true; } else if (iControl == CONTROL_UPDATE_LIBRARY) { if (!g_application.IsMusicScanning()) g_application.StartMusicScan(""); else g_application.StopMusicScan(); return true; } } break; case GUI_MSG_PLAYBACK_STOPPED: case GUI_MSG_PLAYBACK_ENDED: case GUI_MSG_PLAYLISTPLAYER_STOPPED: case GUI_MSG_PLAYBACK_STARTED: { SET_CONTROL_SELECTED(GetID(),CONTROL_BTNPARTYMODE, g_partyModeManager.IsEnabled()); } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1() == GUI_MSG_SEARCH_UPDATE && IsActive()) { // search updated - reset timer m_searchTimer.StartZero(); SetProperty("search", message.GetStringParam()); } } } return CGUIWindowMusicBase::OnMessage(message); }
bool CGUIMediaWindow::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { m_iSelectedItem = m_viewControl.GetSelectedItem(); m_iLastControl = GetFocusedControlID(); CGUIWindow::OnMessage(message); // Call ClearFileItems() after our window has finished doing any WindowClose // animations ClearFileItems(); return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNVIEWASICONS) { // view as control could be a select button int viewMode = 0; const CGUIControl *control = GetControl(CONTROL_BTNVIEWASICONS); if (control && control->GetControlType() != CGUIControl::GUICONTROL_BUTTON) { CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_BTNVIEWASICONS); OnMessage(msg); viewMode = m_viewControl.GetViewModeNumber(msg.GetParam1()); } else viewMode = m_viewControl.GetNextViewMode(); if (m_guiState.get()) m_guiState->SaveViewAsControl(viewMode); UpdateButtons(); return true; } else if (iControl == CONTROL_BTNSORTASC) // sort asc { if (m_guiState.get()) m_guiState->SetNextSortOrder(); UpdateFileList(); return true; } else if (iControl == CONTROL_BTNSORTBY) // sort by { if (m_guiState.get()) m_guiState->SetNextSortMethod(); UpdateFileList(); return true; } else if (m_viewControl.HasControl(iControl)) // list/thumb control { int iItem = m_viewControl.GetSelectedItem(); int iAction = message.GetParam1(); if (iItem < 0) break; if (iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK) { OnClick(iItem); } else if (iAction == ACTION_CONTEXT_MENU || iAction == ACTION_MOUSE_RIGHT_CLICK) { OnPopupMenu(iItem); return true; } } } break; case GUI_MSG_SETFOCUS: { if (m_viewControl.HasControl(message.GetControlId()) && (DWORD) m_viewControl.GetCurrentControl() != message.GetControlId()) { m_viewControl.SetFocused(); return true; } } break; case GUI_MSG_NOTIFY_ALL: { // Message is received even if this window is inactive if (message.GetParam1() == GUI_MSG_WINDOW_RESET) { m_vecItems->m_strPath = "?"; return true; } else if ( message.GetParam1() == GUI_MSG_REFRESH_THUMBS ) { for (int i = 0; i < m_vecItems->Size(); i++) m_vecItems->Get(i)->FreeMemory(); break; // the window will take care of any info images } else if (message.GetParam1() == GUI_MSG_REMOVED_MEDIA) { if (m_vecItems->IsVirtualDirectoryRoot() && IsActive()) { int iItem = m_viewControl.GetSelectedItem(); Update(m_vecItems->m_strPath); m_viewControl.SetSelectedItem(iItem); } else if (m_vecItems->IsRemovable()) { // check that we have this removable share still if (!m_rootDir.IsInSource(m_vecItems->m_strPath)) { // don't have this share any more if (IsActive()) Update(""); else { m_history.ClearPathHistory(); m_vecItems->m_strPath=""; } } } return true; } else if (message.GetParam1()==GUI_MSG_UPDATE_SOURCES) { // State of the sources changed, so update our view if (m_vecItems->IsVirtualDirectoryRoot() && IsActive()) { int iItem = m_viewControl.GetSelectedItem(); Update(m_vecItems->m_strPath); m_viewControl.SetSelectedItem(iItem); } return true; } else if (message.GetParam1()==GUI_MSG_UPDATE && IsActive()) { if (message.GetStringParam().size()) { m_vecItems->m_strPath = message.GetStringParam(); SetHistoryForPath(m_vecItems->m_strPath); } Update(m_vecItems->m_strPath); } else if (message.GetParam1()==GUI_MSG_UPDATE_ITEM && message.GetItem()) { CFileItemPtr newItem = boost::static_pointer_cast<CFileItem>(message.GetItem()); if (IsActive()) m_vecItems->UpdateItem(newItem.get()); else if (newItem) { // need to remove the disc cache CFileItemList items; CUtil::GetDirectory(newItem->m_strPath, items.m_strPath); items.RemoveDiscCache(); } } else if (message.GetParam1()==GUI_MSG_UPDATE_PATH) { if (message.GetStringParam() == m_vecItems->m_strPath && IsActive()) Update(m_vecItems->m_strPath); } else return CGUIWindow::OnMessage(message); return true; } break; case GUI_MSG_PLAYBACK_STARTED: case GUI_MSG_PLAYBACK_ENDED: case GUI_MSG_PLAYBACK_STOPPED: case GUI_MSG_PLAYLIST_CHANGED: case GUI_MSG_PLAYLISTPLAYER_STOPPED: case GUI_MSG_PLAYLISTPLAYER_STARTED: case GUI_MSG_PLAYLISTPLAYER_CHANGED: { // send a notify all to all controls on this window CGUIMessage msg(GUI_MSG_NOTIFY_ALL, GetID(), 0, GUI_MSG_REFRESH_LIST); OnMessage(msg); break; } case GUI_MSG_CHANGE_VIEW_MODE: { int viewMode = 0; if (message.GetParam1()) // we have an id viewMode = m_viewControl.GetViewModeByID(message.GetParam1()); else if (message.GetParam2()) viewMode = m_viewControl.GetNextViewMode((int)message.GetParam2()); if (m_guiState.get()) m_guiState->SaveViewAsControl(viewMode); UpdateButtons(); return true; } break; case GUI_MSG_CHANGE_SORT_METHOD: { if (m_guiState.get()) { if (message.GetParam1()) m_guiState->SetCurrentSortMethod((int)message.GetParam1()); else if (message.GetParam2()) m_guiState->SetNextSortMethod((int)message.GetParam2()); } UpdateFileList(); return true; } break; case GUI_MSG_CHANGE_SORT_DIRECTION: { if (m_guiState.get()) m_guiState->SetNextSortOrder(); UpdateFileList(); return true; } break; } return CGUIWindow::OnMessage(message); }
bool CGUIWindowAddonBrowser::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { CRepositoryUpdater::GetInstance().Events().Unsubscribe(this); CAddonMgr::GetInstance().Events().Unsubscribe(this); if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); } break; case GUI_MSG_WINDOW_INIT: { CRepositoryUpdater::GetInstance().Events().Subscribe(this, &CGUIWindowAddonBrowser::OnEvent); CAddonMgr::GetInstance().Events().Subscribe(this, &CGUIWindowAddonBrowser::OnEvent); SetProperties(); } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_FOREIGNFILTER) { CServiceBroker::GetSettings().ToggleBool(CSettings::SETTING_GENERAL_ADDONFOREIGNFILTER); CServiceBroker::GetSettings().Save(); Refresh(); return true; } else if (iControl == CONTROL_BROKENFILTER) { CServiceBroker::GetSettings().ToggleBool(CSettings::SETTING_GENERAL_ADDONBROKENFILTER); CServiceBroker::GetSettings().Save(); Refresh(); return true; } else if (iControl == CONTROL_CHECK_FOR_UPDATES) { CRepositoryUpdater::GetInstance().CheckForUpdates(true); return true; } else if (iControl == CONTROL_SETTINGS) { g_windowManager.ActivateWindow(WINDOW_SETTINGS_SYSTEM, "addons"); return true; } else if (m_viewControl.HasControl(iControl)) // list/thumb control { // get selected item int iItem = m_viewControl.GetSelectedItem(); int iAction = message.GetParam1(); // iItem is checked for validity inside these routines if (iAction == ACTION_SHOW_INFO) { if (!m_vecItems->Get(iItem)->GetProperty("Addon.ID").empty()) return CGUIDialogAddonInfo::ShowForItem((*m_vecItems)[iItem]); return false; } } } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1() == GUI_MSG_UPDATE_ITEM && IsActive() && message.GetNumStringParams() == 1) { // update this item for (int i = 0; i < m_vecItems->Size(); ++i) { CFileItemPtr item = m_vecItems->Get(i); if (item->GetProperty("Addon.ID") == message.GetStringParam()) { UpdateStatus(item); FormatAndSort(*m_vecItems); return true; } } } else if (message.GetParam1() == GUI_MSG_UPDATE && IsActive()) SetProperties(); } break; default: break; } return CGUIMediaWindow::OnMessage(message); }
bool CGUIWindowMusicPlaylistEditor::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); if (m_playlistThumbLoader.IsLoading()) m_playlistThumbLoader.StopThread(); CGUIWindowMusicBase::OnMessage(message); return true; case GUI_MSG_WINDOW_INIT: { if (m_vecItems->GetPath() == "?") m_vecItems->SetPath(""); CGUIWindowMusicBase::OnMessage(message); if (message.GetNumStringParams()) LoadPlaylist(message.GetStringParam()); return true; } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1()==GUI_MSG_REMOVED_MEDIA) DeleteRemoveableMediaDirectoryCache(); } break; case GUI_MSG_CLICKED: { int control = message.GetSenderId(); if (control == CONTROL_PLAYLIST) { int item = GetCurrentPlaylistItem(); int action = message.GetParam1(); if (action == ACTION_CONTEXT_MENU || action == ACTION_MOUSE_RIGHT_CLICK) OnPlaylistContext(); else if (action == ACTION_QUEUE_ITEM || action == ACTION_DELETE_ITEM || action == ACTION_MOUSE_MIDDLE_CLICK) OnDeletePlaylistItem(item); else if (action == ACTION_MOVE_ITEM_UP) OnMovePlaylistItem(item, -1); else if (action == ACTION_MOVE_ITEM_DOWN) OnMovePlaylistItem(item, 1); return true; } else if (control == CONTROL_LOAD_PLAYLIST) { // load a playlist OnLoadPlaylist(); return true; } else if (control == CONTROL_SAVE_PLAYLIST) { // save the playlist OnSavePlaylist(); return true; } else if (control == CONTROL_CLEAR_PLAYLIST) { // clear the playlist ClearPlaylist(); return true; } } break; } return CGUIWindowMusicBase::OnMessage(message); }
bool CGUIWindowPictures::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); if (message.GetParam1() != WINDOW_SLIDESHOW) { m_ImageLib.Unload(); } } break; case GUI_MSG_WINDOW_INIT: { // is this the first time accessing this window? if (m_vecItems->GetPath() == "?" && message.GetStringParam().empty()) message.SetStringParam(CMediaSourceSettings::Get().GetDefaultSource("pictures")); m_dlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); if (message.GetParam1() != WINDOW_SLIDESHOW) { m_ImageLib.Load(); } if (!CGUIMediaWindow::OnMessage(message)) return false; return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNSLIDESHOW) // Slide Show { OnSlideShow(); } else if (iControl == CONTROL_BTNSLIDESHOW_RECURSIVE) // Recursive Slide Show { OnSlideShowRecursive(); } else if (iControl == CONTROL_SHUFFLE) { CSettings::Get().ToggleBool("slideshow.shuffle"); CSettings::Get().Save(); } else if (m_viewControl.HasControl(iControl)) // list/thumb control { int iItem = m_viewControl.GetSelectedItem(); int iAction = message.GetParam1(); // iItem is checked for validity inside these routines if (iAction == ACTION_DELETE_ITEM) { // is delete allowed? if (CSettings::Get().GetBool("filelists.allowfiledeletion")) OnDeleteItem(iItem); else return false; } else if (iAction == ACTION_PLAYER_PLAY) { ShowPicture(iItem, true); return true; } else if (iAction == ACTION_SHOW_INFO) { OnInfo(iItem); return true; } } } break; } return CGUIMediaWindow::OnMessage(message); }
bool CGUIWindowMusicNav::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_RESET: m_vecItems->SetPath("?"); break; case GUI_MSG_WINDOW_DEINIT: if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); break; case GUI_MSG_WINDOW_INIT: { /* We don't want to show Autosourced items (ie removable pendrives, memorycards) in Library mode */ m_rootDir.AllowNonLocalSources(false); // is this the first time the window is opened? if (m_vecItems->GetPath() == "?" && message.GetStringParam().IsEmpty()) message.SetStringParam(g_settings.m_defaultMusicLibSource); DisplayEmptyDatabaseMessage(false); // reset message state if (!CGUIWindowMusicBase::OnMessage(message)) return false; // base class has opened the database, do our check DisplayEmptyDatabaseMessage(m_musicdatabase.GetSongsCount() <= 0); if (m_bDisplayEmptyDatabaseMessage) { // no library - make sure we focus on a known control, and default to the root. SET_CONTROL_FOCUS(CONTROL_BTNTYPE, 0); m_vecItems->SetPath(""); SetHistoryForPath(""); Update(""); } return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNPARTYMODE) { if (g_partyModeManager.IsEnabled()) g_partyModeManager.Disable(); else { if (!g_partyModeManager.Enable()) { SET_CONTROL_SELECTED(GetID(),CONTROL_BTNPARTYMODE,false); return false; } // Playlist directory is the root of the playlist window if (m_guiState.get()) m_guiState->SetPlaylistDirectory("playlistmusic://"); return true; } UpdateButtons(); } else if (iControl == CONTROL_BTNMANUALINFO) { OnManualAlbumInfo(); return true; } else if (iControl == CONTROL_SEARCH) { if (m_searchWithEdit) { // search updated - reset timer m_searchTimer.StartZero(); // grab our search string CGUIMessage selected(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_SEARCH); OnMessage(selected); SetProperty("search", selected.GetLabel()); return true; } CStdString search(GetProperty("search")); CGUIDialogKeyboard::ShowAndGetFilter(search, true); SetProperty("search", search); return true; } } break; case GUI_MSG_PLAYBACK_STOPPED: case GUI_MSG_PLAYBACK_ENDED: case GUI_MSG_PLAYLISTPLAYER_STOPPED: case GUI_MSG_PLAYBACK_STARTED: { SET_CONTROL_SELECTED(GetID(),CONTROL_BTNPARTYMODE, g_partyModeManager.IsEnabled()); } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1() == GUI_MSG_SEARCH_UPDATE && IsActive()) { // search updated - reset timer m_searchTimer.StartZero(); SetProperty("search", message.GetStringParam()); } } } return CGUIWindowMusicBase::OnMessage(message); }
bool CGUIDialogFileBrowser::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); CGUIDialog::OnMessage(message); ClearFileItems(); m_addNetworkShareEnabled = false; return true; } break; case GUI_MSG_WINDOW_INIT: { m_bConfirmed = false; m_bFlip = false; bool bIsDir = false; // this code allows two different selection modes for directories // end the path with a slash to start inside the directory if (URIUtils::HasSlashAtEnd(m_selectedPath)) { bIsDir = true; bool bFool; int iSource = CUtil::GetMatchingSource(m_selectedPath,m_shares,bFool); bFool = true; if (iSource > -1 && iSource < (int)m_shares.size()) { if (URIUtils::PathEquals(m_shares[iSource].strPath, m_selectedPath)) bFool = false; } if (bFool && !CDirectory::Exists(m_selectedPath)) m_selectedPath.clear(); } else { if (!CFile::Exists(m_selectedPath) && !CDirectory::Exists(m_selectedPath)) m_selectedPath.clear(); } // find the parent folder if we are a file browser (don't do this for folders) m_Directory->SetPath(m_selectedPath); if (!m_browsingForFolders && !bIsDir) m_Directory->SetPath(URIUtils::GetParentPath(m_selectedPath)); Update(m_Directory->GetPath()); m_viewControl.SetSelectedItem(m_selectedPath); return CGUIDialog::OnMessage(message); } break; case GUI_MSG_CLICKED: { if (m_viewControl.HasControl(message.GetSenderId())) // list control { int iItem = m_viewControl.GetSelectedItem(); int iAction = message.GetParam1(); if (iItem < 0) break; CFileItemPtr pItem = (*m_vecItems)[iItem]; if ((iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK) && (!m_multipleSelection || pItem->m_bIsShareOrDrive || pItem->m_bIsFolder)) { OnClick(iItem); return true; } else if ((iAction == ACTION_HIGHLIGHT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK || iAction == ACTION_SELECT_ITEM) && (m_multipleSelection && !pItem->m_bIsShareOrDrive && !pItem->m_bIsFolder)) { pItem->Select(!pItem->IsSelected()); CGUIMessage msg(GUI_MSG_ITEM_SELECT, GetID(), message.GetSenderId(), iItem + 1); OnMessage(msg); } } else if (message.GetSenderId() == CONTROL_OK) { if (m_browsingForFolders == 2) { int iItem = m_viewControl.GetSelectedItem(); std::string strPath; if (iItem == 0) strPath = m_selectedPath; else strPath = (*m_vecItems)[iItem]->GetPath(); std::string strTest = URIUtils::AddFileToFolder(strPath, "1"); CFile file; if (file.OpenForWrite(strTest,true)) { file.Close(); CFile::Delete(strTest); m_bConfirmed = true; Close(); } else HELPERS::ShowOKDialogText(CVariant{257}, CVariant{20072}); } else { if (m_multipleSelection) { for (int iItem = 0; iItem < m_vecItems->Size(); ++iItem) { CFileItemPtr pItem = (*m_vecItems)[iItem]; if (pItem->IsSelected()) m_markedPath.push_back(pItem->GetPath()); } } m_bConfirmed = true; Close(); } return true; } else if (message.GetSenderId() == CONTROL_CANCEL) { Close(); return true; } else if (message.GetSenderId() == CONTROL_NEWFOLDER) { std::string strInput; if (CGUIKeyboardFactory::ShowAndGetInput(strInput, CVariant{g_localizeStrings.Get(119)}, false)) { std::string strPath = URIUtils::AddFileToFolder(m_vecItems->GetPath(), strInput); if (CDirectory::Create(strPath)) Update(m_vecItems->GetPath()); else HELPERS::ShowOKDialogText(CVariant{20069}, CVariant{20072}); } } else if (message.GetSenderId() == CONTROL_FLIP) m_bFlip = !m_bFlip; } break; case GUI_MSG_SETFOCUS: { if (m_viewControl.HasControl(message.GetControlId()) && m_viewControl.GetCurrentControl() != message.GetControlId()) { m_viewControl.SetFocused(); return true; } } break; case GUI_MSG_NOTIFY_ALL: { // Message is received only if this window is active if (message.GetParam1() == GUI_MSG_REMOVED_MEDIA) { if (m_Directory->IsVirtualDirectoryRoot() && IsActive()) { int iItem = m_viewControl.GetSelectedItem(); Update(m_Directory->GetPath()); m_viewControl.SetSelectedItem(iItem); } else if (m_Directory->IsRemovable()) { // check that we have this removable share still if (!m_rootDir.IsInSource(m_Directory->GetPath())) { // don't have this share any more if (IsActive()) Update(""); else { m_history.ClearPathHistory(); m_Directory->SetPath(""); } } } return true; } else if (message.GetParam1()==GUI_MSG_UPDATE_SOURCES) { // State of the sources changed, so update our view if (m_Directory->IsVirtualDirectoryRoot() && IsActive()) { int iItem = m_viewControl.GetSelectedItem(); Update(m_Directory->GetPath()); m_viewControl.SetSelectedItem(iItem); } return true; } else if (message.GetParam1()==GUI_MSG_UPDATE_PATH) { if (IsActive()) { if((message.GetStringParam() == m_Directory->GetPath()) || (m_Directory->IsMultiPath() && XFILE::CMultiPathDirectory::HasPath(m_Directory->GetPath(), message.GetStringParam()))) { int iItem = m_viewControl.GetSelectedItem(); Update(m_Directory->GetPath()); m_viewControl.SetSelectedItem(iItem); } } } } break; } return CGUIDialog::OnMessage(message); }
bool CGUIWindowVideoNav::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_RESET: m_vecItems->SetPath(""); break; case GUI_MSG_WINDOW_DEINIT: if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); break; case GUI_MSG_WINDOW_INIT: { /* We don't want to show Autosourced items (ie removable pendrives, memorycards) in Library mode */ m_rootDir.AllowNonLocalSources(false); SetProperty("flattened", CServiceBroker::GetSettings().GetBool(CSettings::SETTING_MYVIDEOS_FLATTEN)); if (message.GetNumStringParams() && StringUtils::EqualsNoCase(message.GetStringParam(0), "Files") && CMediaSourceSettings::GetInstance().GetSources("video")->empty()) { message.SetStringParam(""); } if (!CGUIWindowVideoBase::OnMessage(message)) return false; // This needs to be done again, because the initialization of CGUIWindow overwrites it with default values // Mostly affects cases where GUIWindowVideoNav is constructed and we're already in a show, e.g. entering from the homescreen SelectFirstUnwatched(); return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNPARTYMODE) { if (g_partyModeManager.IsEnabled()) g_partyModeManager.Disable(); else { if (!g_partyModeManager.Enable(PARTYMODECONTEXT_VIDEO)) { SET_CONTROL_SELECTED(GetID(),CONTROL_BTNPARTYMODE,false); return false; } // Playlist directory is the root of the playlist window if (m_guiState.get()) m_guiState->SetPlaylistDirectory("playlistvideo://"); return true; } UpdateButtons(); } if (iControl == CONTROL_BTNSEARCH) { OnSearch(); } else if (iControl == CONTROL_BTNSHOWMODE) { CMediaSettings::GetInstance().CycleWatchedMode(m_vecItems->GetContent()); CServiceBroker::GetSettings().Save(); OnFilterItems(GetProperty("filter").asString()); UpdateButtons(); return true; } else if (iControl == CONTROL_BTNSHOWALL) { if (CMediaSettings::GetInstance().GetWatchedMode(m_vecItems->GetContent()) == WatchedModeAll) CMediaSettings::GetInstance().SetWatchedMode(m_vecItems->GetContent(), WatchedModeUnwatched); else CMediaSettings::GetInstance().SetWatchedMode(m_vecItems->GetContent(), WatchedModeAll); CServiceBroker::GetSettings().Save(); OnFilterItems(GetProperty("filter").asString()); UpdateButtons(); return true; } else if (iControl == CONTROL_UPDATE_LIBRARY) { if (!g_application.IsVideoScanning()) OnScan(""); else g_application.StopVideoScan(); return true; } } break; // update the display case GUI_MSG_REFRESH_THUMBS: Refresh(); break; } return CGUIWindowVideoBase::OnMessage(message); }
bool CGUIWindowScreensaver::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { CSingleLock lock (m_critSection); #ifdef HAS_SCREENSAVER if (m_addon) { m_addon->Stop(); g_graphicsContext.ApplyStateBlock(); m_addon->Destroy(); m_addon.reset(); } #endif m_bInitialized = false; // remove z-buffer // RESOLUTION res = g_graphicsContext.GetVideoResolution(); // g_graphicsContext.SetVideoResolution(res, FALSE); // enable the overlay g_windowManager.ShowOverlay(OVERLAY_STATE_SHOWN); } break; case GUI_MSG_WINDOW_INIT: { CGUIWindow::OnMessage(message); CSingleLock lock (m_critSection); #ifdef HAS_SCREENSAVER assert(!m_addon); m_bInitialized = false; std::string addonID = message.GetStringParam(0); if (addonID.empty()) addonID = CSettings::Get().GetString("screensaver.mode"); m_addon.reset(); // Setup new screensaver instance AddonPtr addon; if (!CAddonMgr::Get().GetAddon(addonID, addon, ADDON_SCREENSAVER)) return false; m_addon = std::dynamic_pointer_cast<CScreenSaver>(addon); if (!m_addon) return false; g_graphicsContext.CaptureStateBlock(); m_addon->CreateScreenSaver(); #endif // setup a z-buffer // RESOLUTION res = g_graphicsContext.GetVideoResolution(); // g_graphicsContext.SetVideoResolution(res, TRUE); // disable the overlay g_windowManager.ShowOverlay(OVERLAY_STATE_HIDDEN); return true; } case GUI_MSG_CHECK_LOCK: if (!g_passwordManager.IsProfileLockUnlocked()) { g_application.m_iScreenSaveLock = -1; return false; } g_application.m_iScreenSaveLock = 1; return true; } return CGUIWindow::OnMessage(message); }
bool CGUIWindowSlideShow::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_INIT: { m_Resolution = (RESOLUTION) CSettings::GetInstance().GetInt(CSettings::SETTING_PICTURES_DISPLAYRESOLUTION); //FIXME: Use GUI resolution for now if (0 /*m_Resolution != CDisplaySettings::GetInstance().GetCurrentResolution() && m_Resolution != INVALID && m_Resolution!=AUTORES*/) g_graphicsContext.SetVideoResolution(m_Resolution); else m_Resolution = g_graphicsContext.GetVideoResolution(); CGUIDialog::OnMessage(message); // turn off slideshow if we only have 1 image if (m_slides.size() <= 1) m_bSlideShow = false; return true; } break; case GUI_MSG_SHOW_PICTURE: { std::string strFile = message.GetStringParam(); Reset(); CFileItem item(strFile, false); Add(&item); RunSlideShow("", false, false, true, "", false); } break; case GUI_MSG_START_SLIDESHOW: { std::string strFolder = message.GetStringParam(); unsigned int iParams = message.GetParam1(); std::string beginSlidePath = message.GetStringParam(1); //decode params bool bRecursive = false; bool bRandom = false; bool bNotRandom = false; bool bPause = false; if (iParams > 0) { if ((iParams & 1) == 1) bRecursive = true; if ((iParams & 2) == 2) bRandom = true; if ((iParams & 4) == 4) bNotRandom = true; if ((iParams & 8) == 8) bPause = true; } RunSlideShow(strFolder, bRecursive, bRandom, bNotRandom, beginSlidePath, !bPause); } break; case GUI_MSG_PLAYLISTPLAYER_STOPPED: { } break; case GUI_MSG_PLAYBACK_STOPPED: { if (m_bPlayingVideo) { m_bPlayingVideo = false; if (m_bSlideShow) m_bPause = true; } } break; case GUI_MSG_PLAYBACK_ENDED: { if (m_bPlayingVideo) { m_bPlayingVideo = false; if (m_bSlideShow) { m_bPause = false; if (m_iCurrentSlide == m_iNextSlide) break; m_Image[m_iCurrentPic].Close(); m_iCurrentPic = 1 - m_iCurrentPic; m_iCurrentSlide = m_iNextSlide; m_iNextSlide = GetNextSlide(); AnnouncePlayerPlay(m_slides.at(m_iCurrentSlide)); m_iZoomFactor = 1; m_fZoom = 1.0f; m_fRotate = 0.0f; } } } break; } return CGUIDialog::OnMessage(message); }
bool CGUIWindowAddonBrowser::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); } break; case GUI_MSG_WINDOW_INIT: { m_rootDir.AllowNonLocalSources(false); // is this the first time the window is opened? if (m_vecItems->GetPath() == "?" && message.GetStringParam().IsEmpty()) m_vecItems->SetPath(""); } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_AUTOUPDATE) { CSettings::Get().ToggleBool("general.addonautoupdate"); return true; } else if (iControl == CONTROL_SHUTUP) { CSettings::Get().ToggleBool("general.addonnotifications"); CSettings::Get().Save(); return true; } else if (iControl == CONTROL_FOREIGNFILTER) { CSettings::Get().ToggleBool("general.addonforeignfilter"); CSettings::Get().Save(); Refresh(); return true; } else if (m_viewControl.HasControl(iControl)) // list/thumb control { // get selected item int iItem = m_viewControl.GetSelectedItem(); int iAction = message.GetParam1(); // iItem is checked for validity inside these routines if (iAction == ACTION_SHOW_INFO) { if (!m_vecItems->Get(iItem)->GetProperty("Addon.ID").empty()) return CGUIDialogAddonInfo::ShowForItem((*m_vecItems)[iItem]); return false; } } } break; case GUI_MSG_NOTIFY_ALL: { if (message.GetParam1() == GUI_MSG_UPDATE_ITEM && IsActive() && message.GetNumStringParams() == 1) { // update this item for (int i = 0; i < m_vecItems->Size(); ++i) { CFileItemPtr item = m_vecItems->Get(i); if (item->GetProperty("Addon.ID") == message.GetStringParam()) { SetItemLabel2(item); return true; } } } } break; default: break; } return CGUIMediaWindow::OnMessage(message); }
bool CGUIMediaWindow::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { m_iSelectedItem = m_viewControl.GetSelectedItem(); m_iLastControl = GetFocusedControlID(); CGUIWindow::OnMessage(message); // Call ClearFileItems() after our window has finished doing any WindowClose // animations ClearFileItems(); return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNVIEWASICONS) { // view as control could be a select button int viewMode = 0; const CGUIControl *control = GetControl(CONTROL_BTNVIEWASICONS); if (control && control->GetControlType() != CGUIControl::GUICONTROL_BUTTON) { CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_BTNVIEWASICONS); OnMessage(msg); viewMode = m_viewControl.GetViewModeNumber(msg.GetParam1()); } else viewMode = m_viewControl.GetNextViewMode(); if (m_guiState.get()) m_guiState->SaveViewAsControl(viewMode); UpdateButtons(); return true; } else if (iControl == CONTROL_BTNSORTASC) // sort asc { if (m_guiState.get()) m_guiState->SetNextSortOrder(); UpdateFileList(); return true; } else if (iControl == CONTROL_BTNSORTBY) // sort by { if (m_guiState.get()) m_guiState->SetNextSortMethod(); UpdateFileList(); return true; } else if (iControl == CONTROL_BTN_FILTER) { if (GetControl(iControl)->GetControlType() == CGUIControl::GUICONTROL_EDIT) { // filter updated CGUIMessage selected(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_BTN_FILTER); OnMessage(selected); OnFilterItems(selected.GetLabel()); return true; } if (GetProperty("filter").empty()) { CStdString filter = GetProperty("filter").asString(); CGUIDialogKeyboard::ShowAndGetFilter(filter, false); SetProperty("filter", filter); } else OnFilterItems(""); return true; } else if (m_viewControl.HasControl(iControl)) // list/thumb control { int iItem = m_viewControl.GetSelectedItem(); int iAction = message.GetParam1(); if (iItem < 0) break; if (iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK) { OnSelect(iItem); } else if (iAction == ACTION_CONTEXT_MENU || iAction == ACTION_MOUSE_RIGHT_CLICK) { OnPopupMenu(iItem); return true; } } } break; case GUI_MSG_SETFOCUS: { if (m_viewControl.HasControl(message.GetControlId()) && m_viewControl.GetCurrentControl() != message.GetControlId()) { m_viewControl.SetFocused(); return true; } } break; case GUI_MSG_NOTIFY_ALL: { // Message is received even if this window is inactive if (message.GetParam1() == GUI_MSG_WINDOW_RESET) { m_vecItems->SetPath("?"); return true; } else if ( message.GetParam1() == GUI_MSG_REFRESH_THUMBS ) { for (int i = 0; i < m_vecItems->Size(); i++) m_vecItems->Get(i)->FreeMemory(true); break; // the window will take care of any info images } else if (message.GetParam1() == GUI_MSG_REMOVED_MEDIA) { if ((m_vecItems->IsVirtualDirectoryRoot() || m_vecItems->IsSourcesPath()) && IsActive()) { int iItem = m_viewControl.GetSelectedItem(); Update(m_vecItems->GetPath()); m_viewControl.SetSelectedItem(iItem); } else if (m_vecItems->IsRemovable()) { // check that we have this removable share still if (!m_rootDir.IsInSource(m_vecItems->GetPath())) { // don't have this share any more if (IsActive()) Update(""); else { m_history.ClearPathHistory(); m_vecItems->SetPath(""); } } } return true; } else if (message.GetParam1()==GUI_MSG_UPDATE_SOURCES) { // State of the sources changed, so update our view if ((m_vecItems->IsVirtualDirectoryRoot() || m_vecItems->IsSourcesPath()) && IsActive()) { int iItem = m_viewControl.GetSelectedItem(); Update(m_vecItems->GetPath()); m_viewControl.SetSelectedItem(iItem); } return true; } else if (message.GetParam1()==GUI_MSG_UPDATE && IsActive()) { if (message.GetNumStringParams()) { m_vecItems->SetPath(message.GetStringParam()); if (message.GetParam2()) // param2 is used for resetting the history SetHistoryForPath(m_vecItems->GetPath()); } // clear any cached listing m_vecItems->RemoveDiscCache(GetID()); Update(m_vecItems->GetPath()); } else if (message.GetParam1()==GUI_MSG_UPDATE_ITEM && message.GetItem()) { CFileItemPtr newItem = boost::static_pointer_cast<CFileItem>(message.GetItem()); if (IsActive()) { if (m_vecItems->UpdateItem(newItem.get()) && message.GetParam2() == 1) { // need the list updated as well UpdateFileList(); } } else if (newItem) { // need to remove the disc cache CFileItemList items; CStdString path; URIUtils::GetDirectory(newItem->GetPath(), path); items.SetPath(path); items.RemoveDiscCache(GetID()); } } else if (message.GetParam1()==GUI_MSG_UPDATE_PATH) { if (IsActive()) { if((message.GetStringParam() == m_vecItems->GetPath()) || (m_vecItems->IsMultiPath() && XFILE::CMultiPathDirectory::HasPath(m_vecItems->GetPath(), message.GetStringParam()))) { Update(m_vecItems->GetPath()); } } } else if (message.GetParam1() == GUI_MSG_FILTER_ITEMS && IsActive()) { CStdString filter(GetProperty("filter").asString()); if (message.GetParam2() == 1) // append filter += message.GetStringParam(); else if (message.GetParam2() == 2) { // delete if (filter.size()) filter = filter.Left(filter.size() - 1); } else filter = message.GetStringParam(); OnFilterItems(filter); return true; } else return CGUIWindow::OnMessage(message); return true; } break; case GUI_MSG_PLAYBACK_STARTED: case GUI_MSG_PLAYBACK_ENDED: case GUI_MSG_PLAYBACK_STOPPED: case GUI_MSG_PLAYLIST_CHANGED: case GUI_MSG_PLAYLISTPLAYER_STOPPED: case GUI_MSG_PLAYLISTPLAYER_STARTED: case GUI_MSG_PLAYLISTPLAYER_CHANGED: { // send a notify all to all controls on this window CGUIMessage msg(GUI_MSG_NOTIFY_ALL, GetID(), 0, GUI_MSG_REFRESH_LIST); OnMessage(msg); break; } case GUI_MSG_CHANGE_VIEW_MODE: { int viewMode = 0; if (message.GetParam1()) // we have an id viewMode = m_viewControl.GetViewModeByID(message.GetParam1()); else if (message.GetParam2()) viewMode = m_viewControl.GetNextViewMode((int)message.GetParam2()); if (m_guiState.get()) m_guiState->SaveViewAsControl(viewMode); UpdateButtons(); return true; } break; case GUI_MSG_CHANGE_SORT_METHOD: { if (m_guiState.get()) { if (message.GetParam1()) m_guiState->SetCurrentSortMethod((int)message.GetParam1()); else if (message.GetParam2()) m_guiState->SetNextSortMethod((int)message.GetParam2()); } UpdateFileList(); return true; } break; case GUI_MSG_CHANGE_SORT_DIRECTION: { if (m_guiState.get()) m_guiState->SetNextSortOrder(); UpdateFileList(); return true; } break; case GUI_MSG_WINDOW_INIT: { if (m_vecItems->GetPath() == "?") m_vecItems->SetPath(""); CStdString dir = message.GetStringParam(0); const CStdString &ret = message.GetStringParam(1); bool returning = ret.CompareNoCase("return") == 0; if (!dir.IsEmpty()) { m_history.ClearPathHistory(); // ensure our directory is valid dir = GetStartFolder(dir); if (!returning || m_vecItems->GetPath().Left(dir.GetLength()) != dir) { // we're not returning to the same path, so set our directory to the requested path m_vecItems->SetPath(dir); } // check for network up if (URIUtils::IsRemote(m_vecItems->GetPath()) && !WaitForNetwork()) m_vecItems->SetPath(""); SetHistoryForPath(m_vecItems->GetPath()); } if (message.GetParam1() != WINDOW_INVALID) { // first time to this window - make sure we set the root path m_startDirectory = returning ? dir : ""; } } break; } return CGUIWindow::OnMessage(message); }
bool CGUIWindowBoxeeBrowseMovies::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_UPDATE: { if (message.GetSenderId() == WINDOW_INVALID && message.GetControlId() == GUI_MSG_MEDIA_CHANNELS_UPDATE) { //CBoxeeBrowseMenuManager::GetInstance().ClearMenu("mn_library_movies_providers"); return true; } } break; case GUI_MSG_UPDATE_ITEM: { CStdString param = message.GetStringParam(); if (param == "MarkAsWatched") { if (message.GetSenderId() == WINDOW_BOXEE_BROWSE_MOVIES) { CStdString itemId = message.GetStringParam(1); if (itemId.IsEmpty()) { CLog::Log(LOGWARNING,"CGUIWindowBoxeeBrowseMovies::OnMessage - GUI_MSG_UPDATE_ITEM - FAILED to mark item as watched since itemId is EMPTY. [itemId=%s] (browse)",itemId.c_str()); return false; } CStdString watchedType = message.GetStringParam(2); if (watchedType.IsEmpty()) { CLog::Log(LOGWARNING,"CGUIWindowBoxeeBrowseMovies::OnMessage - GUI_MSG_UPDATE_ITEM - FAILED to mark item as watched since watchedType is EMPTY. [watchedType=%s] (browse)",watchedType.c_str()); return false; } CFileItemPtr pItem = m_viewItemsIndex[itemId]; if (!pItem.get()) { CLog::Log(LOGWARNING,"CGUIWindowBoxeeBrowseMovies::OnMessage - GUI_MSG_UPDATE_ITEM - FAILED to mark item as watched since there is NO item for [itemId=%s] (browse)",itemId.c_str()); return false; } pItem->SetProperty("watched", (watchedType == "1") ? true : false); return true; } } } break; case GUI_MSG_CLICKED: { int control = message.GetControlId(); int sender = message.GetSenderId(); CLog::Log(LOGDEBUG,"CGUIWindowBoxeeBrowseMovies::OnMessage - GUI_MSG_CLICKED - [control=%d][sender=%d][BrowseMenuLevel1=%d][BrowseMenuLevel2=%d][BrowseMenuLevel3=%d] (bm)",control,sender,g_settings.GetSkinBool(g_settings.TranslateSkinBool("browsemenulevel1")),g_settings.GetSkinBool(g_settings.TranslateSkinBool("browsemenulevel2")),g_settings.GetSkinBool(g_settings.TranslateSkinBool("browsemenulevel3"))); } break; case GUI_MSG_LABEL_BIND: { int saveFocusedControl = GetFocusedControlID(); bool retVal = CGUIWindowBoxeeBrowseTvShows::OnMessage(message); if (GetPropertyBOOL(ITEMS_FILTERED_OUT_PROPERTY)) { SET_CONTROL_FOCUS(saveFocusedControl,0); } return retVal; } break; } return CGUIWindowBoxeeBrowseTvShows::OnMessage(message); }