[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdenetwork/kget
From:       Urs Wolfer <uwolfer () kde ! org>
Date:       2007-10-13 9:15:59
Message-ID: 1192266959.186906.25137.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 724749 by uwolfer:

Usability improvment: New-Transfer dialog also shown when started KGet with downloads \
in startup args (e.g. Konqueror Plugin does it this way). New functionality to edit, \
activate / deactitivate downloads in this dialog. More consistent look and feel now.

Work done by Lukas Appelhans. Thanks! (slightly modified by me)
CCMAIL: l.appelhans@gmx.de

 M  +1 -1      CMakeLists.txt  
 M  +14 -9     main.cpp  
 M  +10 -3     mainwindow.cpp  
 M  +9 -7      ui/droptarget.cpp  
 M  +153 -90   ui/newtransferdialog.cpp  
 M  +28 -24    ui/newtransferdialog.h  
 D             ui/newtransferdialog.ui  
 A             ui/newtransferwidget.ui   ui/newtransferdialog.ui#724745


--- trunk/KDE/kdenetwork/kget/CMakeLists.txt #724748:724749
@@ -77,7 +77,7 @@
    conf/dlgdirectories.ui
    conf/dlgnetwork.ui
    ui/transferdetailsfrm.ui
-   ui/newtransferdialog.ui
+   ui/newtransferwidget.ui
 )
 
 kde4_add_executable(kget ${kget_SRCS})
--- trunk/KDE/kdenetwork/kget/main.cpp #724748:724749
@@ -23,6 +23,7 @@
 #include "settings.h"
 #include "ui/splash.h"
 #include "mainwindow.h"
+#include "ui/newtransferdialog.h"
 
 class KGetApp : public KUniqueApplication
 {
@@ -77,25 +78,29 @@
                 l.push_back(KUrl(args->arg(i)));
         }
 
-	// the last arg read (when we have more than 1 arg) is considered
-	// as destination dir for the previous downloads
+        args->clear();
+        if (splash)
+            splash->removeSplash();
+
+        // the last arg read (when we have more than 1 arg) is considered
+        // as destination dir for the previous downloads
         // if there is a valid local file
         QString destUrl;
         if (l.count() >= 2 && l.last().isLocalFile()) {
             if (!QFileInfo(l.last().path()).isDir())
                 destUrl = l.last().directory();
-            else 
+            else
                 destUrl = l.last().path();
 
             l.removeLast();
+            KGet::addTransfer(l, destUrl, QString(), true);
+            return 0;
         }
         // all the args read from command line are downloads
-        if (l.count() >= 1)
-            KGet::addTransfer(l, destUrl, QString(), true);
-
-        args->clear();
-        if ( splash )
-            splash->removeSplash();
+        if (l.count() == 1)
+            NewTransferDialog::showNewTransferDialog(l.takeFirst().url());
+        if (l.count() > 1 && !l.last().isLocalFile())
+            NewTransferDialog::showNewTransferDialog(l);
         return 0;
     }
 
--- trunk/KDE/kdenetwork/kget/mainwindow.cpp #724748:724749
@@ -604,11 +604,18 @@
     QString str;
 
     if (!list.isEmpty())
-        KGet::addTransfer(list);
+    {
+        if (list.count() == 1)
+        {
+            str = event->mimeData()->text();
+            NewTransferDialog::showNewTransferDialog(str);
+        }
+        else
+            NewTransferDialog::showNewTransferDialog(list);
+    }
     else
     {
-        str = event->mimeData()->text();
-        KGet::addTransfer(KUrl(str));
+        NewTransferDialog::showNewTransferDialog();
     }
 }
 
--- trunk/KDE/kdenetwork/kget/ui/droptarget.cpp #724748:724749
@@ -14,6 +14,7 @@
 #include "core/kget.h"
 #include "settings.h"
 #include "mainwindow.h"
+#include "ui/newtransferdialog.h"
 
 #include <kwindowsystem.h>
 #include <klocale.h>
@@ -212,16 +213,17 @@
 
     if (!list.isEmpty())
     {
-        KUrl::List::Iterator it = list.begin();
-        KUrl::List::Iterator itEnd = list.end();
-
-        for( ; it!=itEnd ; ++it )
-            KGet::addTransfer(*it, QString(), QString(), true);
+        if (list.count() == 1)
+        {
+            str = event->mimeData()->text();
+            NewTransferDialog::showNewTransferDialog(str);
+        }
+        else
+            NewTransferDialog::showNewTransferDialog(list);
     }
     else
     {
-        str = event->mimeData()->text();
-        KGet::addTransfer(KUrl(str), QString(), QString(), true);
+        NewTransferDialog::showNewTransferDialog(str);
     }
 
     if ( Settings::animateDropTarget() )
