15 #include <QHeaderView> 16 #include <QMessageBox> 17 #include <QTableWidgetItem> 20 : QDialog(parent, f), m_TableModel(nullptr), m_SortModel(this)
24 QObject::connect(addButton, SIGNAL(clicked()),
this, SLOT(
addPreset()));
25 QObject::connect(removeButton, SIGNAL(clicked()),
this, SLOT(
removePreset()));
26 QObject::connect(changeButton, SIGNAL(clicked()),
this, SLOT(
changePreset()));
28 QObject::connect(presetView->horizontalHeader(), SIGNAL(sectionClicked(
int)),
this, SLOT(
sortPresets(
int)));
30 presetView->verticalHeader()->setVisible(
false);
31 presetView->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
43 static Qt::SortOrder order[3] = {Qt::AscendingOrder};
45 presetView->sortByColumn(index, order[index]);
46 if (order[index] == Qt::AscendingOrder)
47 order[index] = Qt::DescendingOrder;
49 order[index] = Qt::AscendingOrder;
54 QDialog::resizeEvent(event);
63 QDialog::showEvent(event);
68 int width = presetView->viewport()->size().width() - presetView->columnWidth(1) - presetView->columnWidth(2);
72 presetView->setColumnWidth(0, width);
77 std::string name(presetnameLineEdit->text().toStdString());
80 QMessageBox::critical(
this,
82 "Presetname already exists.\n" 83 "You have to enter another one.");
85 else if (presetnameLineEdit->text() ==
"")
87 QMessageBox::critical(
this,
89 "Presetname has to be set.\n" 90 "You have to enter a Presetname.");
100 QModelIndex index(
m_SortModel.mapToSource(presetView->selectionModel()->currentIndex()));
102 if (!index.isValid())
110 QModelIndex index(
m_SortModel.mapToSource(presetView->selectionModel()->currentIndex()));
112 if (!index.isValid())
115 std::string name(presetnameLineEdit->text().toStdString());
118 QMessageBox::critical(
this,
120 "Presetname has to be set.\n" 121 "You have to enter a Presetname.");
126 QMessageBox::critical(
this,
128 "Presetname already exists.\n" 129 "You have to enter another one.");
138 std::map<std::string, double> &window,
142 levelSpinBox->setValue(initLevel.toInt());
143 windowSpinBox->setValue(initWindow.toInt());
150 QObject::connect(presetView->selectionModel(),
151 SIGNAL(selectionChanged(
const QItemSelection &,
const QItemSelection &)),
157 presetView->resizeColumnsToContents();
162 std::map<std::string, double> levels;
169 std::map<std::string, double> windows;
175 const QItemSelection & )
177 QModelIndexList indexes(selected.indexes());
180 presetnameLineEdit->setText(
"");
181 levelSpinBox->setValue(0);
182 windowSpinBox->setValue(0);
188 presetnameLineEdit->setText(QString(entry.
name.c_str()));
189 levelSpinBox->setValue((
int)entry.
level);
190 windowSpinBox->setValue((
int)entry.
window);
195 std::map<std::string, double> &windows,
197 : QAbstractTableModel(parent)
199 for (
auto iter = levels.begin(); iter != levels.end(); ++iter)
201 m_Entries.push_back(
Entry(iter->first, iter->second, windows[iter->first]));
207 for (
auto iter = m_Entries.begin(); iter != m_Entries.end(); ++iter)
209 levels[iter->name] = iter->level;
215 for (
auto iter = m_Entries.begin(); iter != m_Entries.end(); ++iter)
217 windows[iter->name] = iter->window;
223 this->beginInsertRows(QModelIndex(), (
int)m_Entries.size(), (int)m_Entries.size());
225 m_Entries.push_back(
Entry(name, level, window));
227 this->endInsertRows();
232 for (
auto iter = m_Entries.begin(); iter != m_Entries.end(); ++iter)
234 if (iter->name == name)
243 int row = index.row();
245 this->beginRemoveRows(QModelIndex(), row, row);
247 m_Entries.erase(m_Entries.begin() + row);
249 this->endRemoveRows();
257 m_Entries[row].name = name;
258 m_Entries[row].level = level;
259 m_Entries[row].window = window;
261 this->dataChanged(index(row, 0), index(row, 2));
267 int row = index.row();
269 if (row < 0 || (
unsigned int)row >= m_Entries.size())
270 return Entry(
"", 0, 0);
272 return m_Entries[row];
277 return (
int)m_Entries.size();
287 if (role == Qt::DisplayRole)
289 switch (index.column())
292 return QVariant(QString(m_Entries[index.row()].name.c_str()));
295 return QVariant(m_Entries[index.row()].level);
298 return QVariant(m_Entries[index.row()].window);
306 Qt::Orientation orientation,
309 if (role == Qt::DisplayRole && orientation == Qt::Horizontal)
314 return QVariant(
"Preset");
316 return QVariant(
"Level");
318 return QVariant(
"Window");
PresetTableModel(std::map< std::string, double > &levels, std::map< std::string, double > &windows, QObject *parent=nullptr)
void getWindows(std::map< std::string, double > &windows)
void ListViewSelectionChanged(const QItemSelection &, const QItemSelection &)
bool contains(std::string &name)
int columnCount(const QModelIndex &) const override
void removePreset(const QModelIndex &)
void addPreset(std::string &name, double level, double window)
~QmitkLevelWindowPresetDefinitionDialog() override
int rowCount(const QModelIndex &) const override
QVariant data(const QModelIndex &index, int) const override
std::map< std::string, double > getLevelPresets()
PresetTableModel * m_TableModel
void setPresets(std::map< std::string, double > &level, std::map< std::string, double > &window, QString initLevel, QString initWindow)
std::map< std::string, double > getWindowPresets()
QmitkLevelWindowPresetDefinitionDialog(QWidget *parent=nullptr, Qt::WindowFlags f=nullptr)
void changePreset(int row, std::string &name, double level, double window)
Entry getPreset(const QModelIndex &) const
void sortPresets(int index)
void showEvent(QShowEvent *event) override
void getLevels(std::map< std::string, double > &levels)
QSortFilterProxyModel m_SortModel
QVariant headerData(int section, Qt::Orientation orientation, int) const override
void resizeEvent(QResizeEvent *event) override