/***
Olive - Non-Linear Video Editor
Copyright (C) 2022 Olive Team
Modifications Copyright (C) 2025 mikesolar
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
***/
#ifndef OAK_FACTORYMENU_H
#define OAK_FACTORYMENU_H
#include
#include "node/factory.h"
#include "widget/menu/menu.h"
namespace olive
{
/**
* @brief Create a menu of all available nodes, grouped by category
*
* UI-side counterpart of the node library: NodeFactory stays UI-independent
* while this builds an olive::Menu from NodeFactory::get_library(). Each
* leaf action carries the node's library index in its data, so it can be
* resolved back with create_node_from_menu_action() or
* get_node_id_from_menu_action().
*/
Menu *create_node_menu(QWidget *parent, bool create_none_item = false,
Node::CategoryID restrict_to = Node::k_category_unknown,
uint64_t restrict_flags = 0);
/**
* @brief Create a node from an action of a menu built by create_node_menu()
*
* Returns nullptr for the "None" item.
*/
Node *create_node_from_menu_action(QAction *action);
/**
* @brief Get the node ID from an action of a menu built by create_node_menu()
*
* Returns an empty string for the "None" item.
*/
QString get_node_id_from_menu_action(QAction *action);
}
#endif // OAK_FACTORYMENU_H