*Hide grouping things when only one group is avialable
[kdenetwork.git] / kget / ui / newtransferdialog.cpp
blob28c2d4ff9c3c15337bea0f20d3fb1b0017309ae3
1 /* This file is part of the KDE project
3 Copyright (C) 2005 Dario Massarin <nekkar@libero.it>
4 Copyright (C) 2007 by Javier Goday <jgoday@gmail.com>
5 Copyright (C) 2008 by Lukas Appelhans <l.appelhans@gmx.de>
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public
9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version.
13 #include "newtransferdialog.h"
15 #include "core/kget.h"
16 #include "core/transfertreemodel.h"
17 #include "settings.h"
19 #include <QWidget>
20 #include <QApplication>
21 #include <QClipboard>
22 #include <QDir>
24 #include <KLocale>
25 #include <KListWidget>
26 #include <QListWidgetItem>
27 #include <KLineEdit>
28 #include <KComboBox>
29 #include <KDebug>
31 NewTransferDialog::NewTransferDialog(QWidget *parent)
32 : KDialog(parent),
33 m_multiple(false)
35 setCaption(i18n("New Download"));
36 showButtonSeparator(true);
38 QWidget *mainWidget = new QWidget(this);
40 Ui::NewTransferWidget widget;
41 widget.setupUi(mainWidget);
43 m_gridLayout1 = widget.gridLayout1;
44 m_titleWidget = widget.titleWidget;
45 m_destRequester = widget.destRequester;
46 m_groupComboBox = widget.groupComboBox;
47 m_defaultFolderButton = widget.defaultFolderButton;
48 m_groupLabel = widget.groupLabel;
49 setMainWidget(mainWidget);
50 prepareGui();
53 void NewTransferDialog::showNewTransferDialog(const QString &srcUrl)
55 NewTransferDialog *dialog = new NewTransferDialog();
56 dialog->setMultiple(false);
57 dialog->setSource(srcUrl);
59 NewTransferDialog::showNewTransferDialog(dialog);
62 void NewTransferDialog::showNewTransferDialog(const KUrl::List &list)
64 NewTransferDialog *dialog = new NewTransferDialog();
65 dialog->setMultiple(true);
66 dialog->setSource(list);
68 NewTransferDialog::showNewTransferDialog(dialog);
71 bool NewTransferDialog::multiple() const
73 return m_multiple;
76 void NewTransferDialog::setMultiple(bool value)
78 m_multiple = value;
79 if (multiple())
81 listWidget = new KListWidget();
82 m_gridLayout1->addWidget(listWidget, 0, 1, 1, 1);
83 m_destRequester->setMode(KFile::Directory);
85 else
87 urlRequester = new KLineEdit();
88 urlRequester->setClearButtonShown(true);
89 m_gridLayout1->addWidget(urlRequester, 0, 1, 1, 1);
90 m_destRequester->setMode(KFile::File);
94 void NewTransferDialog::setSource(const QString &srcUrl)
96 KUrl m_srcUrl = srcUrl;
97 urlRequester->clear();
98 if (m_srcUrl.isEmpty())
99 m_srcUrl = KUrl(QApplication::clipboard()->text(QClipboard::Clipboard).trimmed());
101 if (m_srcUrl.isValid())
102 urlRequester->insert(m_srcUrl.url());
105 void NewTransferDialog::setSource(const KUrl::List &list)
107 KUrl::List::const_iterator it = list.begin();
108 KUrl::List::const_iterator itEnd = list.end();
110 for (; it!=itEnd ; ++it)
112 if (it->url() != KUrl(it->url()).fileName())
114 kDebug(5001) << "Insert " + it->url();
115 QListWidgetItem *newItem = new QListWidgetItem(it->url(), listWidget);
116 newItem->setCheckState(Qt::Checked);
121 KUrl::List NewTransferDialog::source() const
123 KUrl::List list;
124 if (multiple())
126 foreach (QListWidgetItem *item, listWidget->findItems(QString('*'), Qt::MatchWrap | Qt::MatchWildcard))
128 if (item->checkState() == Qt::Checked)
129 list.append(KUrl(item->text()));
132 else
134 list.append(KUrl(urlRequester->text()));
136 return list;
139 void NewTransferDialog::setDestination(const QString &destination)
141 if (!QUrl(destination).isValid())
142 return;
144 m_destRequester->comboBox()->insertItem(0, destination);
145 m_destRequester->comboBox()->setCurrentIndex(0);
148 QString NewTransferDialog::destination() const
150 return m_destRequester->url().url();
153 QString NewTransferDialog::transferGroup() const
155 return m_groupComboBox->currentText();
158 void NewTransferDialog::showNewTransferDialog(NewTransferDialog *dialog)
160 QString destDir;
162 if (Settings::useDefaultDirectory())
163 #ifdef Q_OS_WIN //krazy:exclude=cpp
164 destDir = Settings::defaultDirectory().remove("file:///");
165 #else
166 destDir = Settings::defaultDirectory().remove("file://");
167 #endif
169 if (!dialog->source().isEmpty())
171 QString checkExceptions = KGet::getSaveDirectoryFromExceptions(dialog->source().first());
173 if (Settings::enableExceptions() && !checkExceptions.isEmpty())
175 destDir = checkExceptions;
179 if (!Settings::lastDirectory().isEmpty() &&
180 QString::compare(Settings::lastDirectory(), Settings::defaultDirectory()) != 0)
182 if (dialog->multiple())
183 dialog->setDestination(Settings::lastDirectory());
184 else
185 dialog->setDestination(Settings::lastDirectory() + '/' + dialog->source().first().fileName());
188 if (!destDir.isEmpty())
190 if (dialog->multiple())
191 dialog->setDestination(destDir);
192 else
193 dialog->setDestination(destDir + '/' + dialog->source().first().fileName());
196 if (dialog->destination().isEmpty())
197 dialog->setDestination(QDir::home().path() + '/' + dialog->source().first().fileName());
199 dialog->exec();
201 KUrl::List srcUrls = dialog->source();
202 destDir = dialog->destination();
204 if (dialog->result() == KDialog::Accepted)
206 #ifdef Q_OS_WIN //krazy:exclude=cpp
207 destDir = destDir.remove("file:///");
208 #else
209 destDir = destDir.remove("file://");
210 #endif
211 QString dir;
212 if (dialog->multiple())
213 dir = destDir;
214 else
215 dir = KUrl(destDir).directory();
217 if(dialog->m_defaultFolderButton->checkState() == Qt::Checked)
219 Settings::setDefaultDirectory(dir);
220 Settings::setUseDefaultDirectory(true);
221 Settings::self()->writeConfig();
223 else
225 Settings::setLastDirectory(dir);
226 Settings::self()->writeConfig();
228 kDebug(5001) << srcUrls;
229 if (srcUrls.count() == 1)
230 KGet::addTransfer(srcUrls.takeFirst(), destDir, dialog->transferGroup());
231 else
232 KGet::addTransfer(srcUrls, destDir, dialog->transferGroup());
236 void NewTransferDialog::prepareGui()
238 // properties of the m_destRequester combobox
239 m_destRequester->comboBox()->setDuplicatesEnabled(false);
241 // transfer groups
242 m_groupComboBox->addItems(KGet::transferGroupNames());
244 if (KGet::transferGroupNames().count() < 2)
246 m_groupComboBox->hide();
247 m_groupLabel->hide();
248 setMinimumSize(420, 250);
250 else
251 setMinimumSize(420, 300);
253 m_groupComboBox->setCurrentIndex(0);
254 m_titleWidget->setPixmap(KIcon("document-new").pixmap(22, 22), KTitleWidget::ImageLeft);
257 #include "newtransferdialog.moc"