From e4a23f68789db8aa7dddeebed35f4ff6a90ffa8c Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Sat, 28 Dec 2013 18:55:20 +0100 Subject: [PATCH] Add a very rudimentary UI for accepting a transfer This is just a temporary solution for being able to accept or reject an incoming transfer. We just display a little dialog and offer a way to specify a path for saving. This lacks many features and will be replaced by a proper transfer manager widget later. --- src/client/clienttransfermanager.cpp | 9 +++- src/client/clienttransfermanager.h | 6 +++ src/qtui/CMakeLists.txt | 3 ++ src/qtui/mainwin.cpp | 12 +++++ src/qtui/mainwin.h | 2 + src/qtui/receivefiledlg.cpp | 47 ++++++++++++++++++ src/qtui/receivefiledlg.h | 43 ++++++++++++++++ src/qtui/ui/receivefiledlg.ui | 74 ++++++++++++++++++++++++++++ 8 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 src/qtui/receivefiledlg.cpp create mode 100644 src/qtui/receivefiledlg.h create mode 100644 src/qtui/ui/receivefiledlg.ui diff --git a/src/client/clienttransfermanager.cpp b/src/client/clienttransfermanager.cpp index b67c6902..7e89cca1 100644 --- a/src/client/clienttransfermanager.cpp +++ b/src/client/clienttransfermanager.cpp @@ -28,7 +28,7 @@ INIT_SYNCABLE_OBJECT(ClientTransferManager) ClientTransferManager::ClientTransferManager(QObject *parent) : TransferManager(parent) { - + connect(this, SIGNAL(transferAdded(const Transfer*)), SLOT(onTransferAdded(const Transfer*))); } @@ -51,3 +51,10 @@ void ClientTransferManager::onTransferInitDone() Q_ASSERT(transfer); addTransfer(transfer); } + + +void ClientTransferManager::onTransferAdded(const Transfer *transfer) +{ + // FIXME just a temporary solution + emit newTransfer(transfer); +} diff --git a/src/client/clienttransfermanager.h b/src/client/clienttransfermanager.h index 6f60f72a..d2483cac 100644 --- a/src/client/clienttransfermanager.h +++ b/src/client/clienttransfermanager.h @@ -39,6 +39,12 @@ public slots: void onCoreTransferAdded(const QUuid &uuid); void onTransferInitDone(); +signals: + void newTransfer(const Transfer *transfer); + +private slots: + void onTransferAdded(const Transfer *transfer); + }; #endif diff --git a/src/qtui/CMakeLists.txt b/src/qtui/CMakeLists.txt index 6cb6cdb5..e649d15f 100644 --- a/src/qtui/CMakeLists.txt +++ b/src/qtui/CMakeLists.txt @@ -55,6 +55,7 @@ set(SOURCES qtuimessageprocessor.cpp qtuisettings.cpp qtuistyle.cpp + receivefiledlg.cpp settingsdlg.cpp settingspagedlg.cpp simplenetworkeditor.cpp @@ -101,6 +102,7 @@ set(MOC_HDRS qtuiapplication.h qtuimessageprocessor.h qtuistyle.h + receivefiledlg.h settingsdlg.h settingspagedlg.h simplenetworkeditor.h @@ -140,6 +142,7 @@ set(FORMS settingsdlg.ui settingspagedlg.ui simplenetworkeditor.ui + receivefiledlg.ui topicwidget.ui) if(HAVE_KDE) diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index d5e9b0cd..573728e7 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -62,6 +62,7 @@ #include "clientbufferviewconfig.h" #include "clientbufferviewmanager.h" #include "clientignorelistmanager.h" +#include "clienttransfermanager.h" #include "coreconfigwizard.h" #include "coreconnectdlg.h" #include "coreconnection.h" @@ -83,11 +84,13 @@ #include "qtuimessageprocessor.h" #include "qtuisettings.h" #include "qtuistyle.h" +#include "receivefiledlg.h" #include "settingsdlg.h" #include "settingspagedlg.h" #include "statusnotifieritem.h" #include "toolbaractionprovider.h" #include "topicwidget.h" +#include "transfer.h" #include "verticaldock.h" #ifndef HAVE_KDE @@ -1022,6 +1025,8 @@ void MainWin::connectedToCore() connect(Client::bufferViewManager(), SIGNAL(bufferViewConfigDeleted(int)), this, SLOT(removeBufferView(int))); connect(Client::bufferViewManager(), SIGNAL(initDone()), this, SLOT(loadLayout())); + connect(Client::transferManager(), SIGNAL(newTransfer(const Transfer*)), SLOT(showNewTransferDlg(const Transfer*))); + setConnectedState(); } @@ -1358,6 +1363,13 @@ void MainWin::showShortcutsDlg() } +void MainWin::showNewTransferDlg(const Transfer *transfer) +{ + ReceiveFileDlg *dlg = new ReceiveFileDlg(transfer, this); + dlg->show(); +} + + void MainWin::onFullScreenToggled() { // Relying on QWidget::isFullScreen is discouraged, see the KToggleFullScreenAction docs diff --git a/src/qtui/mainwin.h b/src/qtui/mainwin.h index 9ae9a2a2..54c19a1c 100644 --- a/src/qtui/mainwin.h +++ b/src/qtui/mainwin.h @@ -46,6 +46,7 @@ class NickListWidget; class SystemTray; class ChatMonitorView; class TopicWidget; +class Transfer; class QMenu; class QLabel; @@ -122,6 +123,7 @@ private slots: void showNotificationsDlg(); void showIgnoreList(QString newRule = QString()); void showShortcutsDlg(); + void showNewTransferDlg(const Transfer *transfer); void onFullScreenToggled(); void handleCoreConnectionError(const QString &errorMsg); diff --git a/src/qtui/receivefiledlg.cpp b/src/qtui/receivefiledlg.cpp new file mode 100644 index 00000000..e736421e --- /dev/null +++ b/src/qtui/receivefiledlg.cpp @@ -0,0 +1,47 @@ +/*************************************************************************** + * Copyright (C) 2005-2013 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include + +#include "receivefiledlg.h" + +#include "transfer.h" + +ReceiveFileDlg::ReceiveFileDlg(const Transfer *transfer, QWidget *parent) + : QDialog(parent), + _transfer(transfer) +{ + setAttribute(Qt::WA_DeleteOnClose); + ui.setupUi(this); + + QString label = tr("%1 wants to send you a file:
%2 (%3 bytes)").arg(transfer->nick(), transfer->fileName()).arg(transfer->fileSize()); + ui.infoText->setText(label); +} + + +void ReceiveFileDlg::on_buttonBox_clicked(QAbstractButton *button) +{ + if (ui.buttonBox->standardButton(button) == QDialogButtonBox::Save) { + QString name = QFileDialog::getSaveFileName(this, QString(), QDir::currentPath() + "/" + _transfer->fileName()); + _transfer->accept(name); + } + +} diff --git a/src/qtui/receivefiledlg.h b/src/qtui/receivefiledlg.h new file mode 100644 index 00000000..982189ab --- /dev/null +++ b/src/qtui/receivefiledlg.h @@ -0,0 +1,43 @@ +/*************************************************************************** + * Copyright (C) 2005-2013 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef RECEIVEFILEDLG_H +#define RECEIVEFILEDLG_H + +#include "ui_receivefiledlg.h" + +class Transfer; + +class ReceiveFileDlg : public QDialog +{ + Q_OBJECT + +public: + ReceiveFileDlg(const Transfer *transfer, QWidget *parent = 0); + +private slots: + void on_buttonBox_clicked(QAbstractButton *button); + +private: + Ui::ReceiveFileDlg ui; + const Transfer *_transfer; +}; + +#endif diff --git a/src/qtui/ui/receivefiledlg.ui b/src/qtui/ui/receivefiledlg.ui new file mode 100644 index 00000000..6cc7a4ec --- /dev/null +++ b/src/qtui/ui/receivefiledlg.ui @@ -0,0 +1,74 @@ + + + ReceiveFileDlg + + + + 0 + 0 + 354 + 97 + + + + Incoming File Transfer + + + + + + Someone is trying to send you a file. + + + true + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Discard|QDialogButtonBox::Ignore|QDialogButtonBox::Save + + + + + + + + + buttonBox + accepted() + ReceiveFileDlg + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + ReceiveFileDlg + reject() + + + 316 + 260 + + + 286 + 274 + + + + + -- 2.20.1