From 98593ef084aea24322e2c8088690a663811a4879 Mon Sep 17 00:00:00 2001 From: Neil Horne <15316949+elecpower@users.noreply.github.com> Date: Mon, 17 Jun 2024 09:11:48 +1000 Subject: [PATCH] feat(cpn): add filenames to model compare (#5187) --- companion/src/comparedialog.cpp | 10 +++++++++ companion/src/comparedialog.h | 1 + companion/src/mdichild.cpp | 2 ++ companion/src/modelslist.cpp | 36 +++++++++++++++++++++++++++++++++ companion/src/modelslist.h | 8 +++++++- 5 files changed, 56 insertions(+), 1 deletion(-) diff --git a/companion/src/comparedialog.cpp b/companion/src/comparedialog.cpp index 15622c146..dad162675 100644 --- a/companion/src/comparedialog.cpp +++ b/companion/src/comparedialog.cpp @@ -75,14 +75,23 @@ bool CompareDialog::handleMimeData(const QMimeData * mimeData) { QVector mList; GeneralSettings gs; + QString fdata; + if (!ModelsListModel::decodeMimeData(mimeData, &mList, &gs) || mList.isEmpty()) return false; + + if (!ModelsListModel::decodeFileData(mimeData, &fdata)) + return false; + for (int i=0; i < mList.size(); ++i) { GMData data; data.model = mList[i]; data.gs = gs; + data.fname = fdata; + qDebug() << "filename" << data.fname; modelsList.append(data); } + return true; } @@ -117,6 +126,7 @@ void CompareDialog::compare() if (name.isEmpty()) name = tr("Unnamed Model %1").arg(i+1); + name.append(QString(" (%1)").arg(modelsList[i].fname)); QWidget * hdr = new QWidget(this); hdr->setLayout(new QHBoxLayout()); hdr->layout()->setContentsMargins(0, 0, 0, 0); diff --git a/companion/src/comparedialog.h b/companion/src/comparedialog.h index c9da983fa..07e216510 100644 --- a/companion/src/comparedialog.h +++ b/companion/src/comparedialog.h @@ -40,6 +40,7 @@ class CompareDialog : public QDialog struct GMData { ModelData model; GeneralSettings gs; + QString fname; }; MultiModelPrinter * multimodelprinter; diff --git a/companion/src/mdichild.cpp b/companion/src/mdichild.cpp index a3b5e692c..7af0eb1a6 100644 --- a/companion/src/mdichild.cpp +++ b/companion/src/mdichild.cpp @@ -1251,6 +1251,7 @@ void MdiChild::newFile(bool createDefaults) isUntitled = true; curFile = QString("document%1.etx").arg(sequenceNumber++); updateTitle(); + modelsListModel->setFilename(curFile); radioData.addLabel(tr("Favorites")); labelsListModel->buildLabelsList(); } @@ -1395,6 +1396,7 @@ void MdiChild::setCurrentFile(const QString & fileName) isUntitled = false; setWindowModified(false); updateTitle(); + modelsListModel->setFilename(curFile); QStringList files = g.recentFiles(); files.removeAll(curFile); diff --git a/companion/src/modelslist.cpp b/companion/src/modelslist.cpp index 8cb23ee6d..5727c65bd 100644 --- a/companion/src/modelslist.cpp +++ b/companion/src/modelslist.cpp @@ -318,6 +318,7 @@ QMimeData * ModelsListModel::mimeData(const QModelIndexList & indexes) const getModelsMimeData(indexes, mimeData); getGeneralMimeData(mimeData); getHeaderMimeData(mimeData); + getFileMimeData(mimeData); return mimeData; } @@ -398,6 +399,16 @@ QMimeData *ModelsListModel::getHeaderMimeData(QMimeData * mimeData) const return mimeData; } +QMimeData *ModelsListModel::getFileMimeData(QMimeData * mimeData) const +{ + if (!mimeData) + mimeData = new QMimeData(); + QByteArray mData; + encodeFileData(&mData); + mimeData->setData("application/x-companion-filedata", mData); + return mimeData; +} + QUuid ModelsListModel::getMimeDataSourceId(const QMimeData * mimeData) const { MimeHeaderData header; @@ -429,6 +440,11 @@ bool ModelsListModel::hasHeaderMimeData(const QMimeData * mimeData) const return mimeData->hasFormat("application/x-companion-radiodata-header"); } +bool ModelsListModel::hasFileMimeData(const QMimeData * mimeData) const +{ + return mimeData->hasFormat("application/x-companion-filedata"); +} + // returns true if mime data origin was this data model (vs. from another file window) bool ModelsListModel::hasOwnMimeData(const QMimeData * mimeData) const { @@ -460,6 +476,11 @@ void ModelsListModel::encodeHeaderData(QByteArray * data) const stream << mimeHeaderData.instanceId; } +void ModelsListModel::encodeFileData(QByteArray * data) const +{ + *data = filename.toLatin1(); +} + // static bool ModelsListModel::decodeHeaderData(const QMimeData * mimeData, MimeHeaderData * header) { @@ -472,6 +493,16 @@ bool ModelsListModel::decodeHeaderData(const QMimeData * mimeData, MimeHeaderDat return false; } +// static +bool ModelsListModel::decodeFileData(const QMimeData * mimeData, QString * filedata) +{ + if (filedata && mimeData->hasFormat("application/x-companion-filedata")) { + *filedata = mimeData->data("application/x-companion-filedata").data(); + return true; + } + return false; +} + // static bool ModelsListModel::decodeMimeData(const QMimeData * mimeData, QVector * models, GeneralSettings * gs, bool * hasGenSet) { @@ -682,6 +713,11 @@ bool ModelsListModel::isModelIdUnique(unsigned modelIdx, unsigned module, unsign return true; } +void ModelsListModel::setFilename(QString & name) +{ + filename = name; +} + /* ModelsListProxyModel */ diff --git a/companion/src/modelslist.h b/companion/src/modelslist.h index 1cef6e582..2c9855ab1 100644 --- a/companion/src/modelslist.h +++ b/companion/src/modelslist.h @@ -82,7 +82,7 @@ class ModelsListModel : public QAbstractItemModel quint16 dataVersion; }; - ModelsListModel(RadioData * radioData, QObject *parent = 0); + ModelsListModel(RadioData * radioData, QObject *parent = nullptr); virtual ~ModelsListModel(); virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; @@ -108,16 +108,20 @@ class ModelsListModel : public QAbstractItemModel void encodeModelsData(const QModelIndexList & indexes, QByteArray * data) const; void encodeGeneralData(QByteArray * data) const; void encodeHeaderData(QByteArray * data) const; + void encodeFileData(QByteArray * data) const; QMimeData * getModelsMimeData(const QModelIndexList & indexes, QMimeData * mimeData = nullptr) const; QMimeData * getGeneralMimeData(QMimeData * mimeData = nullptr) const; QMimeData * getHeaderMimeData(QMimeData * mimeData = nullptr) const; + QMimeData * getFileMimeData(QMimeData * mimeData = nullptr) const; QUuid getMimeDataSourceId(const QMimeData * mimeData) const; bool hasSupportedMimeData(const QMimeData * mimeData) const; bool hasModelsMimeData(const QMimeData * mimeData) const; bool hasGeneralMimeData(const QMimeData * mimeData) const; bool hasHeaderMimeData(const QMimeData * mimeData) const; bool hasOwnMimeData(const QMimeData * mimeData) const; + bool hasFileMimeData(const QMimeData * mimeData) const; + static bool decodeFileData(const QMimeData * mimeData, QString * filedata); static bool decodeHeaderData(const QMimeData * mimeData, MimeHeaderData * header); static bool decodeMimeData(const QMimeData * mimeData, QVector * models = nullptr, GeneralSettings * gs = nullptr, bool * hasGenSet = nullptr); static int countModelsInMimeData(const QMimeData * mimeData); @@ -126,6 +130,7 @@ class ModelsListModel : public QAbstractItemModel int getModelIndex(const QModelIndex & index) const; int rowNumber(const QModelIndex & index = QModelIndex()) const; bool isModelType(const QModelIndex & index) const; + void setFilename(QString & name); public slots: void markItemForCut(const QModelIndex & index, bool on = true); @@ -149,6 +154,7 @@ class ModelsListModel : public QAbstractItemModel RadioData * radioData; MimeHeaderData mimeHeaderData; bool hasLabels; + QString filename; }; class ModelsListProxyModel : public QSortFilterProxyModel