Go to the documentation of this file.00001
00015 #include "LengthViewWidget.h"
00016 #include <QHeaderView>
00017 #include <QFileDialog>
00018 #include <QTextStream>
00019 #include <QShortcut>
00020
00021 using namespace std;
00022
00023
00024 struct LengthViewWidget::pImpl
00025 {
00026 LengthViewWidget* widget_;
00027 size_t min_distance_;
00028
00029 pImpl(LengthViewWidget* widget) : widget_(widget), min_distance_(0)
00030 {
00031 }
00032
00033
00034 void initializeForm(void)
00035 {
00036 widget_->length_table_->
00037 setEditTriggers(QAbstractItemView::NoEditTriggers);
00038
00039
00040 for (int i = 0; i < 2; ++i) {
00041 widget_->length_table_->
00042 horizontalHeader()->setResizeMode(i, QHeaderView::Stretch);
00043 }
00044
00045
00046 connect(widget_->update_button_, SIGNAL(clicked()),
00047 widget_, SLOT(updatePressed()));
00048 connect(widget_->save_button_, SIGNAL(clicked()),
00049 widget_, SLOT(savePressed()));
00050 connect(widget_->close_button_, SIGNAL(clicked()),
00051 widget_, SLOT(close()));
00052 connect(widget_->length_table_, SIGNAL(itemSelectionChanged()),
00053 widget_, SLOT(itemSelectionChanged()));
00054
00055
00056 (void) new QShortcut(Qt::CTRL + Qt::Key_Q, widget_,
00057 SLOT(quitPressed()));
00058 (void) new QShortcut(Qt::CTRL + Qt::Key_W, widget_, SLOT(close()));
00059 }
00060
00061
00062 void setData(int index, const vector<long>& data)
00063 {
00064 size_t row_count = widget_->length_table_->rowCount();
00065 size_t data_size = data.size();
00066 if (data_size == 0) {
00067 return;
00068 }
00069 widget_->save_button_->setEnabled(true);
00070
00071 if (data_size > row_count) {
00072 widget_->length_table_->setRowCount(data_size);
00073
00074 QStringList labels;
00075 for (size_t i = 0; i < data_size; ++i) {
00076 labels.push_back(tr("%1").arg(i));
00077 }
00078 widget_->length_table_->setVerticalHeaderLabels(labels);
00079 }
00080
00081 const QBrush error_brush(QColor(255, 0, 0));
00082 for (size_t i = 0; i < data_size; ++i) {
00083 long length = data[i];
00084 QTableWidgetItem *new_item =
00085 new QTableWidgetItem(tr("%1").arg(length));
00086 new_item->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
00087
00088 if ((index == 0) && (length < static_cast<long>(min_distance_))) {
00089
00090 new_item->setForeground(error_brush);
00091 }
00092 widget_->length_table_->setItem(i, index, new_item);
00093 }
00094 widget_->length_table_->setRowCount(data_size);
00095 }
00096 };
00097
00098
00099 LengthViewWidget::LengthViewWidget(QWidget* parent)
00100 : QWidget(parent), pimpl(new pImpl(this))
00101 {
00102 setupUi(this);
00103 pimpl->initializeForm();
00104 }
00105
00106
00107 LengthViewWidget::~LengthViewWidget(void)
00108 {
00109 }
00110
00111
00112 void LengthViewWidget::clear(void)
00113 {
00114 length_table_->clearContents();
00115 }
00116
00117
00118 void LengthViewWidget::setMinDistance(size_t min_distance)
00119 {
00120 pimpl->min_distance_ = min_distance;
00121 }
00122
00123
00124 void LengthViewWidget::setLength(const vector<long>& length_data)
00125 {
00126 pimpl->setData(0, length_data);
00127 }
00128
00129
00130 void LengthViewWidget::setIntensity(const vector<long>& intensity_data)
00131 {
00132 pimpl->setData(1, intensity_data);
00133 }
00134
00135
00136 void LengthViewWidget::updatePressed(void)
00137 {
00138 emit lengthViewRequest();
00139 }
00140
00141
00142 void LengthViewWidget::savePressed(void)
00143 {
00144
00145 QString default_file_name = "length_data.csv";
00146 QString file_name =
00147 QFileDialog::getSaveFileName(this, tr("Save length data."),
00148 default_file_name, tr("CSV (*.csv)"));
00149 if (file_name.isEmpty()) {
00150 return;
00151 }
00152
00153 QFile save_file(file_name);
00154 if (! save_file.open(QIODevice::WriteOnly | QIODevice::Text)) {
00155 return;
00156 }
00157 QTextStream fout(&save_file);
00158
00159 size_t row_count = length_table_->rowCount();
00160 for (size_t y = 0; y < row_count; ++y) {
00161
00162 fout << y << ',';
00163
00164 for (int x = 0; x < 2; ++x) {
00165 QTableWidgetItem* item = length_table_->item(y, x);
00166 if (! item) {
00167 continue;
00168 }
00169 long value = item->text().toLong();
00170
00171 fout << value << ',';
00172 }
00173 fout << '\n';
00174 }
00175 }
00176
00177
00178 void LengthViewWidget::closeEvent(QCloseEvent* event)
00179 {
00180 static_cast<void>(event);
00181
00182 emit widgetClose("LengthViewWidget");
00183 close();
00184 }
00185
00186
00187 void LengthViewWidget::quitPressed(void)
00188 {
00189 emit quit();
00190 }
00191
00192
00193 void LengthViewWidget::itemSelectionChanged(void)
00194 {
00195 vector<int> indexes;
00196
00197 QList<QTableWidgetItem*> selected_list = length_table_->selectedItems();
00198 for (QList<QTableWidgetItem*>::iterator it = selected_list.begin();
00199 it != selected_list.end(); ++it) {
00200 if (*it) {
00201 indexes.push_back((*it)->row());
00202 }
00203 }
00204 emit drawLineRequest(indexes);
00205 }