--- trunk/KDE/kdenetwork/kget/ui/newtransferdialog.cpp #724748:724749
@@ -16,63 +16,140 @@
 #include "settings.h"
 
 #include <QWidget>
-#include <QVBoxLayout>
 #include <QApplication>
 #include <QClipboard>
 
-#include <KUrl>
 #include <KLocale>
+#include <KListWidget>
+#include <QListWidgetItem>
+#include <KLineEdit>
 #include <KComboBox>
-#include <KTitleWidget>
+#include <KDebug>
 
 NewTransferDialog::NewTransferDialog(QWidget *parent)
-    : KDialog(parent)
+    : KDialog(parent),
+      m_multiple(false)
 {
     setCaption(i18n("New Download"));
+    setMinimumSize(400, 300);
+    showButtonSeparator(true);
 
-    m_transferWidget = new NewTransferWidget();
+    QWidget *mainWidget = new QWidget(this);
 
-    QVBoxLayout *layout = new QVBoxLayout();
-    QWidget *mainWidget = new QWidget();
-    KTitleWidget *title = new KTitleWidget(this);
+    Ui::NewTransferWidget widget;
+    widget.setupUi(mainWidget);
 
-    title->setText(i18n("New Download"));
-    title->setPixmap(KIcon("document-new").pixmap(22), KTitleWidget::ImageLeft);
-    layout->addWidget(title);
-    layout->addWidget(m_transferWidget);
-    mainWidget->setLayout(layout);
-
+    m_gridLayout = widget.gridLayout;
+    m_titleWidget = widget.titleWidget;
+    m_folderRequester = widget.folderRequester;
+    m_groupComboBox = widget.groupComboBox;
+    m_defaultFolderButton = widget.defaultFolderButton;
     setMainWidget(mainWidget);
+    prepareGui();
 }
 
-NewTransferDialog::~NewTransferDialog()
+void NewTransferDialog::showNewTransferDialog(const QString &srcUrl)
 {
+    NewTransferDialog *dialog = new NewTransferDialog();
+    dialog->setMultiple(false);
+    dialog->setSource(srcUrl);
+
+    NewTransferDialog::showNewTransferDialog(dialog);
 }
 
-NewTransferWidget *NewTransferDialog::transferWidget()
+void NewTransferDialog::showNewTransferDialog(const KUrl::List &list)
 {
-    return m_transferWidget;
+    NewTransferDialog *dialog = new NewTransferDialog();
+    dialog->setMultiple(true);
+    dialog->setSource(list);
+
+    NewTransferDialog::showNewTransferDialog(dialog);
 }
 
