1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QGroupBox>
#include <QLabel>
#include <QTextEdit>
#include <QSettings>
#include <QCloseEvent>
#include <QFileDialog>
#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());
connect(refreshB, &QPushButton::clicked, this, &CopyDialog::refresh);
dirGrid->addWidget(refreshB, 2, 2);
QGroupBox *dirGB = new QGroupBox("Directories");
dirGB->setLayout(dirGrid);
QHBoxLayout *resultL = new QHBoxLayout;
mResultTE = new QTextEdit;
mResultTE->setReadOnly(true);
mResultTE->setAlignment(Qt::AlignTop | Qt::AlignLeft);
resultL->addWidget(mResultTE);
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)));
}
mResultTE->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();
}
|