Skip to content

Commit

Permalink
feat(cpn): add filenames to model compare
Browse files Browse the repository at this point in the history
  • Loading branch information
elecpower committed Jun 15, 2024
1 parent cce7ae6 commit 83eefbb
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 1 deletion.
10 changes: 10 additions & 0 deletions companion/src/comparedialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions companion/src/comparedialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class CompareDialog : public QDialog
struct GMData {
ModelData model;
GeneralSettings gs;
QString fname;
};

MultiModelPrinter * multimodelprinter;
Expand Down
2 changes: 2 additions & 0 deletions companion/src/mdichild.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down Expand Up @@ -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);
Expand Down
36 changes: 36 additions & 0 deletions companion/src/modelslist.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,7 @@ QMimeData * ModelsListModel::mimeData(const QModelIndexList & indexes) const
getModelsMimeData(indexes, mimeData);
getGeneralMimeData(mimeData);
getHeaderMimeData(mimeData);
getFileMimeData(mimeData);
return mimeData;
}

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
{
Expand Down Expand Up @@ -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)
{
Expand All @@ -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)
{
Expand Down Expand Up @@ -682,6 +713,11 @@ bool ModelsListModel::isModelIdUnique(unsigned modelIdx, unsigned module, unsign
return true;
}

void ModelsListModel::setFilename(QString & name)
{
filename = name;
}

/*
ModelsListProxyModel
*/
Expand Down
8 changes: 7 additions & 1 deletion companion/src/modelslist.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -149,6 +154,7 @@ class ModelsListModel : public QAbstractItemModel
RadioData * radioData;
MimeHeaderData mimeHeaderData;
bool hasLabels;
QString filename;
};

class ModelsListProxyModel : public QSortFilterProxyModel
Expand Down

0 comments on commit 83eefbb

Please sign in to comment.