1#ifndef IV_SRC_MODEL_DIAMAR_GROUPMENUMODEL_HPP_
2#define IV_SRC_MODEL_DIAMAR_GROUPMENUMODEL_HPP_
52 std::vector<iv::types::groupItemId> actionsToRemove;
58 if constexpr (std::is_same_v<std::weak_ptr<typename T::element_type>, T>)
60 if (item.actionItem.lock() == actionToRemove.lock())
62 actionsToRemove.push_back(itemId);
65 else if (item.actionItem == actionToRemove)
67 actionsToRemove.push_back(itemId);
72 item.removeAction(actionToRemove);
77 for (
const auto &actionId: actionsToRemove)
86 std::vector<T> actions;
94 std::map<iv::types::order, ItemModel<T>> orderedSubOptions;
97 orderedSubOptions.emplace(item.order, item);
100 for (
const auto &subOption: orderedSubOptions | std::views::values)
102 std::vector<T> subActions = subOption.flattenActions();
103 actions.insert(std::end(actions), std::begin(subActions), std::end(subActions));
127 items.emplace(
id, action);
134 items.emplace(
id, dropdown);
143 items.emplace(
id, dropdown);
147 const std::string &label,
const T &actionItem, uint8_t order)
157 std::cerr <<
"Dropdown item with label '" << dropdownId <<
"' not found." << std::endl;
167 dropdownItem.
subOptions.emplace(newOption.
id, newOption);
171 std::cerr <<
"Dropdown item with label '" << dropdownId <<
"' not found." << std::endl;
178 if (
items.contains(itemId))
181 std::cout <<
"Item '" << itemId <<
"' removed from the menu." << std::endl;
185 std::cerr <<
"Item '" << itemId <<
"' not found in the menu." << std::endl;
194 items.erase(dropdownId);
195 std::cout <<
"Dropdown item '" << dropdownId <<
"' removed from the menu." << std::endl;
199 std::cerr <<
"Dropdown item '" << dropdownId <<
"' not found in the menu." << std::endl;
210 if (dropdownItem.
subOptions.contains(optionId))
213 std::cout <<
"Option '" << optionId <<
"' removed from dropdown '" << dropdownId <<
"'." << std::endl;
217 std::cerr <<
"Option '" << optionId <<
"' not found in dropdown '" << dropdownId <<
"'." << std::endl;
222 std::cerr <<
"Dropdown item with label '" << dropdownId <<
"' not found." << std::endl;
228 std::vector<iv::types::groupItemId> itemsToRemove;
229 for (
auto &[itemId, item]:
items)
234 if constexpr (std::is_same_v<std::weak_ptr<typename T::element_type>, T>)
236 if (item.actionItem.lock() == action.lock())
238 itemsToRemove.push_back(itemId);
241 else if (item.actionItem == action)
243 itemsToRemove.push_back(itemId);
248 item.removeAction(action);
253 for (
const auto &itemId: itemsToRemove)
262 for (
auto &[itemId, item]:
items)
264 sortedItems.emplace(std::make_pair(item.order, itemId), &item);
268 for (
const auto &[order, item]: sortedItems)
270 item->order = optionOrder;
278 std::vector<std::string> labels;
280 for (
const auto &item:
items | std::views::values)
284 labels.push_back(item.label);
293 std::map<iv::types::order, ItemModel<T>> orderedItems;
296 orderedItems.emplace(item.order, item);
299 std::vector<T> actions;
300 for (
const auto &item: orderedItems | std::views::values)
302 std::vector<T> itemActions = item.flattenActions();
303 actions.insert(std::end(actions), std::begin(itemActions), std::end(itemActions));
311 static_assert(
sizeof(T) == -1,
"GroupMenuModel::save() debe ser implementada para este tipo especĂfico.");
316 static_assert(
sizeof(T) == -1,
"GroupMenuModel::load() debe ser implementada para este tipo especĂfico.");
320 std::map<iv::types::groupItemId, ItemModel<T>>
items;
325 static constexpr std::string_view
items {
"Items"};
326 static constexpr std::string_view
item {
"Item"};
328 static constexpr std::string_view
subOption {
"SubOption"};
338 static constexpr std::string_view
mimicId {
"MimicId"};
344 static constexpr std::string_view
group {
"Group"};
345 static constexpr std::string_view
mimic {
"Mimic"};
350 static constexpr std::string
string {};
Definition xmlFile.hpp:15
Definition GroupMenuModel.hpp:32
Type type
Definition GroupMenuModel.hpp:112
T actionItem
Definition GroupMenuModel.hpp:115
ItemModel()
Definition GroupMenuModel.hpp:34
std::string label
Definition GroupMenuModel.hpp:113
iv::types::order order
Definition GroupMenuModel.hpp:114
std::map< iv::types::groupItemId, ItemModel< T > > subOptions
Definition GroupMenuModel.hpp:116
void removeAction(const T &actionToRemove)
Definition GroupMenuModel.hpp:48
bool operator<(const ItemModel &other) const
Definition GroupMenuModel.hpp:43
ItemModel(iv::types::groupItemId _id, Type _type, std::string _label, uint8_t _order, const T &_actionItem=T())
Definition GroupMenuModel.hpp:38
iv::types::groupItemId id
Definition GroupMenuModel.hpp:111
std::vector< T > flattenActions() const
Definition GroupMenuModel.hpp:84
Definition DataLoggerManager.cpp:10
Definition DiamarModel.cpp:14
Type
Definition GroupMenuModel.hpp:25
std::string groupItemId
Definition types.hpp:71
uint64_t order
Definition types.hpp:90
Definition GroupMenuModel.hpp:348
static constexpr uint8_t order
Definition GroupMenuModel.hpp:349
Definition GroupMenuModel.hpp:335
static constexpr std::string_view groupName
Definition GroupMenuModel.hpp:336
static constexpr std::string_view mimicId
Definition GroupMenuModel.hpp:338
static constexpr std::string_view groupOrder
Definition GroupMenuModel.hpp:337
static constexpr std::string_view mimicOrder
Definition GroupMenuModel.hpp:339
Definition GroupMenuModel.hpp:342
static constexpr std::string_view mimic
Definition GroupMenuModel.hpp:345
static constexpr std::string_view mimicGroups
Definition GroupMenuModel.hpp:343
static constexpr std::string_view group
Definition GroupMenuModel.hpp:344