1
/*****************************************************************
2
* Unipro UGENE - Integrated Bioinformatics Suite
3
* Copyright (C) 2008 Unipro, Russia (http://ugene.unipro.ru)
6
* This source code is distributed under the terms of the
7
* GNU General Public License. See the files COPYING and LICENSE
9
*****************************************************************/
11
#ifndef _GB2_PROXY_DELEGATE_H_
12
#define _GB2_PROXY_DELEGATE_H_
14
#include <workflow/ConfigurationEditor.h>
15
#include <QtGui/QItemDelegate>
17
Q_DECLARE_METATYPE(GB2::PropertyDelegate*)
22
DelegateRole = Qt::UserRole + 100,
26
class ProxyDelegate : public QItemDelegate {
28
ProxyDelegate(QWidget *parent = 0) : QItemDelegate(parent) {}
30
virtual void setPropertyValue(const QString& name, QVariant val) const {Q_UNUSED(name); Q_UNUSED(val);}
31
virtual bool handlePropertyValueList(const QString& name, QVariant list) const {
32
Q_UNUSED(name);Q_UNUSED(list);
36
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
39
QItemDelegate* d = index.model()->data(index, DelegateRole).value<PropertyDelegate*>();
41
return d->createEditor(parent, option, index);
44
return QItemDelegate::createEditor(parent, option, index);
47
void setEditorData(QWidget *editor, const QModelIndex &index) const {
50
QItemDelegate* d = index.model()->data(index, DelegateRole).value<PropertyDelegate*>();
52
d->setEditorData(editor, index);
56
QItemDelegate::setEditorData(editor, index);
59
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const {
60
//QTableWidgetItem* item = owner->table->item(index.row(), index.column());
61
PropertyDelegate* d = NULL;
64
if (/*owner->custom &&*/ (d = model->data(index, DelegateRole).value<PropertyDelegate*>())) {
65
old = model->data(index, ConfigurationEditor::ItemValueRole);
66
d->setModelData(editor, model, index);
67
expanded = model->data(index, ConfigurationEditor::ItemListValueRole);
69
old = model->data(index, Qt::EditRole);
70
QItemDelegate::setModelData(editor, model, index);
72
QString name = model->data(index, DescriptorRole).value<Descriptor>().getId();
73
if (handlePropertyValueList(name, expanded)) {
76
QVariant val = model->data(index, (d == NULL) ? (int)Qt::EditRole : (int)ConfigurationEditor::ItemValueRole);
78
setPropertyValue(name, val);
80
model->setData(index, d->getDisplayValue(val), Qt::DisplayRole);
82
model->setData(index, model->data(index, Qt::DisplayRole).toString(), Qt::ToolTipRole);