0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 13:08:50 +02:00

UI: Sort 'Add' source popup menu

This commit is contained in:
jp9000 2016-09-14 16:27:04 -07:00
parent 4584ef2511
commit dc2915dc3b

View File

@ -3185,22 +3185,39 @@ QMenu *OBSBasic::CreateAddSourcePopupMenu()
QMenu *popup = new QMenu(QTStr("Add"), this); QMenu *popup = new QMenu(QTStr("Add"), this);
auto addSource = [this, popup] (const char *type, const char *name) { auto getActionAfter = [] (QMenu *menu, const QString &name)
QAction *popupItem = new QAction(QT_UTF8(name), this); {
QList<QAction*> actions = menu->actions();
for (QAction *menuAction : actions) {
if (menuAction->text().compare(name) >= 0)
return menuAction;
}
return (QAction*)nullptr;
};
auto addSource = [this, getActionAfter] (QMenu *popup,
const char *type, const char *name)
{
QString qname = QT_UTF8(name);
QAction *popupItem = new QAction(qname, this);
popupItem->setData(QT_UTF8(type)); popupItem->setData(QT_UTF8(type));
connect(popupItem, SIGNAL(triggered(bool)), connect(popupItem, SIGNAL(triggered(bool)),
this, SLOT(AddSourceFromAction())); this, SLOT(AddSourceFromAction()));
popup->addAction(popupItem);
QAction *after = getActionAfter(popup, qname);
popup->insertAction(after, popupItem);
}; };
while (obs_enum_input_types(idx++, &type)) { while (obs_enum_input_types(idx++, &type)) {
const char *name = obs_source_get_display_name(type); const char *name = obs_source_get_display_name(type);
addSource(type, name); addSource(popup, type, name);
foundValues = true; foundValues = true;
} }
addSource("scene", Str("Basic.Scene")); addSource(popup, "scene", Str("Basic.Scene"));
if (!foundValues) { if (!foundValues) {
delete popup; delete popup;