Skip to content

Commit 667c489

Browse files
committed
Add region split dialog
1 parent 5495835 commit 667c489

8 files changed

+202
-1
lines changed

Segmentor.qrc

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<file>icons/icon_update.png</file>
1212
<file>icons/icon_clean.png</file>
1313
<file>icons/icon_split.png</file>
14+
<file>icons/icon_split_multiple.png</file>
1415
<file>icons/icon_overlay.png</file>
1516
<file>icons/icon_outline.png</file>
1617
<file>icons/icon_rescale_full.png</file>

icons/icon_split_multiple.png

907 Bytes
Loading

icons/icon_split_multiple.svg

+3
Loading

qt/MainWindow.cxx

+19-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "CameraViewDialog.h"
2525
#include "SettingsDialog.h"
2626
#include "SegmentVolumeDialog.h"
27+
#include "SplitRegionDialog.h"
2728
#include "vtkInteractorStyleSlice.h"
2829

2930
#include <vtkCallbackCommand.h>
@@ -665,10 +666,16 @@ void MainWindow::on_actionClean() {
665666
}
666667

667668
void MainWindow::on_actionSplit() {
668-
// Split in half for now, add interface for selecting number in future?
669+
// Split in two
669670
visualizationContainer->SplitCurrentRegion(2);
670671
}
671672

