diff --git a/src/core/Compare.cpp b/src/core/Compare.cpp index 12e5029b7..5dccdd781 100644 --- a/src/core/Compare.cpp +++ b/src/core/Compare.cpp @@ -15,24 +15,3 @@ * along with this program. If not, see . */ #include "Compare.h" - -#include - -bool operator<(const QColor& lhs, const QColor& rhs) -{ - const QColor adaptedLhs = lhs.toCmyk(); - const QColor adaptedRhs = rhs.toCmyk(); - const int iCyan = compare(adaptedLhs.cyanF(), adaptedRhs.cyanF()); - if (iCyan != 0) { - return iCyan; - } - const int iMagenta = compare(adaptedLhs.magentaF(), adaptedRhs.magentaF()); - if (iMagenta != 0) { - return iMagenta; - } - const int iYellow = compare(adaptedLhs.yellowF(), adaptedRhs.yellowF()); - if (iYellow != 0) { - return iYellow; - } - return compare(adaptedLhs.blackF(), adaptedRhs.blackF()) < 0; -} diff --git a/src/core/Compare.h b/src/core/Compare.h index 5124caf6e..921893859 100644 --- a/src/core/Compare.h +++ b/src/core/Compare.h @@ -34,14 +34,6 @@ enum CompareItemOption Q_DECLARE_FLAGS(CompareItemOptions, CompareItemOption) Q_DECLARE_OPERATORS_FOR_FLAGS(CompareItemOptions) -class QColor; -/*! - * \return true when both color match - * - * Comparison converts both into the cmyk-model - */ -bool operator<(const QColor& lhs, const QColor& rhs); - template inline short compareGeneric(const Type& lhs, const Type& rhs, CompareItemOptions) { if (lhs != rhs) { diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp index 1b05b9e6e..4e6911c37 100644 --- a/src/core/Entry.cpp +++ b/src/core/Entry.cpp @@ -208,12 +208,12 @@ const QUuid& Entry::iconUuid() const return m_data.customIcon; } -QColor Entry::foregroundColor() const +QString Entry::foregroundColor() const { return m_data.foregroundColor; } -QColor Entry::backgroundColor() const +QString Entry::backgroundColor() const { return m_data.backgroundColor; } @@ -508,14 +508,14 @@ void Entry::setIcon(const QUuid& uuid) } } -void Entry::setForegroundColor(const QColor& color) +void Entry::setForegroundColor(const QString& colorStr) { - set(m_data.foregroundColor, color); + set(m_data.foregroundColor, colorStr); } -void Entry::setBackgroundColor(const QColor& color) +void Entry::setBackgroundColor(const QString& colorStr) { - set(m_data.backgroundColor, color); + set(m_data.backgroundColor, colorStr); } void Entry::setOverrideUrl(const QString& url) diff --git a/src/core/Entry.h b/src/core/Entry.h index 49ec6f027..8b52b5109 100644 --- a/src/core/Entry.h +++ b/src/core/Entry.h @@ -19,7 +19,6 @@ #ifndef KEEPASSX_ENTRY_H #define KEEPASSX_ENTRY_H -#include #include #include #include @@ -57,8 +56,8 @@ struct EntryData { int iconNumber; QUuid customIcon; - QColor foregroundColor; - QColor backgroundColor; + QString foregroundColor; + QString backgroundColor; QString overrideUrl; QString tags; bool autoTypeEnabled; @@ -86,8 +85,8 @@ public: QPixmap iconScaledPixmap() const; int iconNumber() const; const QUuid& iconUuid() const; - QColor foregroundColor() const; - QColor backgroundColor() const; + QString foregroundColor() const; + QString backgroundColor() const; QString overrideUrl() const; QString tags() const; const TimeInfo& timeInfo() const; @@ -132,8 +131,8 @@ public: void setUuid(const QUuid& uuid); void setIcon(int iconNumber); void setIcon(const QUuid& uuid); - void setForegroundColor(const QColor& color); - void setBackgroundColor(const QColor& color); + void setForegroundColor(const QString& color); + void setBackgroundColor(const QString& color); void setOverrideUrl(const QString& url); void setTags(const QString& tags); void setTimeInfo(const TimeInfo& timeInfo); diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index ff1ee71e7..fb18f711b 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -131,7 +131,7 @@ int Metadata::maintenanceHistoryDays() const return m_data.maintenanceHistoryDays; } -QColor Metadata::color() const +QString Metadata::color() const { return m_data.color; } @@ -347,7 +347,7 @@ void Metadata::setMaintenanceHistoryDays(int value) set(m_data.maintenanceHistoryDays, value); } -void Metadata::setColor(const QColor& value) +void Metadata::setColor(const QString& value) { set(m_data.color, value); } diff --git a/src/core/Metadata.h b/src/core/Metadata.h index 01abcb809..b39dafaf0 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -18,7 +18,6 @@ #ifndef KEEPASSX_METADATA_H #define KEEPASSX_METADATA_H -#include #include #include #include @@ -49,7 +48,7 @@ public: QString defaultUserName; QDateTime defaultUserNameChanged; int maintenanceHistoryDays; - QColor color; + QString color; bool recycleBinEnabled; int historyMaxItems; int historyMaxSize; @@ -72,7 +71,7 @@ public: QDateTime defaultUserNameChanged() const; QDateTime settingsChanged() const; int maintenanceHistoryDays() const; - QColor color() const; + QString color() const; bool protectTitle() const; bool protectUsername() const; bool protectPassword() const; @@ -113,7 +112,7 @@ public: void setDefaultUserNameChanged(const QDateTime& value); void setSettingsChanged(const QDateTime& value); void setMaintenanceHistoryDays(int value); - void setColor(const QColor& value); + void setColor(const QString& value); void setProtectTitle(bool value); void setProtectUsername(bool value); void setProtectPassword(bool value); diff --git a/src/format/KdbxXmlReader.cpp b/src/format/KdbxXmlReader.cpp index ab2b9aeb7..f4109a4df 100644 --- a/src/format/KdbxXmlReader.cpp +++ b/src/format/KdbxXmlReader.cpp @@ -1047,22 +1047,21 @@ QDateTime KdbxXmlReader::readDateTime() return Clock::currentDateTimeUtc(); } -QColor KdbxXmlReader::readColor() +QString KdbxXmlReader::readColor() { QString colorStr = readString(); if (colorStr.isEmpty()) { - return {}; + return colorStr; } if (colorStr.length() != 7 || colorStr[0] != '#') { if (m_strictMode) { raiseError(tr("Invalid color value")); } - return {}; + return colorStr; } - QColor color; for (int i = 0; i <= 2; ++i) { QString rgbPartStr = colorStr.mid(1 + 2 * i, 2); bool ok; @@ -1071,19 +1070,11 @@ QColor KdbxXmlReader::readColor() if (m_strictMode) { raiseError(tr("Invalid color rgb part")); } - return {}; - } - - if (i == 0) { - color.setRed(rgbPart); - } else if (i == 1) { - color.setGreen(rgbPart); - } else { - color.setBlue(rgbPart); + return colorStr; } } - return color; + return colorStr; } int KdbxXmlReader::readNumber() diff --git a/src/format/KdbxXmlReader.h b/src/format/KdbxXmlReader.h index 2ec9c9f66..562343971 100644 --- a/src/format/KdbxXmlReader.h +++ b/src/format/KdbxXmlReader.h @@ -83,7 +83,7 @@ protected: virtual QString readString(bool& isProtected, bool& protectInMemory); virtual bool readBool(); virtual QDateTime readDateTime(); - virtual QColor readColor(); + virtual QString readColor(); virtual int readNumber(); virtual QUuid readUuid(); virtual QByteArray readBinary(); diff --git a/src/format/KdbxXmlWriter.cpp b/src/format/KdbxXmlWriter.cpp index 7aa79c47d..14d920439 100644 --- a/src/format/KdbxXmlWriter.cpp +++ b/src/format/KdbxXmlWriter.cpp @@ -111,7 +111,7 @@ void KdbxXmlWriter::writeMetadata() writeString("DefaultUserName", m_meta->defaultUserName()); writeDateTime("DefaultUserNameChanged", m_meta->defaultUserNameChanged()); writeNumber("MaintenanceHistoryDays", m_meta->maintenanceHistoryDays()); - writeColor("Color", m_meta->color()); + writeString("Color", m_meta->color()); writeDateTime("MasterKeyChanged", m_meta->masterKeyChanged()); writeNumber("MasterKeyChangeRec", m_meta->masterKeyChangeRec()); writeNumber("MasterKeyChangeForce", m_meta->masterKeyChangeForce()); @@ -346,8 +346,8 @@ void KdbxXmlWriter::writeEntry(const Entry* entry) if (!entry->iconUuid().isNull()) { writeUuid("CustomIconUUID", entry->iconUuid()); } - writeColor("ForegroundColor", entry->foregroundColor()); - writeColor("BackgroundColor", entry->backgroundColor()); + writeString("ForegroundColor", entry->foregroundColor()); + writeString("BackgroundColor", entry->backgroundColor()); writeString("OverrideURL", entry->overrideUrl()); writeString("Tags", entry->tags()); writeTimes(entry->timeInfo()); @@ -532,18 +532,6 @@ void KdbxXmlWriter::writeBinary(const QString& qualifiedName, const QByteArray& writeString(qualifiedName, QString::fromLatin1(ba.toBase64())); } -void KdbxXmlWriter::writeColor(const QString& qualifiedName, const QColor& color) -{ - QString colorStr; - - if (color.isValid()) { - colorStr = QString("#%1%2%3").arg( - colorPartToString(color.red()), colorPartToString(color.green()), colorPartToString(color.blue())); - } - - writeString(qualifiedName, colorStr); -} - void KdbxXmlWriter::writeTriState(const QString& qualifiedName, Group::TriState triState) { QString value; diff --git a/src/format/KdbxXmlWriter.h b/src/format/KdbxXmlWriter.h index 1a367a263..eaad9f211 100644 --- a/src/format/KdbxXmlWriter.h +++ b/src/format/KdbxXmlWriter.h @@ -18,7 +18,6 @@ #ifndef KEEPASSX_KDBXXMLWRITER_H #define KEEPASSX_KDBXXMLWRITER_H -#include #include #include #include @@ -74,7 +73,6 @@ private: void writeUuid(const QString& qualifiedName, const Group* group); void writeUuid(const QString& qualifiedName, const Entry* entry); void writeBinary(const QString& qualifiedName, const QByteArray& ba); - void writeColor(const QString& qualifiedName, const QColor& color); void writeTriState(const QString& qualifiedName, Group::TriState triState); QString colorPartToString(int value); QString stripInvalidXml10Chars(QString str); diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 02b9f3a59..a3ed30297 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -1123,15 +1123,15 @@ void EditEntryWidget::updateEntryData(Entry* entry) const entry->setNotes(m_mainUi->notesEdit->toPlainText()); if (m_advancedUi->fgColorCheckBox->isChecked() && m_advancedUi->fgColorButton->property("color").isValid()) { - entry->setForegroundColor(QColor(m_advancedUi->fgColorButton->property("color").toString())); + entry->setForegroundColor(m_advancedUi->fgColorButton->property("color").toString()); } else { - entry->setForegroundColor(QColor()); + entry->setForegroundColor(QString()); } if (m_advancedUi->bgColorCheckBox->isChecked() && m_advancedUi->bgColorButton->property("color").isValid()) { - entry->setBackgroundColor(QColor(m_advancedUi->bgColorButton->property("color").toString())); + entry->setBackgroundColor(m_advancedUi->bgColorButton->property("color").toString()); } else { - entry->setBackgroundColor(QColor()); + entry->setBackgroundColor(QString()); } IconStruct iconStruct = m_iconsWidget->state(); diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp index bf7eca0c7..b4c5840cf 100644 --- a/src/gui/entry/EntryModel.cpp +++ b/src/gui/entry/EntryModel.cpp @@ -271,6 +271,8 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const } return font; } else if (role == Qt::ForegroundRole) { + QColor foregroundColor; + foregroundColor.setNamedColor(entry->foregroundColor()); if (entry->hasReferences()) { QPalette p; #ifdef Q_OS_MACOS @@ -279,12 +281,14 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const } #endif return QVariant(p.color(QPalette::Active, QPalette::Mid)); - } else if (entry->foregroundColor().isValid()) { - return QVariant(entry->foregroundColor()); + } else if (foregroundColor.isValid()) { + return QVariant(foregroundColor); } } else if (role == Qt::BackgroundRole) { - if (entry->backgroundColor().isValid()) { - return QVariant(entry->backgroundColor()); + QColor backgroundColor; + backgroundColor.setNamedColor(entry->backgroundColor()); + if (backgroundColor.isValid()) { + return QVariant(backgroundColor); } } else if (role == Qt::TextAlignmentRole) { if (index.column() == Paperclip) { diff --git a/tests/TestKeePass2Format.cpp b/tests/TestKeePass2Format.cpp index ce4f63fed..df414f5c0 100644 --- a/tests/TestKeePass2Format.cpp +++ b/tests/TestKeePass2Format.cpp @@ -86,7 +86,7 @@ void TestKeePass2Format::testXmlMetadata() QCOMPARE(m_xmlDb->metadata()->defaultUserName(), QString("DEFUSERNAME")); QCOMPARE(m_xmlDb->metadata()->defaultUserNameChanged(), MockClock::datetimeUtc(2010, 8, 8, 17, 27, 45)); QCOMPARE(m_xmlDb->metadata()->maintenanceHistoryDays(), 127); - QCOMPARE(m_xmlDb->metadata()->color(), QColor(0xff, 0xef, 0x00)); + QCOMPARE(m_xmlDb->metadata()->color(), QString("#FFEF00")); QCOMPARE(m_xmlDb->metadata()->masterKeyChanged(), MockClock::datetimeUtc(2012, 4, 5, 17, 9, 34)); QCOMPARE(m_xmlDb->metadata()->masterKeyChangeRec(), 101); QCOMPARE(m_xmlDb->metadata()->masterKeyChangeForce(), -1); @@ -200,8 +200,8 @@ void TestKeePass2Format::testXmlEntry1() QCOMPARE(entry->historyItems().size(), 2); QCOMPARE(entry->iconNumber(), 0); QCOMPARE(entry->iconUuid(), QUuid()); - QVERIFY(!entry->foregroundColor().isValid()); - QVERIFY(!entry->backgroundColor().isValid()); + QVERIFY(entry->foregroundColor().isEmpty()); + QVERIFY(entry->backgroundColor().isEmpty()); QCOMPARE(entry->overrideUrl(), QString("")); QCOMPARE(entry->tags(), QString("a b c")); @@ -262,8 +262,8 @@ void TestKeePass2Format::testXmlEntry2() QCOMPARE(entry->iconNumber(), 0); QCOMPARE(entry->iconUuid(), QUuid::fromRfc4122(QByteArray::fromBase64("++vyI+daLk6omox4a6kQGA=="))); // TODO: test entry->icon() - QCOMPARE(entry->foregroundColor(), QColor(255, 0, 0)); - QCOMPARE(entry->backgroundColor(), QColor(255, 255, 0)); + QCOMPARE(entry->foregroundColor(), QString("#FF0000")); + QCOMPARE(entry->backgroundColor(), QString("#FFFF00")); QCOMPARE(entry->overrideUrl(), QString("http://override.net/")); QCOMPARE(entry->tags(), QString("")); diff --git a/tests/TestModified.cpp b/tests/TestModified.cpp index 254db3796..dcaeca8ff 100644 --- a/tests/TestModified.cpp +++ b/tests/TestModified.cpp @@ -309,13 +309,13 @@ void TestModified::testEntrySets() entry->setDefaultAutoTypeSequence(entry->defaultAutoTypeSequence()); QTRY_COMPARE(spyModified.count(), spyCount); - entry->setForegroundColor(Qt::red); + entry->setForegroundColor(QString("#FF0000")); ++spyCount; QTRY_COMPARE(spyModified.count(), spyCount); entry->setForegroundColor(entry->foregroundColor()); QTRY_COMPARE(spyModified.count(), spyCount); - entry->setBackgroundColor(Qt::red); + entry->setBackgroundColor(QString("#FF0000")); ++spyCount; QTRY_COMPARE(spyModified.count(), spyCount); entry->setBackgroundColor(entry->backgroundColor()); diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 9118d3e21..64e913c76 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -432,8 +432,8 @@ void TestGui::testEditEntry() // Test entry colors (simulate choosing a color) editEntryWidget->setCurrentPage(1); - auto fgColor = QColor(Qt::red); - auto bgColor = QColor(Qt::blue); + auto fgColor = QString("#FF0000"); + auto bgColor = QString("#0000FF"); // Set foreground color auto colorButton = editEntryWidget->findChild("fgColorButton"); auto colorCheckBox = editEntryWidget->findChild("fgColorCheckBox");