Skip to content

Commit

Permalink
Improve performance for updating region table for single region
Browse files Browse the repository at this point in the history
  • Loading branch information
davidborland committed Dec 11, 2019
1 parent 789f703 commit ca45b08
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 18 deletions.
8 changes: 6 additions & 2 deletions MainWindow.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,15 @@ MainWindow::~MainWindow() {
qApp->exit();
}

void MainWindow::UpdateRegionTable(RegionCollection* regions) {
void MainWindow::updateRegions(RegionCollection* regions) {
regionTable->update(regions);
}

void MainWindow::HighlightRegionTable(unsigned short label) {
void MainWindow::updateRegion(Region* region) {
regionTable->update(region);
}

void MainWindow::highlightRegion(unsigned short label) {
regionTable->highlight(label);
}

Expand Down
8 changes: 5 additions & 3 deletions MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,19 @@
#include <string>

class VisualizationContainer;
class Region;
class RegionCollection;
class RegionTable;

class MainWindow : public QMainWindow, private Ui::MainWindow {
Q_OBJECT
Q_OBJECT
public:
MainWindow();
virtual ~MainWindow();

void UpdateRegionTable(RegionCollection* regions);
void HighlightRegionTable(unsigned short label);
void updateRegions(RegionCollection* regions);
void updateRegion(Region* region);
void highlightRegion(unsigned short label);

public slots:
// Use Qt's auto-connect magic to tie GUI widgets to slots,
Expand Down
41 changes: 41 additions & 0 deletions RegionTable.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ RegionTable::RegionTable(QWidget* parent)
setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);

QObject::connect(horizontalHeader(), &QHeaderView::sortIndicatorChanged, this, &RegionTable::on_sort);
QObject::connect(this, &RegionTable::removeRegion, this, &RegionTable::on_removeRegion);
}

void RegionTable::update(RegionCollection* regions) {
Expand Down Expand Up @@ -133,6 +134,32 @@ void RegionTable::update(RegionCollection* regions) {
highlight(0);
}

void RegionTable::update(Region* region) {
QStyle* style = QApplication::style();
QIcon modifiedIcon = style->standardIcon(QStyle::SP_MessageBoxWarning);

QString labelString = QString::number(region->GetLabel());

for (int i = 0; i < rowCount(); i++) {
QTableWidgetItem* ti = item(i, 0);

if (ti->text() == labelString) {
// Size
item(i, 2)->setData(0, region->GetNumVoxels());

// Modified
item(i, 3)->setData(0, region->GetModified());
((QPushButton*)cellWidget(i, 3))->setIcon(region->GetModified() ? modifiedIcon : QIcon());

// Done
item(i, 4)->setData(0, region->GetDone());
((QCheckBox*)cellWidget(i, 4))->setChecked(region->GetDone());

break;
}
}
}

void RegionTable::highlight(unsigned short label) {
QString labelString = QString::number(label);

Expand All @@ -154,4 +181,18 @@ void RegionTable::highlight(unsigned short label) {

void RegionTable::on_sort() {
resizeColumnsToContents();
}

void RegionTable::on_removeRegion(int label) {
QString labelString = QString::number(label);

for (int i = 0; i < rowCount(); i++) {
QTableWidgetItem* ti = item(i, 0);

if (ti->text() == labelString) {
removeRow(i);

break;
}
}
}
5 changes: 3 additions & 2 deletions RegionTable.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@

#include <QTableWidget>

class QSignalMapper;

class Region;
class RegionCollection;

class RegionTable : public QTableWidget {
Expand All @@ -13,10 +12,12 @@ class RegionTable : public QTableWidget {
RegionTable(QWidget* parent = 0);

void update(RegionCollection* regions);
void update(Region* region);
void highlight(unsigned short label);

public slots:
void on_sort();
void on_removeRegion(int label);

signals:
void regionDone(int label, bool done);
Expand Down
21 changes: 10 additions & 11 deletions VisualizationContainer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ VisualizationContainer::FileErrorCode VisualizationContainer::OpenSegmentationFi
if (SetLabelData(reader->GetOutput())) {
LoadRegionMetadata(fileName + ".json");

qtWindow->UpdateRegionTable(regions);
qtWindow->updateRegions(regions);

return Success;
}
Expand All @@ -210,7 +210,7 @@ VisualizationContainer::FileErrorCode VisualizationContainer::OpenSegmentationFi
if (SetLabelData(reader->GetOutput())) {
LoadRegionMetadata(fileName + ".json");

qtWindow->UpdateRegionTable(regions);
qtWindow->updateRegions(regions);

return Success;
}
Expand Down Expand Up @@ -245,7 +245,7 @@ VisualizationContainer::FileErrorCode VisualizationContainer::OpenSegmentationSt
if (SetLabelData(reader->GetOutput())) {
LoadRegionMetadata(fileNames[0] + ".json");

qtWindow->UpdateRegionTable(regions);
qtWindow->updateRegions(regions);

return Success;
}
Expand Down Expand Up @@ -327,7 +327,7 @@ void VisualizationContainer::SegmentVolume() {

UpdateLabels();

qtWindow->UpdateRegionTable(regions);
qtWindow->updateRegions(regions);

Render();
}
Expand Down Expand Up @@ -355,7 +355,7 @@ void VisualizationContainer::Paint(int x, int y, int z) {
SetLabel(x, y, z, currentRegion->GetLabel());

currentRegion->SetModified(true);
qtWindow->UpdateRegionTable(regions);
qtWindow->updateRegion(currentRegion);
}

void VisualizationContainer::Erase(int x, int y, int z) {
Expand All @@ -366,7 +366,7 @@ void VisualizationContainer::Erase(int x, int y, int z) {
SetLabel(x, y, z, 0);

currentRegion->SetModified(true);
qtWindow->UpdateRegionTable(regions);
qtWindow->updateRegion(currentRegion);
}

void VisualizationContainer::PickPointLabel(double x, double y, double z) {
Expand Down Expand Up @@ -404,7 +404,7 @@ void VisualizationContainer::SetCurrentRegion(Region* region) {
volumeView->SetCurrentRegion(currentRegion);
sliceView->SetCurrentRegion(currentRegion);

qtWindow->HighlightRegionTable(region ? region->GetLabel() : 0);
qtWindow->highlightRegion(region ? region->GetLabel() : 0);
}

void VisualizationContainer::RelabelCurrentRegion() {
Expand Down Expand Up @@ -474,7 +474,7 @@ void VisualizationContainer::RelabelCurrentRegion() {
}
}

qtWindow->UpdateRegionTable(regions);
qtWindow->updateRegions(regions);

labels->Modified();
Render();
Expand Down Expand Up @@ -601,7 +601,7 @@ void VisualizationContainer::SetRegionDone(unsigned short label, bool done) {
UpdateColors(label);
}

qtWindow->UpdateRegionTable(regions);
qtWindow->updateRegion(region);

Render();
}
Expand All @@ -612,7 +612,6 @@ void VisualizationContainer::RemoveRegion(unsigned short label) {
if (region == currentRegion) SetCurrentRegion(nullptr);

regions->Remove(label);
qtWindow->UpdateRegionTable(regions);

Render();
}
Expand All @@ -632,7 +631,7 @@ SliceView* VisualizationContainer::GetSliceView() {

void VisualizationContainer::SetImageData(vtkImageData* imageData) {
regions->RemoveAll();
qtWindow->UpdateRegionTable(regions);
qtWindow->updateRegions(regions);

data = imageData;

Expand Down

0 comments on commit ca45b08

Please sign in to comment.