diff options
Diffstat (limited to 'src/GudhUI/gui/Menu_edge_contraction.cpp')
-rw-r--r-- | src/GudhUI/gui/Menu_edge_contraction.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/GudhUI/gui/Menu_edge_contraction.cpp b/src/GudhUI/gui/Menu_edge_contraction.cpp new file mode 100644 index 00000000..dd2621be --- /dev/null +++ b/src/GudhUI/gui/Menu_edge_contraction.cpp @@ -0,0 +1,91 @@ +/* + * Menu_edge_contraction.cpp + * + * Created on: Sep 11, 2014 + * Author: dsalinas + */ + +#ifndef MENU_EDGE_CONTRACTION_CPP_ +#define MENU_EDGE_CONTRACTION_CPP_ + + +#include "Menu_edge_contraction.h" + +Menu_edge_contraction::Menu_edge_contraction(MainWindow* parent,const Model& model): +parent_(parent),model_(model) +{ + setupUi(this); + connectActions(parent_); +} + +void Menu_edge_contraction::connectActions(MainWindow* parent) +{ + QObject::connect( + this->horizontalSlider, + SIGNAL(valueChanged(int)), + this, + SLOT(slider_value_changed(int)) + ); + + + QObject::connect(this, SIGNAL(contract_edges(unsigned)), parent, SLOT(contract_edges(unsigned))); + + QObject::connect(this->pushButton_collapse, SIGNAL(clicked()), this, SLOT(send_contract_edges())); + +} + +void Menu_edge_contraction::slider_value_changed(int new_slider_value){ + int num_collapses = + (horizontalSlider->value()==1)? 1 : horizontalSlider->value() * model_.num_vertices() / 100 ; + this->txt_nb_vertices->setNum((int)model_.num_vertices()); + this->txt_nb_collapses->setNum(num_collapses); + this->spinBox_nb_remaining_vertices->setValue(model_.num_vertices()-num_collapses); +} + + +void +Menu_edge_contraction::update_slider_value(){ + int num_vertices = model_.num_vertices(); + int num_collapses = (horizontalSlider->value()==1)? 1 : horizontalSlider->value() * num_vertices / 100 ; + int horizontal_slider_position = num_vertices>0? num_collapses/(double)num_vertices * 100 : 1 ; + horizontalSlider->setValue(horizontal_slider_position); +} + + +void +Menu_edge_contraction::update_gui_numbers(){ + update_slider_value(); + bool ok; + int num_collapses = this->txt_nb_collapses->text().toInt(&ok,10); + if(!ok) return; + this->txt_nb_vertices->setNum((int)model_.num_vertices()); + this->txt_nb_collapses->setNum(num_collapses); + this->spinBox_nb_remaining_vertices->setValue(model_.num_vertices()-num_collapses); +} + +void +Menu_edge_contraction::update_gui_numbers(int new_value){ + update_gui_numbers(); +} + + +void +Menu_edge_contraction::send_contract_edges(){ + emit(contract_edges(num_collapses())); + update_gui_numbers(); +} + +unsigned +Menu_edge_contraction::num_vertices(){ + return model_.num_vertices(); +} + +unsigned +Menu_edge_contraction::num_collapses(){ + return (horizontalSlider->value()==1)? 1 : horizontalSlider->value() * num_vertices() / 100 ; +} + + +#include "Menu_edge_contraction.moc" + +#endif /* MENU_EDGE_CONTRACTION_CPP_ */ |