PeriDyno 1.0.0
Loading...
Searching...
No Matches
PMainToolBar.cpp
Go to the documentation of this file.
1#include "PMainToolBar.h"
2
3#include <QPainter>
4#include <QToolButton>
5#include <QFileDialog>
6#include <QtSvg/QSvgRenderer>
7
8//tool bar
9#include "ToolBar/Page.h"
10#include "ToolBar/Group.h"
11#include "ToolBar/ToolBarPage.h"
12
13#include "PSimulationThread.h"
14
15//Framework
16#include "NodeFactory.h"
17#include "SceneGraphFactory.h"
18#include "SceneLoaderFactory.h"
19
20//Core
21#include "Platform.h"
22
23namespace dyno
24{
25 PMainToolBar::PMainToolBar(Qt::QtNodeFlowWidget* nodeFlow, QWidget* parent, unsigned _groupMaxHeight, unsigned _groupRowCount) :
26 tt::TabToolbar(parent, _groupMaxHeight, _groupRowCount)
27 {
28 mNodeFlow = nodeFlow;
29
32
33 QString mediaDir = QString::fromLocal8Bit(getAssetPath().c_str()) + "icon/";
34
35 auto convertIcon = [&](QString path) -> QIcon
36 {
37 QSvgRenderer svg_render(path);
38 QPixmap pixmap(48, 48);
39 pixmap.fill(Qt::transparent);
40 QPainter painter(&pixmap);
41 svg_render.render(&painter);
42 QIcon ico(pixmap);
43
44 return ico;
45 };
46
47 //Add ToolBar page
48 ToolBarPage m_toolBarPage;
49 std::vector<ToolBarIcoAndLabel> v_IcoAndLabel = m_toolBarPage.tbl;
50
51 for (int i = 0; i < v_IcoAndLabel.size(); i++) {
52 ToolBarIcoAndLabel m_tbl = v_IcoAndLabel[i];
53
54 tt::Page* MainPage = this->AddPage(QPixmap(mediaDir + m_tbl.tabPageIco), m_tbl.tabPageName);
55 auto m_page = MainPage->AddGroup("");
56
57 for (int j = 0; j < m_tbl.ico.size(); j++) {
58 //Add subtabs
59 QAction* art = new QAction(QPixmap(mediaDir + m_tbl.ico[j]), m_tbl.label[j]);
60 m_page->AddAction(QToolButton::DelayedPopup, art);
61
62 //reoder¹¦ÄÜ
63 if (i == v_IcoAndLabel.size() - 1 && j == 0) {
64 connect(art, &QAction::triggered, this, [=]() {mNodeFlow->flowScene()->reorderAllNodes(); });
65 }
66 }
67 }
68
69 //Add dynamic toolbar page
70 auto& pages = NodeFactory::instance()->nodePages();
71 for(auto iPage = pages.begin(); iPage != pages.end(); iPage++)
72 {
73 auto& groups = iPage->second->groups();
74
75 tt::Page* page = this->AddPage(QPixmap(mediaDir + QString::fromStdString(iPage->second->icon())), QString::fromStdString(iPage->second->caption()));
76
77 for (auto iGroup = groups.begin(); iGroup != groups.end(); iGroup++)
78 {
79 auto& actions = iGroup->second->actions();
80
81 auto qGroup = page->AddGroup("");
82 for (size_t i = 0; i < actions.size(); i++)
83 {
84 QFontMetrics fontMetrics(this->font());
85 QString caption = QString::fromStdString(actions[i]->caption());
86 QString elide = fontMetrics.elidedText(caption, Qt::ElideRight, 90);
87
88 QAction* act = new QAction(QPixmap(mediaDir + QString::fromStdString(actions[i]->icon())), elide);
89 act->setToolTip(caption);
90 qGroup->AddAction(QToolButton::DelayedPopup, act);
91
92 auto func = actions[i]->action();
93
94 if (func != nullptr) {
95 connect(act, &QAction::triggered, [=]() {
96 emit nodeCreated(func());
97 });
98 }
99 }
100 }
101 }
102 }
103
105 {
107 //emit newSceneLoaded();
108 }
109
111 {
112 mFileName = QFileDialog::getOpenFileName(this, tr("Open New ..."), "", tr("Xml Files (*.xml)"));
113 if (!mFileName.isEmpty()) {
115 auto scn = scnLoader->load(mFileName.toStdString());
116
117 if (scn) {
119 //SceneGraphFactory::instance()->pushScene(scn);
120 }
121 //emit newSceneLoaded();
122 }
123 }
124
126 {
127 if (mFileName.isEmpty())
128 mFileName = QFileDialog::getSaveFileName(this, tr("Save ..."), "", tr("Xml Files (*.xml)"));
129
130 if (!mFileName.isEmpty())
131 {
133 scnLoader->save(SceneGraphFactory::instance()->active(), mFileName.toStdString());
134 }
135 }
136
138 {
139 mFileName = QFileDialog::getSaveFileName(this, tr("Save As ..."), "", tr("Xml Files (*.xml)"));
140 if (!mFileName.isEmpty())
141 {
143 scnLoader->save(SceneGraphFactory::instance()->active(), mFileName.toStdString());
144 }
145 }
146
151
156
158 {
159 QString path = QString::fromStdString(getAssetPath());
160 tt::Page* filePage = this->AddPage(QPixmap(path + "icon/ToolBarIco/File/Open.png"), "File");
161
162 auto fileGroup = filePage->AddGroup("File");
163
164 mNewFileAct = new QAction(QPixmap(path + "icon/ToolBarIco/File/New_v2.png"), "New");
165 fileGroup->AddAction(QToolButton::DelayedPopup, mNewFileAct);
166
167 mOpenFileAct = new QAction(QPixmap(path + "icon/ToolBarIco/File/Open.png"), "Open");
168 fileGroup->AddAction(QToolButton::DelayedPopup, mOpenFileAct);
169
170 mSaveFileAct = new QAction(QPixmap(path + "icon/ToolBarIco/File/Save.png"), "Save");
171 fileGroup->AddAction(QToolButton::DelayedPopup, mSaveFileAct);
172
173 mSaveAsFileAct = new QAction(QPixmap(path + "icon/ToolBarIco/File/SaveAs.png"), "Save As");
174 fileGroup->AddAction(QToolButton::DelayedPopup, mSaveAsFileAct);
175
176 mCloseAct = new QAction(QPixmap(path + "icon/ToolBarIco/File/CloseSence.png"), "Close");
177 fileGroup->AddAction(QToolButton::DelayedPopup, mCloseAct);
178
179 mCloseAllAct = new QAction(QPixmap(path + "icon/ToolBarIco/File/CloseAll_v2.png"), "Close All");
180 fileGroup->AddAction(QToolButton::DelayedPopup, mCloseAllAct);
181
182 connect(mNewFileAct, &QAction::triggered, this, &PMainToolBar::newFile);
183 connect(mOpenFileAct, &QAction::triggered, this, &PMainToolBar::openFile);
184 connect(mSaveFileAct, &QAction::triggered, this, &PMainToolBar::saveFile);
185 connect(mSaveAsFileAct, &QAction::triggered, this, &PMainToolBar::saveAsFile);
186 connect(mCloseAct, &QAction::triggered, this, &PMainToolBar::closeFile);
187 connect(mCloseAllAct, &QAction::triggered, this, &PMainToolBar::closeAllFiles);
188 }
189
191 {
192 QString path = QString::fromStdString(getAssetPath());
193 tt::Page* filePage = this->AddPage(QPixmap(path + "icon/ToolBarIco/Edit/Settings_v2.png"), "Edit");
194
195 auto configGroup = filePage->AddGroup("Config");
196
197 mLogAct = new QAction(QPixmap(path + "icon/ToolBarIco/Edit/Edit.png"), "Logging");
198 mLogAct->setCheckable(true);
199 configGroup->AddAction(QToolButton::DelayedPopup, mLogAct);
200
201 mSettingAct = new QAction(QPixmap(path + "icon/ToolBarIco/Edit/Settings_v2.png"), "Settings");
202 configGroup->AddAction(QToolButton::DelayedPopup, mSettingAct);
203
204 connect(mLogAct, &QAction::triggered, this, [=]() { emit logActTriggered(); });
205 connect(mSettingAct, &QAction::triggered, this, [=]() { emit settingTriggered(); });
206
207 }
208
209
210}
211
static NodeFactory * instance()
std::map< std::string, std::shared_ptr< NodePage > > & nodePages()
QAction * mNewFileAct
QAction * mSaveAsFileAct
QAction * mCloseAllAct
QAction * mOpenFileAct
Qt::QtNodeFlowWidget * mNodeFlow
void nodeCreated(std::shared_ptr< Node > node)
QAction * mSettingAct
PMainToolBar(Qt::QtNodeFlowWidget *nodeFlow, QWidget *parent=nullptr, unsigned _groupMaxHeight=75, unsigned _groupRowCount=3)
QAction * mSaveFileAct
static PSimulationThread * instance()
static SceneGraphFactory * instance()
static SceneLoaderFactory & getInstance()
Get the ObjectFactory singleton instance.
SceneLoader * getEntryByFileExtension(std::string extension)
Get an entry given a file extension.
virtual bool save(std::shared_ptr< SceneGraph > scn, const std::string filename)
virtual std::shared_ptr< SceneGraph > load(const std::string filename)
std::vector< QString > ico
Definition ToolBarPage.h:18
std::vector< QString > label
Definition ToolBarPage.h:20
std::vector< ToolBarIcoAndLabel > tbl
Definition ToolBarPage.h:31
Group * AddGroup(const QString &name)
Definition Page.cpp:91
TabToolbar(QWidget *parent=nullptr, unsigned _groupMaxHeight=75, unsigned _groupRowCount=3)
Page * AddPage(const QString &pageName)
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Definition Builder.h:33