Skip to content

Commit 3aa468a

Browse files
committed
App: drag json to import recent
1 parent bda5713 commit 3aa468a

2 files changed

Lines changed: 86 additions & 6 deletions

File tree

App/Client/Recent/FrmRecent.cpp

Lines changed: 77 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// Author: Kang Lin <kl222@126.com>
22

3+
#include <QMimeData>
34
#include <QVBoxLayout>
45
#include <QDateTime>
56
#include <QStandardItem>
@@ -156,6 +157,7 @@ CFrmRecent::CFrmRecent(
156157

157158
Q_ASSERT(m_pManager);
158159
m_pTableView = new QTableView(this);
160+
m_pTableView->viewport()->installEventFilter(this);
159161
m_pTableView->setContextMenuPolicy(Qt::CustomContextMenu);
160162
check = connect(m_pTableView,
161163
SIGNAL(customContextMenuRequested(const QPoint &)),
@@ -582,9 +584,10 @@ void CFrmRecent::slotImport()
582584
this, tr("Success"),
583585
tr("Successfully imported recent from json file"));
584586
} else {
585-
QMessageBox::warning(
586-
this, tr("Failure"),
587-
tr("Failed to import recent from json file"));
587+
QString szErr = tr("Failed to import recent from json file: %1").arg(filename) + "\n";
588+
if(!m_Database.GetError().isEmpty())
589+
szErr += tr("Error: ") + m_Database.GetError();
590+
QMessageBox::critical(this, tr("Failure"), szErr);
588591
}
589592
return;
590593
}
@@ -606,11 +609,79 @@ void CFrmRecent::slotExport()
606609
this, tr("Success"),
607610
tr("Successfully exported recent to json file"));
608611
} else {
609-
QMessageBox::warning(
610-
this, tr("Failure"),
611-
tr("Failed to export recent to json file"));
612+
QString szErr = tr("Failed to export recent to json file: %1").arg(filename) + "\n";
613+
if(!m_Database.GetError().isEmpty())
614+
szErr += tr("Error: ") + m_Database.GetError();
615+
QMessageBox::critical(this, tr("Failure"), szErr);
612616
}
613617
return;
614618
}
615619
}
616620
}
621+
622+
void CFrmRecent::dragEnterEvent(QDragEnterEvent *event)
623+
{
624+
qDebug(log) << Q_FUNC_INFO;
625+
if(event->mimeData()->hasUrls()) {
626+
//qDebug(log) << event->mimeData()->urls();
627+
event->acceptProposedAction();
628+
return;
629+
}
630+
}
631+
632+
void CFrmRecent::dropEvent(QDropEvent *event)
633+
{
634+
bool bRet = false;
635+
auto urls = event->mimeData()->urls();
636+
foreach(auto url, urls)
637+
{
638+
if(url.isLocalFile()) {
639+
QString filename = url.toLocalFile();
640+
if (m_Database.ImportFromJsonFile(filename)) {
641+
slotRefresh();
642+
QMessageBox::information(
643+
this, tr("Success"),
644+
tr("Successfully imported recent from json file"));
645+
} else {
646+
QString szErr = tr("Failed to import recent from json file: %1").arg(filename) + "\n";
647+
if(!m_Database.GetError().isEmpty())
648+
szErr += tr("Error: ") + m_Database.GetError();
649+
QMessageBox::critical(this, tr("Failure"), szErr);
650+
}
651+
}
652+
}
653+
if(bRet)
654+
event->accept();
655+
}
656+
657+
bool CFrmRecent::eventFilter(QObject *watched, QEvent *event)
658+
{
659+
// 处理 treeview 的事件
660+
if (watched == m_pTableView->viewport()) { // 处理 viewport 的事件
661+
//qDebug(log) << Q_FUNC_INFO << "Viewport event:" << event->type();
662+
663+
switch (event->type()) {
664+
case QEvent::DragEnter:
665+
dragEnterEvent(static_cast<QDragEnterEvent*>(event));
666+
return true;
667+
case QEvent::DragMove:
668+
dragMoveEvent(static_cast<QDragMoveEvent*>(event));
669+
return true;
670+
case QEvent::Drop:
671+
dropEvent(static_cast<QDropEvent*>(event));
672+
return true;
673+
case QEvent::MouseButtonPress:
674+
mousePressEvent(static_cast<QMouseEvent*>(event));
675+
// 不返回true,让 viewport 也处理
676+
break;
677+
case QEvent::MouseMove:
678+
mouseMoveEvent(static_cast<QMouseEvent*>(event));
679+
// 不返回true,让 viewport 也处理
680+
break;
681+
default:
682+
break;
683+
}
684+
}
685+
686+
return QWidget::eventFilter(watched, event);
687+
}

App/Client/Recent/FrmRecent.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,13 @@ private slots:
9191
CRecentModel* m_pModel;
9292
CManager* m_pManager;
9393
bool m_bDock;
94+
95+
// QWidget interface
96+
protected:
97+
virtual void dragEnterEvent(QDragEnterEvent *event) override;
98+
virtual void dropEvent(QDropEvent *event) override;
99+
100+
// QObject interface
101+
public:
102+
virtual bool eventFilter(QObject *watched, QEvent *event) override;
94103
};

0 commit comments

Comments
 (0)