57 const QList<QAction*>& actions = parent()->findChildren<QAction*>();
58 const QList<QMenu*>& menus = parent()->findChildren<QMenu*>();
59 QMap<QString, QAction*> actionsMap;
60 QMap<QString, QMenu*> menusMap;
61 for(QAction* action : actions)
62 actionsMap.insert(action->objectName(), action);
63 for(QMenu* menu : menus)
64 menusMap.insert(menu->objectName(), menu);
66 QFile configFile(configPath);
67 configFile.open(QIODevice::ReadOnly);
68 const QJsonDocument config(QJsonDocument::fromJson(configFile.readAll()));
69 const QJsonObject root = config.object();
70 const int groupHeight = root[
"groupHeight"].toInt();
71 const int groupRowCount = root[
"groupRowCount"].toInt();
72 const bool hasSpecialTab = root[
"specialTab"].toBool();
75 auto CreateCustomWidget = [
this,
tt](
const QString& name,
const QJsonObject& item)
78 throw std::logic_error(std::string(
"Unknown item type: ") + name.toStdString());
80 if(item.contains(
"name"))
82 w->setObjectName(item[
"name"].toString());
89 auto CreateActionParams = [
this, &actionsMap, &menusMap](
const QJsonObject& obj)
92 const QString type = obj[
"type"].toString();
93 if(type ==
"delayedPopup")
94 params.
type = QToolButton::DelayedPopup;
95 else if(type ==
"instantPopup")
96 params.
type = QToolButton::InstantPopup;
97 else if(type ==
"menuButtonPopup")
98 params.
type = QToolButton::MenuButtonPopup;
100 throw std::logic_error(std::string(
"Unknown toolbutton popup mode: ") + type.toStdString());
102 params.
action = actionsMap[obj[
"name"].toString()];
103 params.
menu =
nullptr;
104 if(obj.contains(
"menu") && !obj[
"menu"].isNull())
105 params.
menu = menusMap[obj[
"menu"].toString()];
109 const QJsonArray cornerActions = root[
"cornerActions"].toArray();
110 for(
int i=0; i<cornerActions.size(); i++)
111 tt->AddCornerAction(actionsMap[cornerActions.at(i).toString()]);
113 const QJsonArray menusList = root[
"menus"].toArray();
114 for(
int i=0; i<menusList.size(); i++)
116 const QJsonObject menuObject = menusList.at(i).toObject();
117 QMenu* menu =
new QMenu((QWidget*)parent());
118 menu->setObjectName(menuObject[
"name"].toString());
119 menusMap[menu->objectName()] = menu;
121 const QJsonArray menuActions = menuObject[
"actions"].toArray();
122 for(
int j=0; j<menuActions.size(); j++)
124 const QString actionName = menuActions.at(j).toString();
125 if(actionName ==
"separator")
126 menu->addSeparator();
128 menu->addActions({actionsMap[actionName]});
132 const QJsonArray tabs = root[
"tabs"].toArray();
133 for(
int i=0; i<tabs.size(); i++)
135 const QJsonObject tab = tabs.at(i).toObject();
136 const QString pageDisplayName = tab[
"displayName"].toString();
137 const QString pageName = tab[
"name"].toString();
138 Page* page =
tt->AddPage(pageDisplayName);
141 const QJsonArray groups = tab[
"groups"].toArray();
142 for(
int j=0; j<groups.size(); j++)
144 const QJsonObject groupObject = groups.at(j).toObject();
145 const QString groupDisplayName = groupObject[
"displayName"].toString();
146 const QString groupName = groupObject[
"name"].toString();
150 const QJsonArray content = groupObject[
"content"].toArray();
151 for(
int k=0; k<content.size(); k++)
153 const QJsonObject item = content.at(k).toObject();
155 static const QList<QString> defaultTypes = {
"action",
"subgroup",
"separator"};
156 const QString itemType = item[
"itemType"].toString();
157 int type = defaultTypes.indexOf(itemType);
169 if(!item[
"aligned"].toBool())
172 const QString subGroupName = item[
"name"].toString();
173 subGroup->setObjectName(subGroupName);
176 const QJsonArray subGroupContent = item[
"content"].toArray();
177 for(
int w=0; w<subGroupContent.size(); w++)
179 const QJsonObject sgItem = subGroupContent.at(w).toObject();
181 static const QList<QString> defaultSgTypes = {
"action",
"horizontalActions"};
182 const QString sgItemType = sgItem[
"itemType"].toString();
183 int sgType = defaultSgTypes.indexOf(sgItemType);
194 std::vector<SubGroup::ActionParams> horizActions;
195 const QJsonArray horizActionsArray = sgItem[
"actions"].toArray();
196 for(
int x=0; x<horizActionsArray.size(); x++)
198 const QJsonObject horizAction = horizActionsArray.at(x).toObject();
199 horizActions.push_back(CreateActionParams(horizAction));
206 QWidget* w = CreateCustomWidget(sgItemType, sgItem);
219 QWidget* w = CreateCustomWidget(itemType, item);
228 tt->SetSpecialTabEnabled(hasSpecialTab);
Group * AddGroup(const QString &name)