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);
auto addSource = [this, popup] (const char *type, const char *name) {
QAction *popupItem = new QAction(QT_UTF8(name), this);
auto getActionAfter = [] (QMenu *menu, const QString &name)
{
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));
connect(popupItem, SIGNAL(triggered(bool)),
this, SLOT(AddSourceFromAction()));
popup->addAction(popupItem);
QAction *after = getActionAfter(popup, qname);
popup->insertAction(after, popupItem);
};
while (obs_enum_input_types(idx++, &type)) {
const char *name = obs_source_get_display_name(type);
addSource(type, name);
addSource(popup, type, name);
foundValues = true;
}
addSource("scene", Str("Basic.Scene"));
addSource(popup, "scene", Str("Basic.Scene"));
if (!foundValues) {
delete popup;