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+ }
0 commit comments