Translate here too
[kdenetwork.git] / kget / mainwindow.cpp
blobd0f99a3dd85bc03cea6e457b4527bafca1742dbb
1 /* This file is part of the KDE project
3 Copyright (C) 2002 by Patrick Charbonnier <pch@freeshell.org>
4 Based On Caitoo v.0.7.3 (c) 1998 - 2000, Matej Koss
5 Copyright (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
6 Copyright (C) 2006, 2007 Urs Wolfer <uwolfer @ kde.org>
7 Copyright (C) 2006 Dario Massarin <nekkar@libero.it>
8 Copyright (C) 2008 Lukas Appelhans <l.appelhans@gmx.de>
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public
12 License as published by the Free Software Foundation; either
13 version 2 of the License, or (at your option) any later version.
16 #include "mainwindow.h"
18 #include "core/kget.h"
19 #include "core/transferhandler.h"
20 #include "core/transfergrouphandler.h"
21 #include "core/transfertreeselectionmodel.h"
22 #include "dbus/dbusmodelobserver.h"
23 #include "settings.h"
24 #include "conf/preferencesdialog.h"
25 #include "ui/viewscontainer.h"
26 #include "ui/tray.h"
27 #include "ui/droptarget.h"
28 #include "ui/newtransferdialog.h"
29 #include "ui/history/transferhistory.h"
30 #include "ui/groupsettingsdialog.h"
31 #include "ui/transfersettingsdialog.h"
32 #include "ui/linkview/kget_linkview.h"
33 #include "extensions/webinterface/httpserver.h"
35 #include <kapplication.h>
36 #include <kstandarddirs.h>
37 #include <KInputDialog>
38 #include <kmessagebox.h>
39 #include <kshortcutsdialog.h>
40 #include <kedittoolbar.h>
41 #include <knotifyconfigwidget.h>
42 #include <kfiledialog.h>
43 #include <ktoolinvocation.h>
44 #include <kmenubar.h>
45 #include <kiconloader.h>
46 #include <kstandardaction.h>
47 #include <klocale.h>
48 #include <kicon.h>
49 #include <kactionmenu.h>
50 #include <krun.h>
51 #include <kicondialog.h>
53 #include <QClipboard>
54 #include <QTimer>
56 MainWindow::MainWindow(bool showMainwindow, bool startWithoutAnimation, QWidget *parent)
57 : KXmlGuiWindow( parent ),
58 m_drop(0),
59 m_dock(0),
60 m_startWithoutAnimation(startWithoutAnimation),
61 m_webinterface(0)
63 // do not quit the app when it has been minimized to system tray and a new transfer dialog
64 // gets opened and closed again.
65 qApp->setQuitOnLastWindowClosed(false);
67 // create the model
68 KGet::self( this );
70 // create actions
71 setupActions();
73 createGUI("kgetui.rc");
75 m_viewsContainer = new ViewsContainer(this);
76 // initialize the model observer to export percents over dbus
77 m_dbusModelObserver = new DBusModelObserver();
79 setCentralWidget(m_viewsContainer);
81 // restore position, size and visibility
82 move( Settings::mainPosition() );
83 setAutoSaveSettings();
84 setPlainCaption(i18n("KGet"));
86 if ( Settings::showMain() && showMainwindow)
87 show();
88 else
89 hide();
91 //Some of the widgets are initialized in slotDelayedInit()
92 QTimer::singleShot( 0, this, SLOT(slotDelayedInit()) );
95 MainWindow::~MainWindow()
97 //Save the user's transfers
98 KGet::save();
100 slotSaveMyself();
101 delete clipboardTimer;
102 delete m_drop;
103 delete m_dock;
104 // reset konqueror integration (necessary if user enabled / disabled temporarily integration from tray)
105 slotKonquerorIntegration( Settings::konquerorIntegration() );
106 // the following call saves options set in above dtors
107 Settings::self()->writeConfig();
110 QSize MainWindow::sizeHint() const
112 return QSize(720, 380);
115 void MainWindow::setupActions()
117 QAction *newDownloadAction = actionCollection()->addAction("new_download");
118 newDownloadAction->setText(i18n("&New Download..."));
119 newDownloadAction->setIcon(KIcon("document-new"));
120 newDownloadAction->setShortcuts(KShortcut("Ctrl+N"));
121 connect(newDownloadAction, SIGNAL(triggered()), SLOT(slotNewTransfer()));
123 QAction *openAction = actionCollection()->addAction("import_transfers");
124 openAction->setText(i18n("&Import Transfers..."));
125 openAction->setIcon(KIcon("document-open"));
126 openAction->setShortcuts(KShortcut("Ctrl+I"));
127 connect(openAction, SIGNAL(triggered()), SLOT(slotImportTransfers()));
129 QAction *exportAction = actionCollection()->addAction("export_transfers");
130 exportAction->setText(i18n("&Export Transfers List..."));
131 exportAction->setIcon(KIcon("document-export"));
132 exportAction->setShortcuts(KShortcut("Ctrl+E"));
133 connect(exportAction, SIGNAL(triggered()), SLOT(slotExportTransfers()));
135 QAction *deleteGroupAction = actionCollection()->addAction("delete_groups");
136 deleteGroupAction->setText(i18n("Delete Group"));
137 deleteGroupAction->setIcon(KIcon("edit-delete"));
138 connect(deleteGroupAction, SIGNAL(triggered()), SLOT(slotDeleteGroup()));
140 QAction *renameGroupAction = actionCollection()->addAction("rename_groups");
141 renameGroupAction->setText(i18n("Rename Group"));
142 renameGroupAction->setIcon(KIcon("edit-rename"));
143 connect(renameGroupAction, SIGNAL(triggered()), SLOT(slotRenameGroup()));
145 QAction *setIconGroupAction = actionCollection()->addAction("seticon_groups");
146 setIconGroupAction->setText(i18n("Set Icon"));
147 setIconGroupAction->setIcon(KIcon("preferences-desktop-icons"));
148 connect(setIconGroupAction, SIGNAL(triggered()), SLOT(slotSetIconGroup()));
150 m_autoPasteAction = new KToggleAction(KIcon("edit-paste"),
151 i18n("Auto-Paste Mode"), actionCollection());
152 actionCollection()->addAction("auto_paste", m_autoPasteAction);
153 m_autoPasteAction->setChecked(Settings::autoPaste());
154 m_autoPasteAction->setWhatsThis(i18n("<b>Auto paste</b> button toggles the auto-paste mode "
155 "on and off.\nWhen set, KGet will periodically scan "
156 "the clipboard for URLs and paste them automatically."));
157 connect(m_autoPasteAction, SIGNAL(triggered()), SLOT(slotToggleAutoPaste()));
159 m_konquerorIntegration = new KToggleAction(KIcon("konqueror"),
160 i18n("Use KGet as Konqueror Download Manager"), actionCollection());
161 actionCollection()->addAction("konqueror_integration", m_konquerorIntegration);
162 connect(m_konquerorIntegration, SIGNAL(triggered(bool)), SLOT(slotTrayKonquerorIntegration(bool)));
163 m_konquerorIntegration->setChecked(Settings::konquerorIntegration());
165 // local - Destroys all sub-windows and exits
166 QAction *quitAction = KStandardAction::quit(this, SLOT(slotQuit()), actionCollection());
167 actionCollection()->addAction("quit", quitAction);
168 // local - Standard configure actions
169 QAction *preferencesAction = KStandardAction::preferences(this, SLOT(slotPreferences()), actionCollection());
170 actionCollection()->addAction("preferences", preferencesAction);
171 QAction *configToolbarAction = KStandardAction::configureToolbars(this, SLOT(slotConfigureToolbars()), actionCollection());
172 actionCollection()->addAction("configure_toolbars", configToolbarAction);
173 QAction *keyBindingsAction = KStandardAction::keyBindings(this, SLOT(slotConfigureKeys()), actionCollection());
174 actionCollection()->addAction("configure_keys", keyBindingsAction);
175 QAction *cinfigNotifyAction = KStandardAction::configureNotifications(this, SLOT(slotConfigureNotifications()), actionCollection());
176 actionCollection()->addAction("configure_notifications", cinfigNotifyAction);
177 m_menubarAction = KStandardAction::showMenubar(this, SLOT(slotShowMenubar()), actionCollection());
178 m_menubarAction->setChecked(!menuBar()->isHidden());
179 actionCollection()->addAction("settings_showmenubar", m_menubarAction);
181 // Transfer related actions
182 QAction *deleteSelectedAction = actionCollection()->addAction("delete_selected_download");
183 deleteSelectedAction->setText(i18nc("delete selected transfer item", "Delete Selected"));
184 deleteSelectedAction->setIcon(KIcon("edit-delete"));
185 deleteSelectedAction->setShortcuts(KShortcut("Del"));
186 connect(deleteSelectedAction, SIGNAL(triggered()), SLOT(slotDeleteSelected()));
188 QAction *deleteAllFinishedAction = actionCollection()->addAction("delete_all_finished");
189 deleteAllFinishedAction->setText(i18nc("delete all finished transfers", "Delete all finished"));
190 deleteAllFinishedAction->setIcon(KIcon("edit-clear-list"));
191 connect(deleteAllFinishedAction, SIGNAL(triggered()), SLOT(slotDeleteFinished()));
193 QAction *redownloadSelectedAction = actionCollection()->addAction("redownload_selected_download");
194 redownloadSelectedAction->setText(i18nc("redownload selected transfer item", "Redownload Selected"));
195 redownloadSelectedAction->setIcon(KIcon("view-refresh"));
196 connect(redownloadSelectedAction, SIGNAL(triggered()), SLOT(slotRedownloadSelected()));
198 QAction *startAllAction = actionCollection()->addAction("start_all_download");
199 startAllAction->setText(i18n("Start / Resume All"));
200 startAllAction->setIcon(KIcon("media-seek-forward"));
201 startAllAction->setShortcuts(KShortcut("Ctrl+R"));
202 connect(startAllAction, SIGNAL(triggered()), SLOT(slotStartAllDownload()));
204 QAction *startSelectedAction = actionCollection()->addAction("start_selected_download");
205 startSelectedAction->setText(i18n("Start / Resume Selected"));
206 startSelectedAction->setIcon(KIcon("media-playback-start"));
207 connect(startSelectedAction, SIGNAL(triggered()), SLOT(slotStartSelectedDownload()));
209 QAction *stopAllAction = actionCollection()->addAction("stop_all_download");
210 stopAllAction->setText(i18n("Stop All"));
211 stopAllAction->setIcon(KIcon("media-playback-pause"));
212 stopAllAction->setShortcuts(KShortcut("Ctrl+P"));
213 connect(stopAllAction, SIGNAL(triggered()), SLOT(slotStopAllDownload()));
215 QAction *stopSelectedAction = actionCollection()->addAction("stop_selected_download");
216 stopSelectedAction->setText(i18n("Stop Selected"));
217 stopSelectedAction->setIcon(KIcon("media-playback-pause"));
218 connect(stopSelectedAction, SIGNAL(triggered()), SLOT(slotStopSelectedDownload()));
220 KActionMenu *startActionMenu = new KActionMenu(KIcon("media-playback-start"), i18n("Start / Resume"),
221 actionCollection());
222 actionCollection()->addAction("start_menu", startActionMenu);
223 startActionMenu->setDelayed(true);
224 startActionMenu->addAction(startAllAction);
225 startActionMenu->addAction(startSelectedAction);
226 connect(startActionMenu, SIGNAL(triggered()), SLOT(slotStartDownload()));
228 KActionMenu *stopActionMenu = new KActionMenu(KIcon("media-playback-pause"), i18n("Stop"),
229 actionCollection());
230 actionCollection()->addAction("stop_menu", stopActionMenu);
231 stopActionMenu->setDelayed(true);
232 stopActionMenu->addAction(stopAllAction);
233 stopActionMenu->addAction(stopSelectedAction);
234 connect(stopActionMenu, SIGNAL(triggered()), SLOT(slotStopDownload()));
236 QAction *openDestAction = actionCollection()->addAction("transfer_open_dest");
237 openDestAction->setText(i18n("Open Destination"));
238 openDestAction->setIcon(KIcon("document-open"));
239 connect(openDestAction, SIGNAL(triggered()), SLOT(slotTransfersOpenDest()));
241 QAction *openFileAction = actionCollection()->addAction("transfer_open_file");
242 openFileAction->setText(i18n("Open File"));
243 openFileAction->setIcon(KIcon("document-open"));
244 connect(openFileAction, SIGNAL(triggered()), SLOT(slotTransfersOpenFile()));
246 QAction *showDetailsAction = actionCollection()->addAction("transfer_show_details");
247 showDetailsAction->setText(i18n("Show Details"));
248 showDetailsAction->setIcon(KIcon("document-properties"));
249 connect(showDetailsAction, SIGNAL(triggered()), SLOT(slotTransfersShowDetails()));
251 QAction *copyUrlAction = actionCollection()->addAction("transfer_copy_source_url");
252 copyUrlAction->setText(i18n("Copy URL to Clipboard"));
253 copyUrlAction->setIcon(KIcon("edit-copy"));
254 connect(copyUrlAction, SIGNAL(triggered()), SLOT(slotTransfersCopySourceUrl()));
256 KToggleAction *showDropTargetAction = new KToggleAction(KIcon("kget"),
257 i18n("Show Drop Target"), actionCollection());
258 actionCollection()->addAction("show_drop_target", showDropTargetAction);
259 showDropTargetAction->setChecked(Settings::showDropTarget());
260 connect(showDropTargetAction, SIGNAL(triggered()), SLOT(slotToggleDropTarget()));
262 QAction *transferHistoryAction = actionCollection()->addAction("Transfer History");
263 transferHistoryAction->setText(i18n("&Transfer History"));
264 transferHistoryAction->setIcon(KIcon("view-history"));
265 transferHistoryAction->setShortcuts(KShortcut("Ctrl+H"));
266 connect(transferHistoryAction, SIGNAL(triggered()), SLOT(slotTransferHistory()));
268 QAction *transferGroupSettingsAction = actionCollection()->addAction("transfer_group_settings");
269 transferGroupSettingsAction->setText(i18n("&Group Settings"));
270 transferGroupSettingsAction->setIcon(KIcon("preferences-system"));
271 transferGroupSettingsAction->setShortcuts(KShortcut("Ctrl+G"));
272 connect(transferGroupSettingsAction, SIGNAL(triggered()), SLOT(slotTransferGroupSettings()));
274 QAction *transferSettingsAction = actionCollection()->addAction("transfer_settings");
275 transferSettingsAction->setText(i18n("&Transfer Settings"));
276 transferSettingsAction->setIcon(KIcon("preferences-system"));
277 transferSettingsAction->setShortcuts(KShortcut("Ctrl+T"));
278 connect(transferSettingsAction, SIGNAL(triggered()), SLOT(slotTransferSettings()));
280 QAction *listLinksAction = actionCollection()->addAction("import_links");
281 listLinksAction->setText(i18n("Import &Links"));
282 listLinksAction->setIcon(KIcon("view-list-text"));
283 listLinksAction->setShortcuts(KShortcut("Ctrl+L"));
284 connect(listLinksAction, SIGNAL(triggered()), SLOT(slotShowListLinks()));
287 void MainWindow::slotDelayedInit()
289 //Here we import the user's transfers.
290 KGet::load( KStandardDirs::locateLocal("appdata", "transfers.kgt") );
292 m_dock = new Tray(this);
293 if(Settings::enableSystemTray()) {
294 // DockWidget
295 m_dock->show();
298 // enable dropping
299 setAcceptDrops(true);
301 // enable hide toolbar
302 setStandardToolBarMenuEnabled(true);
304 // session management stuff
305 connect(kapp, SIGNAL(saveYourself()), SLOT(slotSaveMyself()));
307 // set auto-resume in kioslaverc (is there a cleaner way?)
308 KConfig cfg("kioslaverc", KConfig::NoGlobals);
309 cfg.group(QString()).writeEntry("AutoResume", true);
310 cfg.sync();
312 // immediately start downloading if configured this way
313 if ( Settings::downloadAtStartup() )
314 slotStartDownload();
316 // DropTarget
317 m_drop = new DropTarget(this);
319 if (Settings::firstRun()) {
320 if (KMessageBox::questionYesNoCancel(this ,i18n("This is the first time you have run KGet.\n"
321 "Would you like to enable KGet as the download manager for Konqueror?"),
322 i18n("Konqueror Integration"), KGuiItem(i18n("Enable")),
323 KGuiItem(i18n("Do Not Enable")))
324 == KMessageBox::Yes) {
325 Settings::setKonquerorIntegration(true);
326 slotKonquerorIntegration(true);
329 m_drop->setDropTargetVisible(true);
331 // reset the FirstRun config option
332 Settings::setFirstRun(false);
335 if (Settings::showDropTarget() && !m_startWithoutAnimation)
336 m_drop->setDropTargetVisible(true);
338 //auto paste stuff
339 lastClipboard = QApplication::clipboard()->text( QClipboard::Clipboard ).trimmed();
340 clipboardTimer = new QTimer(this);
341 connect(clipboardTimer, SIGNAL(timeout()), SLOT(slotCheckClipboard()));
342 if ( Settings::autoPaste() )
343 clipboardTimer->start(1000);
345 // kget kuiserver integration
346 KGet::reloadKJobs();
348 if (Settings::webinterfaceEnabled())
349 m_webinterface = new HttpServer(this);
351 if (Settings::speedLimit())
353 KGet::setGlobalDownloadLimit(Settings::globalDownloadLimit());
354 KGet::setGlobalUploadLimit(Settings::globalUploadLimit());
356 else
358 KGet::setGlobalDownloadLimit(0);
359 KGet::setGlobalUploadLimit(0);
363 void MainWindow::slotToggleDropTarget()
365 actionCollection()->action("show_drop_target")->setChecked(!m_drop->isVisible());
367 m_drop->setDropTargetVisible(!m_drop->isVisible());
370 void MainWindow::slotNewTransfer()
372 NewTransferDialog::showNewTransferDialog();
375 void MainWindow::slotImportTransfers()
377 QString filename = KFileDialog::getOpenFileName(KUrl(),
378 "*.kgt *.metalink *.torrent|" + i18n("All Openable Files") +
379 " (*.kgt *.metalink *.torrent)", this, i18n("Open File"));
381 if(filename.endsWith(".kgt"))
383 KGet::load(filename);
384 return;
387 if(!filename.isEmpty())
388 KGet::addTransfer( KUrl( filename ) );
391 void MainWindow::slotQuit()
393 if (KGet::schedulerRunning()) {
394 if (KMessageBox::warningYesNoCancel(this,
395 i18n("Some transfers are still running.\n"
396 "Are you sure you want to close KGet?"),
397 i18n("Confirm Quit"),
398 KStandardGuiItem::yes(), KStandardGuiItem::no(), KStandardGuiItem::cancel(),
399 "ExitWithActiveTransfers") != KMessageBox::Yes)
400 return;
402 KGet::setSchedulerRunning(false);
405 Settings::self()->writeConfig();
406 qApp->quit();
409 void MainWindow::slotPreferences()
411 // an instance the dialog could be already created and could be cached,
412 // in which case you want to display the cached dialog
413 if ( PreferencesDialog::showDialog( "preferences" ) )
414 return;
416 // we didn't find an instance of this dialog, so lets create it
417 PreferencesDialog * dialog = new PreferencesDialog( this, Settings::self() );
418 KGet::setPluginsSettingsWidget( dialog->pluginsWidget() );
419 // keep us informed when the user changes settings
420 connect( dialog, SIGNAL(settingsChanged(const QString&)),
421 this, SLOT(slotNewConfig()) );
423 dialog->show();
426 void MainWindow::slotExportTransfers()
428 QString filename = KFileDialog::getSaveFileName
429 (KUrl(),
430 "*.kgt|" + i18n("KGet Transfer List") + " (*.kgt)",
431 this,
432 i18n("Export Transfers")
435 if(!filename.isEmpty())
436 KGet::save(filename);
439 void MainWindow::slotDeleteGroup()
441 foreach(TransferGroupHandler * it, KGet::selectedTransferGroups())
443 it->stop();
444 KGet::delGroup(it->name());
448 void MainWindow::slotRenameGroup()
450 bool ok = true;
451 QString groupName;
453 foreach(TransferGroupHandler * it, KGet::selectedTransferGroups())
455 groupName = KInputDialog::getText(i18n("Enter Group Name"),
456 i18n("Group name:"), it->name(), &ok, this);
457 if(ok)
458 it->setName(groupName);
462 void MainWindow::slotSetIconGroup()
464 KIconDialog dialog(this);
465 QString iconName = dialog.getIcon();
466 TransferTreeSelectionModel *selModel = KGet::selectionModel();
468 QModelIndexList indexList = selModel->selectedRows();
470 if (!iconName.isEmpty())
472 foreach (TransferGroupHandler *group, KGet::selectedTransferGroups())
474 group->setIconName(iconName);
477 //emit dataChanged(indexList.first(),indexList.last());
480 void MainWindow::slotStartDownload()
482 if(KGet::selectedTransfers().size() == 0)
483 slotStartAllDownload();
484 else
485 slotStartSelectedDownload();
488 void MainWindow::slotStartAllDownload()
490 KGet::setSchedulerRunning(true);
493 void MainWindow::slotStartSelectedDownload()
495 foreach(TransferHandler * it, KGet::selectedTransfers())
496 it->start();
499 void MainWindow::slotStopDownload()
501 if(KGet::selectedTransfers().size() == 0)
502 slotStopAllDownload();
503 else
504 slotStopSelectedDownload();
507 void MainWindow::slotStopAllDownload()
509 KGet::setSchedulerRunning(false);
512 void MainWindow::slotStopSelectedDownload()
514 foreach (TransferHandler * it, KGet::selectedTransfers())
515 it->stop();
518 void MainWindow::slotDeleteSelected()
520 foreach(TransferHandler * it, KGet::selectedTransfers())
522 it->stop();
523 m_viewsContainer->closeTransferDetails(it);
524 KGet::delTransfer(it);
528 void MainWindow::slotRedownloadSelected()
530 foreach(TransferHandler * it, KGet::selectedTransfers())
532 KGet::redownloadTransfer(it);
536 void MainWindow::slotTransfersOpenDest()
538 QStringList openedDirs;
539 foreach(TransferHandler * it, KGet::selectedTransfers())
541 QString directory = it->dest().directory();
542 if( !openedDirs.contains( directory ) )
544 new KRun(directory, this, 0, true, false);
545 openedDirs.append( directory );
550 void MainWindow::slotTransfersOpenFile()
552 foreach(TransferHandler * it, KGet::selectedTransfers())
554 new KRun(it->dest(), this, 0, true, false);
558 void MainWindow::slotTransfersShowDetails()
560 foreach(TransferHandler * it, KGet::selectedTransfers())
562 m_viewsContainer->showTransferDetails(it);
566 void MainWindow::slotTransfersCopySourceUrl()
568 foreach(TransferHandler * it, KGet::selectedTransfers())
570 QString sourceurl = it->source().url();
571 QClipboard *cb = QApplication::clipboard();
572 cb->setText(sourceurl, QClipboard::Selection);
573 cb->setText(sourceurl, QClipboard::Clipboard);
577 void MainWindow::slotDeleteFinished()
579 foreach(TransferHandler * it, KGet::finishedTransfers())
581 it->stop();
582 m_viewsContainer->closeTransferDetails(it);
583 KGet::delTransfer(it);
587 void MainWindow::slotConfigureNotifications()
589 KNotifyConfigWidget::configure(this);
592 void MainWindow::slotConfigureKeys()
594 KShortcutsDialog::configure(actionCollection());
597 void MainWindow::slotConfigureToolbars()
599 KEditToolBar edit( actionCollection() );
600 connect(&edit, SIGNAL( newToolbarConfig() ), this, SLOT( slotNewToolbarConfig() ));
601 edit.exec();
605 void MainWindow::slotSaveMyself()
607 // save last parameters ..
608 Settings::setMainPosition( pos() );
609 // .. and write config to disk
610 Settings::self()->writeConfig();
613 void MainWindow::slotNewToolbarConfig()
615 createGUI();
618 void MainWindow::slotNewConfig()
620 // Update here properties modified in the config dialog and not
621 // parsed often by the code. When clicking Ok or Apply of
622 // PreferencesDialog, this function is called.
624 m_viewsContainer->setExpandableDetails(Settings::showExpandableTransferDetails());
625 m_drop->setDropTargetVisible(Settings::showDropTarget(), false);
626 m_dock->setVisible(Settings::enableSystemTray());
627 if(!Settings::enableSystemTray()) setVisible(true);
629 slotKonquerorIntegration(Settings::konquerorIntegration());
630 m_konquerorIntegration->setChecked(Settings::konquerorIntegration());
632 KGet::reloadKJobs();
634 if (Settings::autoPaste())
635 clipboardTimer->start(1000);
636 else
637 clipboardTimer->stop();
638 m_autoPasteAction->setChecked(Settings::autoPaste());
640 if (Settings::webinterfaceEnabled() && !m_webinterface) {
641 m_webinterface = new HttpServer(this);
642 } else if (m_webinterface && !Settings::webinterfaceEnabled()) {
643 delete m_webinterface;
644 m_webinterface = 0;
647 if (Settings::speedLimit())
649 KGet::setGlobalDownloadLimit(Settings::globalDownloadLimit());
650 KGet::setGlobalUploadLimit(Settings::globalUploadLimit());
652 else
654 KGet::setGlobalDownloadLimit(0);
655 KGet::setGlobalUploadLimit(0);
658 KGet::settingsChanged();
661 void MainWindow::slotToggleAutoPaste()
663 bool autoPaste = !Settings::autoPaste();
664 Settings::setAutoPaste( autoPaste );
666 if (autoPaste)
667 clipboardTimer->start(1000);
668 else
669 clipboardTimer->stop();
670 m_autoPasteAction->setChecked(autoPaste);
673 void MainWindow::slotCheckClipboard()
675 QString clipData = QApplication::clipboard()->text( QClipboard::Clipboard ).trimmed();
677 if (clipData != lastClipboard)
679 lastClipboard = clipData;
680 if (lastClipboard.isEmpty())
681 return;
683 KUrl url = KUrl(lastClipboard);
685 if (url.isValid() && !url.isLocalFile())
686 KGet::addTransfer( url );
690 void MainWindow::slotTrayKonquerorIntegration(bool enable)
692 slotKonquerorIntegration(enable);
693 if (!enable && Settings::konquerorIntegration() && !Settings::expertMode())
695 KMessageBox::information(this,
696 i18n("KGet has been temporarily disabled as download manager for Konqueror. "
697 "If you want to disable it forever, go to Settings->Advanced and disable \"Use "
698 "as download manager for Konqueror\"."),
699 i18n("Konqueror Integration disabled"),
700 "KonquerorIntegrationDisabled");
704 void MainWindow::slotKonquerorIntegration(bool konquerorIntegration)
706 KConfig cfgKonqueror("konquerorrc", KConfig::NoGlobals);
707 cfgKonqueror.group("HTML Settings").writeEntry("DownloadManager",
708 QString(konquerorIntegration ? "kget" : QString()));
709 cfgKonqueror.sync();
712 void MainWindow::slotShowMenubar()
714 if (m_menubarAction->isChecked())
715 menuBar()->show();
716 else
717 menuBar()->hide();
720 void MainWindow::setSystemTrayDownloading(bool running)
722 kDebug(5001);
724 m_dock->setDownloading(running);
727 void MainWindow::importLinks(const QList <QString> &links)
729 KGetLinkView *link_view = new KGetLinkView(this);
730 link_view->setLinks(links);
731 link_view->show();
734 void MainWindow::slotTransferHistory()
736 TransferHistory *history = new TransferHistory();
737 history->exec();
740 void MainWindow::slotTransferGroupSettings()
742 kDebug(5001);
743 QList<TransferGroupHandler*> list = KGet::selectedTransferGroups();
744 foreach(TransferGroupHandler* group, list)
746 GroupSettingsDialog *settings = new GroupSettingsDialog(this, group);
747 settings->exec();
751 void MainWindow::slotTransferSettings()
753 kDebug(5001);
754 QList<TransferHandler*> list = KGet::selectedTransfers();
755 foreach(TransferHandler* transfer, list)
757 TransferSettingsDialog *settings = new TransferSettingsDialog(this, transfer);
758 settings->exec();
762 /** slots for link list **/
763 void MainWindow::slotShowListLinks()
765 KGetLinkView *link_view = new KGetLinkView(this);
766 link_view->importUrl();
767 link_view->show();
770 void MainWindow::slotImportUrl(const QString &url)
772 KGetLinkView *link_view = new KGetLinkView(this);
773 link_view->importUrl(url);
774 link_view->show();
777 /** widget events */
779 void MainWindow::closeEvent( QCloseEvent * e )
781 e->ignore();
782 if(!Settings::enableSystemTray()) {
783 slotQuit();
785 else {
786 hide();
790 void MainWindow::dragEnterEvent(QDragEnterEvent * event)
792 event->setAccepted(KUrl::List::canDecode(event->mimeData())
793 || event->mimeData()->hasText());
796 void MainWindow::dropEvent(QDropEvent * event)
798 KUrl::List list = KUrl::List::fromMimeData(event->mimeData());
799 QString str;
801 if (!list.isEmpty())
803 if (list.count() == 1 && list.first().url().endsWith(".kgt"))
805 int msgBoxResult = KMessageBox::questionYesNoCancel(this, i18n("The dropped file is a KGet-Transferlist"), "KGet",
806 KGuiItem(i18n("&Download"), KIcon("document-save")),
807 KGuiItem(i18n("&Load transferlist"), KIcon("list-add")), KStandardGuiItem::cancel());
809 if (msgBoxResult == 3) //Download
810 NewTransferDialog::showNewTransferDialog(list.first().url());
811 if (msgBoxResult == 4) //Load
812 KGet::load(list.first().url());
814 else
816 if (list.count() == 1)
818 str = event->mimeData()->text();
819 NewTransferDialog::showNewTransferDialog(str);
821 else
822 NewTransferDialog::showNewTransferDialog(list);
825 else
827 NewTransferDialog::showNewTransferDialog();
832 /** DBUS interface */
834 void MainWindow::addTransfers(const QString& src, const QString& dest, bool start)
836 // split src for the case it is a QStringList (e.g. from konqueror plugin)
837 KGet::addTransfer(src.split(";"), dest, QString(), start);
840 bool MainWindow::dropTargetVisible() const
842 return m_drop->isVisible();
845 void MainWindow::setDropTargetVisible( bool setVisible )
847 if ( setVisible != Settings::showDropTarget() )
848 m_drop->setDropTargetVisible( setVisible );
851 void MainWindow::setOfflineMode( bool offline )
853 KGet::setSchedulerRunning(offline);
856 bool MainWindow::offlineMode() const
858 return !KGet::schedulerRunning();
861 QVariantMap MainWindow::transfers() const
863 return m_dbusModelObserver->transfers();
866 int MainWindow::transfersSpeed() const
868 return m_dbusModelObserver->transfersSpeed();
871 #include "mainwindow.moc"