diff options
author | Lukáš Lalinský <lalinsky@gmail.com> | 2009-03-27 00:07:16 +0100 |
---|---|---|
committer | Lukáš Lalinský <lalinsky@gmail.com> | 2009-03-27 00:07:16 +0100 |
commit | 9e8b7d5b37d985c73531f8f536728c3fa217d073 (patch) | |
tree | 0f90a9c75594cb7b9960c9c513f6d4e7b646d839 /src/utils/comboboxdelegate.cpp | |
parent | a12e272d88cb268db2ddbde40d195aea9f25ea00 (diff) | |
download | dbmodel-9e8b7d5b37d985c73531f8f536728c3fa217d073.tar.gz dbmodel-9e8b7d5b37d985c73531f8f536728c3fa217d073.tar.bz2 |
Show the data type column as an editable combo box
Diffstat (limited to 'src/utils/comboboxdelegate.cpp')
-rw-r--r-- | src/utils/comboboxdelegate.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/utils/comboboxdelegate.cpp b/src/utils/comboboxdelegate.cpp new file mode 100644 index 0000000..ae3ca41 --- /dev/null +++ b/src/utils/comboboxdelegate.cpp @@ -0,0 +1,67 @@ +// Copyright (C) 2009 Lukas Lalinsky +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +#include <QComboBox> +#include "comboboxdelegate.h" + +ComboBoxDelegate::ComboBoxDelegate(QObject *parent) + : QItemDelegate(parent), m_editable(false) +{ +} + +void +ComboBoxDelegate::setOptions(const QStringList &options) +{ + m_options = options; +} + +void +ComboBoxDelegate::setEditable(bool editable) +{ + m_editable = editable; +} + +QWidget * +ComboBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) const +{ + QComboBox *editor = new QComboBox(parent); + if (m_editable) + editor->setEditable(m_editable); + editor->addItems(m_options); + return editor; +} + +void +ComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const +{ + QComboBox *comboBox = qobject_cast<QComboBox *>(editor); + QString value = index.model()->data(index, Qt::EditRole).toString(); + // FIXME assumes that editable==true + comboBox->setEditText(value); +} + +void +ComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +{ + QComboBox *comboBox = qobject_cast<QComboBox *>(editor); + model->setData(index, comboBox->currentText()); +} + +void +ComboBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const +{ + editor->setGeometry(option.rect); +} |