Advertisement
Guest User

opn files

a guest
May 16th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.28 KB | None | 0 0
  1. diff --git a/src/fileutil.cpp b/src/fileutil.cpp
  2. index 0992adef..d87e4cdf 100644
  3. --- a/src/fileutil.cpp
  4. +++ b/src/fileutil.cpp
  5. @@ -58,7 +58,7 @@ void FileUtil::setLastUsedSavePath(const QString& path)
  6.  
  7.  QString FileUtil::getOpenFileName(QWidget* parent, const QString& caption, const QString& filter, QString* selectedFilter)
  8.  {
  9. -    while (1) {
  10. +    while (true) {
  11.          if (lastUsedOpenPath().isEmpty()) {
  12.              setLastUsedOpenPath(QDir::homePath());
  13.          }
  14. @@ -79,6 +79,29 @@ QString FileUtil::getOpenFileName(QWidget* parent, const QString& caption, const
  15.      return QString();
  16.  }
  17.  
  18. +QStringList FileUtil::getOpenFileNames(QWidget* parent, const QString& caption, const QString& filter, QString* selectedFilter)
  19. +{
  20. +    while (true) {
  21. +        if (lastUsedOpenPath().isEmpty()) {
  22. +            setLastUsedOpenPath(QDir::homePath());
  23. +        }
  24. +        QStringList fileNames = QFileDialog::getOpenFileNames(parent, caption, lastUsedOpenPath(), filter, selectedFilter);
  25. +        foreach (const QString &fileName, fileNames) {
  26. +            QFileInfo fi(fileName);
  27. +            if (!fi.exists()) {
  28. +                QMessageBox::information(parent, tr("Error"), tr("The file specified does not exist."));
  29. +                continue;
  30. +            }
  31. +
  32. +            setLastUsedOpenPath(fi.path());
  33. +            return fileNames;
  34. +        }
  35. +        break;
  36. +    }
  37. +
  38. +    return QStringList();
  39. +}
  40. +
  41.  QString FileUtil::getSaveFileName(QWidget* parent, const QString& caption, const QString& defaultFileName, const QString& filter, QString* selectedFilter)
  42.  {
  43.      if (lastUsedSavePath().isEmpty()) {
  44. diff --git a/src/fileutil.h b/src/fileutil.h
  45. index 41ea97b6..3e0cfad0 100644
  46. --- a/src/fileutil.h
  47. +++ b/src/fileutil.h
  48. @@ -37,8 +37,9 @@ public:
  49.  
  50.      static QString getImageFileName(QWidget* parent, QString caption = QString());
  51.      static QString getInbandImageFileName(QWidget* parent);
  52. -    static QString getOpenFileName(QWidget* parent = 0, const QString& caption = QString(), const QString& filter = QString(), QString* selectedFilter = 0);
  53. -    static QString getSaveFileName(QWidget* parent = 0, const QString& caption = QString(), const QString& defaultFileName = QString(), const QString& filter = QString(), QString* selectedFilter = 0);
  54. +    static QString getOpenFileName(QWidget* parent = nullptr, const QString& caption = QString(), const QString& filter = QString(), QString* selectedFilter = nullptr);
  55. +    static QStringList getOpenFileNames(QWidget* parent = nullptr, const QString &caption = QString(), const QString& filter = QString(), QString* selectedFilter = nullptr);
  56. +    static QString getSaveFileName(QWidget* parent = nullptr, const QString& caption = QString(), const QString& defaultFileName = QString(), const QString& filter = QString(), QString* selectedFilter = 0);
  57.      static QString getSaveDirName(QWidget *parent, const QString &caption);
  58.  
  59.      static QString mimeToFileExt(const QString &mime);
  60. diff --git a/src/multifiletransferdlg.cpp b/src/multifiletransferdlg.cpp
  61. index 6b894f94..1877b750 100644
  62. --- a/src/multifiletransferdlg.cpp
  63. +++ b/src/multifiletransferdlg.cpp
  64. @@ -92,6 +92,13 @@ MultiFileTransferDlg::MultiFileTransferDlg(PsiAccount *acc, QWidget *parent) :
  65.      ui->listView->setItemDelegate(new MultiFileTransferDelegate(this));
  66.      ui->listView->setModel(d->model);
  67.      ui->buttonBox->button(QDialogButtonBox::Abort)->hide();
  68. +    connect(ui->listView, &QListView::activated, this, [&] (QModelIndex index) {
  69. +        auto state = index.data(MultiFileTransferModel::StateRole).toInt();
  70. +        if (state == MultiFileTransferModel::AddTemplate) {
  71. +            QStringList files_ = FileUtil::getOpenFileNames(this, tr("Open Files"));
  72. +            initOutgoing(d->peer, files_);
  73. +        }
  74. +    });
  75.  
  76.      updateMyVisuals();
  77.  }
  78. @@ -329,3 +336,34 @@ void MultiFileTransferDlg::updateComonVisuals()
  79.  {
  80.      ui->lblStatus->setText(tr("%1 File(s)").arg(d->model->rowCount() - 1));
  81.  }
  82. +
  83. +void MultiFileTransferDlg::dragEnterEvent(QDragEnterEvent *event)
  84. +{
  85. +    event->acceptProposedAction();
  86. +}
  87. +
  88. +void MultiFileTransferDlg::dragMoveEvent(QDragMoveEvent *event)
  89. +{
  90. +    event->acceptProposedAction();
  91. +}
  92. +
  93. +void MultiFileTransferDlg::dragLeaveEvent(QDragLeaveEvent *event)
  94. +{
  95. +    event->accept();
  96. +}
  97. +
  98. +void MultiFileTransferDlg::dropEvent(QDropEvent *event)
  99. +{
  100. +    //QList <QFileInfo> dragFiles;
  101. +    QStringList dragFiles;
  102. +    const QMimeData* mimeData = event->mimeData();
  103. +    if (mimeData->hasUrls()) {
  104. +        foreach(const QUrl & url_, mimeData->urls()) {
  105. +            dragFiles << url_.toLocalFile();
  106. +        }
  107. +    }
  108. +    if (!dragFiles.isEmpty()) {
  109. +        initOutgoing(d->peer, dragFiles);
  110. +        event->acceptProposedAction();
  111. +    }
  112. +}
  113. diff --git a/src/multifiletransferdlg.h b/src/multifiletransferdlg.h
  114. index c3e7b09e..c83ea4c7 100644
  115. --- a/src/multifiletransferdlg.h
  116. +++ b/src/multifiletransferdlg.h
  117. @@ -46,10 +46,18 @@ public:
  118.  
  119.      void initOutgoing(const XMPP::Jid &jid, const QStringList &fileList);
  120.      void initIncoming(XMPP::Jingle::Session *session);
  121. +
  122. +protected:
  123. +    void dragEnterEvent(QDragEnterEvent *event);
  124. +    void dragMoveEvent(QDragMoveEvent *event);
  125. +    void dragLeaveEvent(QDragLeaveEvent *event);
  126. +    void dropEvent(QDropEvent *event);
  127. +
  128.  private:
  129.      void updatePeerVisuals();
  130.      void updateMyVisuals();
  131.      void updateComonVisuals();
  132. +    void openFiles();
  133.  
  134.  private:
  135.      Ui::MultiFileTransferDlg *ui;
  136. diff --git a/src/multifiletransferdlg.ui b/src/multifiletransferdlg.ui
  137. index c5c19fd3..6017b60d 100644
  138. --- a/src/multifiletransferdlg.ui
  139. +++ b/src/multifiletransferdlg.ui
  140. @@ -10,6 +10,9 @@
  141.      <height>300</height>
  142.     </rect>
  143.    </property>
  144. +  <property name="acceptDrops">
  145. +   <bool>true</bool>
  146. +  </property>
  147.    <property name="windowTitle">
  148.     <string notr="true">File Transfer</string>
  149.    </property>
  150. @@ -206,7 +209,14 @@
  151.      </layout>
  152.     </item>
  153.     <item>
  154. -    <widget class="QListView" name="listView"/>
  155. +    <widget class="QListView" name="listView">
  156. +     <property name="acceptDrops">
  157. +      <bool>true</bool>
  158. +     </property>
  159. +     <property name="dragDropMode">
  160. +      <enum>QAbstractItemView::DropOnly</enum>
  161. +     </property>
  162. +    </widget>
  163.     </item>
  164.     <item>
  165.      <widget class="QDialogButtonBox" name="buttonBox">
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement