aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Sommerfeld <3226626+ksooo@users.noreply.github.com>2023-12-26 13:02:57 +0100
committerGitHub <noreply@github.com>2023-12-26 13:02:57 +0100
commit8a78f00ffae8db1092095b94c4bb9f3350d62979 (patch)
treef23f2eb39539c3523696431cafc5c266d466f6a8
parent80653dc05ff9af0a6fb96f530f6d3be0cd3fc308 (diff)
parent52d3a23c5ece4ab6141cdb47ae22092a44829143 (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.cpp77
-rw-r--r--xbmc/video/dialogs/GUIDialogVideoManager.h5
-rw-r--r--xbmc/video/dialogs/GUIDialogVideoManagerExtras.cpp9
-rw-r--r--xbmc/video/dialogs/GUIDialogVideoManagerExtras.h2
-rw-r--r--xbmc/video/dialogs/GUIDialogVideoManagerVersions.cpp18
-rw-r--r--xbmc/video/dialogs/GUIDialogVideoManagerVersions.h1
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;
};