673+
void MainWindow::on_actionSplitMultiple() {
674+
SplitRegionDialog dialog(this, visualizationContainer);
675+
676+
dialog.exec();
677+
}
678+
672679
void MainWindow::on_actionFill() {
673680
visualizationContainer->FillCurrentRegionSlice();
674681
}
@@ -994,6 +1001,7 @@ void MainWindow::createModeBar() {
9941001
toolBar->addAction(createActionIcon(":/icons/icon_update.png", "Update current region (u)", "u", &MainWindow::on_actionUpdate));
9951002
toolBar->addAction(createActionIcon(":/icons/icon_clean.png", "Clean current region (0)", "0", &MainWindow::on_actionClean));
9961003
toolBar->addAction(createActionIcon(":/icons/icon_split.png", "Split current region (/)", "/", &MainWindow::on_actionSplit));
1004+
toolBar->addAction(createActionIcon(":/icons/icon_split_multiple.png", "Split current region into multiple regions (Ctrl + /)", QKeySequence(Qt::CTRL + Qt::Key_Slash), &MainWindow::on_actionSplitMultiple));
9971005
toolBar->addAction(createActionIcon(":/icons/icon_done.png", "Toggle current region done (d)", "d", &MainWindow::on_actionDone));
9981006

9991007
modeBarWidget->layout()->addWidget(toolBar);
@@ -1056,6 +1064,16 @@ QAction* MainWindow::createActionIcon(const QString& fileName, const QString& te
10561064
return action;
10571065
}
10581066

1067+
QAction* MainWindow::createActionIcon(const QString& fileName, const QString& text, const QKeySequence& shortcut, void (MainWindow::*slot)()) {
1068+
QAction* action = new QAction(QIcon(fileName), text, this);
1069+
action->setShortcut(shortcut);
1070+
action->setCheckable(false);
1071+
1072+
QObject::connect(action, &QAction::triggered, this, slot);
1073+
1074+
return action;
1075+
}
1076+
10591077
QAction* MainWindow::createActionIcon(const QString& fileName, const QString& text, const QString& shortcut, bool checked, void (MainWindow::*slot)(bool)) {
10601078
QAction* action = new QAction(QIcon(fileName), text, this);
10611079
action->setShortcut(QKeySequence(shortcut));

qt/MainWindow.h

+2
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public slots:
8989
virtual void on_actionUpdate();
9090
virtual void on_actionClean();
9191
virtual void on_actionSplit();
92+
virtual void on_actionSplitMultiple();
9293
virtual void on_actionFill();
9394

9495
// Tool bar events
@@ -166,6 +167,7 @@ public slots:
166167
void createToolBar();
167168
QAction* createAction(const QString& text, const QString& shortcut, void (MainWindow::*slot)());
168169
QAction* createActionIcon(const QString& fileName, const QString& text, const QString& shortcut, void (MainWindow::*slot)());
170+
QAction* createActionIcon(const QString& fileName, const QString& text, const QKeySequence& shortcut, void (MainWindow::*slot)());
169171
QAction* createActionIcon(const QString& fileName, const QString& text, const QString& shortcut, bool checked, void (MainWindow::*slot)(bool));
170172
QAction* createActionIcon(const QString& fileName, const QString& text, const QString& shortcut, QActionGroup* group, bool checked, void (MainWindow::*slot)());
171173
QLabel* createLabel(const QString& text, int topMargin = 10, int bottomMargin = 5, int leftMargin = 0, int rightMargin = 0);

qt/SplitRegionDialog.cxx

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include "SplitRegionDialog.h"
2+
3+
#include "VisualizationContainer.h"
4+
#include "SliceView.h"
5+
#include "VolumeView.h"
6+
7+
// Constructor
8+
SplitRegionDialog::SplitRegionDialog(QWidget* parent, VisualizationContainer* visualizationContainer)
9+
: QDialog(parent), visualizationContainer(visualizationContainer) {
10+
// Create the GUI from the Qt Designer file
11+
setupUi(this);
12+
13+
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
14+
15+
// Handle rejection :-(
16+
QObject::connect(this, &SplitRegionDialog::rejected, this, &SplitRegionDialog::on_reject);
17+
18+
QObject::connect(numberSlider, &QSlider::valueChanged, numberSpinBox, &QSpinBox::setValue);
19+
QObject::connect(numberSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), numberSlider, &QSlider::setValue);
20+
21+
visualizationContainer->PushTempHistory();
22+
}
23+
24+
SplitRegionDialog::~SplitRegionDialog() {
25+
}
26+
27+
void SplitRegionDialog::on_updateButton_clicked() {
28+
SplitRegion();
29+
}
30+
31+
void SplitRegionDialog::SplitRegion() {
32+
visualizationContainer->PopTempHistory();
33+
34+
visualizationContainer->SplitCurrentRegion(numberSpinBox->value());
35+
}
36+
37+
void SplitRegionDialog::on_reject() {
38+
visualizationContainer->PopTempHistory();
39+
}

qt/SplitRegionDialog.h

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#ifndef SplitRegionDialog_H
2+
#define SplitRegionDialog_H
3+
4+
#include "ui_SplitRegionDialog.h"
5+
6+
class VisualizationContainer;
7+
8+
class SplitRegionDialog : public QDialog, private Ui::SplitRegionDialog {
9+
Q_OBJECT
10+
public:
11+
SplitRegionDialog(QWidget* parent, VisualizationContainer* visualizationContainer);
12+
virtual ~SplitRegionDialog();
13+
14+
public slots:
15+
// Menu events
16+
// Use Qt's auto-connect magic to tie GUI widgets to slots,
17+
// removing the need to call connect() explicitly.
18+
// Names of the methods must follow the naming convention
19+
// on_<widget name>_<signal name>(<signal parameters>).
20+
virtual void on_updateButton_clicked();
21+
22+
virtual void on_reject();
23+
24+
protected:
25+
VisualizationContainer* visualizationContainer;
26+
27+
void SplitRegion();
28+
};
29+
30+
#endif

qt/SplitRegionDialog.ui

+108
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>SplitRegionDialog</class>
4+
<widget class="QDialog" name="SplitRegionDialog">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>255</width>
10+
<height>100</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Split Region</string>
15+
</property>
16+
<layout class="QVBoxLayout" name="verticalLayout">
17+
<item>
18+
<layout class="QHBoxLayout" name="horizontalLayout">
19+
<item>
20+
<widget class="QLabel" name="label">
21+
<property name="text">
22+
<string>Number of regions</string>
23+
</property>
24+
</widget>
25+
</item>
26+
<item>
27+
<widget class="QSlider" name="numberSlider">
28+
<property name="minimum">
29+
<number>2</number>
30+
</property>
31+
<property name="maximum">
32+
<number>10</number>
33+
</property>
34+
<property name="pageStep">
35+
<number>2</number>
36+
</property>
37+
<property name="orientation">
38+
<enum>Qt::Horizontal</enum>
39+
</property>
40+
</widget>
41+
</item>
42+
<item>
43+
<widget class="QSpinBox" name="numberSpinBox">
44+
<property name="minimum">
45+
<number>2</number>
46+
</property>
47+
<property name="maximum">
48+
<number>10</number>
49+
</property>
50+
</widget>
51+
</item>
52+
</layout>
53+
</item>
54+
<item>
55+
<widget class="QPushButton" name="updateButton">
56+
<property name="text">
57+
<string>Apply</string>
58+
</property>
59+
</widget>
60+
</item>
61+
<item>
62+
<widget class="QDialogButtonBox" name="buttonBox">
63+
<property name="orientation">
64+
<enum>Qt::Horizontal</enum>
65+
</property>
66+
<property name="standardButtons">
67+
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
68+
</property>
69+
</widget>
70+
</item>
71+
</layout>
72+
</widget>
73+
<resources/>
74+
<connections>
75+
<connection>
76+
<sender>buttonBox</sender>
77+
<signal>accepted()</signal>
78+
<receiver>SplitRegionDialog</receiver>
79+
<slot>accept()</slot>
80+
<hints>
81+
<hint type="sourcelabel">
82+
<x>248</x>
83+
<y>254</y>
84+
</hint>
85+
<hint type="destinationlabel">
86+
<x>157</x>
87+
<y>274</y>
88+
</hint>
89+
</hints>
90+
</connection>
91+
<connection>
92+
<sender>buttonBox</sender>
93+
<signal>rejected()</signal>
94+
<receiver>SplitRegionDialog</receiver>
95+
<slot>reject()</slot>
96+
<hints>
97+
<hint type="sourcelabel">
98+
<x>316</x>
99+
<y>260</y>
100+
</hint>
101+
<hint type="destinationlabel">
102+
<x>286</x>
103+
<y>274</y>
104+
</hint>
105+
</hints>
106+
</connection>
107+
</connections>
108+
</ui>

0 commit comments

Comments
 (0)