-void NewTransferDialog::slotButtonClicked(int button)
+bool NewTransferDialog::multiple() const 
 {
-    if(button == KDialog::Cancel) {
-        transferWidget()->setUrl(QString());
-        transferWidget()->setFolderPath(QString());
+    return m_multiple;
+}
+
+void NewTransferDialog::setMultiple(bool value)
+{
+    m_multiple = value;
+    if (multiple())
+    {
+        listWidget = new KListWidget();
+        m_gridLayout->addWidget(listWidget, 0, 1, 1, 1);
     }
+    else
+    {
+        urlRequester = new KLineEdit();
+        m_gridLayout->addWidget(urlRequester, 0, 1, 1, 1);
+    }
+}
 
-    KDialog::slotButtonClicked(button);
+void NewTransferDialog::setSource(const QString &srcUrl)
+{
+    urlRequester->clear();
+    if (srcUrl.isEmpty()) 
+    {
+        KUrl clipboardUrl = \
KUrl(QApplication::clipboard()->text(QClipboard::Clipboard).trimmed()); +        if \
(clipboardUrl.isValid()) +            urlRequester->insert(clipboardUrl.url());
+    }
+    else 
+    {
+        urlRequester->insert(srcUrl);
+    }
 }
 
-void NewTransferDialog::showNewTransferDialog()
+void NewTransferDialog::setSource(const KUrl::List &list)
 {
-    QString srcUrl;
+    KUrl::List::const_iterator it = list.begin();
+    KUrl::List::const_iterator itEnd = list.end();
+
+    for (; it!=itEnd ; ++it)
+    {
+        QListWidgetItem *newItem = new QListWidgetItem(it->url(), listWidget);
+        newItem->setCheckState(Qt::Checked);
+    }
+}
+
+KUrl::List NewTransferDialog::source() const
+{
+    KUrl::List list;
+    if (multiple())
+    {
+        foreach (QListWidgetItem *item, listWidget->findItems(QString('*'), \
Qt::MatchWrap | Qt::MatchWildcard)) +        {
+            if (item->checkState() == Qt::Checked)
+                list.append(KUrl(item->text()));
+        }
+    }
+    else
+    {
+        list.append(KUrl(urlRequester->text()));
+    }
+    return list;
+}
+
+void NewTransferDialog::setDestination(const QString &destination)
+{
+    m_folderRequester->comboBox()->addItem(destination);
+}
+
+QString NewTransferDialog::destination() const
+{
+    return m_folderRequester->url().url();
+}
+
+QString NewTransferDialog::transferGroup() const
+{
+    return m_groupComboBox->currentText();
+}
+
+void NewTransferDialog::showNewTransferDialog(NewTransferDialog *dialog)
+{
     QString destDir;
 
-    KUrl clipboardUrl = \
                KUrl(QApplication::clipboard()->text(QClipboard::Clipboard).trimmed());
                
-    if (clipboardUrl.isValid())
-        srcUrl = clipboardUrl.url();
-
     if (Settings::useDefaultDirectory())
 #ifdef Q_OS_WIN //krazy:exclude=cpp
         destDir = Settings::defaultDirectory().remove("file:///");
@@ -80,93 +157,79 @@
         destDir = Settings::defaultDirectory().remove("file://");
 #endif
 
-    QString checkExceptions = KGet::getSaveDirectoryFromExceptions(srcUrl);
+    if (!dialog->source().isEmpty())
+    {
+        QString checkExceptions;
+        KGet::getSaveDirectoryFromExceptions(dialog->source().takeFirst());
+
     if (Settings::enableExceptions() && !checkExceptions.isEmpty())
         destDir = checkExceptions;
+    }
 
-    NewTransferDialog dialog;
-    dialog.transferWidget()->setFolderPath(destDir);
-    dialog.transferWidget()->setUrl(srcUrl);
+    dialog->setDestination(destDir);
+    dialog->exec();
 
-    dialog.exec();
+    KUrl::List srcUrls = dialog->source();
+    destDir = dialog->destination();
 
-    srcUrl = dialog.transferWidget()->url();
-    destDir = dialog.transferWidget()->folderPath();
-
-    if(!srcUrl.isEmpty() && !destDir.isEmpty() && KGet::isValidSource(srcUrl)) {
+    if (dialog->result() == KDialog::Accepted)
+    {
+        if (!srcUrls.isEmpty() && !destDir.isEmpty()) {
 #ifdef Q_OS_WIN //krazy:exclude=cpp
-        destDir = destDir.remove("file:///");
+            destDir = destDir.remove("file:///");
+#else
+            destDir = destDir.remove("file://");
 #endif
-        destDir = destDir.remove("file://");
+            if(dialog->m_defaultFolderButton->checkState() == Qt::Checked)
+            {
+                Settings::setDefaultDirectory(destDir);
+                Settings::self()->writeConfig();
+            }
 
-        if(dialog.transferWidget()->setAsDefaultFolder()) {
-            Settings::setDefaultDirectory(destDir);
-            Settings::self()->writeConfig();
+            QMutableListIterator <KUrl> it(srcUrls);
+            while (it.hasNext())
+            {
+                KUrl url = it.next();
+                if (!KGet::isValidSource(url))
+                {
+                    srcUrls.removeAll(url);
+                }
+            }
+            KGet::addTransfer(srcUrls, destDir, dialog->transferGroup());
         }
-        KGet::addTransfer(srcUrl, destDir, dialog.transferWidget()->groupName());
     }
 }
 
-NewTransferWidget::NewTransferWidget(QWidget *parent)
-    : QWidget(parent)
+void NewTransferDialog::prepareGui()
 {
-    setupUi(this);
-
     // Only select directories
-    folderRequester->setMode(KFile::Directory);
+    m_folderRequester->setMode(KFile::Directory);
 
-    // properties of the folderRequester combobox
-    folderRequester->comboBox()->setDuplicatesEnabled(false);
+    // properties of the m_folderRequester combobox
+    m_folderRequester->comboBox()->setDuplicatesEnabled(false);
 
     // transfer groups
-    groupComboBox->addItems(KGet::transferGroupNames());
+    m_groupComboBox->addItems(KGet::transferGroupNames());
 
     // common usefull folders for the combobox of the url requester
-    if(!Settings::defaultDirectory().isEmpty()) {
+    if (!Settings::defaultDirectory().isEmpty())
+    {
 #ifdef Q_OS_WIN //krazy:exclude=cpp
-        folderRequester->comboBox()->addItem(Settings::defaultDirectory().remove("file:///"));
 +        m_folderRequester->comboBox()->addItem(Settings::defaultDirectory().remove("file:///"));
  #else
-        folderRequester->comboBox()->addItem(Settings::defaultDirectory().remove("file://"));
 +        m_folderRequester->comboBox()->addItem(Settings::defaultDirectory().remove("file://"));
  #endif
     }
 
-    if(!Settings::lastDirectory().isEmpty() && 
-        QString::compare(Settings::lastDirectory(), Settings::defaultDirectory()) != \
                0) {
-        folderRequester->comboBox()->addItem(Settings::lastDirectory());
+    if (!Settings::lastDirectory().isEmpty() &&
+        QString::compare(Settings::lastDirectory(), Settings::defaultDirectory()) != \
0) +    {
+        m_folderRequester->comboBox()->addItem(Settings::lastDirectory());
     }
 
-    groupComboBox->setCurrentIndex(0);
-    folderRequester->comboBox()->setCurrentIndex(0);
+    m_groupComboBox->setCurrentIndex(0);
+    m_folderRequester->comboBox()->setCurrentIndex(0);
+    m_titleWidget->setPixmap(KIcon("document-new").pixmap(22, 22), \
KTitleWidget::ImageLeft);  }
 
-void NewTransferWidget::setFolderPath(QString path)
-{
-    if(!path.isEmpty()) {
-        folderRequester->setPath(path);
-    }
-}
-
-void NewTransferWidget::setUrl(QString url)
-{
-    urlRequester->setText(url);
-}
-
-QString NewTransferWidget::folderPath() const
-{
-    return folderRequester->url().url();
-}
-
-QString NewTransferWidget::url() const
-{
-    return urlRequester->text();
-}
-
-QString NewTransferWidget::groupName() const
-{
-    return groupComboBox->currentText();
-}
-
-bool NewTransferWidget::setAsDefaultFolder() const
-{
-    return (defaultFolderButton->checkState() == Qt::Checked);
-}
+#include "newtransferdialog.moc"
--- trunk/KDE/kdenetwork/kget/ui/newtransferdialog.h #724748:724749
@@ -12,43 +12,47 @@
 #ifndef NEW_TRANSFER_DIALOG_H
 #define NEW_TRANSFER_DIALOG_H
 
-#include <QWidget>
 #include <KDialog>
+#include <KUrl>
 
-#include "ui_newtransferdialog.h"
+#include "ui_newtransferwidget.h"
 
-class NewTransferWidget : public QWidget, Ui::NewTransferWidget
+class KListWidget;
+
+class NewTransferDialog : public KDialog, Ui::NewTransferWidget
 {
     Q_OBJECT
 
 public:
-    NewTransferWidget(QWidget *parent=0);
+    NewTransferDialog(QWidget *parent = 0);
 
-    void setFolderPath(QString folder);
-    void setUrl(QString url);
+    static void showNewTransferDialog(const QString &srcUrl = QString());
+    static void showNewTransferDialog(const KUrl::List &list);
 
-    QString folderPath() const;
-    QString url() const;
-    QString groupName() const;
-    bool setAsDefaultFolder() const;
-};
+    void setSource(const QString &srcUrl = QString());
+    void setSource(const KUrl::List &list);
+    KUrl::List source() const;
+    void setDestination(const QString &destUrl);
+    QString destination() const;
+    QString transferGroup() const;
 
-class NewTransferDialog : public KDialog
-{
-    Q_OBJECT
+    void setMultiple(bool multiple);
+    bool multiple() const;
 
-public:
-    NewTransferDialog(QWidget *parent=0);
-    ~NewTransferDialog();
+private:
+    static void showNewTransferDialog(NewTransferDialog *dialog);
+    void prepareGui();
 
-    static void showNewTransferDialog();
-    NewTransferWidget *transferWidget();
+    bool m_multiple;
 
-protected slots:
-    void slotButtonClicked(int button);
-
-private:
-    NewTransferWidget *m_transferWidget;
+    KListWidget *listWidget;
+    KLineEdit *urlRequester;
+    QGridLayout *m_gridLayout;
+    KTitleWidget *m_titleWidget;
+    QGridLayout *m_gridLayout1;
+    KUrlComboRequester *m_folderRequester;
+    QComboBox *m_groupComboBox;
+    QCheckBox *m_defaultFolderButton;
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic