|
1 | 1 | // Copyright Copyright (c) Kang Lin studio, All Rights Reserved |
2 | 2 | // Author Kang Lin <kl222@126.com> |
3 | 3 |
|
| 4 | +#include <QInputDialog> |
| 5 | +#include <QMenu> |
| 6 | +#include <QDesktopServices> |
| 7 | +#include <QLoggingCategory> |
4 | 8 | #include "FrmFileTransfer.h" |
5 | 9 | #include "ui_FrmFileTransfer.h" |
6 | 10 |
|
| 11 | +static Q_LOGGING_CATEGORY(log, "FileTransfer.Widget") |
7 | 12 | CFrmFileTransfer::CFrmFileTransfer(QWidget *parent) |
8 | 13 | : QWidget(parent) |
9 | 14 | , ui(new Ui::CFrmFileTransfer) |
| 15 | + , m_pModelLocalDir(new QFileSystemModel(this)) |
| 16 | + , m_pModelLocalFile(new QFileSystemModel(this)) |
10 | 17 | { |
| 18 | + bool check = false; |
11 | 19 | ui->setupUi(this); |
| 20 | + |
| 21 | + m_pModelLocalDir->setFilter(QDir::Dirs | QDir::NoDotAndDotDot); |
| 22 | + ui->treeLocal->setModel(m_pModelLocalDir); |
| 23 | + ui->treeLocal->setContextMenuPolicy(Qt::CustomContextMenu); |
| 24 | + check = connect(ui->treeLocal, &QTreeView::clicked, |
| 25 | + this, &CFrmFileTransfer::slotTreeLocalClicked); |
| 26 | + Q_ASSERT(check); |
| 27 | + SetLocalRoot(QDir::rootPath()); |
| 28 | + ui->treeLocal->setHeaderHidden(true); |
| 29 | + // 注意:必须在 setModel 之后才会生效 |
| 30 | + ui->treeLocal->header()->hideSection(1); |
| 31 | + ui->treeLocal->header()->hideSection(2); |
| 32 | + ui->treeLocal->header()->hideSection(3); |
| 33 | + |
| 34 | + m_pModelLocalFile->setFilter(QDir::Files); |
| 35 | + ui->tabLocal->setModel(m_pModelLocalFile); |
| 36 | + ui->tabLocal->setContextMenuPolicy(Qt::CustomContextMenu); |
| 37 | + ui->tabLocal->setShowGrid(false); |
| 38 | + ui->tabLocal->verticalHeader()->hide(); |
| 39 | + ui->tabLocal->horizontalHeader()->setSectionResizeMode( |
| 40 | + QHeaderView::ResizeToContents); |
12 | 41 | } |
13 | 42 |
|
14 | 43 | CFrmFileTransfer::~CFrmFileTransfer() |
15 | 44 | { |
16 | 45 | delete ui; |
17 | 46 | } |
| 47 | + |
| 48 | +int CFrmFileTransfer::SetLocalRoot(const QString &root) |
| 49 | +{ |
| 50 | + auto index = m_pModelLocalDir->setRootPath(root); |
| 51 | + ui->treeLocal->setRootIndex(index); |
| 52 | + slotTreeLocalClicked(index); |
| 53 | + return 0; |
| 54 | +} |
| 55 | + |
| 56 | +QString CFrmFileTransfer::GetLocalRoot() const |
| 57 | +{ |
| 58 | + return m_pModelLocalDir->rootPath(); |
| 59 | +} |
| 60 | + |
| 61 | +void CFrmFileTransfer::slotTreeLocalClicked(const QModelIndex &index) |
| 62 | +{ |
| 63 | + QString szPath = m_pModelLocalDir->filePath(index); |
| 64 | + if(szPath.isEmpty()) return; |
| 65 | + if(-1 == ui->cbLocal->findText(szPath)) |
| 66 | + ui->cbLocal->addItem(szPath); |
| 67 | + ui->cbLocal->setCurrentText(szPath); |
| 68 | + QModelIndex idx = m_pModelLocalFile->setRootPath(szPath); |
| 69 | + ui->tabLocal->setRootIndex(idx); |
| 70 | +} |
| 71 | + |
| 72 | +void CFrmFileTransfer::on_cbLocal_editTextChanged(const QString &text) |
| 73 | +{ |
| 74 | + qDebug(log) << Q_FUNC_INFO << text; |
| 75 | + auto idx = m_pModelLocalDir->index(text); |
| 76 | + if(!idx.isValid()) return; |
| 77 | + if(text.length() > 1 && (text.right(1) == '/' || text.right(1) == '\\')) return; |
| 78 | + ui->treeLocal->setCurrentIndex(idx); |
| 79 | + slotTreeLocalClicked(idx); |
| 80 | +} |
| 81 | + |
| 82 | +void CFrmFileTransfer::on_treeLocal_customContextMenuRequested(const QPoint &pos) |
| 83 | +{ |
| 84 | + qDebug(log) << Q_FUNC_INFO; |
| 85 | + QMenu menu; |
| 86 | + menu.addAction(QIcon::fromTheme("folder-open"), tr("Open"), |
| 87 | + this, SLOT(slotTreeLocalOpen())); |
| 88 | + menu.addAction(QIcon::fromTheme("document-new"), tr("New folder"), |
| 89 | + this, SLOT(slotTreeLocalNew())); |
| 90 | + menu.addAction(QIcon::fromTheme("remove"), tr("Delete"), |
| 91 | + this, SLOT(slotTreeLocalDelete())); |
| 92 | + menu.addAction(tr("Rename"), |
| 93 | + this, SLOT(slotTreeLocalRename())); |
| 94 | + menu.exec(ui->treeLocal->mapToGlobal(pos)); |
| 95 | +} |
| 96 | + |
| 97 | +void CFrmFileTransfer::on_tabLocal_customContextMenuRequested(const QPoint &pos) |
| 98 | +{ |
| 99 | + qDebug(log) << Q_FUNC_INFO; |
| 100 | + QMenu menu; |
| 101 | + menu.addAction(QIcon::fromTheme("file-open"), tr("Open"), |
| 102 | + this, SLOT(slotTabLocalOpen())); |
| 103 | + menu.addAction(QIcon::fromTheme("file-edit"), tr("Edit"), |
| 104 | + this, SLOT(slotTabLocalEdit())); |
| 105 | + menu.addAction(QIcon::fromTheme("remove"), tr("Delete"), |
| 106 | + this, SLOT(slotTabLocalDelete())); |
| 107 | + menu.addAction(tr("Rename"), |
| 108 | + this, SLOT(slotTabLocalRename())); |
| 109 | + menu.exec(ui->tabLocal->mapToGlobal(pos)); |
| 110 | +} |
| 111 | + |
| 112 | +void CFrmFileTransfer::slotTreeLocalOpen() |
| 113 | +{ |
| 114 | + auto idx = ui->treeLocal->currentIndex(); |
| 115 | + auto szPath = m_pModelLocalDir->filePath(idx); |
| 116 | + QDesktopServices::openUrl(QUrl(szPath)); |
| 117 | +} |
| 118 | + |
| 119 | +void CFrmFileTransfer::slotTreeLocalNew() |
| 120 | +{ |
| 121 | + QString szName = QInputDialog::getText(this, tr("New foler"), tr("Folder name:")); |
| 122 | + if(szName.isEmpty()) return; |
| 123 | + auto idx = ui->treeLocal->currentIndex(); |
| 124 | + m_pModelLocalDir->mkdir(idx, szName); |
| 125 | +} |
| 126 | + |
| 127 | +void CFrmFileTransfer::slotTreeLocalDelete() |
| 128 | +{ |
| 129 | + auto idx = ui->treeLocal->currentIndex(); |
| 130 | + m_pModelLocalDir->remove(idx); |
| 131 | +} |
| 132 | + |
| 133 | +void CFrmFileTransfer::slotTreeLocalRename() |
| 134 | +{ |
| 135 | +} |
| 136 | + |
| 137 | +void CFrmFileTransfer::slotTreeLocalUpload() |
| 138 | +{ |
| 139 | + |
| 140 | +} |
| 141 | + |
| 142 | +void CFrmFileTransfer::slotTreeLocalAddToList() |
| 143 | +{ |
| 144 | + |
| 145 | +} |
| 146 | + |
| 147 | +void CFrmFileTransfer::slotTabLocalOpen() |
| 148 | +{ |
| 149 | + auto idx = ui->tabLocal->currentIndex(); |
| 150 | + auto szPath = m_pModelLocalFile->filePath(idx); |
| 151 | + QDesktopServices::openUrl(QUrl(szPath)); |
| 152 | +} |
| 153 | + |
| 154 | +void CFrmFileTransfer::slotTabLocalEdit() |
| 155 | +{ |
| 156 | + |
| 157 | +} |
| 158 | + |
| 159 | +void CFrmFileTransfer::slotTabLocalDelete() |
| 160 | +{ |
| 161 | + auto idx = ui->tabLocal->currentIndex(); |
| 162 | + m_pModelLocalDir->remove(idx); |
| 163 | +} |
| 164 | + |
| 165 | +void CFrmFileTransfer::slotTabLocalRename() |
| 166 | +{ |
| 167 | + |
| 168 | +} |
0 commit comments