Skip to content

Commit

Permalink
Add code for hooking up table higlight/select events
Browse files Browse the repository at this point in the history
  • Loading branch information
davidborland committed Jan 2, 2020
1 parent ba2af57 commit 13b3e4a
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 9 deletions.
15 changes: 13 additions & 2 deletions MainWindow.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ MainWindow::MainWindow() {

QObject::connect(regionTable, &RegionTable::regionDone, this, &MainWindow::on_regionDone);
QObject::connect(regionTable, &RegionTable::removeRegion, this, &MainWindow::on_removeRegion);
QObject::connect(regionTable, &RegionTable::highlightRegion, this, &MainWindow::on_highlightRegion);
QObject::connect(regionTable, &RegionTable::selectRegion, this, &MainWindow::on_selectRegion);

qApp->installEventFilter(this);
}
Expand All @@ -70,8 +72,8 @@ void MainWindow::updateRegion(Region* region) {
regionTable->update(region);
}

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

void MainWindow::on_actionOpen_Image_File_triggered() {
Expand Down Expand Up @@ -353,10 +355,19 @@ void MainWindow::on_actionSmoothSurfaces(bool checked) {
void MainWindow::on_regionDone(int label, bool done) {
visualizationContainer->SetRegionDone((unsigned short)label, done);
}

void MainWindow::on_removeRegion(int label) {
visualizationContainer->RemoveRegion((unsigned short)label);
}

void MainWindow::on_highlightRegion(int label) {
visualizationContainer->HighlightRegion((unsigned short)label);
}

void MainWindow::on_selectRegion(int label) {
visualizationContainer->SelectRegion((unsigned short)label);
}

bool MainWindow::eventFilter(QObject* obj, QEvent* event) {
if (event->type() == QEvent::Enter) {
if (obj == qvtkWidgetLeft) {
Expand Down
4 changes: 3 additions & 1 deletion MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class MainWindow : public QMainWindow, private Ui::MainWindow {

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

public slots:

Expand Down Expand Up @@ -55,6 +55,8 @@ public slots:
// Region table events
virtual void on_regionDone(int label, bool done);
virtual void on_removeRegion(int label);
virtual void on_highlightRegion(int label);
virtual void on_selectRegion(int label);

protected:
// The visualization container
Expand Down
66 changes: 62 additions & 4 deletions RegionTable.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,15 @@ RegionTable::RegionTable(QWidget* parent)
verticalHeader()->setVisible(false);
setSortingEnabled(true);
resizeColumnsToContents();

setMouseTracking(true);
setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);

currentRegionLabel = 0;

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

void RegionTable::update(RegionCollection* regions) {
Expand Down Expand Up @@ -131,7 +135,7 @@ void RegionTable::update(RegionCollection* regions) {
// Need to reconnect after disabling and enabling sorting
QObject::connect(horizontalHeader(), &QHeaderView::sortIndicatorChanged, this, &RegionTable::on_sort);

highlight(0);
selectRegionLabel(currentRegionLabel);
}

void RegionTable::update(Region* region) {
Expand Down Expand Up @@ -160,8 +164,9 @@ void RegionTable::update(Region* region) {
}
}

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

for (int i = 0; i < rowCount(); i++) {
QTableWidgetItem* ti = item(i, 0);
Expand Down Expand Up @@ -195,4 +200,57 @@ void RegionTable::on_removeRegion(int label) {
break;
}
}
}

void RegionTable::on_cellEntered(int row, int column) {
QString labelString = QString::number(currentRegionLabel);

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

if (ti->text() == labelString) continue;

if (i == row) {
ti->setBackgroundColor(QColor("#bfe6f5"));
}
else {
ti->setBackgroundColor(QColor("white"));
}
}
}
else {
// Clear highlight
for (int i = 0; i < rowCount(); i++) {
QTableWidgetItem* ti = item(i, 0);

if (ti->text() == labelString) continue;

ti->setBackgroundColor(QColor("white"));
}
}

emit(highlightRegion(rowLabel(row)));
}

void RegionTable::on_cellClicked(int row, int column) {
emit(selectRegion(rowLabel(row)));
}

void RegionTable::leaveEvent(QEvent* event) {
// Clear highlight
QString labelString = QString::number(currentRegionLabel);

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

if (ti->text() == labelString) continue;

ti->setBackgroundColor(QColor("white"));
}
}

int RegionTable::rowLabel(int row) {
return item(row, 0)->text().toInt();
}
13 changes: 12 additions & 1 deletion RegionTable.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,26 @@ class RegionTable : public QTableWidget {

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

public slots:
void on_sort();
void on_removeRegion(int label);
void on_cellEntered(int row, int column);
void on_cellClicked(int row, int column);

signals:
void regionDone(int label, bool done);
void removeRegion(int label);
void highlightRegion(int label);
void selectRegion(int label);

protected:
int currentRegionLabel;

void leaveEvent(QEvent *event);

int rowLabel(int row);
};

#endif
20 changes: 19 additions & 1 deletion VisualizationContainer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,7 @@ void VisualizationContainer::SetCurrentRegion(Region* region) {
volumeView->SetCurrentRegion(currentRegion);
sliceView->SetCurrentRegion(currentRegion);

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

void VisualizationContainer::RelabelCurrentRegion() {
Expand Down Expand Up @@ -635,6 +635,24 @@ void VisualizationContainer::RemoveRegion(unsigned short label) {
Render();
}

void VisualizationContainer::HighlightRegion(unsigned short label) {
Region* region = regions->Get(label);

// std::cout << "HIGHLIGHT" << std::endl;

Render();
}


void VisualizationContainer::SelectRegion(unsigned short label) {
Region* region = regions->Get(label);

SetCurrentRegion(region);

Render();
}


void VisualizationContainer::Render() {
volumeView->Render();
sliceView->Render();
Expand Down
2 changes: 2 additions & 0 deletions VisualizationContainer.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ class VisualizationContainer {
void GrowRegion(int x, int y, int z);
void RemoveRegion(unsigned short label);
void SetRegionDone(unsigned short label, bool done);
void HighlightRegion(unsigned short label);
void SelectRegion(unsigned short label);

void Render();

Expand Down

0 comments on commit 13b3e4a

Please sign in to comment.