10#include <QDesktopServices>
11#include <QLoggingCategory>
12#include "FrmFileTransfer.h"
13#include "ui_FrmFileTransfer.h"
15static Q_LOGGING_CATEGORY(log,
"FileTransfer.Widget")
19 , m_pModelLocalDir(
nullptr)
20 , m_pModelLocalFile(
nullptr)
21 , m_pModelRemoteDir(
nullptr)
22 , m_pModelRemoteFile(
nullptr)
23 , m_pListFileModel(
nullptr)
28 m_pModelLocalDir =
new QFileSystemModel(ui->treeLocal);
29 m_pModelLocalDir->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
30 m_pModelLocalDir->setReadOnly(
false);
31 ui->treeLocal->setEditTriggers(QAbstractItemView::NoEditTriggers);
32 ui->treeLocal->setModel(m_pModelLocalDir);
33 ui->treeLocal->setContextMenuPolicy(Qt::CustomContextMenu);
34 ui->treeLocal->setSelectionBehavior(QAbstractItemView::SelectRows);
35 check = connect(ui->treeLocal, &QTreeView::clicked,
36 this, &CFrmFileTransfer::slotTreeLocalClicked);
38 SetLocalRoot(QString());
39 ui->treeLocal->setHeaderHidden(
true);
40 ui->treeLocal->header()->hide();
42 ui->treeLocal->header()->hideSection(1);
43 ui->treeLocal->header()->hideSection(2);
44 ui->treeLocal->header()->hideSection(3);
46 m_pModelLocalFile =
new QFileSystemModel(ui->tabLocal);
47 m_pModelLocalFile->setFilter(QDir::Files);
48 m_pModelLocalFile->setReadOnly(
false);
49 ui->tabLocal->setEditTriggers(QAbstractItemView::NoEditTriggers);
50 ui->tabLocal->setModel(m_pModelLocalFile);
51 ui->tabLocal->setContextMenuPolicy(Qt::CustomContextMenu);
52 ui->tabLocal->setShowGrid(
false);
53 ui->tabLocal->setSelectionBehavior(QAbstractItemView::SelectRows);
54 ui->tabLocal->verticalHeader()->hide();
55 ui->tabLocal->horizontalHeader()->setSectionResizeMode(
56 QHeaderView::ResizeToContents);
59 SetRemoteConnecter(m_pModelRemoteDir);
60 m_pModelRemoteDir->SetRootPath(
"/");
61 ui->treeRemote->setModel(m_pModelRemoteDir);
62 ui->treeRemote->setContextMenuPolicy(Qt::CustomContextMenu);
63 ui->treeRemote->setEditTriggers(QAbstractItemView::NoEditTriggers);
64 ui->treeRemote->setSelectionBehavior(QAbstractItemView::SelectRows);
65 ui->treeRemote->header()->hide();
66 ui->treeRemote->header()->hideSection((
int)CRemoteFileSystem::ColumnValue::Type);
67 ui->treeRemote->header()->hideSection((
int)CRemoteFileSystem::ColumnValue::Size);
68 ui->treeRemote->header()->hideSection((
int)CRemoteFileSystem::ColumnValue::LastModified);
69 ui->treeRemote->header()->hideSection((
int)CRemoteFileSystem::ColumnValue::Permission);
70 ui->treeRemote->header()->hideSection((
int)CRemoteFileSystem::ColumnValue::Owner);
73 SetRemoteConnecter(m_pModelRemoteFile);
74 m_pModelRemoteFile->SetRootPath(
"/");
75 ui->tabRemote->setModel(m_pModelRemoteFile);
76 ui->tabRemote->setContextMenuPolicy(Qt::CustomContextMenu);
77 ui->tabRemote->setEditTriggers(QAbstractItemView::NoEditTriggers);
78 ui->tabRemote->setSelectionBehavior(QAbstractItemView::SelectRows);
79 ui->tabRemote->verticalHeader()->hide();
84 ui->tabList->setModel(m_pListFileModel);
85 ui->tabList->verticalHeader()->hide();
86 ui->tabList->setSelectionBehavior(QAbstractItemView::SelectRows);
87 ui->tabList->setContextMenuPolicy(Qt::CustomContextMenu);
88 ui->tabList->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
89 ui->tabList->setColumnHidden((
int)CFileTransfer::ColumnValue::Explanation,
true);
90 ui->tabList->setColumnHidden((
int)CFileTransfer::ColumnValue::Time,
true);
91 ui->tabFail->setModel(m_pListFileModel);
92 ui->tabFail->verticalHeader()->hide();
93 ui->tabFail->setSelectionBehavior(QAbstractItemView::SelectRows);
94 ui->tabFail->setContextMenuPolicy(Qt::CustomContextMenu);
95 ui->tabFail->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
96 ui->tabFail->setColumnHidden((
int)CFileTransfer::ColumnValue::State,
true);
97 ui->tabFail->setColumnHidden((
int)CFileTransfer::ColumnValue::Speed,
true);
98 ui->tabSuccess->setModel(m_pListFileModel);
99 ui->tabSuccess->verticalHeader()->hide();
100 ui->tabSuccess->setSelectionBehavior(QAbstractItemView::SelectRows);
101 ui->tabSuccess->setContextMenuPolicy(Qt::CustomContextMenu);
102 ui->tabSuccess->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
103 ui->tabSuccess->setColumnHidden((
int)CFileTransfer::ColumnValue::State,
true);
104 ui->tabSuccess->setColumnHidden((
int)CFileTransfer::ColumnValue::Speed,
true);
105 ui->tabSuccess->setColumnHidden((
int)CFileTransfer::ColumnValue::Explanation,
true);
108CFrmFileTransfer::~CFrmFileTransfer()
110 qDebug(log) << Q_FUNC_INFO;
119 check = connect(
this, SIGNAL(sigGetDir(
CRemoteFileSystem*, QVector<QSharedPointer<CRemoteFileSystem> > ,
bool)),
120 p, SLOT(slotGetDir(
CRemoteFileSystem*, QVector<QSharedPointer<CRemoteFileSystem> > ,
bool)));
122 check = connect(p, SIGNAL(sigRemoveDir(
const QString&)),
123 this, SIGNAL(sigRemoveDir(
const QString&)));
125 check = connect(p, SIGNAL(sigRemoveFile(
const QString&)),
126 this, SIGNAL(sigRemoveFile(
const QString&)));
128 check = connect(p, SIGNAL(sigRename(
const QString&,
const QString&)),
129 this, SIGNAL(sigRename(
const QString&,
const QString&)));
131 check = connect(p, SIGNAL(sigMakeDir(
const QString&)),
132 this, SIGNAL(sigMakeDir(
const QString&)));
138 auto index = m_pModelLocalDir->setRootPath(root);
139 ui->treeLocal->setRootIndex(index);
140 slotTreeLocalClicked(index);
146 return m_pModelLocalDir->rootPath();
149void CFrmFileTransfer::slotTreeLocalClicked(
const QModelIndex &index)
151 QString szPath = m_pModelLocalDir->filePath(index);
152 if(szPath.isEmpty())
return;
153 if(-1 == ui->cbLocal->findText(szPath))
154 ui->cbLocal->addItem(szPath);
155 ui->cbLocal->setCurrentText(szPath);
156 QModelIndex idx = m_pModelLocalFile->setRootPath(szPath);
157 ui->tabLocal->setRootIndex(idx);
160void CFrmFileTransfer::on_cbLocal_editTextChanged(
const QString &szPath)
162 qDebug(log) << Q_FUNC_INFO << szPath;
163 auto idx = m_pModelLocalDir->index(szPath);
164 if(!idx.isValid())
return;
165 if(szPath.length() > 1 && (szPath.right(1) ==
'/' || szPath.right(1) ==
'\\'))
return;
166 ui->treeLocal->setCurrentIndex(idx);
167 slotTreeLocalClicked(idx);
170void CFrmFileTransfer::on_treeLocal_customContextMenuRequested(
const QPoint &pos)
172 qDebug(log) << Q_FUNC_INFO;
173 auto idx = ui->treeLocal->currentIndex();
176 menu.addAction(QIcon::fromTheme(
"go-up"), tr(
"Upload"),
177 this, SLOT(slotTreeLocalUpload()));
178 menu.addAction(QIcon::fromTheme(
"list-add"), tr(
"Add to list"),
179 this, SLOT(slotTreeLocalAddToList()));
180 menu.addAction(QIcon::fromTheme(
"folder-open"), tr(
"Open"),
181 this, SLOT(slotTreeLocalOpen()));
183 menu.addAction(QIcon::fromTheme(
"document-new"), tr(
"New"),
184 this, SLOT(slotTreeLocalNew()));
186 menu.addAction(QIcon::fromTheme(
"remove"), tr(
"Delete"),
187 this, SLOT(slotTreeLocalDelete()));
188 menu.addAction(QIcon::fromTheme(
"rename"), tr(
"Rename"),
189 this, SLOT(slotTreeLocalRename()));
190 menu.addAction(QIcon::fromTheme(
"edit-copy"), tr(
"Copy path to clipboard"),
191 this, SLOT(slotTreeLocalCopyToClipboard()));
193 menu.exec(ui->treeLocal->viewport()->mapToGlobal(pos));
196void CFrmFileTransfer::slotTreeLocalOpen()
198 auto idx = ui->treeLocal->currentIndex();
199 auto szPath = m_pModelLocalDir->filePath(idx);
200 QDesktopServices::openUrl(QUrl(szPath));
203void CFrmFileTransfer::slotTreeLocalNew()
205 QString szName = QInputDialog::getText(
206 this, tr(
"New folder"), tr(
"Folder name:"));
207 if(szName.isEmpty())
return;
208 auto idx = ui->treeLocal->currentIndex();
209 m_pModelLocalDir->mkdir(idx, szName);
212void CFrmFileTransfer::slotTreeLocalDelete()
214 auto idx = ui->treeLocal->currentIndex();
215 m_pModelLocalDir->remove(idx);
218void CFrmFileTransfer::slotTreeLocalRename()
220 ui->treeLocal->edit(ui->treeLocal->currentIndex());
223void CFrmFileTransfer::slotTreeLocalUpload()
228int CFrmFileTransfer::EnumLocalDirectory(QDir d,
const QString& szRemote)
231 foreach (
auto f, d.entryList(QDir::Files | QDir::NoDotAndDotDot)) {
232 QString szLocal = d.absoluteFilePath(f);
233 if(szLocal.isEmpty()) {
234 qDebug(log) <<
"The select is empty";
237 QFileInfo fi(szLocal);
239 QMessageBox::critical(
this, tr(
"Error"), tr(
"The file is not exists:") + szLocal);
242 QString szRemoteFile = szRemote;
243 if(szRemote.right(1) ==
"/")
244 szRemoteFile += fi.fileName();
246 szRemoteFile +=
"/" + fi.fileName();
247 QSharedPointer<CFileTransfer> fileTransfer(
new CFileTransfer(
248 szLocal, szRemoteFile,
249 CFileTransfer::Direction::Upload));
250 fileTransfer->SetFileSize(fi.size());
251 m_pListFileModel->AddFileTransfer(fileTransfer);
253 foreach(
auto file, d.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
255 QDir dir(d.absoluteFilePath(file));
256 nRet = EnumLocalDirectory(dir, szRemote +
"/" + file);
261void CFrmFileTransfer::slotTreeLocalAddToList()
263 QString szRemote = ui->cbRemote->currentText();
264 if(szRemote.isEmpty()) {
265 QMessageBox::critical(
this, tr(
"Error"), tr(
"Please select remote directory"));
268 auto idx = ui->treeLocal->currentIndex();
269 if(!idx.isValid())
return;
270 QString szPath = m_pModelLocalDir->filePath(idx);
271 if(!m_pModelLocalDir->isDir(idx) || szPath.isEmpty())
return;
272 QFileInfo fi(szPath);
273 EnumLocalDirectory(QDir(szPath), szRemote +
"/" + fi.fileName());
276void CFrmFileTransfer::slotTreeLocalCopyToClipboard()
278 auto idx = ui->treeLocal->currentIndex();
279 QString szPath = m_pModelLocalDir->filePath(idx);
280 if(szPath.isEmpty())
return;
281 QClipboard* pClipboard = QApplication::clipboard();
282 pClipboard->setText(szPath);
285void CFrmFileTransfer::on_tabLocal_customContextMenuRequested(
const QPoint &pos)
287 qDebug(log) << Q_FUNC_INFO;
288 auto idx = ui->tabLocal->currentIndex();
291 menu.addAction(QIcon::fromTheme(
"go-up"), tr(
"Upload"),
292 this, SLOT(slotTabLocalUpload()));
293 menu.addAction(QIcon::fromTheme(
"list-add"), tr(
"Add to list"),
294 this, SLOT(slotTabLocalAddToList()));
295 menu.addAction(QIcon::fromTheme(
"file-open"), tr(
"Open"),
296 this, SLOT(slotTabLocalOpen()));
297 menu.addAction(QIcon::fromTheme(
"file-edit"), tr(
"Edit"),
298 this, SLOT(slotTabLocalEdit()));
299 menu.addAction(QIcon::fromTheme(
"remove"), tr(
"Delete"),
300 this, SLOT(slotTabLocalDelete()));
301 menu.addAction(QIcon::fromTheme(
"rename"), tr(
"Rename"),
302 this, SLOT(slotTabLocalRename()));
303 menu.addAction(QIcon::fromTheme(
"edit-copy"), tr(
"Copy path to clipboard"),
304 this, SLOT(slotTabLocalCopyToClipboard()));
306 menu.exec(ui->tabLocal->viewport()->mapToGlobal(pos));
309void CFrmFileTransfer::slotTabLocalCopyToClipboard()
311 auto idx = ui->tabLocal->currentIndex();
312 if(!idx.isValid())
return;
313 QString szPath = m_pModelLocalDir->filePath(idx);
314 if(szPath.isEmpty())
return;
315 QClipboard* pClipboard = QApplication::clipboard();
316 pClipboard->setText(szPath);
319void CFrmFileTransfer::slotTabLocalUpload()
321 auto idx = ui->tabLocal->currentIndex();
322 if(!idx.isValid())
return;
323 QString szPath = m_pModelLocalDir->filePath(idx);
324 if(szPath.isEmpty())
return;
327void CFrmFileTransfer::slotTabLocalAddToList()
329 QString szRemote = ui->cbRemote->currentText();
330 if(szRemote.isEmpty()) {
331 QMessageBox::critical(
this, tr(
"Error"), tr(
"Please select remote directory"));
334 auto indexes = ui->tabLocal->selectionModel()->selectedRows();
335 foreach(
auto idx, indexes) {
336 QString szLocal = m_pModelLocalFile->filePath(idx);
337 if(szLocal.isEmpty()) {
338 qDebug(log) <<
"The select is empty:" << idx;
341 QFileInfo fi(szLocal);
343 QMessageBox::critical(
this, tr(
"Error"), tr(
"The file is not exists:") + szLocal);
346 QString szRemoteFile = szRemote;
347 if(szRemote.right(1) ==
"/")
348 szRemoteFile += fi.fileName();
350 szRemoteFile +=
"/" + fi.fileName();
351 QSharedPointer<CFileTransfer> f(
new CFileTransfer(szLocal, szRemoteFile,
352 CFileTransfer::Direction::Upload));
353 f->SetFileSize(fi.size());
354 f->SetLocalPermission(m_pModelLocalFile->permissions(idx));
355 m_pListFileModel->AddFileTransfer(f);
359void CFrmFileTransfer::slotTabLocalOpen()
361 auto idx = ui->tabLocal->currentIndex();
362 if(!idx.isValid())
return;
363 auto szPath = m_pModelLocalFile->filePath(idx);
364 QDesktopServices::openUrl(QUrl(szPath));
367void CFrmFileTransfer::slotTabLocalEdit()
370 qDebug(log) << Q_FUNC_INFO <<
"Not implemented";
373void CFrmFileTransfer::slotTabLocalDelete()
375 auto idx = ui->tabLocal->currentIndex();
377 m_pModelLocalDir->remove(idx);
380void CFrmFileTransfer::slotTabLocalRename()
382 auto idx = ui->tabLocal->currentIndex();
384 ui->tabLocal->edit(idx);
387void CFrmFileTransfer::on_cbRemote_editTextChanged(
const QString &szPath)
389 qDebug(log) << Q_FUNC_INFO << szPath;
392 if(!idx.isValid())
return;
393 if(szPath.length() > 1 && (szPath.right(1) ==
'/' || szPath.right(1) ==
'\\'))
return;
394 ui->treeRemote->setCurrentIndex(idx);
395 on_treeRemote_clicked(idx);
398void CFrmFileTransfer::on_cbRemote_currentIndexChanged(
int index)
400 QModelIndex idx = ui->cbRemote->itemData(index).value<QModelIndex>();
402 ui->treeRemote->setCurrentIndex(idx);
403 on_treeRemote_clicked(idx);
406 QString szPath = ui->cbRemote->itemText(index);
407 on_cbRemote_editTextChanged(szPath);
410void CFrmFileTransfer::on_treeRemote_clicked(
const QModelIndex &index)
412 CRemoteFileSystem* pRemoteFileSystem = m_pModelRemoteDir->GetRemoteFileSystemFromIndex(index);
413 if(!pRemoteFileSystem)
return;
414 QString szPath = pRemoteFileSystem->GetPath();
415 if(szPath.isEmpty())
return;
416 qDebug(log) << Q_FUNC_INFO << szPath;
417 if(m_pModelRemoteFile)
418 m_pModelRemoteFile->SetRootPath(pRemoteFileSystem->GetPath());
419 if(-1 == ui->cbRemote->findText(szPath)) {
420 ui->cbRemote->addItem(szPath, index);
422 ui->cbRemote->setCurrentText(szPath);
425void CFrmFileTransfer::on_treeRemote_doubleClicked(
const QModelIndex &index)
427 qDebug(log) << Q_FUNC_INFO << index;
429 ui->treeRemote->expand(index);
432void CFrmFileTransfer::on_treeRemote_customContextMenuRequested(
const QPoint &pos)
434 qDebug(log) << Q_FUNC_INFO;
435 auto idx = ui->treeRemote->currentIndex();
443 menu.addAction(QIcon::fromTheme(
"document-new"), tr(
"New"),
444 this, SLOT(slotTreeRemoteNew()));
446 menu.addAction(QIcon::fromTheme(
"remove"), tr(
"Delete"),
447 this, SLOT(slotTreeRemoteDelete()));
448 menu.addAction(QIcon::fromTheme(
"rename"), tr(
"Rename"),
449 this, SLOT(slotTreeRemoteRename()));
450 menu.addAction(QIcon::fromTheme(
"view-refresh"), tr(
"Refresh"),
451 this, SLOT(slotTreeRemoteRefresh()));
452 menu.addAction(QIcon::fromTheme(
"edit-copy"), tr(
"Copy url to clipboard"),
453 this, SLOT(slotTreeRemoteCopyToClipboard()));
455 menu.exec(ui->treeRemote->viewport()->mapToGlobal(pos));
458void CFrmFileTransfer::slotTreeRemoteDownload()
462int CFrmFileTransfer::EnumRemoteDirectory(
CRemoteFileSystem *p,
const QString &szLocal)
469void CFrmFileTransfer::slotTreeRemoteAddToList()
471 QString szLocal = ui->cbLocal->currentText();
472 if(szLocal.isEmpty()) {
473 QMessageBox::critical(
this, tr(
"Error"), tr(
"Please select local directory"));
476 auto idx = ui->treeRemote->currentIndex();
477 if(!idx.isValid())
return;
478 auto p = m_pModelRemoteDir->GetRemoteFileSystemFromIndex(idx);
479 if(p && !(p->GetType() & CRemoteFileSystem::TYPE::FILE))
480 EnumRemoteDirectory(p, szLocal);
483void CFrmFileTransfer::slotTreeRemoteNew()
485 QString szName = QInputDialog::getText(
486 this, tr(
"New folder"), tr(
"Folder name:"));
487 if(szName.isEmpty())
return;
488 auto idx = ui->treeRemote->currentIndex();
490 m_pModelRemoteDir->CreateDir(idx, szName);
493void CFrmFileTransfer::slotTreeRemoteDelete()
495 auto idx = ui->treeRemote->currentIndex();
497 m_pModelRemoteDir->RemoveDir(idx);
500void CFrmFileTransfer::slotTreeRemoteRefresh()
502 auto idx = ui->treeRemote->currentIndex();
504 auto p = m_pModelRemoteDir->GetRemoteFileSystemFromIndex(idx);
505 if(p && !p->GetPath().isEmpty()) {
506 p->SetState(CRemoteFileSystem::State::No);
507 m_pModelRemoteDir->fetchMore(idx);
512void CFrmFileTransfer::slotTreeRemoteRename()
514 auto idx = ui->treeRemote->currentIndex();
515 if(!idx.isValid())
return;
516 ui->treeRemote->edit(idx);
519void CFrmFileTransfer::slotTreeRemoteCopyToClipboard()
521 auto idx = ui->treeRemote->currentIndex();
523 auto p = m_pModelRemoteDir->GetRemoteFileSystemFromIndex(idx);
525 QString szPath = p->GetPath();
526 emit sigCopyUrlToClipboard(szPath);
531void CFrmFileTransfer::on_tabRemote_customContextMenuRequested(
const QPoint &pos)
533 qDebug(log) << Q_FUNC_INFO;
534 auto idx = ui->tabRemote->currentIndex();
537 menu.addAction(QIcon::fromTheme(
"emblem-downloads"), tr(
"Download"),
538 this, SLOT(slotTabRemoteDownload()));
539 menu.addAction(QIcon::fromTheme(
"list-add"), tr(
"Add to list"),
540 this, SLOT(slotTabRemoteAddToList()));
542 menu.addAction(QIcon::fromTheme(
"document-new"), tr(
"New"),
543 this, SLOT(slotTabRemoteNew()));
545 menu.addAction(QIcon::fromTheme(
"remove"), tr(
"Delete"),
546 this, SLOT(slotTabRemoteDelete()));
547 menu.addAction(QIcon::fromTheme(
"rename"), tr(
"Rename"),
548 this, SLOT(slotTabRemoteRename()));
549 menu.addAction(QIcon::fromTheme(
"edit-copy"), tr(
"Copy url to clipboard"),
550 this, SLOT(slotTabRemoteCopyToClipboard()));
552 menu.exec(ui->tabRemote->viewport()->mapToGlobal(pos));
555void CFrmFileTransfer::slotTabRemoteDownload()
559void CFrmFileTransfer::slotTabRemoteAddToList()
561 QString szLocal = ui->cbLocal->currentText();
562 if(szLocal.isEmpty()) {
563 QMessageBox::critical(
this, tr(
"Error"), tr(
"Please select local directory"));
566 auto indexes = ui->tabRemote->selectionModel()->selectedRows();
567 foreach(
auto idx, indexes) {
568 auto p = m_pModelRemoteFile->GetRemoteFileSystemFromIndex(idx);
569 QString szRemote = p->GetPath();
570 if(szRemote.isEmpty()) {
571 qDebug(log) <<
"The select is empty:" << idx;
574 QString szLocalFile = szLocal;
575 if(szLocalFile.right(1) ==
"/" || szLocalFile.right(1) ==
"\\")
576 szLocalFile += p->GetName();
578 szLocalFile += QDir::separator() + p->GetName();
579 QSharedPointer<CFileTransfer> f(
581 szRemote, CFileTransfer::Direction::Download));
582 f->SetFileSize(p->GetSize());
583 f->SetRemotePermission(p->GetPermissions());
584 m_pListFileModel->AddFileTransfer(f);
588void CFrmFileTransfer::slotTabRemoteNew()
592void CFrmFileTransfer::slotTabRemoteDelete()
596void CFrmFileTransfer::slotTabRemoteRename()
599void CFrmFileTransfer::slotTabRemoteCopyToClipboard()
601 auto idx = ui->tabRemote->currentIndex();
603 auto p = m_pModelRemoteFile->GetRemoteFileSystemFromIndex(idx);
605 QString szPath = p->GetPath();
606 emit sigCopyUrlToClipboard(szPath);
611void CFrmFileTransfer::on_tabList_customContextMenuRequested(
const QPoint &pos)
613 qDebug(log) << Q_FUNC_INFO;
614 auto idx = ui->tabList->currentIndex();
617 auto f = m_pListFileModel->GetFileTransfer(idx);
619 if(((
int)f->GetState() & (
int)CFileTransfer::State::Process))
620 menu.addAction(QIcon::fromTheme(
"media-playback-stop"),
621 tr(
"Stop"),
this, SLOT(slotProcessFileTransfer()));
622 else if(f->GetState() != CFileTransfer::State::Finish)
623 menu.addAction(QIcon::fromTheme(
"media-playback-start"),
624 tr(
"Start"),
this, SLOT(slotProcessFileTransfer()));
626 menu.addAction(QIcon::fromTheme(
"remove"), tr(
"Delete"),
627 this, SLOT(slotTabListDelete()));
629 menu.exec(ui->tabList->viewport()->mapToGlobal(pos));
632void CFrmFileTransfer::slotTabListDelete()
634 auto indexes = ui->tabList->selectionModel()->selectedRows();
636 std::sort(indexes.begin(), indexes.end(),
637 [](
const QModelIndex &a,
const QModelIndex &b) {
638 return a.row() > b.row();
640 foreach(
const QModelIndex &idx, indexes) {
641 auto f = m_pListFileModel->GetFileTransfer(idx);
643 if((
int)f->GetState() & (
int)CFileTransfer::State::Process) {
644 QMessageBox::critical(
this, tr(
"Error"), tr(
"Please stop the file transfer first"));
648 m_pListFileModel->removeRow(idx.row(), idx.parent());
653void CFrmFileTransfer::slotProcessFileTransfer()
655 auto idx = ui->tabList->currentIndex();
656 if(!idx.isValid())
return;
657 auto f = m_pListFileModel->GetFileTransfer(idx);
659 if((
int)f->GetState() & (
int)CFileTransfer::State::Process) {
660 emit sigStopFileTransfer(f);
662 if((
int)f->GetState() & (
int)CFileTransfer::State::CanStart) {
663 f->slotSetstate(CFileTransfer::State::Opening);
664 emit sigStartFileTransfer(f);
668void CFrmFileTransfer::slotFileTransferUpdate(QSharedPointer<CFileTransfer> f)
671 m_pListFileModel->UpdateFileTransfer(f);
674int CFrmFileTransfer::Load(QSettings &set)
676 m_pListFileModel->Load(set);
680int CFrmFileTransfer::Save(QSettings &set)
683 m_pListFileModel->Save(set);
int SetLocalRoot(const QString &root)
Set local root path.
QString GetLocalRoot() const
Get local root path.