diff --git a/apps/opencs/view/world/util.cpp b/apps/opencs/view/world/util.cpp index e44606652..22d295761 100644 --- a/apps/opencs/view/world/util.cpp +++ b/apps/opencs/view/world/util.cpp @@ -127,22 +127,24 @@ void CSVWorld::CommandDelegate::setModelDataImp (QWidget *editor, QAbstractItemM if (!mCommandDispatcher) return; - QVariant new_; - // Color columns use a custom editor, so we need explicitly extract a data from it + QVariant variant; + + // Color columns use a custom editor, so we need to fetch selected color from it. CSVWidget::ColorEditor *colorEditor = qobject_cast(editor); if (colorEditor != NULL) { - new_ = colorEditor->color(); + QColor color = colorEditor->color(); + variant = (color.blue() << 16) | (color.green() << 8) | (color.red()); } else { NastyTableModelHack hack (*model); QStyledItemDelegate::setModelData (editor, &hack, index); - new_ = hack.getData(); + variant = hack.getData(); } - if ((model->data (index)!=new_) && (model->flags(index) & Qt::ItemIsEditable)) - mCommandDispatcher->executeModify (model, index, new_); + if ((model->data (index)!=variant) && (model->flags(index) & Qt::ItemIsEditable)) + mCommandDispatcher->executeModify (model, index, variant); } CSVWorld::CommandDelegate::CommandDelegate (CSMWorld::CommandDispatcher *commandDispatcher, @@ -179,7 +181,9 @@ QWidget *CSVWorld::CommandDelegate::createEditor (QWidget *parent, const QStyleO // (the third parameter of ColorEditor's constructor) else if (display == CSMWorld::ColumnBase::Display_Colour) { - return new CSVWidget::ColorEditor(index.data().value(), parent, true); + int colorInt = index.data().toInt(); + QColor color = QColor(colorInt & 0xff, (colorInt >> 8) & 0xff, (colorInt >> 16) & 0xff); + return new CSVWidget::ColorEditor(color, parent, true); } return createEditor (parent, option, index, display); } @@ -202,9 +206,11 @@ QWidget *CSVWorld::CommandDelegate::createEditor (QWidget *parent, const QStyleO switch (display) { case CSMWorld::ColumnBase::Display_Colour: - - return new CSVWidget::ColorEditor(index.data().value(), parent); - + { + int colorInt = variant.toInt(); + QColor color = QColor(colorInt & 0xff, (colorInt >> 8) & 0xff, (colorInt >> 16) & 0xff); + return new CSVWidget::ColorEditor(color, parent); + } case CSMWorld::ColumnBase::Display_Integer: { DialogueSpinBox *sb = new DialogueSpinBox(parent); @@ -291,13 +297,13 @@ void CSVWorld::CommandDelegate::setEditorData (QWidget *editor, const QModelInde void CSVWorld::CommandDelegate::setEditorData (QWidget *editor, const QModelIndex& index, bool tryDisplay) const { - QVariant v = index.data(Qt::EditRole); + QVariant variant = index.data(Qt::EditRole); if (tryDisplay) { - if (!v.isValid()) + if (!variant.isValid()) { - v = index.data(Qt::DisplayRole); - if (!v.isValid()) + variant = index.data(Qt::DisplayRole); + if (!variant.isValid()) { return; } @@ -305,7 +311,7 @@ void CSVWorld::CommandDelegate::setEditorData (QWidget *editor, const QModelInde QPlainTextEdit* plainTextEdit = qobject_cast(editor); if(plainTextEdit) //for some reason it is easier to brake the loop here { - if(plainTextEdit->toPlainText() == v.toString()) + if (plainTextEdit->toPlainText() == variant.toString()) { return; } @@ -316,23 +322,27 @@ void CSVWorld::CommandDelegate::setEditorData (QWidget *editor, const QModelInde CSVWidget::ColorEditor *colorEditor = qobject_cast(editor); if (colorEditor != NULL) { - colorEditor->setColor(index.data().value()); + int colorInt = variant.toInt(); + QColor color = QColor(colorInt & 0xff, (colorInt >> 8) & 0xff, (colorInt >> 16) & 0xff); + colorEditor->setColor(color); return; } QByteArray n = editor->metaObject()->userProperty().name(); - if (n == "dateTime") { + if (n == "dateTime") + { if (editor->inherits("QTimeEdit")) n = "time"; else if (editor->inherits("QDateEdit")) n = "date"; } - if (!n.isEmpty()) { - if (!v.isValid()) - v = QVariant(editor->property(n).userType(), (const void *)0); - editor->setProperty(n, v); + if (!n.isEmpty()) + { + if (!variant.isValid()) + variant = QVariant(editor->property(n).userType(), (const void *)0); + editor->setProperty(n, variant); } }