diff options
author | Kai Sommerfeld <3226626+ksooo@users.noreply.github.com> | 2023-12-26 13:02:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-26 13:02:57 +0100 |
commit | 8a78f00ffae8db1092095b94c4bb9f3350d62979 (patch) | |
tree | f23f2eb39539c3523696431cafc5c266d466f6a8 | |
parent | 80653dc05ff9af0a6fb96f530f6d3be0cd3fc308 (diff) | |
parent | 52d3a23c5ece4ab6141cdb47ae22092a44829143 (diff) |
Merge pull request #24316 from ksooo/video-manage-dialogs-improve-selection
[video] Versions/Extras Manage Dialogs: Selection improvements
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoManager.cpp | 77 | ||||
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoManager.h | 5 | ||||
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoManagerExtras.cpp | 9 | ||||
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoManagerExtras.h | 2 | ||||
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoManagerVersions.cpp | 18 | ||||
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoManagerVersions.h | 1 |
6 files changed, 93 insertions, 19 deletions
diff --git a/xbmc/video/dialogs/GUIDialogVideoManager.cpp b/xbmc/video/dialogs/GUIDialogVideoManager.cpp index 973335243a..c7f5e5a9f7 100644 --- a/xbmc/video/dialogs/GUIDialogVideoManager.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoManager.cpp @@ -70,18 +70,8 @@ bool CGUIDialogVideoManager::OnMessage(CGUIMessage& message) const int action{message.GetParam1()}; if (action == ACTION_SELECT_ITEM || action == ACTION_MOUSE_LEFT_CLICK) { - CGUIMessage msg{GUI_MSG_ITEM_SELECTED, GetID(), control}; - OnMessage(msg); - - const int item{msg.GetParam1()}; - if (item < 0 || item >= m_videoAssetsList->Size()) - break; - - m_selectedVideoAsset = m_videoAssetsList->Get(item); - - UpdateButtons(); - - SET_CONTROL_FOCUS(CONTROL_BUTTON_PLAY, 0); + if (UpdateSelectedAsset()) + SET_CONTROL_FOCUS(CONTROL_BUTTON_PLAY, 0); } } else if (control == CONTROL_BUTTON_PLAY) @@ -107,8 +97,26 @@ bool CGUIDialogVideoManager::OnMessage(CGUIMessage& message) return CGUIDialog::OnMessage(message); } +bool CGUIDialogVideoManager::OnAction(const CAction& action) +{ + const int actionId{action.GetID()}; + if (actionId == ACTION_MOVE_DOWN || actionId == ACTION_MOVE_UP || actionId == ACTION_PAGE_DOWN || + actionId == ACTION_PAGE_UP || actionId == ACTION_FIRST_PAGE || actionId == ACTION_LAST_PAGE) + { + if (GetFocusedControlID() == CONTROL_LIST_ASSETS) + { + CGUIDialog::OnAction(action); + return UpdateSelectedAsset(); + } + } + + return CGUIDialog::OnAction(action); +} + void CGUIDialogVideoManager::OnInitWindow() { + CGUIDialog::OnInitWindow(); + SET_CONTROL_LABEL(CONTROL_LABEL_TITLE, StringUtils::Format(g_localizeStrings.Get(GetHeadingId()), m_videoAsset->GetVideoInfoTag()->GetTitle())); @@ -116,9 +124,7 @@ void CGUIDialogVideoManager::OnInitWindow() CGUIMessage msg{GUI_MSG_LABEL_BIND, GetID(), CONTROL_LIST_ASSETS, 0, 0, m_videoAssetsList.get()}; OnMessage(msg); - UpdateButtons(); - - CGUIDialog::OnInitWindow(); + UpdateControls(); } void CGUIDialogVideoManager::Clear() @@ -147,6 +153,35 @@ void CGUIDialogVideoManager::UpdateButtons() } } +void CGUIDialogVideoManager::UpdateAssetsList() +{ + // find new item in list and select it + for (int i = 0; i < m_videoAssetsList->Size(); ++i) + { + if (m_videoAssetsList->Get(i)->GetVideoInfoTag()->m_iDbId == + m_selectedVideoAsset->GetVideoInfoTag()->m_iDbId) + { + CONTROL_SELECT_ITEM(CONTROL_LIST_ASSETS, i); + break; + } + } +} + +bool CGUIDialogVideoManager::UpdateSelectedAsset() +{ + CGUIMessage msg{GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_LIST_ASSETS}; + OnMessage(msg); + + const int item{msg.GetParam1()}; + if (item >= 0 && item < m_videoAssetsList->Size()) + { + m_selectedVideoAsset = m_videoAssetsList->Get(item); + UpdateControls(); + return true; + } + return false; +} + void CGUIDialogVideoManager::DisableRemove() { CONTROL_DISABLE(CONTROL_BUTTON_REMOVE); @@ -157,6 +192,12 @@ void CGUIDialogVideoManager::EnableRemove() CONTROL_ENABLE(CONTROL_BUTTON_REMOVE); } +void CGUIDialogVideoManager::UpdateControls() +{ + UpdateButtons(); + UpdateAssetsList(); +} + void CGUIDialogVideoManager::Refresh() { Clear(); @@ -264,8 +305,7 @@ void CGUIDialogVideoManager::Remove() // refresh data and controls Refresh(); - - UpdateButtons(); + UpdateControls(); } void CGUIDialogVideoManager::Rename() @@ -279,6 +319,7 @@ void CGUIDialogVideoManager::Rename() // refresh data and controls Refresh(); + UpdateControls(); } void CGUIDialogVideoManager::ChooseArt() @@ -293,6 +334,8 @@ void CGUIDialogVideoManager::ChooseArt() void CGUIDialogVideoManager::SetSelectedVideoAsset(const std::shared_ptr<CFileItem>& asset) { m_selectedVideoAsset = asset; + + UpdateControls(); } int CGUIDialogVideoManager::SelectVideoAsset(const std::shared_ptr<CFileItem>& item) diff --git a/xbmc/video/dialogs/GUIDialogVideoManager.h b/xbmc/video/dialogs/GUIDialogVideoManager.h index 83c7b7027e..006c155907 100644 --- a/xbmc/video/dialogs/GUIDialogVideoManager.h +++ b/xbmc/video/dialogs/GUIDialogVideoManager.h @@ -30,6 +30,7 @@ public: protected: void OnInitWindow() override; bool OnMessage(CGUIMessage& message) override; + bool OnAction(const CAction& action) override; virtual VideoAssetType GetVideoAssetType() = 0; virtual int GetHeadingId() = 0; @@ -37,6 +38,7 @@ protected: virtual void Clear(); virtual void Refresh(); virtual void UpdateButtons(); + virtual void UpdateAssetsList(); virtual void Play(); virtual void Remove(); @@ -46,6 +48,8 @@ protected: void DisableRemove(); void EnableRemove(); + void UpdateControls(); + static int SelectVideoAsset(const std::shared_ptr<CFileItem>& item); CVideoDatabase m_database; @@ -57,4 +61,5 @@ private: CGUIDialogVideoManager() = delete; void CloseAll(); + bool UpdateSelectedAsset(); }; diff --git a/xbmc/video/dialogs/GUIDialogVideoManagerExtras.cpp b/xbmc/video/dialogs/GUIDialogVideoManagerExtras.cpp index 395422f420..97cd910ba3 100644 --- a/xbmc/video/dialogs/GUIDialogVideoManagerExtras.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoManagerExtras.cpp @@ -76,6 +76,14 @@ void CGUIDialogVideoManagerExtras::UpdateButtons() } } +void CGUIDialogVideoManagerExtras::SetVideoAsset(const std::shared_ptr<CFileItem>& item) +{ + CGUIDialogVideoManager::SetVideoAsset(item); + + if (!m_videoAssetsList->IsEmpty()) + SetSelectedVideoAsset(m_videoAssetsList->Get(0)); +} + void CGUIDialogVideoManagerExtras::AddVideoExtra() { const MediaType mediaType{m_videoAsset->GetVideoInfoTag()->m_type}; @@ -158,6 +166,7 @@ void CGUIDialogVideoManagerExtras::AddVideoExtra() // refresh data and controls Refresh(); + UpdateControls(); } } diff --git a/xbmc/video/dialogs/GUIDialogVideoManagerExtras.h b/xbmc/video/dialogs/GUIDialogVideoManagerExtras.h index 6355809c05..6a50462601 100644 --- a/xbmc/video/dialogs/GUIDialogVideoManagerExtras.h +++ b/xbmc/video/dialogs/GUIDialogVideoManagerExtras.h @@ -23,6 +23,8 @@ public: CGUIDialogVideoManagerExtras(); ~CGUIDialogVideoManagerExtras() override = default; + void SetVideoAsset(const std::shared_ptr<CFileItem>& item) override; + static void ManageVideoExtra(const std::shared_ptr<CFileItem>& item); static std::string GenerateVideoExtra(const std::string& extrasRoot, const std::string& extrasPath); diff --git a/xbmc/video/dialogs/GUIDialogVideoManagerVersions.cpp b/xbmc/video/dialogs/GUIDialogVideoManagerVersions.cpp index 6b51e7d821..8f08a7edde 100644 --- a/xbmc/video/dialogs/GUIDialogVideoManagerVersions.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoManagerVersions.cpp @@ -98,6 +98,16 @@ void CGUIDialogVideoManagerVersions::UpdateButtons() } } +void CGUIDialogVideoManagerVersions::UpdateDefaultVideoVersionSelection() +{ + // find new item in list and select it + const int defaultDbId{m_defaultVideoVersion->GetVideoInfoTag()->m_iDbId}; + for (const auto& item : *m_videoAssetsList) + { + item->Select(item->GetVideoInfoTag()->m_iDbId == defaultDbId); + } +} + void CGUIDialogVideoManagerVersions::Refresh() { CGUIDialogVideoManager::Refresh(); @@ -106,13 +116,15 @@ void CGUIDialogVideoManagerVersions::Refresh() const int dbId{m_videoAsset->GetVideoInfoTag()->m_iDbId}; const VideoDbContentType itemType{m_videoAsset->GetVideoContentType()}; m_database.GetDefaultVideoVersion(itemType, dbId, *m_defaultVideoVersion); + + UpdateDefaultVideoVersionSelection(); } void CGUIDialogVideoManagerVersions::SetVideoAsset(const std::shared_ptr<CFileItem>& item) { CGUIDialogVideoManager::SetVideoAsset(item); - m_selectedVideoAsset = m_defaultVideoVersion; + SetSelectedVideoAsset(m_defaultVideoVersion); } void CGUIDialogVideoManagerVersions::Remove() @@ -145,7 +157,8 @@ void CGUIDialogVideoManagerVersions::SetDefault() // update our default video version m_database.GetDefaultVideoVersion(itemType, dbId, *m_defaultVideoVersion); - UpdateButtons(); + UpdateControls(); + UpdateDefaultVideoVersionSelection(); } void CGUIDialogVideoManagerVersions::SetDefaultVideoVersion(const CFileItem& version) @@ -270,6 +283,7 @@ void CGUIDialogVideoManagerVersions::AddVideoVersion() // refresh data and controls Refresh(); + UpdateControls(); } } diff --git a/xbmc/video/dialogs/GUIDialogVideoManagerVersions.h b/xbmc/video/dialogs/GUIDialogVideoManagerVersions.h index 77577845c1..1763ac965f 100644 --- a/xbmc/video/dialogs/GUIDialogVideoManagerVersions.h +++ b/xbmc/video/dialogs/GUIDialogVideoManagerVersions.h @@ -47,6 +47,7 @@ private: void SetDefaultVideoVersion(const CFileItem& version); void AddVideoVersion(); void SetDefault(); + void UpdateDefaultVideoVersionSelection(); std::shared_ptr<CFileItem> m_defaultVideoVersion; }; |