bool CGUIDialogVideoBookmarks::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { CUtil::DeleteVideoDatabaseDirectoryCache(); Clear(); } break; case GUI_MSG_WINDOW_INIT: { CGUIWindow::OnMessage(message); Update(); return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_ADD_BOOKMARK) { AddBookmark(); Update(); } else if (iControl == CONTROL_CLEAR_BOOKMARKS) { ClearBookmarks(); } else if (iControl == CONTROL_ADD_EPISODE_BOOKMARK) { AddEpisodeBookmark(); Update(); } else if (m_viewControl.HasControl(iControl)) // list/thumb control { int iItem = m_viewControl.GetSelectedItem(); int iAction = message.GetParam1(); if (iAction == ACTION_DELETE_ITEM) { Delete(iItem); } else if (iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK) { GotoBookmark(iItem); } } } 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_REFRESH_LIST: { OnRefreshList(); } break; } return CGUIDialog::OnMessage(message); }
bool CGUIWindowVideoPlaylist::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_PLAYLISTPLAYER_REPEAT: { UpdateButtons(); } break; case GUI_MSG_PLAYLISTPLAYER_RANDOM: case GUI_MSG_PLAYLIST_CHANGED: { // global playlist changed outside playlist window UpdateButtons(); Refresh(true); if (m_viewControl.HasControl(m_iLastControl) && m_vecItems->Size() <= 0) { m_iLastControl = CONTROL_BTNVIEWASICONS; SET_CONTROL_FOCUS(m_iLastControl, 0); } } break; case GUI_MSG_WINDOW_DEINIT: { m_movingFrom = -1; } break; case GUI_MSG_WINDOW_INIT: { m_vecItems->SetPath("playlistvideo://"); if (!CGUIWindowVideoBase::OnMessage(message)) return false; if (m_vecItems->Size() <= 0) { m_iLastControl = CONTROL_BTNVIEWASICONS; SET_CONTROL_FOCUS(m_iLastControl, 0); } if (g_application.IsPlayingVideo() && g_playlistPlayer.GetCurrentPlaylist() == PLAYLIST_VIDEO) { int iSong = g_playlistPlayer.GetCurrentSong(); if (iSong >= 0 && iSong <= (int)m_vecItems->Size()) m_viewControl.SetSelectedItem(iSong); } return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNSHUFFLE) { if (!g_partyModeManager.IsEnabled()) { g_playlistPlayer.SetShuffle(PLAYLIST_VIDEO, !(g_playlistPlayer.IsShuffled(PLAYLIST_VIDEO))); g_settings.m_bMyVideoPlaylistShuffle = g_playlistPlayer.IsShuffled(PLAYLIST_VIDEO); g_settings.Save(); UpdateButtons(); Refresh(); } } else if (iControl == CONTROL_BTNSAVE) { SavePlayList(); } else if (iControl == CONTROL_BTNCLEAR) { ClearPlayList(); } else if (iControl == CONTROL_BTNPLAY) { g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_VIDEO); g_playlistPlayer.Reset(); g_playlistPlayer.Play(m_viewControl.GetSelectedItem()); UpdateButtons(); } else if (iControl == CONTROL_BTNNEXT) { g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_VIDEO); g_playlistPlayer.PlayNext(); } else if (iControl == CONTROL_BTNPREVIOUS) { g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_VIDEO); g_playlistPlayer.PlayPrevious(); } else if (iControl == CONTROL_BTNREPEAT) { // increment repeat state PLAYLIST::REPEAT_STATE state = g_playlistPlayer.GetRepeat(PLAYLIST_VIDEO); if (state == PLAYLIST::REPEAT_NONE) g_playlistPlayer.SetRepeat(PLAYLIST_VIDEO, PLAYLIST::REPEAT_ALL); else if (state == PLAYLIST::REPEAT_ALL) g_playlistPlayer.SetRepeat(PLAYLIST_VIDEO, PLAYLIST::REPEAT_ONE); else g_playlistPlayer.SetRepeat(PLAYLIST_VIDEO, PLAYLIST::REPEAT_NONE); // save settings g_settings.m_bMyVideoPlaylistRepeat = g_playlistPlayer.GetRepeat(PLAYLIST_VIDEO) == PLAYLIST::REPEAT_ALL; g_settings.Save(); UpdateButtons(); } else if (m_viewControl.HasControl(iControl)) // list/thumb control { int iAction = message.GetParam1(); int iItem = m_viewControl.GetSelectedItem(); if (iAction == ACTION_DELETE_ITEM || iAction == ACTION_MOUSE_MIDDLE_CLICK) { RemovePlayListItem(iItem); MarkPlaying(); } } } break; } return CGUIWindowVideoBase::OnMessage(message); }
bool CGUIWindowMusicPlayList::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_PLAYLISTPLAYER_REPEAT: { UpdateButtons(); } break; case GUI_MSG_PLAYLISTPLAYER_RANDOM: case GUI_MSG_PLAYLIST_CHANGED: { // global playlist changed outside playlist window m_vecItems->RemoveDiscCache(GetID()); UpdateButtons(); Update(m_vecItems->GetPath()); if (m_viewControl.HasControl(m_iLastControl) && m_vecItems->Size() <= 0) { m_iLastControl = CONTROL_BTNVIEWASICONS; SET_CONTROL_FOCUS(m_iLastControl, 0); } } break; case GUI_MSG_WINDOW_DEINIT: { if (m_musicInfoLoader.IsLoading()) m_musicInfoLoader.StopThread(); m_movingFrom = -1; } break; case GUI_MSG_WINDOW_INIT: { // Setup item cache for tagloader m_musicInfoLoader.UseCacheOnHD("special://temp/MusicPlaylist.fi"); m_vecItems->SetPath("playlistmusic://"); // updatebuttons is called in here if (!CGUIWindowMusicBase::OnMessage(message)) return false; if (m_vecItems->Size() <= 0) { m_iLastControl = CONTROL_BTNVIEWASICONS; SET_CONTROL_FOCUS(m_iLastControl, 0); } if (g_application.IsPlayingAudio() && g_playlistPlayer.GetCurrentPlaylist() == PLAYLIST_MUSIC) { int iSong = g_playlistPlayer.GetCurrentSong(); if (iSong >= 0 && iSong <= m_vecItems->Size()) m_viewControl.SetSelectedItem(iSong); } return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTNSHUFFLE) { if (!g_partyModeManager.IsEnabled()) { g_playlistPlayer.SetShuffle(PLAYLIST_MUSIC, !(g_playlistPlayer.IsShuffled(PLAYLIST_MUSIC))); g_settings.m_bMyMusicPlaylistShuffle = g_playlistPlayer.IsShuffled(PLAYLIST_MUSIC); g_settings.Save(); UpdateButtons(); Update(m_vecItems->GetPath()); } } else if (iControl == CONTROL_BTNSAVE) { if (m_musicInfoLoader.IsLoading()) // needed since we destroy m_vecitems to save memory m_musicInfoLoader.StopThread(); SavePlayList(); } else if (iControl == CONTROL_BTNCLEAR) { if (m_musicInfoLoader.IsLoading()) m_musicInfoLoader.StopThread(); ClearPlayList(); } else if (iControl == CONTROL_BTNPLAY) { m_guiState->SetPlaylistDirectory("playlistmusic://"); g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_MUSIC); g_playlistPlayer.Reset(); g_playlistPlayer.Play(m_viewControl.GetSelectedItem()); UpdateButtons(); } else if (iControl == CONTROL_BTNNEXT) { g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_MUSIC); g_playlistPlayer.PlayNext(); } else if (iControl == CONTROL_BTNPREVIOUS) { g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_MUSIC); g_playlistPlayer.PlayPrevious(); } else if (iControl == CONTROL_BTNREPEAT) { // increment repeat state PLAYLIST::REPEAT_STATE state = g_playlistPlayer.GetRepeat(PLAYLIST_MUSIC); if (state == PLAYLIST::REPEAT_NONE) g_playlistPlayer.SetRepeat(PLAYLIST_MUSIC, PLAYLIST::REPEAT_ALL); else if (state == PLAYLIST::REPEAT_ALL) g_playlistPlayer.SetRepeat(PLAYLIST_MUSIC, PLAYLIST::REPEAT_ONE); else g_playlistPlayer.SetRepeat(PLAYLIST_MUSIC, PLAYLIST::REPEAT_NONE); // save settings g_settings.m_bMyMusicPlaylistRepeat = g_playlistPlayer.GetRepeat(PLAYLIST_MUSIC) == PLAYLIST::REPEAT_ALL; g_settings.Save(); UpdateButtons(); } else if (m_viewControl.HasControl(iControl)) { int iAction = message.GetParam1(); int iItem = m_viewControl.GetSelectedItem(); if (iAction == ACTION_DELETE_ITEM || iAction == ACTION_MOUSE_MIDDLE_CLICK) { RemovePlayListItem(iItem); MarkPlaying(); } } } 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_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 (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 CGUIWindow::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_LOAD: { Initialize(); return true; } break; case GUI_MSG_WINDOW_INIT: { CLog::Log(LOGDEBUG, "------ Window Init (%s) ------", GetProperty("xmlfile").c_str()); if (m_dynamicResourceAlloc || !m_bAllocated) AllocResources(); OnInitWindow(); return true; } break; case GUI_MSG_WINDOW_DEINIT: { CLog::Log(LOGDEBUG, "------ Window Deinit (%s) ------", GetProperty("xmlfile").c_str()); OnDeinitWindow(message.GetParam1()); // now free the window if (m_dynamicResourceAlloc) FreeResources(); return true; } break; case GUI_MSG_CLICKED: { // a specific control was clicked CLICK_EVENT clickEvent = m_mapClickEvents[ message.GetSenderId() ]; // determine if there are any handlers for this event if (clickEvent.HasAHandler()) { // fire the message to all handlers clickEvent.Fire(message); } break; } case GUI_MSG_UNFOCUS_ALL: { //unfocus the current focused control in this window CGUIControl *control = GetFocusedControl(); if(control) { //tell focused control that it has lost the focus CGUIMessage msgLostFocus(GUI_MSG_LOSTFOCUS, GetID(), control->GetID(), control->GetID()); control->OnMessage(msgLostFocus); CLog::Log(LOGDEBUG, "Unfocus WindowID: %i, ControlID: %i",GetID(), control->GetID()); } return true; } case GUI_MSG_SELCHANGED: { // a selection within a specific control has changed SELECTED_EVENT selectedEvent = m_mapSelectedEvents[ message.GetSenderId() ]; // determine if there are any handlers for this event if (selectedEvent.HasAHandler()) { // fire the message to all handlers selectedEvent.Fire(message); } break; } case GUI_MSG_FOCUSED: { // a control has been focused if (HasID(message.GetSenderId())) { m_focusedControl = message.GetControlId(); return true; } break; } case GUI_MSG_LOSTFOCUS: { // nothing to do at the window level when we lose focus return true; } case GUI_MSG_MOVE: { if (HasID(message.GetSenderId())) return OnMove(message.GetControlId(), message.GetParam1()); break; } case GUI_MSG_SETFOCUS: { // CLog::Log(LOGDEBUG,"set focus to control:%i window:%i (%i)\n", message.GetControlId(),message.GetSenderId(), GetID()); if ( message.GetControlId() ) { // first unfocus the current control CGUIControl *control = GetFocusedControl(); if (control) { CGUIMessage msgLostFocus(GUI_MSG_LOSTFOCUS, GetID(), control->GetID(), message.GetControlId()); control->OnMessage(msgLostFocus); } // get the control to focus CGUIControl* pFocusedControl = GetFirstFocusableControl(message.GetControlId()); if (!pFocusedControl) pFocusedControl = (CGUIControl *)GetControl(message.GetControlId()); // and focus it if (pFocusedControl) return pFocusedControl->OnMessage(message); } return true; } break; case GUI_MSG_EXCLUSIVE_MOUSE: { m_exclusiveMouseControl = message.GetSenderId(); return true; } break; case GUI_MSG_GESTURE_NOTIFY: { CAction action(ACTION_GESTURE_NOTIFY, 0, (float)message.GetParam1(), (float)message.GetParam2(), 0, 0); EVENT_RESULT result = OnMouseAction(action); message.SetParam1(result); return result != EVENT_RESULT_UNHANDLED; } case GUI_MSG_ADD_CONTROL: { if (message.GetPointer()) { CGUIControl *control = (CGUIControl *)message.GetPointer(); control->AllocResources(); AddControl(control); } return true; } case GUI_MSG_REMOVE_CONTROL: { if (message.GetPointer()) { CGUIControl *control = (CGUIControl *)message.GetPointer(); RemoveControl(control); control->FreeResources(true); delete control; } return true; } case GUI_MSG_NOTIFY_ALL: { // only process those notifications that come from this window, or those intended for every window if (HasID(message.GetSenderId()) || !message.GetSenderId()) { if (message.GetParam1() == GUI_MSG_PAGE_CHANGE || message.GetParam1() == GUI_MSG_REFRESH_THUMBS || message.GetParam1() == GUI_MSG_REFRESH_LIST || message.GetParam1() == GUI_MSG_WINDOW_RESIZE) { // alter the message accordingly, and send to all controls for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIControl *control = *it; CGUIMessage msg(message.GetParam1(), message.GetControlId(), control->GetID(), message.GetParam2()); control->OnMessage(msg); } } } } break; } return SendControlMessage(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->m_strPath == "?") m_vecItems->m_strPath.Empty(); 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 CGUISpinControl::OnMessage(CGUIMessage& message) { if (CGUIControl::OnMessage(message) ) return true; if (message.GetControlId() == GetID() ) { switch (message.GetMessage()) { case GUI_MSG_ITEM_SELECT: if (SPIN_CONTROL_TYPE_PAGE == m_iType) { m_currentItem = message.GetParam1(); return true; } SetValue( message.GetParam1()); if (message.GetParam2() == SPIN_BUTTON_DOWN || message.GetParam2() == SPIN_BUTTON_UP) m_iSelect = message.GetParam2(); return true; break; case GUI_MSG_LABEL_RESET: if (SPIN_CONTROL_TYPE_PAGE == m_iType) { m_itemsPerPage = message.GetParam1(); m_numItems = message.GetParam2(); return true; } { Clear(); return true; } break; case GUI_MSG_SHOWRANGE: if (message.GetParam1() ) m_bShowRange = true; else m_bShowRange = false; break; case GUI_MSG_SET_LABELS: if (message.GetPointer()) { const vector< pair<string, int> > *labels = (const vector< pair<string, int> > *)message.GetPointer(); Clear(); for (vector< pair<string, int> >::const_iterator i = labels->begin(); i != labels->end(); ++i) AddLabel(i->first, i->second); SetValue( message.GetParam1()); } break; case GUI_MSG_LABEL_ADD: { AddLabel(message.GetLabel(), message.GetParam1()); return true; } break; case GUI_MSG_ITEM_SELECTED: { message.SetParam1( GetValue() ); message.SetParam2(m_iSelect); if (m_iType == SPIN_CONTROL_TYPE_TEXT) { if ( m_iValue >= 0 && m_iValue < (int)m_vecLabels.size() ) message.SetLabel( m_vecLabels[m_iValue]); } return true; } case GUI_MSG_PAGE_UP: if (CanMoveUp()) MoveUp(); return true; case GUI_MSG_PAGE_DOWN: if (CanMoveDown()) MoveDown(); return true; case GUI_MSG_MOVE_OFFSET: { int count = (int)message.GetParam1(); while (count < 0) { MoveUp(); count++; } while (count > 0) { MoveDown(); count--; } return true; } } } return false; }
bool CGUIWindowMusicNav::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); // check for valid quickpath parameter CStdString strDestination = message.GetStringParam(); if (!strDestination.IsEmpty()) { message.SetStringParam(""); CLog::Log(LOGINFO, "Attempting to quickpath to: %s", strDestination.c_str()); } // is this the first time the window is opened? if (m_vecItems->m_strPath == "?" && strDestination.IsEmpty()) { strDestination = g_settings.m_defaultMusicLibSource; m_vecItems->m_strPath = strDestination; CLog::Log(LOGINFO, "Attempting to default to: %s", strDestination.c_str()); } if (!strDestination.IsEmpty()) { if (strDestination.Equals("$ROOT") || strDestination.Equals("Root")) { m_vecItems->m_strPath = ""; } else if (strDestination.Equals("Genres")) { m_vecItems->m_strPath = "musicdb://1/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Artists")) { m_vecItems->m_strPath = "musicdb://2/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Albums")) { m_vecItems->m_strPath = "musicdb://3/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Songs")) { m_vecItems->m_strPath = "musicdb://4/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Top100")) { m_vecItems->m_strPath = "musicdb://5/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Top100Songs")) { m_vecItems->m_strPath = "musicdb://5/2/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Top100Albums")) { m_vecItems->m_strPath = "musicdb://5/1/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("RecentlyAddedAlbums")) { m_vecItems->m_strPath = "musicdb://6/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("RecentlyPlayedAlbums")) { m_vecItems->m_strPath = "musicdb://7/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Compilations")) { m_vecItems->m_strPath = "musicdb://8/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Playlists")) { m_vecItems->m_strPath = "special://musicplaylists/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Years")) { m_vecItems->m_strPath = "musicdb://9/"; SetHistoryForPath(m_vecItems->m_strPath); } else if (strDestination.Equals("Plugins")) { m_vecItems->m_strPath = "plugin://music/"; SetHistoryForPath(m_vecItems->m_strPath); } else { CLog::Log(LOGWARNING, "Warning, destination parameter (%s) may not be valid", strDestination.c_str()); m_vecItems->m_strPath = strDestination; SetHistoryForPath(m_vecItems->m_strPath); break; } } 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->m_strPath = ""; 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_BTN_FILTER) { if (m_filter.IsEmpty()) CGUIDialogKeyboard::ShowAndGetFilter(m_filter, false); else { m_filter.Empty(); OnFilterItems(); } return true; } else if (iControl == CONTROL_BTNSEARCH) { OnSearch(); 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_FILTER_ITEMS && IsActive()) { if (message.GetParam2() == 1) // append m_filter += message.GetStringParam(); else if (message.GetParam2() == 2) { // delete if (m_filter.size()) m_filter = m_filter.Left(m_filter.size() - 1); } else m_filter = message.GetStringParam(); OnFilterItems(); return true; } if (message.GetParam1() == GUI_MSG_SEARCH_UPDATE && IsActive()) { m_search = message.GetStringParam(); CUtil::URLEncode(m_search); if (!m_search.IsEmpty()) { CStdString path = "musicsearch://" + m_search + "/"; m_history.ClearPathHistory(); Update(path); } } } } return CGUIWindowMusicBase::OnMessage(message); }
bool CGUIDialogSelect::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { CGUIDialog::OnMessage(message); m_viewControl.Clear(); m_bButtonEnabled = false; m_useDetails = false; m_multiSelection = false; // construct selected items list m_selectedItems->Clear(); m_iSelected = -1; for (int i = 0 ; i < m_vecList->Size() ; i++) { CFileItemPtr item = m_vecList->Get(i); if (item->IsSelected()) { m_selectedItems->Add(item); if (m_iSelected == -1) m_iSelected = i; } } m_vecList->Clear(); m_buttonString = -1; SET_CONTROL_LABEL(CONTROL_BUTTON, ""); return true; } break; case GUI_MSG_WINDOW_INIT: { m_bButtonPressed = false; m_bConfirmed = false; CGUIDialog::OnMessage(message); return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (m_viewControl.HasControl(CONTROL_LIST)) { int iAction = message.GetParam1(); if (ACTION_SELECT_ITEM == iAction || ACTION_MOUSE_LEFT_CLICK == iAction) { int iSelected = m_viewControl.GetSelectedItem(); if(iSelected >= 0 && iSelected < (int)m_vecList->Size()) { CFileItemPtr item(m_vecList->Get(iSelected)); if (m_multiSelection) item->Select(!item->IsSelected()); else { for (int i = 0 ; i < m_vecList->Size() ; i++) m_vecList->Get(i)->Select(false); item->Select(true); m_bConfirmed = true; Close(); } } } } if (CONTROL_BUTTON == iControl) { m_iSelected = -1; m_bButtonPressed = true; if (m_multiSelection) m_bConfirmed = true; Close(); } } break; case GUI_MSG_SETFOCUS: { // make sure the additional button is focused in case the list is empty // (otherwise it is impossible to navigate to the additional button) if (m_vecList->IsEmpty() && m_bButtonEnabled && m_viewControl.HasControl(message.GetControlId())) { SET_CONTROL_FOCUS(CONTROL_BUTTON, 0); return true; } if (m_viewControl.HasControl(message.GetControlId()) && m_viewControl.GetCurrentControl() != message.GetControlId()) { m_viewControl.SetFocused(); return true; } } break; } return CGUIDialog::OnMessage(message); }
bool CGUIWindowSlideShow::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_INIT: { m_Resolution = (RESOLUTION) CServiceBroker::GetSettingsComponent()->GetSettings()->GetInt(CSettings::SETTING_PICTURES_DISPLAYRESOLUTION); //FIXME: Use GUI resolution for now if (false /*m_Resolution != CDisplaySettings::GetInstance().GetCurrentResolution() && m_Resolution != INVALID && m_Resolution!=AUTORES*/) CServiceBroker::GetWinSystem()->GetGfxContext().SetVideoResolution(m_Resolution, false); else m_Resolution = CServiceBroker::GetWinSystem()->GetGfxContext().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; m_iVideoSlide = -1; if (m_bSlideShow) m_bPause = true; } } break; case GUI_MSG_PLAYBACK_ENDED: { if (m_bPlayingVideo) { m_bPlayingVideo = false; m_iVideoSlide = -1; 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 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").asString()); CGUIKeyboardFactory::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 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::Get().GetUserDataItem("PartyMode.xsp"))) party = 1; else if (URIUtils::PathEquals(startupList, CProfilesManager::Get().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 CGUIControlGroupList::OnMessage(CGUIMessage& message) { switch (message.GetMessage() ) { case GUI_MSG_FOCUSED: { // a control has been focused // scroll if we need to and update our page control ValidateOffset(); float offset = 0; for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIControl *control = *it; if (!control->IsVisible()) continue; if (control->HasID(message.GetControlId())) { if (offset < m_offset) ScrollTo(offset); else if (offset + Size(control) > m_offset + Size()) ScrollTo(offset + Size(control) - Size()); break; } offset += Size(control) + m_itemGap; } } break; case GUI_MSG_SETFOCUS: { // we've been asked to focus. We focus the last control if it's on this page, // else we'll focus the first focusable control from our offset (after verifying it) ValidateOffset(); // now check the focusControl's offset float offset = 0; for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIControl *control = *it; if (!control->IsVisible()) continue; if (control->HasID(m_focusedControl)) { if (offset >= m_offset && offset + Size(control) <= m_offset + Size()) return CGUIControlGroup::OnMessage(message); break; } offset += Size(control) + m_itemGap; } // find the first control on this page offset = 0; for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIControl *control = *it; if (!control->IsVisible()) continue; if (control->CanFocus() && offset >= m_offset && offset + Size(control) <= m_offset + Size()) { m_focusedControl = control->GetID(); break; } offset += Size(control) + m_itemGap; } } break; case GUI_MSG_PAGE_CHANGE: { if (message.GetSenderId() == m_pageControl) { // it's from our page control ScrollTo((float)message.GetParam1()); return true; } } break; } return CGUIControlGroup::OnMessage(message); }
bool CGUIWindowPVRGuide::OnMessage(CGUIMessage& message) { if (!IsValidMessage(message)) return false; bool bReturn = false; switch (message.GetMessage()) { case GUI_MSG_CLICKED: { if (message.GetSenderId() == m_viewControl.GetCurrentControl()) { int iItem = m_viewControl.GetSelectedItem(); if (iItem >= 0 && iItem < m_vecItems->Size()) { CFileItemPtr pItem = m_vecItems->Get(iItem); /* process actions */ switch (message.GetParam1()) { case ACTION_SELECT_ITEM: case ACTION_MOUSE_LEFT_CLICK: switch(CSettings::GetInstance().GetInt(CSettings::SETTING_EPG_SELECTACTION)) { case EPG_SELECT_ACTION_CONTEXT_MENU: OnPopupMenu(iItem); bReturn = true; break; case EPG_SELECT_ACTION_SWITCH: ActionPlayEpg(pItem.get(), false); bReturn = true; break; case EPG_SELECT_ACTION_PLAY_RECORDING: ActionPlayEpg(pItem.get(), true); bReturn = true; break; case EPG_SELECT_ACTION_INFO: ShowEPGInfo(pItem.get()); bReturn = true; break; case EPG_SELECT_ACTION_RECORD: ActionRecord(pItem.get()); bReturn = true; break; } break; case ACTION_SHOW_INFO: ShowEPGInfo(pItem.get()); bReturn = true; break; case ACTION_PLAY: ActionPlayEpg(pItem.get(), true); bReturn = true; break; case ACTION_RECORD: ActionRecord(pItem.get()); bReturn = true; break; case ACTION_CONTEXT_MENU: case ACTION_MOUSE_RIGHT_CLICK: OnPopupMenu(iItem); bReturn = true; break; } } } else if (message.GetSenderId() == CONTROL_BTNVIEWASICONS) { // let's set the view mode first before update CGUIWindowPVRBase::OnMessage(message); Refresh(true); bReturn = true; } break; } case GUI_MSG_CHANGE_VIEW_MODE: { // let's set the view mode first before update CGUIWindowPVRBase::OnMessage(message); m_nextUpdateTimeout.SetExpired(); Refresh(true); bReturn = true; break; } case GUI_MSG_REFRESH_LIST: switch(message.GetParam1()) { case ObservableMessageChannelGroup: case ObservableMessageEpg: case ObservableMessageEpgContainer: { m_bUpdateRequired = true; // do not allow more than MAX_UPDATE_FREQUENCY updates if (IsActive() && m_nextUpdateTimeout.IsTimePast()) { Refresh(true); m_nextUpdateTimeout.Set(MAX_UPDATE_FREQUENCY); } bReturn = true; break; } case ObservableMessageEpgActiveItem: { if (IsActive() && m_viewControl.GetCurrentControl() != GUIDE_VIEW_TIMELINE) SetInvalid(); else m_bUpdateRequired = true; bReturn = true; break; } } break; } return bReturn || CGUIWindowPVRBase::OnMessage(message); }
bool CGUIWindowPictures::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); } break; case GUI_MSG_WINDOW_INIT: { // is this the first time accessing this window? if (m_vecItems->GetPath() == "?" && message.GetStringParam().empty()) message.SetStringParam(CMediaSourceSettings::GetInstance().GetDefaultSource("pictures")); m_dlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); 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::GetInstance().ToggleBool(CSettings::SETTING_SLIDESHOW_SHUFFLE); CSettings::GetInstance().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::GetInstance().GetBool(CSettings::SETTING_FILELISTS_ALLOWFILEDELETION)) OnDeleteItem(iItem); else return false; } else if (iAction == ACTION_PLAYER_PLAY) { ShowPicture(iItem, true); return true; } else if (iAction == ACTION_SHOW_INFO) { OnItemInfo(iItem); return true; } } } break; } return CGUIMediaWindow::OnMessage(message); }
bool CGUIWindowFullScreen::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_INIT: { // check whether we've come back here from a window during which time we've actually // stopped playing videos if (message.GetParam1() == WINDOW_INVALID && !g_application.IsPlayingVideo()) { // why are we here if nothing is playing??? g_windowManager.PreviousWindow(); return true; } g_infoManager.SetShowInfo(false); g_infoManager.SetShowCodec(false); m_bShowCurrentTime = false; m_bGroupSelectShow = false; g_infoManager.SetDisplayAfterSeek(0); // Make sure display after seek is off. // switch resolution g_graphicsContext.SetFullScreenVideo(true); #ifdef HAS_VIDEO_PLAYBACK // make sure renderer is uptospeed g_renderManager.Update(); #endif // now call the base class to load our windows CGUIWindow::OnMessage(message); m_bShowViewModeInfo = false; if (CUtil::IsUsingTTFSubtitles()) { CSingleLock lock (m_fontLock); CStdString fontPath = "special://xbmc/media/Fonts/"; fontPath += CSettings::Get().GetString("subtitles.font"); // We scale based on PAL4x3 - this at least ensures all sizing is constant across resolutions. RESOLUTION_INFO pal(720, 576, 0); CGUIFont *subFont = g_fontManager.LoadTTF("__subtitle__", fontPath, color[CSettings::Get().GetInt("subtitles.color")], 0, CSettings::Get().GetInt("subtitles.height"), CSettings::Get().GetInt("subtitles.style"), false, 1.0f, 1.0f, &pal, true); CGUIFont *borderFont = g_fontManager.LoadTTF("__subtitleborder__", fontPath, 0xFF000000, 0, CSettings::Get().GetInt("subtitles.height"), CSettings::Get().GetInt("subtitles.style"), true, 1.0f, 1.0f, &pal, true); if (!subFont || !borderFont) CLog::Log(LOGERROR, "CGUIWindowFullScreen::OnMessage(WINDOW_INIT) - Unable to load subtitle font"); else m_subsLayout = new CGUITextLayout(subFont, true, 0, borderFont); } else m_subsLayout = NULL; return true; } case GUI_MSG_WINDOW_DEINIT: { CGUIDialog *pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_OSD_TELETEXT); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_SLIDER); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_OSD); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_FULLSCREEN_INFO); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_PVR_OSD_CHANNELS); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_PVR_OSD_GUIDE); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_PVR_OSD_DIRECTOR); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_PVR_OSD_CUTTER); if (pDialog) pDialog->Close(true); CGUIWindow::OnMessage(message); CSettings::Get().Save(); CSingleLock lock (g_graphicsContext); g_graphicsContext.SetFullScreenVideo(false); lock.Leave(); #ifdef HAS_VIDEO_PLAYBACK // make sure renderer is uptospeed g_renderManager.Update(); #endif CSingleLock lockFont(m_fontLock); if (m_subsLayout) { g_fontManager.Unload("__subtitle__"); g_fontManager.Unload("__subtitleborder__"); delete m_subsLayout; m_subsLayout = NULL; } return true; } case GUI_MSG_CLICKED: { unsigned int iControl = message.GetSenderId(); if (iControl == CONTROL_GROUP_CHOOSER && g_PVRManager.IsStarted()) { // Get the currently selected label of the Select button CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), iControl); OnMessage(msg); CStdString strLabel = msg.GetLabel(); CPVRChannelPtr playingChannel; if (g_PVRManager.GetCurrentChannel(playingChannel)) { CPVRChannelGroupPtr selectedGroup = g_PVRChannelGroups->Get(playingChannel->IsRadio())->GetByName(strLabel); if (selectedGroup) { g_PVRManager.SetPlayingGroup(selectedGroup); CLog::Log(LOGDEBUG, "%s - switched to group '%s'", __FUNCTION__, selectedGroup->GroupName().c_str()); if (!selectedGroup->IsGroupMember(*playingChannel)) { CLog::Log(LOGDEBUG, "%s - channel '%s' is not a member of '%s', switching to channel 1 of the new group", __FUNCTION__, playingChannel->ChannelName().c_str(), selectedGroup->GroupName().c_str()); CFileItemPtr switchChannel = selectedGroup->GetByChannelNumber(1); if (switchChannel && switchChannel->HasPVRChannelInfoTag()) g_application.OnAction(CAction(ACTION_CHANNEL_SWITCH, (float) switchChannel->GetPVRChannelInfoTag()->ChannelNumber())); else { CLog::Log(LOGERROR, "%s - cannot find channel '1' in group %s", __FUNCTION__, selectedGroup->GroupName().c_str()); CApplicationMessenger::Get().MediaStop(false); } } } else { CLog::Log(LOGERROR, "%s - could not switch to group '%s'", __FUNCTION__, selectedGroup->GroupName().c_str()); CApplicationMessenger::Get().MediaStop(false); } } else { CLog::Log(LOGERROR, "%s - cannot find the current channel", __FUNCTION__); CApplicationMessenger::Get().MediaStop(false); } // hide the control and reset focus m_bGroupSelectShow = false; SET_CONTROL_HIDDEN(CONTROL_GROUP_CHOOSER); // SET_CONTROL_FOCUS(0, 0); return true; } break; } case GUI_MSG_SETFOCUS: case GUI_MSG_LOSTFOCUS: if (message.GetSenderId() != WINDOW_FULLSCREEN_VIDEO) return true; break; } return CGUIWindow::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); CGUIDialogContextMenu* pDlg = (CGUIDialogContextMenu*)g_windowManager.GetWindow(WINDOW_DIALOG_CONTEXT_MENU); if (pDlg && pDlg->IsActive()) pDlg->Close(); // 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()) { if (message.GetParam2()) // param2 is used for resetting the history SetHistoryForPath(message.GetStringParam()); CFileItemList list(message.GetStringParam()); list.RemoveDiscCache(GetID()); Update(message.GetStringParam()); } else { // refresh the 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 CGUIWindowPVRGuide::OnMessage(CGUIMessage& message) { bool bReturn = false; switch (message.GetMessage()) { case GUI_MSG_CLICKED: { if (message.GetSenderId() == m_viewControl.GetCurrentControl()) { int iItem = m_viewControl.GetSelectedItem(); if (iItem >= 0 && iItem < m_vecItems->Size()) { CFileItemPtr pItem = m_vecItems->Get(iItem); /* process actions */ switch (message.GetParam1()) { case ACTION_SELECT_ITEM: case ACTION_MOUSE_LEFT_CLICK: switch(CServiceBroker::GetSettings().GetInt(CSettings::SETTING_EPG_SELECTACTION)) { case EPG_SELECT_ACTION_CONTEXT_MENU: OnPopupMenu(iItem); bReturn = true; break; case EPG_SELECT_ACTION_SWITCH: CPVRGUIActions::GetInstance().SwitchToChannel(pItem, true); bReturn = true; break; case EPG_SELECT_ACTION_PLAY_RECORDING: CPVRGUIActions::GetInstance().PlayRecording(pItem, true); bReturn = true; break; case EPG_SELECT_ACTION_INFO: CPVRGUIActions::GetInstance().ShowEPGInfo(pItem); bReturn = true; break; case EPG_SELECT_ACTION_RECORD: CPVRGUIActions::GetInstance().ToggleTimer(pItem); bReturn = true; break; case EPG_SELECT_ACTION_SMART_SELECT: { const CEpgInfoTagPtr tag(pItem->GetEPGInfoTag()); if (tag) { const CDateTime start(tag->StartAsUTC()); const CDateTime end(tag->EndAsUTC()); const CDateTime now(CDateTime::GetUTCDateTime()); if (start <= now && now <= end) { // current event CPVRGUIActions::GetInstance().SwitchToChannel(pItem, true); } else if (now < start) { // future event if (tag->HasTimer()) CPVRGUIActions::GetInstance().EditTimer(pItem); else CPVRGUIActions::GetInstance().AddTimer(pItem, false); } else { // past event if (tag->HasRecording()) CPVRGUIActions::GetInstance().PlayRecording(pItem, true); else CPVRGUIActions::GetInstance().ShowEPGInfo(pItem); } bReturn = true; } break; } } break; case ACTION_SHOW_INFO: CPVRGUIActions::GetInstance().ShowEPGInfo(pItem); bReturn = true; break; case ACTION_PLAY: CPVRGUIActions::GetInstance().PlayRecording(pItem, true); bReturn = true; break; case ACTION_RECORD: CPVRGUIActions::GetInstance().ToggleTimer(pItem); bReturn = true; break; case ACTION_PVR_SHOW_TIMER_RULE: CPVRGUIActions::GetInstance().AddTimerRule(pItem, true); bReturn = true; break; case ACTION_CONTEXT_MENU: case ACTION_MOUSE_RIGHT_CLICK: OnPopupMenu(iItem); bReturn = true; break; } } else if (iItem == -1) { /* process actions */ switch (message.GetParam1()) { case ACTION_SELECT_ITEM: case ACTION_MOUSE_LEFT_CLICK: case ACTION_PLAY: { // EPG "gap" selected => switch to associated channel. CGUIEPGGridContainer *epgGridContainer = GetGridControl(); if (epgGridContainer) { const CFileItemPtr item(epgGridContainer->GetSelectedChannelItem()); if (item) { CPVRGUIActions::GetInstance().SwitchToChannel(item, true); bReturn = true; } } break; } } } } else if (message.GetSenderId() == CONTROL_BTNVIEWASICONS) { // let's set the view mode first before update CGUIWindowPVRBase::OnMessage(message); Refresh(true); bReturn = true; } break; } case GUI_MSG_CHANGE_VIEW_MODE: { // let's set the view mode first before update CGUIWindowPVRBase::OnMessage(message); Refresh(true); bReturn = true; break; } case GUI_MSG_REFRESH_LIST: switch(message.GetParam1()) { case ObservableMessageChannelGroupsLoaded: { // late init InitChannelGroup(); Init(); break; } case ObservableMessageChannelGroupReset: case ObservableMessageChannelGroup: case ObservableMessageEpg: case ObservableMessageEpgContainer: { Refresh(true); break; } case ObservableMessageTimersReset: case ObservableMessageTimers: { SetInvalid(); break; } } break; } return bReturn || CGUIWindowPVRBase::OnMessage(message); }
bool CGUIWindowSettingsProfile::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { CGUIWindow::OnMessage(message); ClearListItems(); return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_PROFILES) { int iAction = message.GetParam1(); if ( iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK || iAction == ACTION_CONTEXT_MENU || iAction == ACTION_MOUSE_RIGHT_CLICK ) { CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_PROFILES); g_windowManager.SendMessage(msg); int iItem = msg.GetParam1(); if (iAction == ACTION_CONTEXT_MENU || iAction == ACTION_MOUSE_RIGHT_CLICK) { //contextmenu if (iItem <= (int)g_settings.GetNumProfiles() - 1) { OnPopupMenu(iItem); } return true; } else if (iItem < (int)g_settings.GetNumProfiles()) { if (CGUIDialogProfileSettings::ShowForProfile(iItem)) { LoadList(); CGUIMessage msg(GUI_MSG_ITEM_SELECT, GetID(), 2,iItem); g_windowManager.SendMessage(msg); return true; } return false; } else if (iItem > (int)g_settings.GetNumProfiles() - 1) { CDirectory::Create(URIUtils::AddFileToFolder(g_settings.GetUserDataFolder(),"profiles")); if (CGUIDialogProfileSettings::ShowForProfile(g_settings.GetNumProfiles())) { LoadList(); CGUIMessage msg(GUI_MSG_ITEM_SELECT, GetID(), 2,iItem); g_windowManager.SendMessage(msg); return true; } return false; } } } else if (iControl == CONTROL_LOGINSCREEN) { g_settings.ToggleLoginScreen(); g_settings.SaveProfiles(PROFILES_FILE); return true; } } break; } return CGUIWindow::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 CGUIBaseContainer::OnMessage(CGUIMessage& message) { if (message.GetControlId() == GetID() ) { if (!m_staticContent) { if (message.GetMessage() == GUI_MSG_LABEL_BIND && message.GetPointer()) { // bind our items Reset(); CFileItemList *items = (CFileItemList *)message.GetPointer(); for (int i = 0; i < items->Size(); i++) m_items.push_back(items->Get(i)); UpdateLayout(true); // true to refresh all items UpdateScrollByLetter(); SelectItem(message.GetParam1()); return true; } else if (message.GetMessage() == GUI_MSG_LABEL_RESET) { Reset(); SetPageControlRange(); return true; } } if (message.GetMessage() == GUI_MSG_ITEM_SELECT) { SelectItem(message.GetParam1()); return true; } else if (message.GetMessage() == GUI_MSG_ITEM_SELECTED) { message.SetParam1(GetSelectedItem()); return true; } else if (message.GetMessage() == GUI_MSG_PAGE_CHANGE) { if (message.GetSenderId() == m_pageControl && IsVisible()) { // update our page if we're visible - not much point otherwise if ((int)message.GetParam1() != GetOffset()) m_pageChangeTimer.StartZero(); ScrollToOffset(message.GetParam1()); return true; } } else if (message.GetMessage() == GUI_MSG_REFRESH_LIST) { // update our list contents for (unsigned int i = 0; i < m_items.size(); ++i) m_items[i]->SetInvalid(); } else if (message.GetMessage() == GUI_MSG_MOVE_OFFSET) { int count = (int)message.GetParam1(); while (count < 0) { MoveUp(true); count++; } while (count > 0) { MoveDown(true); count--; } return true; } } return CGUIControl::OnMessage(message); }
bool CGUIWindowFullScreen::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_INIT: { // check whether we've come back here from a window during which time we've actually // stopped playing videos if (message.GetParam1() == WINDOW_INVALID && !g_application.m_pPlayer->IsPlayingVideo()) { // why are we here if nothing is playing??? g_windowManager.PreviousWindow(); return true; } g_infoManager.SetShowInfo(false); g_infoManager.SetShowCodec(false); m_bShowCurrentTime = false; m_bGroupSelectShow = false; g_infoManager.SetDisplayAfterSeek(0); // Make sure display after seek is off. // switch resolution g_graphicsContext.SetFullScreenVideo(true); #ifdef HAS_VIDEO_PLAYBACK // make sure renderer is uptospeed g_renderManager.Update(); #endif // now call the base class to load our windows CGUIWindow::OnMessage(message); m_bShowViewModeInfo = false; return true; } case GUI_MSG_WINDOW_DEINIT: { CGUIDialog *pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_OSD_TELETEXT); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_SLIDER); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_OSD); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_FULLSCREEN_INFO); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_PVR_OSD_CHANNELS); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_PVR_OSD_GUIDE); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_PVR_OSD_DIRECTOR); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_PVR_OSD_CUTTER); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_SUBTITLES); if (pDialog) pDialog->Close(true); CGUIWindow::OnMessage(message); CSettings::Get().Save(); CSingleLock lock (g_graphicsContext); g_graphicsContext.SetFullScreenVideo(false); lock.Leave(); #ifdef HAS_VIDEO_PLAYBACK // make sure renderer is uptospeed g_renderManager.Update(); #endif return true; } case GUI_MSG_CLICKED: { unsigned int iControl = message.GetSenderId(); if (iControl == CONTROL_GROUP_CHOOSER && g_PVRManager.IsStarted()) { // Get the currently selected label of the Select button CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), iControl); OnMessage(msg); CStdString strLabel = msg.GetLabel(); CPVRChannelPtr playingChannel; if (g_PVRManager.GetCurrentChannel(playingChannel)) { CPVRChannelGroupPtr selectedGroup = g_PVRChannelGroups->Get(playingChannel->IsRadio())->GetByName(strLabel); if (selectedGroup) { g_PVRManager.SetPlayingGroup(selectedGroup); CLog::Log(LOGDEBUG, "%s - switched to group '%s'", __FUNCTION__, selectedGroup->GroupName().c_str()); if (!selectedGroup->IsGroupMember(*playingChannel)) { CLog::Log(LOGDEBUG, "%s - channel '%s' is not a member of '%s', switching to channel 1 of the new group", __FUNCTION__, playingChannel->ChannelName().c_str(), selectedGroup->GroupName().c_str()); CFileItemPtr switchChannel = selectedGroup->GetByChannelNumber(1); if (switchChannel && switchChannel->HasPVRChannelInfoTag()) g_application.OnAction(CAction(ACTION_CHANNEL_SWITCH, (float) switchChannel->GetPVRChannelInfoTag()->ChannelNumber())); else { CLog::Log(LOGERROR, "%s - cannot find channel '1' in group %s", __FUNCTION__, selectedGroup->GroupName().c_str()); CApplicationMessenger::Get().MediaStop(false); } } } else { CLog::Log(LOGERROR, "%s - could not switch to group '%s'", __FUNCTION__, selectedGroup->GroupName().c_str()); CApplicationMessenger::Get().MediaStop(false); } } else { CLog::Log(LOGERROR, "%s - cannot find the current channel", __FUNCTION__); CApplicationMessenger::Get().MediaStop(false); } // hide the control and reset focus m_bGroupSelectShow = false; SET_CONTROL_HIDDEN(CONTROL_GROUP_CHOOSER); // SET_CONTROL_FOCUS(0, 0); return true; } break; } case GUI_MSG_SETFOCUS: case GUI_MSG_LOSTFOCUS: if (message.GetSenderId() != WINDOW_FULLSCREEN_VIDEO) return true; break; } return CGUIWindow::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().IsEmpty()) message.SetStringParam(g_settings.m_defaultPictureSource); 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) { g_guiSettings.ToggleBool("slideshow.shuffle"); g_settings.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 (g_guiSettings.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 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: #ifdef TARGET_ANDROID OnVoiceRecognition(); #else OnIPAddress(); #endif 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: case GUI_MSG_INPUT_TEXT_EDIT: { // the edit control only handles these messages if it is either focues // 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 CGUIWindowFullScreen::OnMessage(CGUIMessage& message) { switch (message.GetMessage()) { case GUI_MSG_WINDOW_INIT: { // check whether we've come back here from a window during which time we've actually // stopped playing videos if (message.GetParam1() == WINDOW_INVALID && !g_application.IsPlayingVideo()) { // why are we here if nothing is playing??? g_windowManager.PreviousWindow(); return true; } g_infoManager.SetShowInfo(false); g_infoManager.SetShowCodec(false); m_bShowCurrentTime = false; g_infoManager.SetDisplayAfterSeek(0); // Make sure display after seek is off. // switch resolution g_graphicsContext.SetFullScreenVideo(true); #ifdef HAS_VIDEO_PLAYBACK // make sure renderer is uptospeed g_renderManager.Update(false); #endif // now call the base class to load our windows CGUIWindow::OnMessage(message); m_bShowViewModeInfo = false; if (CUtil::IsUsingTTFSubtitles()) { CSingleLock lock (m_fontLock); CStdString fontPath = "special://xbmc/media/Fonts/"; fontPath += g_guiSettings.GetString("subtitles.font"); // We scale based on PAL4x3 - this at least ensures all sizing is constant across resolutions. RESOLUTION_INFO pal(720, 576, 0); CGUIFont *subFont = g_fontManager.LoadTTF("__subtitle__", fontPath, color[g_guiSettings.GetInt("subtitles.color")], 0, g_guiSettings.GetInt("subtitles.height"), g_guiSettings.GetInt("subtitles.style"), false, 1.0f, 1.0f, &pal, true); CGUIFont *borderFont = g_fontManager.LoadTTF("__subtitleborder__", fontPath, 0xFF000000, 0, g_guiSettings.GetInt("subtitles.height"), g_guiSettings.GetInt("subtitles.style"), true, 1.0f, 1.0f, &pal, true); if (!subFont || !borderFont) CLog::Log(LOGERROR, "CGUIWindowFullScreen::OnMessage(WINDOW_INIT) - Unable to load subtitle font"); else m_subsLayout = new CGUITextLayout(subFont, true, 0, borderFont); } else m_subsLayout = NULL; return true; } case GUI_MSG_WINDOW_DEINIT: { CGUIWindow::OnMessage(message); CGUIDialog *pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_OSD_TELETEXT); if (pDialog) pDialog->Close(true); CGUIDialogSlider *slider = (CGUIDialogSlider *)g_windowManager.GetWindow(WINDOW_DIALOG_SLIDER); if (slider) slider->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_OSD); if (pDialog) pDialog->Close(true); pDialog = (CGUIDialog *)g_windowManager.GetWindow(WINDOW_DIALOG_FULLSCREEN_INFO); if (pDialog) pDialog->Close(true); FreeResources(true); CSingleLock lock (g_graphicsContext); g_graphicsContext.SetFullScreenVideo(false); lock.Leave(); #ifdef HAS_VIDEO_PLAYBACK // make sure renderer is uptospeed g_renderManager.Update(false); #endif CSingleLock lockFont(m_fontLock); if (m_subsLayout) { g_fontManager.Unload("__subtitle__"); g_fontManager.Unload("__subtitleborder__"); delete m_subsLayout; m_subsLayout = NULL; } return true; } case GUI_MSG_SETFOCUS: case GUI_MSG_LOSTFOCUS: if (message.GetSenderId() != WINDOW_FULLSCREEN_VIDEO) return true; break; } return CGUIWindow::OnMessage(message); }
bool CGUIWindowFileManager::OnMessage(CGUIMessage& message) { 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; } else if (message.GetParam1()==GUI_MSG_UPDATE && IsActive()) { Refresh(); 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); }
bool CGUIDialogVideoInfo::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_DEINIT: { ClearCastList(); } break; case GUI_MSG_WINDOW_INIT: { m_dlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); m_bRefresh = false; m_bRefreshAll = true; m_hasUpdatedThumb = false; CGUIDialog::OnMessage(message); m_bViewReview = true; CVideoDatabase database; ADDON::ScraperPtr scraper; if(database.Open()) { scraper = database.GetScraperForPath(m_movieItem->GetVideoInfoTag()->GetPath()); database.Close(); } CONTROL_ENABLE_ON_CONDITION(CONTROL_BTN_REFRESH, (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) && !m_movieItem->GetVideoInfoTag()->m_strIMDBNumber.Left(2).Equals("xx") && scraper); CONTROL_ENABLE_ON_CONDITION(CONTROL_BTN_GET_THUMB, (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) && !m_movieItem->GetVideoInfoTag()->m_strIMDBNumber.Mid(2).Equals("plugin")); VIDEODB_CONTENT_TYPE type = (VIDEODB_CONTENT_TYPE)m_movieItem->GetVideoContentType(); if (type == VIDEODB_CONTENT_TVSHOWS || type == VIDEODB_CONTENT_MOVIES) CONTROL_ENABLE_ON_CONDITION(CONTROL_BTN_GET_FANART, (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) && !m_movieItem->GetVideoInfoTag()->m_strIMDBNumber.Mid(2).Equals("plugin")); else CONTROL_DISABLE(CONTROL_BTN_GET_FANART); Update(); return true; } break; case GUI_MSG_CLICKED: { int iControl = message.GetSenderId(); if (iControl == CONTROL_BTN_REFRESH) { if (m_movieItem->GetVideoInfoTag()->m_iSeason < 0 && !m_movieItem->GetVideoInfoTag()->m_strShowTitle.IsEmpty()) // tv show { bool bCanceled=false; if (CGUIDialogYesNo::ShowAndGetInput(20377,20378,-1,-1,bCanceled)) { m_bRefreshAll = true; CVideoDatabase db; if (db.Open()) { db.SetPathHash(m_movieItem->GetVideoInfoTag()->m_strPath,""); db.Close(); } } else m_bRefreshAll = false; if (bCanceled) return false; } m_bRefresh = true; Close(); return true; } else if (iControl == CONTROL_BTN_TRACKS) { m_bViewReview = !m_bViewReview; Update(); } else if (iControl == CONTROL_BTN_PLAY) { Play(); } else if (iControl == CONTROL_BTN_RESUME) { Play(true); } else if (iControl == CONTROL_BTN_GET_THUMB) { OnGetThumb(); } else if (iControl == CONTROL_BTN_PLAY_TRAILER) { PlayTrailer(); } else if (iControl == CONTROL_BTN_GET_FANART) { OnGetFanart(); } else if (iControl == CONTROL_BTN_DIRECTOR) { CStdString strDirector = StringUtils::Join(m_movieItem->GetVideoInfoTag()->m_director, g_advancedSettings.m_videoItemSeparator); OnSearch(strDirector); } else if (iControl == CONTROL_LIST) { int iAction = message.GetParam1(); if (ACTION_SELECT_ITEM == iAction || ACTION_MOUSE_LEFT_CLICK == iAction) { CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), iControl); OnMessage(msg); int iItem = msg.GetParam1(); if (iItem < 0 || iItem >= m_castList->Size()) break; CStdString strItem = m_castList->Get(iItem)->GetLabel(); CStdString strFind; strFind.Format(" %s ",g_localizeStrings.Get(20347)); int iPos = strItem.Find(strFind); if (iPos == -1) iPos = strItem.size(); CStdString tmp = strItem.Left(iPos); OnSearch(tmp); } } } break; case GUI_MSG_NOTIFY_ALL: { if (IsActive() && message.GetParam1() == GUI_MSG_UPDATE_ITEM && message.GetItem()) { CFileItemPtr item = boost::static_pointer_cast<CFileItem>(message.GetItem()); if (item && m_movieItem->GetPath().Equals(item->GetPath())) { // Just copy over the stream details and the thumb if we don't already have one if (!m_movieItem->HasThumbnail()) m_movieItem->SetThumbnailImage(item->GetThumbnailImage()); m_movieItem->GetVideoInfoTag()->m_streamDetails = item->GetVideoInfoTag()->m_streamDetails; } return true; } } } return CGUIDialog::OnMessage(message); }
bool CGUIWindowPVRChannels::OnMessage(CGUIMessage& message) { bool bReturn = false; switch (message.GetMessage()) { case GUI_MSG_CLICKED: if (message.GetSenderId() == m_viewControl.GetCurrentControl()) { int iItem = m_viewControl.GetSelectedItem(); if (iItem >= 0 && iItem < m_vecItems->Size()) { bReturn = true; switch (message.GetParam1()) { case ACTION_SELECT_ITEM: case ACTION_MOUSE_LEFT_CLICK: case ACTION_PLAY: ActionPlayChannel(m_vecItems->Get(iItem).get()); break; case ACTION_SHOW_INFO: ShowEPGInfo(m_vecItems->Get(iItem).get()); break; case ACTION_DELETE_ITEM: ActionDeleteChannel(m_vecItems->Get(iItem).get()); break; case ACTION_CONTEXT_MENU: case ACTION_MOUSE_RIGHT_CLICK: OnPopupMenu(iItem); break; default: bReturn = false; break; } } } else if (message.GetSenderId() == CONTROL_BTNSHOWHIDDEN) { CGUIRadioButtonControl *radioButton = (CGUIRadioButtonControl*)GetControl(CONTROL_BTNSHOWHIDDEN); if (radioButton) { m_bShowHiddenChannels = radioButton->IsSelected(); Update(GetDirectoryPath()); } bReturn = true; } else if (message.GetSenderId() == CONTROL_BTNFILTERCHANNELS) { std::string filter = GetProperty("filter").asString(); CGUIKeyboardFactory::ShowAndGetFilter(filter, false); OnFilterItems(filter); UpdateButtons(); bReturn = true; } break; case GUI_MSG_REFRESH_LIST: switch(message.GetParam1()) { case ObservableMessageChannelGroup: case ObservableMessageTimers: case ObservableMessageEpg: case ObservableMessageEpgContainer: case ObservableMessageEpgActiveItem: case ObservableMessageCurrentItem: case ObservableMessageRecordings: { SetInvalid(); break; } case ObservableMessageChannelGroupReset: { Refresh(true); break; } } break; } return bReturn || CGUIWindowPVRBase::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: { 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 && g_settings.m_iMyMusicStartWindow != GetID()) { g_settings.m_iMyMusicStartWindow = GetID(); g_settings.Save(); } return true; } break; // update the display case GUI_MSG_SCAN_FINISHED: case GUI_MSG_REFRESH_THUMBS: { Update(m_vecItems->GetPath()); } 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; g_settings.m_iMyMusicStartWindow = nWindow; g_settings.Save(); g_windowManager.ChangeActiveWindow(nWindow); CGUIMessage msg2(GUI_MSG_SETFOCUS, g_settings.m_iMyMusicStartWindow, CONTROL_BTNTYPE); g_windowManager.SendMessage(msg2); return true; } 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->GetPath().Equals("special://musicplaylists/")) OnDeleteItem(iItem); // or be at the files window and have file deletion enabled else if (GetID() == WINDOW_MUSIC_FILES && g_guiSettings.GetBool("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.IsPlayingAudio()) { if (g_application.m_pPlayer->IsPaused()) return false; if (g_application.GetPlaySpeed() != 1) return false; } // not playing audio, or playback speed == 1 PlayItem(iItem); return true; } } } } return CGUIMediaWindow::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 (m_shares[iSource].strPath.Equals(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; if (iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK) { OnClick(iItem); return true; } else if (iAction == ACTION_HIGHLIGHT_ITEM && m_multipleSelection) { CFileItemPtr pItem = (*m_vecItems)[iItem]; if (!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(); CStdString strPath; if (iItem == 0) strPath = m_selectedPath; else strPath = (*m_vecItems)[iItem]->GetPath(); CStdString strTest = URIUtils::AddFileToFolder(strPath, "1"); CFile file; if (file.OpenForWrite(strTest,true)) { file.Close(); CFile::Delete(strTest); m_bConfirmed = true; Close(); } else CGUIDialogOK::ShowAndGetInput(257,20072,0,0); } 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) { CStdString strInput; if (CGUIKeyboardFactory::ShowAndGetInput(strInput,g_localizeStrings.Get(119),false)) { CStdString strPath = URIUtils::AddFileToFolder(m_vecItems->GetPath(), strInput); if (CDirectory::Create(strPath)) Update(m_vecItems->GetPath()); else CGUIDialogOK::ShowAndGetInput(20069,20072,20073,0); } } 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); }