Skip to content

Commit

Permalink
[favourites][keymaps] Favourites Browser window: Add support for acti…
Browse files Browse the repository at this point in the history
…ons up/down/delete to catch up up with the functionality of the now deprecated Favourites dialog
  • Loading branch information
ksooo committed Jan 28, 2023
1 parent 642d55f commit d629422
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 15 deletions.
8 changes: 8 additions & 0 deletions system/keymaps/keyboard.xml
Original file line number Diff line number Diff line change
Expand Up @@ -670,6 +670,14 @@
<backspace mod="longpress">ActivateWindow(Home)</backspace>
</keyboard>
</Favourites>
<FavouritesBrowser>
<keyboard>
<u>MoveItemUp</u>
<d>MoveItemDown</d>
<delete>Delete</delete>
<backspace mod="longpress">ActivateWindow(Home)</backspace>
</keyboard>
</FavouritesBrowser>
<NumericInput>
<keyboard>
<backspace>Close</backspace>
Expand Down
8 changes: 3 additions & 5 deletions xbmc/favourites/ContextMenus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ namespace CONTEXTMENU
bool CMoveUpFavourite::DoExecute(CFileItemList& items,
const std::shared_ptr<CFileItem>& item) const
{
return CGUIWindowFavourites::MoveItem(items, *item, -1);
return CGUIWindowFavourites::MoveItem(items, item, -1);
}

bool CMoveUpFavourite::IsVisible(const CFileItem& item) const
Expand All @@ -52,7 +52,7 @@ namespace CONTEXTMENU
bool CMoveDownFavourite::DoExecute(CFileItemList& items,
const std::shared_ptr<CFileItem>& item) const
{
return CGUIWindowFavourites::MoveItem(items, *item, +1);
return CGUIWindowFavourites::MoveItem(items, item, +1);
}

bool CMoveDownFavourite::IsVisible(const CFileItem& item) const
Expand All @@ -64,9 +64,7 @@ namespace CONTEXTMENU
bool CRemoveFavourite::DoExecute(CFileItemList& items,
const std::shared_ptr<CFileItem>& item) const
{
int iBefore = items.Size();
items.Remove(item.get());
return items.Size() == iBefore - 1;
return CGUIWindowFavourites::RemoveItem(items, item);
}

bool CRenameFavourite::DoExecute(CFileItemList&, const std::shared_ptr<CFileItem>& item) const
Expand Down
85 changes: 76 additions & 9 deletions xbmc/favourites/GUIWindowFavourites.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,12 @@ bool CGUIWindowFavourites::OnSelect(int item)

bool CGUIWindowFavourites::OnAction(const CAction& action)
{
const int selectedItem = m_viewControl.GetSelectedItem();
if (selectedItem < 0 || selectedItem >= m_vecItems->Size())
return false;

if (action.GetID() == ACTION_PLAYER_PLAY)
{
const int selectedItem = m_viewControl.GetSelectedItem();
if (selectedItem < 0 || selectedItem >= m_vecItems->Size())
return false;

const CFavouritesURL favURL((*m_vecItems)[selectedItem]->GetPath());
if (!favURL.IsValid())
return false;
Expand Down Expand Up @@ -101,6 +101,21 @@ bool CGUIWindowFavourites::OnAction(const CAction& action)
}
return false;
}
else if (action.GetID() == ACTION_MOVE_ITEM_UP)
{
if (ShouldEnableMoveItems())
return MoveItem(selectedItem, -1);
}
else if (action.GetID() == ACTION_MOVE_ITEM_DOWN)
{
if (ShouldEnableMoveItems())
return MoveItem(selectedItem, +1);
}
else if (action.GetID() == ACTION_DELETE_ITEM)
{
return RemoveItem(selectedItem);
}

return CGUIMediaWindow::OnAction(action);
}

Expand Down Expand Up @@ -183,7 +198,30 @@ bool CGUIWindowFavourites::ChooseAndSetNewThumbnail(CFileItem& item)
return false;
}

bool CGUIWindowFavourites::MoveItem(CFileItemList& items, const CFileItem& item, int amount)
bool CGUIWindowFavourites::MoveItem(int item, int amount)
{
if (item < 0 || item >= m_vecItems->Size() || m_vecItems->Size() < 2 || amount == 0)
return false;

if (MoveItem(*m_vecItems, (*m_vecItems)[item], amount) &&
CServiceBroker::GetFavouritesService().Save(*m_vecItems))
{
int selected = item + amount;
if (selected >= m_vecItems->Size())
selected = 0;
else if (selected < 0)
selected = m_vecItems->Size() - 1;

m_viewControl.SetSelectedItem(selected);
return true;
}

return false;
}

bool CGUIWindowFavourites::MoveItem(CFileItemList& items,
const std::shared_ptr<CFileItem>& item,
int amount)
{
if (items.Size() < 2 || amount == 0)
return false;
Expand All @@ -193,7 +231,7 @@ bool CGUIWindowFavourites::MoveItem(CFileItemList& items, const CFileItem& item,
{
itemPos++;

if (i->GetPath() == item.GetPath())
if (i->GetPath() == item->GetPath())
break;
}

Expand All @@ -202,12 +240,41 @@ bool CGUIWindowFavourites::MoveItem(CFileItemList& items, const CFileItem& item,

int nextItem = (itemPos + amount) % items.Size();
if (nextItem < 0)
nextItem += items.Size();

items.Swap(itemPos, nextItem);
{
items.Remove(itemPos);
items.Add(item);
}
else if (nextItem == 0)
{
items.Remove(itemPos);
items.AddFront(item, 0);
}
else
{
items.Swap(itemPos, nextItem);
}
return true;
}

bool CGUIWindowFavourites::RemoveItem(int item)
{
if (item < 0 || item >= m_vecItems->Size())
return false;

if (RemoveItem(*m_vecItems, (*m_vecItems)[item]) &&
CServiceBroker::GetFavouritesService().Save(*m_vecItems))
return true;

return false;
}

bool CGUIWindowFavourites::RemoveItem(CFileItemList& items, const std::shared_ptr<CFileItem>& item)
{
int iBefore = items.Size();
items.Remove(item.get());
return items.Size() == iBefore - 1;
}

bool CGUIWindowFavourites::ShouldEnableMoveItems()
{
auto& mgr = CServiceBroker::GetGUI()->GetWindowManager();
Expand Down
5 changes: 4 additions & 1 deletion xbmc/favourites/GUIWindowFavourites.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ class CGUIWindowFavourites : public CGUIMediaWindow

static bool ChooseAndSetNewName(CFileItem& item);
static bool ChooseAndSetNewThumbnail(CFileItem& item);
static bool MoveItem(CFileItemList& items, const CFileItem& item, int amount);
static bool MoveItem(CFileItemList& items, const std::shared_ptr<CFileItem>& item, int amount);
static bool RemoveItem(CFileItemList& items, const std::shared_ptr<CFileItem>& item);
static bool ShouldEnableMoveItems();

protected:
Expand All @@ -36,4 +37,6 @@ class CGUIWindowFavourites : public CGUIMediaWindow

private:
void OnFavouritesEvent(const CFavouritesService::FavouritesUpdated& event);
bool MoveItem(int item, int amount);
bool RemoveItem(int item);
};

0 comments on commit d629422

Please sign in to comment.