mirror of https://github.com/stella-emu/stella.git
enhanced launcher context menu display
This commit is contained in:
parent
9ed29a81e7
commit
a4059235fa
|
@ -1013,73 +1013,89 @@ void LauncherDialog::toggleSorting()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LauncherDialog::addContextItem(VariantList& items, const string& label,
|
|
||||||
const string& shortcut, const string& key)
|
|
||||||
{
|
|
||||||
const string pad = " ";
|
|
||||||
|
|
||||||
if(myUseMinimalUI)
|
|
||||||
VarList::push_back(items, " " + label + " ", key);
|
|
||||||
else
|
|
||||||
VarList::push_back(items, " " + label + pad.substr(0, 29 - label.length())
|
|
||||||
+ shortcut + " ", key);
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void LauncherDialog::openContextMenu(int x, int y)
|
void LauncherDialog::openContextMenu(int x, int y)
|
||||||
{
|
{
|
||||||
|
// Dynamically create context menu for ROM list options
|
||||||
|
// TODO: remove 'Incl. subdirs' and 'Show all' from GUI? Replace with icons.
|
||||||
|
|
||||||
if(x < 0 || y < 0)
|
if(x < 0 || y < 0)
|
||||||
{
|
{
|
||||||
// Determine position from currently selected list item
|
// Long pressed button, determine position from currently selected list item
|
||||||
x = myList->getLeft() + myList->getWidth() / 2;
|
x = myList->getLeft() + myList->getWidth() / 2;
|
||||||
y = myList->getTop() + (myList->getSelected() - myList->currentPos() + 1) * _font.getLineHeight();
|
y = myList->getTop() + (myList->getSelected() - myList->currentPos() + 1) * _font.getLineHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dynamically create context menu for ROM list options
|
struct ContextItem {
|
||||||
VariantList items;
|
string label;
|
||||||
|
string shortcut;
|
||||||
// TODO: remove 'Incl. subdirs' and 'Show all' from GUI? Replace with icons.
|
string key;
|
||||||
|
explicit ContextItem(const string _label, const string _shortcut, const string _key)
|
||||||
|
: label{_label}, shortcut{_shortcut}, key{_key} {}
|
||||||
|
// No shortcuts displayed in minimal UI
|
||||||
|
ContextItem(const string _label, const string _key)
|
||||||
|
: label{_label}, key{_key} {}
|
||||||
|
};
|
||||||
|
using ContextList = std::vector<ContextItem>;
|
||||||
|
ContextList items;
|
||||||
|
|
||||||
if(!currentNode().isDirectory())
|
if(!currentNode().isDirectory())
|
||||||
{
|
{
|
||||||
if(myList->inRecentDir())
|
if(myList->inRecentDir())
|
||||||
addContextItem(items, "Remove from recently played", "Ctrl+X", "remove");
|
items.push_back(ContextItem("Remove from recently played", "Ctrl+X", "remove"));
|
||||||
if(myList->inPopularDir())
|
if(myList->inPopularDir())
|
||||||
addContextItem(items, "Remove from most popular", "Ctrl+X", "remove");
|
items.push_back(ContextItem("Remove from most popular", "Ctrl+X", "remove"));
|
||||||
if(Bankswitch::isValidRomName(currentNode()))
|
if(Bankswitch::isValidRomName(currentNode()))
|
||||||
{
|
{
|
||||||
addContextItem(items, myList->isUserFavorite(myList->selected().getPath())
|
items.push_back(ContextItem(myList->isUserFavorite(myList->selected().getPath())
|
||||||
? "Remove from favorites"
|
? "Remove from favorites"
|
||||||
: "Add to favorites", "Ctrl+F", "favorite");
|
: "Add to favorites", "Ctrl+F", "favorite"));
|
||||||
addContextItem(items, "Power-on options" + ELLIPSIS, "Ctrl+P", "override");
|
items.push_back(ContextItem("Power-on options" + ELLIPSIS, "Ctrl+P", "override"));
|
||||||
if(instance().highScores().enabled())
|
if(instance().highScores().enabled())
|
||||||
addContextItem(items, "High scores" + ELLIPSIS, "Ctrl+H", "highscores");
|
items.push_back(ContextItem("High scores" + ELLIPSIS, "Ctrl+H", "highscores"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(myUseMinimalUI)
|
if(myUseMinimalUI)
|
||||||
{
|
{
|
||||||
#ifndef RETRON77
|
#ifndef RETRON77
|
||||||
addContextItem(items, instance().settings().getBool("launcherroms")
|
items.push_back(ContextItem(instance().settings().getBool("launcherroms")
|
||||||
? "Show all files"
|
? "Show all files"
|
||||||
: "Show only ROMs", "Ctrl+A", "showall");
|
: "Show only ROMs", "showall"));
|
||||||
addContextItem(items, instance().settings().getBool("launchersubdirs")
|
items.push_back(ContextItem(instance().settings().getBool("launchersubdirs")
|
||||||
? "Exclude subdirectories"
|
? "Exclude subdirectories"
|
||||||
: "Include subdirectories", "Ctrl+D", "subdirs");
|
: "Include subdirectories", "subdirs"));
|
||||||
#endif
|
#endif
|
||||||
addContextItem(items, "Options" + ELLIPSIS, "Ctrl+O", "options");
|
items.push_back(ContextItem("Options" + ELLIPSIS, "options"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
addContextItem(items, instance().settings().getBool("launcherextensions")
|
items.push_back(ContextItem(instance().settings().getBool("launcherextensions")
|
||||||
? "Disable file extensions"
|
? "Disable file extensions"
|
||||||
: "Enable file extensions", "Ctrl+E", "extensions");
|
: "Enable file extensions", "Ctrl+E", "extensions"));
|
||||||
if(myList->inVirtualDir())
|
if(myList->inVirtualDir())
|
||||||
addContextItem(items, instance().settings().getBool("altsorting")
|
items.push_back(ContextItem(instance().settings().getBool("altsorting")
|
||||||
? "Normal sorting"
|
? "Normal sorting"
|
||||||
: "Alternative sorting", "Ctrl+S", "sorting");
|
: "Alternative sorting", "Ctrl+S", "sorting"));
|
||||||
addContextItem(items, "Reload listing", "Ctrl+R", "reload");
|
items.push_back(ContextItem("Reload listing", "Ctrl+R", "reload"));
|
||||||
}
|
}
|
||||||
contextMenu().addItems(items);
|
|
||||||
|
// Format items for menu
|
||||||
|
VariantList varItems;
|
||||||
|
if(myUseMinimalUI)
|
||||||
|
for(auto& item : items)
|
||||||
|
VarList::push_back(varItems, " " + item.label + " ", item.key);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Align all shortcuts to the right
|
||||||
|
size_t maxLen = 0;
|
||||||
|
for(auto& item : items)
|
||||||
|
maxLen = std::max(maxLen, item.label.length());
|
||||||
|
|
||||||
|
for(auto& item : items)
|
||||||
|
VarList::push_back(varItems, " " + item.label.append(maxLen - item.label.length(), ' ')
|
||||||
|
+ " " + item.shortcut + " ", item.key);
|
||||||
|
}
|
||||||
|
contextMenu().addItems(varItems);
|
||||||
|
|
||||||
// Add menu at current x,y mouse location
|
// Add menu at current x,y mouse location
|
||||||
contextMenu().show(x + getAbsX(), y + getAbsY(), surface().dstRect(), 0);
|
contextMenu().show(x + getAbsX(), y + getAbsY(), surface().dstRect(), 0);
|
||||||
|
|
|
@ -161,8 +161,6 @@ class LauncherDialog : public Dialog
|
||||||
void toggleSubDirs();
|
void toggleSubDirs();
|
||||||
void toggleExtensions();
|
void toggleExtensions();
|
||||||
void toggleSorting();
|
void toggleSorting();
|
||||||
void addContextItem(VariantList& items, const string& label,
|
|
||||||
const string& shortcut, const string& key);
|
|
||||||
void openContextMenu(int x = -1, int y = -1);
|
void openContextMenu(int x = -1, int y = -1);
|
||||||
void openGlobalProps();
|
void openGlobalProps();
|
||||||
void openSettings();
|
void openSettings();
|
||||||
|
|
Loading…
Reference in New Issue