diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 9e89be6cb..a0e662306 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -40,6 +40,7 @@ #include "NameList/nameslist.h" #include "elementdialog.h" #include +#include /** Constructeur @@ -122,7 +123,7 @@ DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : ConductorProperties initial_properties = edited_conductor->properties(); // prepare a color dialog showing the initial conductor color - QColorDialog *color_dialog = new QColorDialog(this); + QPointer color_dialog = new QColorDialog(this); color_dialog->setWindowTitle(tr("Choisir la nouvelle couleur de ce conducteur")); #ifdef Q_OS_MACOS color_dialog -> setWindowFlags(Qt::Sheet); @@ -150,6 +151,8 @@ DiagramView::DiagramView(Diagram *diagram, QWidget *parent) : LastUsedStyle::setConductorColor(new_color); } } + if (color_dialog) + delete color_dialog; }); } diff --git a/sources/qet.cpp b/sources/qet.cpp index bf4415e94..f253fc114 100644 --- a/sources/qet.cpp +++ b/sources/qet.cpp @@ -20,10 +20,13 @@ #include "shortcutmanager.h" #include +#include +#include #include #include #include #include +#include #include #include #include @@ -845,3 +848,55 @@ bool QET::writeToFile(QDomDocument &xml_doc, QFile *file, QString *error_message return(true); } + +/** + @brief QET::saveCustomColors + Save the 16 QColorDialog custom colors to QSettings so they persist + across application restarts. +*/ +void QET::saveCustomColors() +{ + QByteArray ba; + QBuffer buf(&ba); + buf.open(QIODevice::WriteOnly); + QDataStream s(&buf); + s.setVersion(QDataStream::Qt_6_0); + for (int i = 0; i < 16; i++) + s << QColorDialog::customColor(i); + QSettings settings; + settings.setValue(QStringLiteral("color/customColors"), ba); +} + +/** + @brief QET::loadCustomColors + Load the 16 QColorDialog custom colors from QSettings into Qt's + internal custom color array. A short or corrupt buffer is ignored + so that unread slots keep their default rather than turning black. +*/ +void QET::loadCustomColors() +{ + QSettings settings; + QByteArray ba = settings.value(QStringLiteral("color/customColors")).toByteArray(); + + // Fall back to the legacy ungrouped key used by earlier versions. + if (ba.isEmpty()) + ba = settings.value(QStringLiteral("customColors")).toByteArray(); + + if (ba.isEmpty()) + return; + + QBuffer buf(&ba); + buf.open(QIODevice::ReadOnly); + QDataStream s(&buf); + s.setVersion(QDataStream::Qt_6_0); + + QColor colors[16]; + for (int i = 0; i < 16; i++) + s >> colors[i]; + + if (s.status() != QDataStream::Ok) + return; + + for (int i = 0; i < 16; i++) + QColorDialog::setCustomColor(i, colors[i]); +} diff --git a/sources/qet.h b/sources/qet.h index 51e951d0f..da544ac13 100644 --- a/sources/qet.h +++ b/sources/qet.h @@ -18,6 +18,7 @@ #ifndef _QET_H #define _QET_H +#include #include #include #include @@ -185,6 +186,8 @@ namespace QET { bool writeToFile (QDomDocument &xml_doc, QFile *file, QString *error_message = nullptr); bool eachStrIsEqual (const QStringList &qsl); QActionGroup *depthActionGroup(QObject *parent = nullptr); + void saveCustomColors(); + void loadCustomColors(); } Q_DECLARE_METATYPE(QET::DepthOption) diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 0d31378d4..ed31bf0a4 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -18,6 +18,7 @@ #include "qetapp.h" #include "configdialog.h" +#include "qet.h" #include "ui/configpage/configpages.h" #include "editor/ui/qetelementeditor.h" #include "elementscollectioncache.h" @@ -124,6 +125,7 @@ QETApp::QETApp() : QET::Icons::initIcons(); initFonts(); initStyle(); + QET::loadCustomColors(); initSplashScreen(); initSystemTray(); @@ -168,6 +170,7 @@ QETApp::QETApp() : */ QETApp::~QETApp() { + QET::saveCustomColors(); m_elements_recent_files->save(); m_projects_recent_files->save();