Skip to content

Commit 32ff4ef

Browse files
committed
Add button to save svg files
1 parent 89ba053 commit 32ff4ef

File tree

5 files changed

+109
-5
lines changed

5 files changed

+109
-5
lines changed

bt_editor/graphic_container.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <QMessageBox>
1212
#include <QApplication>
1313
#include <QInputDialog>
14+
#include <QSvgGenerator>
1415

1516
using namespace QtNodes;
1617

@@ -162,6 +163,18 @@ void GraphicContainer::nodeReorder()
162163
emit undoableChange();
163164
}
164165

166+
void GraphicContainer::saveSvgFile(const QString path)
167+
{
168+
QSvgGenerator generator;
169+
QRectF rect = _scene->itemsBoundingRect();
170+
generator.setFileName(path);
171+
generator.setSize(QSize(rect.width(), rect.height()));
172+
generator.setViewBox(rect);
173+
QPainter painter;
174+
painter.begin(&generator);
175+
_scene->render(&painter, rect, rect);
176+
}
177+
165178
void GraphicContainer::zoomHomeView()
166179
{
167180
QRectF rect = _scene->itemsBoundingRect();
@@ -720,5 +733,3 @@ void GraphicContainer::loadFromJson(const QByteArray &data)
720733
clearScene();
721734
scene()->loadFromMemory( data );
722735
}
723-
724-

bt_editor/graphic_container.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class GraphicContainer : public QObject
3333

3434
void nodeReorder();
3535

36+
void saveSvgFile(const QString path);
37+
3638
void zoomHomeView();
3739

3840
bool containsValidTree() const;

bt_editor/mainwindow.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,13 +683,30 @@ void MainWindow::onAutoArrange()
683683
currentTabInfo()->nodeReorder();
684684
}
685685

686+
void MainWindow::onSaveSvg()
687+
{
688+
QSettings settings;
689+
QString last_load_path = settings.value("MainWindow.lastLoadDirectory",
690+
QDir::homePath() ).toString();
691+
QString directory_path = settings.value("MainWindow.lastSaveSvgDirectory",
692+
last_load_path ).toString();
693+
694+
QString fileName = QFileDialog::getSaveFileName(this,
695+
tr("Save BehaviorTree to svg"), directory_path,
696+
tr("SVG files (*.svg)"));
697+
currentTabInfo()->saveSvgFile(fileName);
698+
699+
directory_path = QFileInfo(fileName).absolutePath();
700+
settings.setValue("SidepanelEditor.lastSaveSvgDirectory", directory_path);
701+
}
702+
686703
void MainWindow::onSceneChanged()
687704
{
688705
const bool valid_BT = currentTabInfo()->containsValidTree();
689706

690707
ui->toolButtonLayout->setEnabled(valid_BT);
691708
ui->toolButtonReorder->setEnabled(valid_BT);
692-
ui->toolButtonReorder->setEnabled(valid_BT);
709+
ui->toolButtonSaveSvg->setEnabled(valid_BT);
693710

694711
ui->actionSave->setEnabled(valid_BT);
695712
QPixmap pix;
@@ -1167,6 +1184,11 @@ void MainWindow::on_toolButtonReorder_pressed()
11671184
onAutoArrange();
11681185
}
11691186

1187+
void MainWindow::on_toolButtonSaveSvg_pressed()
1188+
{
1189+
onSaveSvg();
1190+
}
1191+
11701192
void MainWindow::on_toolButtonCenterView_pressed()
11711193
{
11721194
currentTabInfo()->zoomHomeView();
@@ -1313,6 +1335,7 @@ void MainWindow::updateCurrentMode()
13131335

13141336
ui->toolButtonSaveFile->setHidden( NOT_EDITOR );
13151337
ui->toolButtonReorder->setHidden( NOT_EDITOR );
1338+
ui->toolButtonSaveSvg->setHidden( NOT_EDITOR );
13161339

13171340
if( _current_mode == GraphicMode::EDITOR )
13181341
{

bt_editor/mainwindow.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ public slots:
7171

7272
void onAutoArrange();
7373

74+
void onSaveSvg();
75+
7476
void onSceneChanged();
7577

7678
void onPushUndo();
@@ -102,6 +104,8 @@ public slots:
102104

103105
void on_toolButtonReorder_pressed();
104106

107+
void on_toolButtonSaveSvg_pressed();
108+
105109
void on_toolButtonCenterView_pressed();
106110

107111
void onCreateAbsBehaviorTree(const AbsBehaviorTree &tree,

bt_editor/mainwindow.ui

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -511,8 +511,7 @@ QToolButton:disabled{
511511
<bool>true</bool>
512512
</property>
513513
</widget>
514-
</item>
515-
<item>
514+
</item><item>
516515
<widget class="QToolButton" name="toolButtonReorder">
517516
<property name="enabled">
518517
<bool>false</bool>
@@ -577,6 +576,71 @@ QToolButton:disabled{
577576
</property>
578577
</widget>
579578
</item>
579+
<item>
580+
<widget class="QToolButton" name="toolButtonSaveSvg">
581+
<property name="enabled">
582+
<bool>false</bool>
583+
</property>
584+
<property name="sizePolicy">
585+
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
586+
<horstretch>80</horstretch>
587+
<verstretch>70</verstretch>
588+
</sizepolicy>
589+
</property>
590+
<property name="minimumSize">
591+
<size>
592+
<width>80</width>
593+
<height>70</height>
594+
</size>
595+
</property>
596+
<property name="font">
597+
<font>
598+
<pointsize>9</pointsize>
599+
</font>
600+
</property>
601+
<property name="focusPolicy">
602+
<enum>Qt::NoFocus</enum>
603+
</property>
604+
<property name="styleSheet">
605+
<string notr="true">QToolButton {
606+
color:white;
607+
}
608+
609+
QToolButton:hover{
610+
background-color: rgb(110, 110, 110);
611+
}
612+
613+
QToolButton:pressed{
614+
background-color: rgb(50, 150, 0)
615+
}
616+
617+
QToolButton:disabled{
618+
color:gray;
619+
background-color: rgb(50, 50, 50)
620+
}
621+
</string>
622+
</property>
623+
<property name="text">
624+
<string>Save svg</string>
625+
</property>
626+
<property name="icon">
627+
<iconset resource="resources/icons.qrc">
628+
<normaloff>:/icons/svg/save_white.svg</normaloff>:/icons/svg/save_white.svg</iconset>
629+
</property>
630+
<property name="iconSize">
631+
<size>
632+
<width>32</width>
633+
<height>32</height>
634+
</size>
635+
</property>
636+
<property name="toolButtonStyle">
637+
<enum>Qt::ToolButtonTextUnderIcon</enum>
638+
</property>
639+
<property name="autoRaise">
640+
<bool>true</bool>
641+
</property>
642+
</widget>
643+
</item>
580644
<item>
581645
<widget class="QFrame" name="semaphoreFrame">
582646
<property name="minimumSize">

0 commit comments

Comments
 (0)