#include #include #include #include #include #include #include #include #include "copydialog.h" CopyDialog::CopyDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { setAttribute(Qt::WA_DeleteOnClose); setWindowTitle(tr("Copy files")); QGridLayout *dirGrid = new QGridLayout; QLabel *srcL = new QLabel(tr("Source")); dirGrid->addWidget(srcL, 0, 0); mSrcE = new QLineEdit; mSrcE->setReadOnly(true); dirGrid->addWidget(mSrcE, 0, 1); QLabel *dstL = new QLabel(tr("Destination")); dirGrid->addWidget(dstL, 1, 0); mDstE = new QLineEdit; mDstE->setReadOnly(true); dirGrid->addWidget(mDstE, 1, 1); QPushButton *dstB = new QPushButton(QIcon::fromTheme("folder"), tr("...")); connect(dstB, &QPushButton::clicked, this, &CopyDialog::getDestination); dirGrid->addWidget(dstB, 1, 2); QLabel *folderL = new QLabel(tr("Folder Name")); dirGrid->addWidget(folderL, 2, 0); mFolderE = new QLineEdit; dirGrid->addWidget(mFolderE, 2, 1); QPushButton *refreshB = new QPushButton(QIcon::fromTheme("view-refresh"), QString()); dirGrid->addWidget(refreshB, 2, 2); QGroupBox *dirGB = new QGroupBox("Directories"); dirGB->setLayout(dirGrid); QHBoxLayout *resultL = new QHBoxLayout; mResultL = new QLabel; mResultL->setAlignment(Qt::AlignTop | Qt::AlignLeft); resultL->addWidget(mResultL); QGroupBox *resultGB = new QGroupBox(tr("Result")); resultGB->setLayout(resultL); QHBoxLayout *buttonL = new QHBoxLayout; QPushButton *copyB = new QPushButton(tr("Copy!")); buttonL->addStretch(); buttonL->addWidget(copyB); QPushButton *closeB = new QPushButton(tr("Close")); connect(closeB, &QPushButton::clicked, this, &CopyDialog::close); buttonL->addWidget(closeB); buttonL->addStretch(); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(dirGB, Qt::AlignTop); mainLayout->addWidget(resultGB, Qt::AlignVCenter); mainLayout->addLayout(buttonL, Qt::AlignBottom); setLayout(mainLayout); readSettings(); } void CopyDialog::readSettings(){ QSettings s; resize(s.value("copydlgsize").toSize()); QString dst = s.value("copydlgdst").toString(); QFileInfo fi(dst); if(fi.exists()){ mDstE->setText(dst); } } void CopyDialog::getDestination(){ QString dir = QFileDialog::getExistingDirectory(this, tr("Select destination Folder")); mDstE->setText(dir); } void CopyDialog::setSource(const QString &src){ mSrcE->setText(src); } void CopyDialog::setDestFolder(const QString &dst){ mFolderE->setText(dst); } void CopyDialog::setSources(const QStringList &sources){ mSources = sources; refresh(); } void CopyDialog::refresh(){ QString res; for(const QString &p : mSources){ res.append(QString("%1 %2\n").arg(QChar(0x2b9a)).arg(p)); res.append(QString("%1 %2\n").arg(QChar(0x2b98)).arg(getDestinationFile(p))); } mResultL->setText(res); } QString CopyDialog::getDestinationFile(const QString &srcFn){ QFileInfo fi(srcFn); if(fi.exists()){ QString fn = fi.fileName(); QString destPath = QString("%1/%2/%3").arg(mDstE->text()).arg(mFolderE->text()).arg(fn); return destPath; } return QString(); } void CopyDialog::closeEvent(QCloseEvent *e){ QSettings s; s.setValue("copydlgsize", size()); s.setValue("copydlgdst", mDstE->text()); e->accept(); }