small fixes and updates
[kdenetwork.git] / kget / mainwindow.cpp
bloba4147b7051053e9a27de52c99adad08d001695e0
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/transferhistory.h"
30 #include "ui/groupsettingsdialog.h"
31 #include "ui/transfersettingsdialog.h"
32 #include "extensions/webinterface/httpserver.h"
34 #include <kapplication.h>
35 #include <kstandarddirs.h>
36 #include <KInputDialog>
37 #include <kmessagebox.h>
38 #include <kshortcutsdialog.h>
39 #include <kedittoolbar.h>
40 #include <knotifyconfigwidget.h>
41 #include <kfiledialog.h>
42 #include <ktoolinvocation.h>
43 #include <kmenubar.h>
44 #include <kiconloader.h>
45 #include <kstandardaction.h>
46 #include <klocale.h>
47 #include <kicon.h>
48 #include <kactionmenu.h>
49 #include <krun.h>
50 #include <kicondialog.h>
52 #include <QClipboard>
53 #include <QTimer>
55 MainWindow::MainWindow(bool showMainwindow, bool startWithoutAnimation, QWidget *parent)
56 : KXmlGuiWindow( parent ),
57 m_drop(0),
58 m_dock(0),
59 m_startWithoutAnimation(startWithoutAnimation),
60 m_webinterface(0)
62 // do not quit the app when it has been minimized to system tray and a new transfer dialog
63 // gets opened and closed again.
64 qApp->setQuitOnLastWindowClosed(false);
66 // create the model
67 KGet::self( this );
69 // create actions
70 setupActions();
72 createGUI("kgetui.rc");
74 m_viewsContainer = new ViewsContainer(this);
75 // initialize the model observer to export percents over dbus
76 m_dbusModelObserver = new DBusModelObserver();
78 setCentralWidget(m_viewsContainer);
80 // restore position, size and visibility
81 move( Settings::mainPosition() );
82 setAutoSaveSettings();
83 setPlainCaption(i18n("KGet"));
85 if ( Settings::showMain() && showMainwindow)
86 show();
87 else
88 hide();
90 //Some of the widgets are initialized in slotDelayedInit()
91 QTimer::singleShot( 0, this, SLOT(slotDelayedInit()) );
94 MainWindow::~MainWindow()
96 //Save the user's transfers
97 KGet::save();
99 slotSaveMyself();
100 delete clipboardTimer;
101 delete m_drop;
102 delete m_dock;
103 // reset konqueror integration (necessary if user enabled / disabled temporarily integration from tray)
104 slotKonquerorIntegration( Settings::konquerorIntegration() );
105 // the following call saves options set in above dtors
106 Settings::self()->writeConfig();
109 QSize MainWindow::sizeHint() const
111 return QSize(720, 380);
114 void MainWindow::setupActions()
116 QAction *newDownloadAction = actionCollection()->addAction("new_download");
117 newDownloadAction->setText(i18n("&New Download..."));
118 newDownloadAction->setIcon(KIcon("document-new"));
119 newDownloadAction->setShortcuts(KShortcut("Ctrl+N"));
120 connect(newDownloadAction, SIGNAL(triggered()), SLOT(slotNewTransfer()));
122 QAction *openAction = actionCollection()->addAction("import_transfers");
123 openAction->setText(i18n("&Import Transfers..."));
124 openAction->setIcon(KIcon("document-open"));
125 openAction->setShortcuts(KShortcut("Ctrl+I"));
126 connect(openAction, SIGNAL(triggered()), SLOT(slotImportTransfers()));
128 QAction *exportAction = actionCollection()->addAction("export_transfers");
129 exportAction->setText(i18n("&Export Transfers List..."));
130 exportAction->setIcon(KIcon("document-export"));
131 exportAction->setShortcuts(KShortcut("Ctrl+E"));
132 connect(exportAction, SIGNAL(triggered()), SLOT(slotExportTransfers()));
134 QAction *deleteGroupAction = actionCollection()->addAction("delete_groups");
135 deleteGroupAction->setText(i18n("Delete Group"));
136 deleteGroupAction->setIcon(KIcon("edit-delete"));
137 connect(deleteGroupAction, SIGNAL(triggered()), SLOT(slotDeleteGroup()));
139 QAction *renameGroupAction = actionCollection()->addAction("rename_groups");
140 renameGroupAction->setText(i18n("Rename Group"));
141 renameGroupAction->setIcon(KIcon("edit-rename"));
142 connect(renameGroupAction, SIGNAL(triggered()), SLOT(slotRenameGroup()));
144 QAction *setIconGroupAction = actionCollection()->addAction("seticon_groups");
145 setIconGroupAction->setText(i18n("Set Icon"));
146 setIconGroupAction->setIcon(KIcon("preferences-desktop-icons"));
147 connect(setIconGroupAction, SIGNAL(triggered()), SLOT(slotSetIconGroup()));
149 m_autoPasteAction = new KToggleAction(KIcon("edit-paste"),
150 i18n("Auto-Paste Mode"), actionCollection());
151 actionCollection()->addAction("auto_paste", m_autoPasteAction);
152 m_autoPasteAction->setChecked(Settings::autoPaste());
153 m_autoPasteAction->setWhatsThis(i18n("<b>Auto paste</b> button toggles the auto-paste mode "
154 "on and off.\nWhen set, KGet will periodically scan "
155 "the clipboard for URLs and paste them automatically."));
156 connect(m_autoPasteAction, SIGNAL(triggered()), SLOT(slotToggleAutoPaste()));
158 m_konquerorIntegration = new KToggleAction(KIcon("konqueror"),
159 i18n("Use KGet as Konqueror Download Manager"), actionCollection());
160 actionCollection()->addAction("konqueror_integration", m_konquerorIntegration);
161 connect(m_konquerorIntegration, SIGNAL(triggered(bool)), SLOT(slotTrayKonquerorIntegration(bool)));
162 m_konquerorIntegration->setChecked(Settings::konquerorIntegration());
164 // local - Destroys all sub-windows and exits
165 QAction *quitAction = KStandardAction::quit(this, SLOT(slotQuit()), actionCollection());
166 actionCollection()->addAction("quit", quitAction);
167 // local - Standard configure actions
168 QAction *preferencesAction = KStandardAction::preferences(this, SLOT(slotPreferences()), actionCollection());
169 actionCollection()->addAction("preferences", preferencesAction);
170 QAction *configToolbarAction = KStandardAction::configureToolbars(this, SLOT(slotConfigureToolbars()), actionCollection());
171 actionCollection()->addAction("configure_toolbars", configToolbarAction);
172 QAction *keyBindingsAction = KStandardAction::keyBindings(this, SLOT(slotConfigureKeys()), actionCollection());
173 actionCollection()->addAction("configure_keys", keyBindingsAction);
174 QAction *cinfigNotifyAction = KStandardAction::configureNotifications(this, SLOT(slotConfigureNotifications()), actionCollection());
175 actionCollection()->addAction("configure_notifications", cinfigNotifyAction);
176 m_menubarAction = KStandardAction::showMenubar(this, SLOT(slotShowMenubar()), actionCollection());
177 m_menubarAction->setChecked(!menuBar()->isHidden());
178 actionCollection()->addAction("settings_showmenubar", m_menubarAction);
180 // Transfer related actions
181 QAction *deleteSelectedAction = actionCollection()->addAction("delete_selected_download");
182 deleteSelectedAction->setText(i18nc("delete selected transfer item", "Delete Selected"));
183 deleteSelectedAction->setIcon(KIcon("edit-delete"));
184 deleteSelectedAction->setShortcuts(KShortcut("Del"));
185 connect(deleteSelectedAction, SIGNAL(triggered()), SLOT(slotDeleteSelected()));
187 QAction *redownloadSelectedAction = actionCollection()->addAction("redownload_selected_download");
188 redownloadSelectedAction->setText(i18nc("redownload selected transfer item", "Redownload Selected"));
189 redownloadSelectedAction->setIcon(KIcon("view-refresh"));
190 connect(redownloadSelectedAction, SIGNAL(triggered()), SLOT(slotRedownloadSelected()));
192 QAction *startAllAction = actionCollection()->addAction("start_all_download");
193 startAllAction->setText(i18n("Start / Resume All"));
194 startAllAction->setIcon(KIcon("media-seek-forward"));
195 startAllAction->setShortcuts(KShortcut("Ctrl+R"));
196 connect(startAllAction, SIGNAL(triggered()), SLOT(slotStartAllDownload()));
198 QAction *startSelectedAction = actionCollection()->addAction("start_selected_download");
199 startSelectedAction->setText(i18n("Start / Resume Selected"));
200 startSelectedAction->setIcon(KIcon("media-playback-start"));
201 connect(startSelectedAction, SIGNAL(triggered()), SLOT(slotStartSelectedDownload()));
203 QAction *stopAllAction = actionCollection()->addAction("stop_all_download");
204 stopAllAction->setText(i18n("Stop All"));
205 stopAllAction->setIcon(KIcon("media-playback-pause"));
206 stopAllAction->setShortcuts(KShortcut("Ctrl+P"));
207 connect(stopAllAction, SIGNAL(triggered()), SLOT(slotStopAllDownload()));
209 QAction *stopSelectedAction = actionCollection()->addAction("stop_selected_download");
210 stopSelectedAction->setText(i18n("Stop Selected"));
211 stopSelectedAction->setIcon(KIcon("media-playback-pause"));
212 connect(stopSelectedAction, SIGNAL(triggered()), SLOT(slotStopSelectedDownload()));
214 KActionMenu *startActionMenu = new KActionMenu(KIcon("media-playback-start"), i18n("Start / Resume"),
215 actionCollection());
216 actionCollection()->addAction("start_menu", startActionMenu);
217 startActionMenu->setDelayed(true);
218 startActionMenu->addAction(startAllAction);
219 startActionMenu->addAction(startSelectedAction);
220 connect(startActionMenu, SIGNAL(triggered()), SLOT(slotStartDownload()));
222 KActionMenu *stopActionMenu = new KActionMenu(KIcon("media-playback-pause"), i18n("Stop"),
223 actionCollection());
224 actionCollection()->addAction("stop_menu", stopActionMenu);
225 stopActionMenu->setDelayed(true);
226 stopActionMenu->addAction(stopAllAction);
227 stopActionMenu->addAction(stopSelectedAction);
228 connect(stopActionMenu, SIGNAL(triggered()), SLOT(slotStopDownload()));
230 QAction *openDestAction = actionCollection()->addAction("transfer_open_dest");
231 openDestAction->setText(i18n("Open Destination"));
232 openDestAction->setIcon(KIcon("document-open"));
233 connect(openDestAction, SIGNAL(triggered()), SLOT(slotTransfersOpenDest()));
235 QAction *openFileAction = actionCollection()->addAction("transfer_open_file");
236 openFileAction->setText(i18n("Open File"));
237 openFileAction->setIcon(KIcon("document-open"));
238 connect(openFileAction, SIGNAL(triggered()), SLOT(slotTransfersOpenFile()));
240 QAction *showDetailsAction = actionCollection()->addAction("transfer_show_details");
241 showDetailsAction->setText(i18n("Show Details"));
242 showDetailsAction->setIcon(KIcon("document-properties"));
243 connect(showDetailsAction, SIGNAL(triggered()), SLOT(slotTransfersShowDetails()));
245 QAction *copyUrlAction = actionCollection()->addAction("transfer_copy_source_url");
246 copyUrlAction->setText(i18n("Copy URL to Clipboard"));
247 copyUrlAction->setIcon(KIcon("edit-copy"));
248 connect(copyUrlAction, SIGNAL(triggered()), SLOT(slotTransfersCopySourceUrl()));
250 KToggleAction *showDropTargetAction = new KToggleAction(KIcon("kget"),
251 i18n("Show Drop Target"), actionCollection());
252 actionCollection()->addAction("show_drop_target", showDropTargetAction);
253 showDropTargetAction->setChecked(Settings::showDropTarget());
254 connect(showDropTargetAction, SIGNAL(triggered()), SLOT(slotToggleDropTarget()));
256 QAction *transferHistoryAction = actionCollection()->addAction("Transfer History");
257 transferHistoryAction->setText(i18n("&Transfer History"));
258 transferHistoryAction->setIcon(KIcon("view-history"));
259 transferHistoryAction->setShortcuts(KShortcut("Ctrl+H"));
260 connect(transferHistoryAction, SIGNAL(triggered()), SLOT(slotTransferHistory()));
262 QAction *transferGroupSettingsAction = actionCollection()->addAction("transfer_group_settings");
263 transferGroupSettingsAction->setText(i18n("&Group Settings"));
264 transferGroupSettingsAction->setIcon(KIcon("preferences-system"));
265 transferGroupSettingsAction->setShortcuts(KShortcut("Ctrl+G"));
266 connect(transferGroupSettingsAction, SIGNAL(triggered()), SLOT(slotTransferGroupSettings()));
268 QAction *transferSettingsAction = actionCollection()->addAction("transfer_settings");
269 transferSettingsAction->setText(i18n("&Transfer Settings"));
270 transferSettingsAction->setIcon(KIcon("preferences-system"));
271 transferSettingsAction->setShortcuts(KShortcut("Ctrl+T"));
272 connect(transferSettingsAction, SIGNAL(triggered()), SLOT(slotTransferSettings()));
275 void MainWindow::slotDelayedInit()
277 //Here we import the user's transfers.
278 KGet::load( KStandardDirs::locateLocal("appdata", "transfers.kgt") );
280 m_dock = new Tray(this);
281 if(Settings::enableSystemTray()) {
282 // DockWidget
283 m_dock->show();
286 // enable dropping
287 setAcceptDrops(true);
289 // enable hide toolbar
290 setStandardToolBarMenuEnabled(true);
292 // session management stuff
293 connect(kapp, SIGNAL(saveYourself()), SLOT(slotSaveMyself()));
295 // set auto-resume in kioslaverc (is there a cleaner way?)
296 KConfig cfg("kioslaverc", KConfig::NoGlobals);
297 cfg.group(QString()).writeEntry("AutoResume", true);
298 cfg.sync();
300 // immediately start downloading if configured this way
301 if ( Settings::downloadAtStartup() )
302 slotStartDownload();
304 // DropTarget
305 m_drop = new DropTarget(this);
307 if (Settings::firstRun()) {
308 if (KMessageBox::questionYesNoCancel(this ,i18n("This is the first time you have run KGet.\n"
309 "Would you like to enable KGet as the download manager for Konqueror?"),
310 i18n("Konqueror Integration"), KGuiItem(i18n("Enable")),
311 KGuiItem(i18n("Do Not Enable")))
312 == KMessageBox::Yes) {
313 Settings::setKonquerorIntegration(true);
314 slotKonquerorIntegration(true);
317 m_drop->setDropTargetVisible(true);
319 // reset the FirstRun config option
320 Settings::setFirstRun(false);
323 if (Settings::showDropTarget() && !m_startWithoutAnimation)
324 m_drop->setDropTargetVisible(true);
326 //auto paste stuff
327 lastClipboard = QApplication::clipboard()->text( QClipboard::Clipboard ).trimmed();
328 clipboardTimer = new QTimer(this);
329 connect(clipboardTimer, SIGNAL(timeout()), SLOT(slotCheckClipboard()));
330 if ( Settings::autoPaste() )
331 clipboardTimer->start(1000);
333 // kget kuiserver integration
334 KGet::reloadKJobs();
336 if (Settings::webinterfaceEnabled())
337 m_webinterface = new HttpServer(this);
340 void MainWindow::slotToggleDropTarget()
342 actionCollection()->action("show_drop_target")->setChecked(!m_drop->isVisible());
344 m_drop->setDropTargetVisible(!m_drop->isVisible());
347 void MainWindow::slotNewTransfer()
349 NewTransferDialog::showNewTransferDialog();
352 void MainWindow::slotImportTransfers()
354 QString filename = KFileDialog::getOpenFileName(KUrl(),
355 "*.kgt *.metalink *.torrent|" + i18n("All Openable Files") +
356 " (*.kgt *.metalink *.torrent)", this, i18n("Open File"));
358 if(filename.endsWith(".kgt"))
360 KGet::load(filename);
361 return;
364 if(!filename.isEmpty())
365 KGet::addTransfer( KUrl( filename ) );
368 void MainWindow::slotQuit()
370 if (KGet::schedulerRunning()) {
371 if (KMessageBox::warningYesNoCancel(this,
372 i18n("Some transfers are still running.\n"
373 "Are you sure you want to close KGet?"),
374 i18n("Confirm Quit"),
375 KStandardGuiItem::yes(), KStandardGuiItem::no(), KStandardGuiItem::cancel(),
376 "ExitWithActiveTransfers") != KMessageBox::Yes)
377 return;
379 KGet::setSchedulerRunning(false);
382 Settings::self()->writeConfig();
383 qApp->quit();
386 void MainWindow::slotPreferences()
388 // an instance the dialog could be already created and could be cached,
389 // in which case you want to display the cached dialog
390 if ( PreferencesDialog::showDialog( "preferences" ) )
391 return;
393 // we didn't find an instance of this dialog, so lets create it
394 PreferencesDialog * dialog = new PreferencesDialog( this, Settings::self() );
395 KGet::setPluginsSettingsWidget( dialog->pluginsWidget() );
396 // keep us informed when the user changes settings
397 connect( dialog, SIGNAL(settingsChanged(const QString&)),
398 this, SLOT(slotNewConfig()) );
400 dialog->show();
403 void MainWindow::slotExportTransfers()
405 QString filename = KFileDialog::getSaveFileName
406 (KUrl(),
407 "*.kgt|" + i18n("KGet Transfer List") + " (*.kgt)",
408 this,
409 i18n("Export Transfers")
412 if(!filename.isEmpty())
413 KGet::save(filename);
416 void MainWindow::slotDeleteGroup()
418 foreach(TransferGroupHandler * it, KGet::selectedTransferGroups())
420 it->stop();
421 KGet::delGroup(it->name());
425 void MainWindow::slotRenameGroup()
427 bool ok = true;
428 QString groupName;
430 foreach(TransferGroupHandler * it, KGet::selectedTransferGroups())
432 groupName = KInputDialog::getText(i18n("Enter Group Name"),
433 i18n("Group name:"), it->name(), &ok, this);
434 if(ok)
435 it->setName(groupName);
439 void MainWindow::slotSetIconGroup()
441 KIconDialog dialog(this);
442 QString iconName = dialog.getIcon();
443 TransferTreeSelectionModel *selModel = KGet::selectionModel();
445 QModelIndexList indexList = selModel->selectedRows();
447 if (!iconName.isEmpty())
449 foreach (TransferGroupHandler *group, KGet::selectedTransferGroups())
451 group->setIconName(iconName);
454 //emit dataChanged(indexList.first(),indexList.last());
457 void MainWindow::slotStartDownload()
459 if(KGet::selectedTransfers().size() == 0)
460 slotStartAllDownload();
461 else
462 slotStartSelectedDownload();
465 void MainWindow::slotStartAllDownload()
467 KGet::setSchedulerRunning(true);
470 void MainWindow::slotStartSelectedDownload()
472 foreach(TransferHandler * it, KGet::selectedTransfers())
473 it->start();
476 void MainWindow::slotStopDownload()
478 if(KGet::selectedTransfers().size() == 0)
479 slotStopAllDownload();
480 else
481 slotStopSelectedDownload();
484 void MainWindow::slotStopAllDownload()
486 KGet::setSchedulerRunning(false);
489 void MainWindow::slotStopSelectedDownload()
491 foreach (TransferHandler * it, KGet::selectedTransfers())
492 it->stop();
495 void MainWindow::slotDeleteSelected()
497 foreach(TransferHandler * it, KGet::selectedTransfers())
499 it->stop();
500 m_viewsContainer->closeTransferDetails(it);
501 KGet::delTransfer(it);
505 void MainWindow::slotRedownloadSelected()
507 foreach(TransferHandler * it, KGet::selectedTransfers())
509 KGet::redownloadTransfer(it);
513 void MainWindow::slotTransfersOpenDest()
515 QStringList openedDirs;
516 foreach(TransferHandler * it, KGet::selectedTransfers())
518 QString directory = it->dest().directory();
519 if( !openedDirs.contains( directory ) )
521 new KRun(directory, this, 0, true, false);
522 openedDirs.append( directory );
527 void MainWindow::slotTransfersOpenFile()
529 foreach(TransferHandler * it, KGet::selectedTransfers())
531 new KRun(it->dest(), this, 0, true, false);
535 void MainWindow::slotTransfersShowDetails()
537 foreach(TransferHandler * it, KGet::selectedTransfers())
539 m_viewsContainer->showTransferDetails(it);
543 void MainWindow::slotTransfersCopySourceUrl()
545 foreach(TransferHandler * it, KGet::selectedTransfers())
547 QString sourceurl = it->source().url();
548 QClipboard *cb = QApplication::clipboard();
549 cb->setText(sourceurl, QClipboard::Selection);
550 cb->setText(sourceurl, QClipboard::Clipboard);
554 void MainWindow::slotConfigureNotifications()
556 KNotifyConfigWidget::configure(this);
559 void MainWindow::slotConfigureKeys()
561 KShortcutsDialog::configure(actionCollection());
564 void MainWindow::slotConfigureToolbars()
566 KEditToolBar edit( actionCollection() );
567 connect(&edit, SIGNAL( newToolbarConfig() ), this, SLOT( slotNewToolbarConfig() ));
568 edit.exec();
572 void MainWindow::slotSaveMyself()
574 // save last parameters ..
575 Settings::setMainPosition( pos() );
576 // .. and write config to disk
577 Settings::self()->writeConfig();
580 void MainWindow::slotNewToolbarConfig()
582 createGUI();
585 void MainWindow::slotNewConfig()
587 // Update here properties modified in the config dialog and not
588 // parsed often by the code. When clicking Ok or Apply of
589 // PreferencesDialog, this function is called.
591 m_viewsContainer->setExpandableDetails(Settings::showExpandableTransferDetails());
592 m_drop->setDropTargetVisible(Settings::showDropTarget(), false);
593 m_dock->setVisible(Settings::enableSystemTray());
594 if(!Settings::enableSystemTray()) setVisible(true);
596 slotKonquerorIntegration(Settings::konquerorIntegration());
597 m_konquerorIntegration->setChecked(Settings::konquerorIntegration());
599 KGet::reloadKJobs();
601 if (Settings::autoPaste())
602 clipboardTimer->start(1000);
603 else
604 clipboardTimer->stop();
605 m_autoPasteAction->setChecked(Settings::autoPaste());
607 if (Settings::webinterfaceEnabled() && !m_webinterface) {
608 m_webinterface = new HttpServer(this);
609 } else if (m_webinterface) {
610 delete m_webinterface;
611 m_webinterface = 0;
614 KGet::settingsChanged();
617 void MainWindow::slotToggleAutoPaste()
619 bool autoPaste = !Settings::autoPaste();
620 Settings::setAutoPaste( autoPaste );
622 if (autoPaste)
623 clipboardTimer->start(1000);
624 else
625 clipboardTimer->stop();
626 m_autoPasteAction->setChecked(autoPaste);
629 void MainWindow::slotCheckClipboard()
631 QString clipData = QApplication::clipboard()->text( QClipboard::Clipboard ).trimmed();
633 if (clipData != lastClipboard)
635 lastClipboard = clipData;
636 if (lastClipboard.isEmpty())
637 return;
639 KUrl url = KUrl(lastClipboard);
641 if (url.isValid() && !url.isLocalFile())
642 KGet::addTransfer( url );
646 void MainWindow::slotTrayKonquerorIntegration(bool enable)
648 slotKonquerorIntegration(enable);
649 if (!enable && Settings::konquerorIntegration() && !Settings::expertMode())
651 KMessageBox::information(this,
652 i18n("KGet has been temporarily disabled as download manager for Konqueror. "
653 "If you want to disable it forever, go to Settings->Advanced and disable \"Use "
654 "as download manager for Konqueror\"."),
655 i18n("Konqueror Integration disabled"),
656 "KonquerorIntegrationDisabled");
660 void MainWindow::slotKonquerorIntegration(bool konquerorIntegration)
662 KConfig cfgKonqueror("konquerorrc", KConfig::NoGlobals);
663 cfgKonqueror.group("HTML Settings").writeEntry("DownloadManager",
664 QString(konquerorIntegration ? "kget" : QString()));
665 cfgKonqueror.sync();
668 void MainWindow::slotShowMenubar()
670 if (m_menubarAction->isChecked())
671 menuBar()->show();
672 else
673 menuBar()->hide();
676 void MainWindow::setSystemTrayDownloading(bool running)
678 kDebug(5001);
680 m_dock->setDownloading(running);
683 void MainWindow::slotTransferHistory()
685 TransferHistory *history = new TransferHistory();
686 history->exec();
689 void MainWindow::slotTransferGroupSettings()
691 kDebug(5001);
692 QList<TransferGroupHandler*> list = KGet::selectedTransferGroups();
693 foreach(TransferGroupHandler* group, list)
695 GroupSettingsDialog *settings = new GroupSettingsDialog(this, group);
696 settings->exec();
700 void MainWindow::slotTransferSettings()
702 kDebug(5001);
703 QList<TransferHandler*> list = KGet::selectedTransfers();
704 foreach(TransferHandler* transfer, list)
706 TransferSettingsDialog *settings = new TransferSettingsDialog(this, transfer);
707 settings->exec();
711 /** widget events */
713 void MainWindow::closeEvent( QCloseEvent * e )
715 e->ignore();
716 if(!Settings::enableSystemTray()) {
717 slotQuit();
719 else {
720 hide();
724 void MainWindow::dragEnterEvent(QDragEnterEvent * event)
726 event->setAccepted(KUrl::List::canDecode(event->mimeData())
727 || event->mimeData()->hasText());
730 void MainWindow::dropEvent(QDropEvent * event)
732 KUrl::List list = KUrl::List::fromMimeData(event->mimeData());
733 QString str;
735 if (!list.isEmpty())
737 if (list.count() == 1 && list.first().url().endsWith(".kgt"))
739 int msgBoxResult = KMessageBox::questionYesNoCancel(this, "The dropped file is a KGet-Transferlist", "KGet",
740 KGuiItem(i18n("&Download"), KIcon("document-save")),
741 KGuiItem(i18n("&Load transferlist"), KIcon("list-add")), KStandardGuiItem::cancel());
743 if (msgBoxResult == 3) //Download
744 NewTransferDialog::showNewTransferDialog(list.first().url());
745 if (msgBoxResult == 4) //Load
746 KGet::load(list.first().url());
748 else
750 if (list.count() == 1)
752 str = event->mimeData()->text();
753 NewTransferDialog::showNewTransferDialog(str);
755 else
756 NewTransferDialog::showNewTransferDialog(list);
759 else
761 NewTransferDialog::showNewTransferDialog();
766 /** DBUS interface */
768 void MainWindow::addTransfers(const QString& src, const QString& dest, bool start)
770 // split src for the case it is a QStringList (e.g. from konqueror plugin)
771 KGet::addTransfer(src.split(";"), dest, QString(), start);
774 bool MainWindow::dropTargetVisible() const
776 return m_drop->isVisible();
779 void MainWindow::setDropTargetVisible( bool setVisible )
781 if ( setVisible != Settings::showDropTarget() )
782 m_drop->setDropTargetVisible( setVisible );
785 void MainWindow::setOfflineMode( bool offline )
787 KGet::setSchedulerRunning(offline);
790 bool MainWindow::offlineMode() const
792 return !KGet::schedulerRunning();
795 QVariantMap MainWindow::transfers() const
797 return m_dbusModelObserver->transfers();
800 int MainWindow::transfersSpeed() const
802 return m_dbusModelObserver->transfersSpeed();
805 #include "mainwindow.moc"