feat(cpn): add filenames to model compare (#5187)

This commit is contained in:
Neil Horne
2024-06-17 09:11:48 +10:00
committed by GitHub
parent f1b387be23
commit 98593ef084
5 changed files with 56 additions and 1 deletions
+10
View File
@@ -75,14 +75,23 @@ bool CompareDialog::handleMimeData(const QMimeData * mimeData)
{
QVector<ModelData> 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);
+1
View File
@@ -40,6 +40,7 @@ class CompareDialog : public QDialog
struct GMData {
ModelData model;
GeneralSettings gs;
QString fname;
};
MultiModelPrinter * multimodelprinter;
+2
View File
@@ -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);
+36
View File
@@ -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<ModelData> * 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
*/
+7 -1
View File
@@ -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<ModelData> * 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