11// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
22// Author Kang Lin <kl222@126.com>
33
4+ #include < QInputDialog>
5+ #include < QMenu>
6+ #include < QDesktopServices>
7+ #include < QLoggingCategory>
48#include " FrmFileTransfer.h"
59#include " ui_FrmFileTransfer.h"
610
11+ static Q_LOGGING_CATEGORY (log, " FileTransfer.Widget" )
712CFrmFileTransfer::CFrmFileTransfer(QWidget *parent)
813 : QWidget(parent)
914 , ui(new Ui::CFrmFileTransfer)
@@ -15,11 +20,11 @@ CFrmFileTransfer::CFrmFileTransfer(QWidget *parent)
1520
1621 m_pModelLocalDir->setFilter (QDir::Dirs | QDir::NoDotAndDotDot);
1722 ui->tvLocal ->setModel (m_pModelLocalDir);
23+ ui->tvLocal ->setContextMenuPolicy (Qt::CustomContextMenu);
1824 check = connect (ui->tvLocal , &QTreeView::clicked,
1925 this , &CFrmFileTransfer::slotLocalClicked);
2026 Q_ASSERT (check);
21- m_pModelLocalDir->setRootPath (" " );
22- ui->tvLocal ->setRootIndex (m_pModelLocalDir->index (" " ));
27+ SetLocalRoot (" " );
2328 ui->tvLocal ->setHeaderHidden (true );
2429 // 注意:必须在 setModel 之后才会生效
2530 ui->tvLocal ->header ()->hideSection (1 );
@@ -28,6 +33,7 @@ CFrmFileTransfer::CFrmFileTransfer(QWidget *parent)
2833
2934 m_pModelLocalFile->setFilter (QDir::Files);
3035 ui->tabLocal ->setModel (m_pModelLocalFile);
36+ ui->tabLocal ->setContextMenuPolicy (Qt::CustomContextMenu);
3137 ui->tabLocal ->setShowGrid (false );
3238 ui->tabLocal ->verticalHeader ()->hide ();
3339 ui->tabLocal ->horizontalHeader ()->setSectionResizeMode (
@@ -43,6 +49,7 @@ int CFrmFileTransfer::SetLocalRoot(const QString &root)
4349{
4450 auto index = m_pModelLocalDir->setRootPath (root);
4551 ui->tvLocal ->setRootIndex (index);
52+ slotLocalClicked (index);
4653 return 0 ;
4754}
4855
@@ -54,16 +61,76 @@ QString CFrmFileTransfer::GetLocalRoot() const
5461void CFrmFileTransfer::slotLocalClicked (const QModelIndex &index)
5562{
5663 QString szPath = m_pModelLocalDir->filePath (index);
64+ if (szPath.isEmpty ()) return ;
5765 if (-1 == ui->cbLocal ->findText (szPath))
5866 ui->cbLocal ->addItem (szPath);
5967 ui->cbLocal ->setCurrentText (szPath);
6068 QModelIndex idx = m_pModelLocalFile->setRootPath (szPath);
6169 ui->tabLocal ->setRootIndex (idx);
6270}
6371
64- void CFrmFileTransfer::on_cbLocal_currentTextChanged (const QString &text)
72+ void CFrmFileTransfer::on_cbLocal_editTextChanged (const QString &text)
6573{
74+ qDebug (log) << Q_FUNC_INFO << text;
6675 auto idx = m_pModelLocalDir->index (text);
76+ if (!idx.isValid ()) return ;
77+ if (text.length () > 1 && (text.right (1 ) == ' /' || text.right (1 ) == ' \\ ' )) return ;
6778 ui->tvLocal ->setCurrentIndex (idx);
6879 slotLocalClicked (idx);
6980}
81+
82+ void CFrmFileTransfer::on_tvLocal_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 (mapToGlobal (pos));
95+ }
96+
97+ void CFrmFileTransfer::on_tabLocal_customContextMenuRequested (const QPoint &pos)
98+ {
99+ qDebug (log) << Q_FUNC_INFO;
100+ }
101+
102+ void CFrmFileTransfer::slotTreeLocalOpen ()
103+ {
104+ auto idx = ui->tvLocal ->currentIndex ();
105+ auto szPath = m_pModelLocalDir->filePath (idx);
106+ QDesktopServices::openUrl (QUrl (szPath));
107+ }
108+
109+ void CFrmFileTransfer::slotTreeLocalNew ()
110+ {
111+ QString szName = QInputDialog::getText (this , tr (" New foler" ), tr (" Folder name:" ));
112+ if (szName.isEmpty ()) return ;
113+ auto idx = ui->tvLocal ->currentIndex ();
114+ m_pModelLocalDir->mkdir (idx, szName);
115+ }
116+
117+ void CFrmFileTransfer::slotTreeLocalDelete ()
118+ {
119+ auto idx = ui->tvLocal ->currentIndex ();
120+ m_pModelLocalDir->remove (idx);
121+ }
122+
123+ void CFrmFileTransfer::slotTreeLocalRename ()
124+ {
125+
126+ }
127+
128+ void CFrmFileTransfer::slotTreeLocalUpload ()
129+ {
130+
131+ }
132+
133+ void CFrmFileTransfer::slotTreeLocalAddToList ()
134+ {
135+
136+ }
0 commit comments