00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "QmitkLevelWindowPresetDefinitionDialog.h"
00019
00020 #include <QMessageBox>
00021 #include <QTableWidgetItem>
00022 #include <QHeaderView>
00023
00024 QmitkLevelWindowPresetDefinitionDialog::QmitkLevelWindowPresetDefinitionDialog(QWidget* parent, Qt::WindowFlags f)
00025 : QDialog(parent, f), m_TableModel(0), m_SortModel(this)
00026 {
00027 this->setupUi(this);
00028
00029 QObject::connect(addButton, SIGNAL(clicked()), this, SLOT(addPreset()));
00030 QObject::connect(removeButton, SIGNAL(clicked()), this, SLOT(removePreset()));
00031 QObject::connect(changeButton, SIGNAL(clicked()), this, SLOT(changePreset()));
00032
00033 QObject::connect(presetView->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(sortPresets(int)));
00034
00035 presetView->verticalHeader()->setVisible(false);
00036 presetView->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
00037
00038
00039
00040
00041 presetView->setModel(&m_SortModel);
00042 }
00043
00044 QmitkLevelWindowPresetDefinitionDialog::~QmitkLevelWindowPresetDefinitionDialog()
00045 {
00046 delete m_TableModel;
00047 }
00048
00049 void QmitkLevelWindowPresetDefinitionDialog::sortPresets(int index)
00050 {
00051 static Qt::SortOrder order[3] = {Qt::AscendingOrder};
00052
00053 presetView->sortByColumn(index, order[index]);
00054 if (order[index] == Qt::AscendingOrder) order[index] = Qt::DescendingOrder;
00055 else order[index] = Qt::AscendingOrder;
00056 }
00057
00058 void QmitkLevelWindowPresetDefinitionDialog::resizeEvent(QResizeEvent* event)
00059 {
00060 QDialog::resizeEvent(event);
00061
00062 this->resizeColumns();
00063 }
00064
00065 void QmitkLevelWindowPresetDefinitionDialog::showEvent(QShowEvent* event)
00066 {
00067 this->resizeColumns();
00068
00069 QDialog::showEvent(event);
00070 }
00071
00072 void QmitkLevelWindowPresetDefinitionDialog::resizeColumns()
00073 {
00074 int width = presetView->viewport()->size().width() - presetView->columnWidth(1) - presetView->columnWidth(2);
00075 if (width < 50) width = 50;
00076
00077 presetView->setColumnWidth(0, width);
00078 }
00079
00080 void QmitkLevelWindowPresetDefinitionDialog::addPreset()
00081 {
00082 std::string name(presetnameLineEdit->text().toStdString());
00083 if (m_TableModel->contains(name))
00084 {
00085 QMessageBox::critical( this, "Preset definition",
00086 "Presetname already exists.\n"
00087 "You have to enter another one." );
00088 }
00089 else if (presetnameLineEdit->text() == "")
00090 {
00091 QMessageBox::critical( this, "Preset definition",
00092 "Presetname has to be set.\n"
00093 "You have to enter a Presetname." );
00094 }
00095 else
00096 {
00097 m_TableModel->addPreset(name, levelSpinBox->value(), windowSpinBox->value());
00098 }
00099 }
00100
00101
00102 void QmitkLevelWindowPresetDefinitionDialog::removePreset()
00103 {
00104 QModelIndex index(presetView->selectionModel()->currentIndex());
00105 if (!index.isValid()) return;
00106
00107 m_TableModel->removePreset(index);
00108 }
00109
00110
00111 void QmitkLevelWindowPresetDefinitionDialog::changePreset()
00112 {
00113 if (presetView->selectionModel()->hasSelection())
00114 {
00115 std::string name(presetnameLineEdit->text().toStdString());
00116 if (name == "")
00117 {
00118 QMessageBox::critical( this, "Preset definition",
00119 "Presetname has to be set.\n"
00120 "You have to enter a Presetname." );
00121 }
00122 else if (m_TableModel->contains(name)
00123 && (m_TableModel->getPreset(presetView->selectionModel()->currentIndex()).name
00124 != name))
00125 {
00126 QMessageBox::critical( this, "Preset definition",
00127 "Presetname already exists.\n"
00128 "You have to enter another one." );
00129 }
00130 else
00131 {
00132 m_TableModel->changePreset(presetView->selectionModel()->currentIndex().row(),
00133 name, levelSpinBox->value(), windowSpinBox->value());
00134 }
00135 }
00136 }
00137
00138
00139 void QmitkLevelWindowPresetDefinitionDialog::setPresets(std::map<std::string, double>& level, std::map<std::string, double>& window, QString initLevel, QString initWindow)
00140 {
00141 levelSpinBox->setValue(initLevel.toInt());
00142 windowSpinBox->setValue(initWindow.toInt());
00143
00144 delete m_TableModel;
00145 m_TableModel = new PresetTableModel(level, window, this);
00146
00147 m_SortModel.setSourceModel(m_TableModel);
00148
00149 QObject::connect(presetView->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(ListViewSelectionChanged(const QItemSelection&, const QItemSelection&)));
00150
00151 this->sortPresets(0);
00152
00153 presetView->resizeColumnsToContents();
00154 }
00155
00156
00157 std::map<std::string, double> QmitkLevelWindowPresetDefinitionDialog::getLevelPresets()
00158 {
00159 std::map<std::string, double> levels;
00160 m_TableModel->getLevels(levels);
00161 return levels;
00162 }
00163
00164
00165 std::map<std::string, double> QmitkLevelWindowPresetDefinitionDialog::getWindowPresets()
00166 {
00167 std::map<std::string, double> windows;
00168 m_TableModel->getWindows(windows);
00169 return windows;
00170 }
00171
00172
00173 void QmitkLevelWindowPresetDefinitionDialog::ListViewSelectionChanged(const QItemSelection& selected,
00174 const QItemSelection& )
00175 {
00176 QModelIndexList indexes(selected.indexes());
00177 if (indexes.empty())
00178 {
00179 presetnameLineEdit->setText("");
00180 levelSpinBox->setValue(0);
00181 windowSpinBox->setValue(0);
00182 }
00183 else
00184 {
00185 PresetTableModel::Entry entry(m_TableModel->getPreset(indexes.first()));
00186 presetnameLineEdit->setText(QString(entry.name.c_str()));
00187 levelSpinBox->setValue((int)entry.level);
00188 windowSpinBox->setValue((int)entry.window);
00189 }
00190 }
00191
00192 QmitkLevelWindowPresetDefinitionDialog::
00193 PresetTableModel::PresetTableModel(std::map<std::string, double>& levels,
00194 std::map<std::string, double>& windows, QObject* parent)
00195 : QAbstractTableModel(parent)
00196 {
00197 for(std::map<std::string, double>::iterator iter = levels.begin(); iter != levels.end(); ++iter )
00198 {
00199 m_Entries.push_back(Entry(iter->first, iter->second, windows[iter->first]));
00200 }
00201 }
00202
00203 void
00204 QmitkLevelWindowPresetDefinitionDialog::
00205 PresetTableModel::getLevels(std::map<std::string, double>& levels)
00206 {
00207 for (std::vector<Entry>::iterator iter = m_Entries.begin(); iter != m_Entries.end(); ++iter)
00208 {
00209 levels[iter->name] = iter->level;
00210 }
00211 }
00212
00213 void
00214 QmitkLevelWindowPresetDefinitionDialog::
00215 PresetTableModel::getWindows(std::map<std::string, double>& windows)
00216 {
00217 for (std::vector<Entry>::iterator iter = m_Entries.begin(); iter != m_Entries.end(); ++iter)
00218 {
00219 windows[iter->name] = iter->window;
00220 }
00221 }
00222
00223 void
00224 QmitkLevelWindowPresetDefinitionDialog::
00225 PresetTableModel::addPreset(std::string& name, double level, double window)
00226 {
00227
00228 this->beginInsertRows(QModelIndex(), (int) m_Entries.size(), (int) m_Entries.size());
00229
00230 m_Entries.push_back(Entry(name, level, window));
00231
00232 this->endInsertRows();
00233 }
00234
00235 bool
00236 QmitkLevelWindowPresetDefinitionDialog::
00237 PresetTableModel::contains(std::string& name)
00238 {
00239
00240 for (std::vector<Entry>::iterator iter = m_Entries.begin(); iter != m_Entries.end(); ++iter)
00241 {
00242 if (iter->name == name) return true;
00243 }
00244
00245 return false;
00246 }
00247
00248 void
00249 QmitkLevelWindowPresetDefinitionDialog::
00250 PresetTableModel::removePreset(const QModelIndex& index)
00251 {
00252 int row = index.row();
00253
00254 this->beginRemoveRows(QModelIndex(), row, row);
00255
00256 m_Entries.erase(m_Entries.begin()+row);
00257
00258 this->endRemoveRows();
00259 }
00260
00261 void
00262 QmitkLevelWindowPresetDefinitionDialog::
00263 PresetTableModel::changePreset(int row, std::string& name, double level, double window)
00264 {
00265 m_Entries[row].name = name;
00266 m_Entries[row].level = level;
00267 m_Entries[row].window = window;
00268
00269 this->dataChanged(index(row, 0), index(row, 2));
00270 }
00271
00272
00273 QmitkLevelWindowPresetDefinitionDialog::PresetTableModel::Entry
00274 QmitkLevelWindowPresetDefinitionDialog::
00275 PresetTableModel::getPreset(const QModelIndex& index) const
00276 {
00277 int row = index.row();
00278
00279 if (row < 0 || (unsigned int)row >= m_Entries.size()) return Entry("", 0, 0);
00280
00281 return m_Entries[row];
00282 }
00283
00284 int
00285 QmitkLevelWindowPresetDefinitionDialog::
00286 PresetTableModel::rowCount(const QModelIndex&) const
00287 {
00288 return (int) m_Entries.size();
00289 }
00290
00291 int
00292 QmitkLevelWindowPresetDefinitionDialog::
00293 PresetTableModel::columnCount(const QModelIndex&) const
00294 {
00295 return 3;
00296 }
00297
00298 QVariant
00299 QmitkLevelWindowPresetDefinitionDialog::
00300 PresetTableModel::data(const QModelIndex& index, int role) const
00301 {
00302 if (role == Qt::DisplayRole)
00303 {
00304 switch (index.column()) {
00305 case 0:
00306 return QVariant(QString(m_Entries[index.row()].name.c_str()));
00307 case 1:
00308 {
00309 return QVariant(m_Entries[index.row()].level);
00310 }
00311 case 2:
00312 return QVariant(m_Entries[index.row()].window);
00313 }
00314 }
00315
00316 return QVariant();
00317 }
00318
00319 QVariant
00320 QmitkLevelWindowPresetDefinitionDialog::
00321 PresetTableModel::headerData(int section, Qt::Orientation orientation, int role) const
00322 {
00323 if (role == Qt::DisplayRole && orientation == Qt::Horizontal)
00324 {
00325 switch (section) {
00326 case 0: return QVariant("Preset");
00327 case 1: return QVariant("Level");
00328 case 2: return QVariant("Window");
00329 }
00330 }
00331
00332 return QVariant();
00333 }