23 #include <kwindowsystem.h>
25 #include <kmessagebox.h>
26 #include <KPassivePopup>
27 #include <kapplication.h>
29 #include <QDesktopWidget>
35 #include <QStringList>
39 #define TARGET_SIZE 64
40 #define TARGET_ANI_MS 20
41 #define TARGET_TOOLTIP_MS 1000
44 :
QWidget(0, Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint),
45 parentWidget(mw), animTimer(0), showInformation(false)
47 KWindowSystem::setState(winId(), NET::SkipTaskbar);
54 position = QPoint(screenGeo.x() + screenGeo.width() / 2, screenGeo.y() + screenGeo.height() / 2);
58 KWindowSystem::setState(winId(), KWindowSystem::Sticky);
61 if (!cachedPixmap.mask().isNull())
64 mask.fill(Qt::color0);
65 QBitmap pixMask = cachedPixmap.mask();
67 p.drawPixmap((mask.width() - pixMask.width())/2, (mask.height() - pixMask.height())/2,
75 popupMenu =
new KMenu(
this);
76 popupMenu->addTitle(mw->windowTitle());
78 QAction * downloadAction = mw->actionCollection()->action(
"start_all_download");
79 popupMenu->addAction( downloadAction );
80 connect( downloadAction, SIGNAL(toggled(
bool)),
this, SLOT(slotStartStopToggled(
bool)) );
81 popupMenu->addSeparator();
82 pop_show = popupMenu->addAction( QString(),
this, SLOT(toggleMinimizeRestore()) );
83 popupMenu->addAction(parentWidget->actionCollection()->action(
"show_drop_target"));
84 pop_sticky = popupMenu->addAction(i18nc(
"fix position for droptarget",
"Sticky"),
this, SLOT(toggleSticky()));
85 pop_sticky->setCheckable(
true);
87 popupMenu->addSeparator();
88 popupMenu->addAction( mw->actionCollection()->action(
"preferences") );
90 QAction *quitAction =
new QAction(
this);
91 quitAction->setText(i18n(
"Quit KGet"));
92 quitAction->setIcon(KIcon(
"system-shutdown"));
93 connect(quitAction, SIGNAL(triggered()), mw, SLOT(slotQuit()));
94 popupMenu->addAction(quitAction);
102 showInformation =
true;
105 animTimer =
new QTimer(
this);
106 popupTimer =
new QTimer(
this);
108 setMouseTracking(
true);
110 connect(
KGet::model(), SIGNAL(transfersChangedEvent(QMap<TransferHandler*,Transfer::ChangesFlags>)),
111 this, SLOT(slotToolTipUpdate()));
113 connect(popupTimer, SIGNAL(timeout()),
114 this, SLOT(slotToolTipTimer()));
130 if (shown == !isHidden())
159 if (animTimer->isActive())
161 animTimer->disconnect();
162 connect( animTimer, SIGNAL(timeout()),
163 this, SLOT(slotAnimateShow()));
175 if (animTimer->isActive())
178 animTimer->disconnect();
179 connect( animTimer, SIGNAL(timeout()),
180 this, SLOT(slotAnimateHide()));
188 if (animTimer->isActive())
191 animTimer->disconnect();
192 connect( animTimer, SIGNAL(timeout()),
193 this, SLOT(slotAnimateSync()));
199 void DropTarget::slotStartStopToggled(
bool started )
210 event->setAccepted(KUrl::List::canDecode(event->mimeData())
211 || event->mimeData()->hasText());
217 KUrl::List list = KUrl::List::fromMimeData(event->mimeData());
222 if (list.count() == 1 && list.first().url().endsWith(QLatin1String(
".kgt")))
224 int msgBoxResult = KMessageBox::questionYesNoCancel(
this, i18n(
"The dropped file is a KGet Transfer List"),
"KGet",
225 KGuiItem(i18n(
"&Download"), KIcon(
"document-save")),
226 KGuiItem(i18n(
"&Load transfer list"), KIcon(
"list-add")), KStandardGuiItem::cancel());
228 if (msgBoxResult == 3)
230 if (msgBoxResult == 4)
235 if (list.count() == 1)
237 str =
event->mimeData()->text();
256 if( kapp->sessionSaving() )
273 if (e->button() == Qt::LeftButton)
276 dx = e->globalPos().x() - pos().x();
277 dy = e->globalPos().y() - pos().y();
279 else if (e->button() == Qt::RightButton)
281 pop_show->setText(parentWidget->isHidden() ?
282 i18n(
"Show Main Window") :
283 i18n(
"Hide Main Window") );
284 popupMenu->popup(e->globalPos());
286 else if (e->button() == Qt::MidButton)
289 QString newtransfer = QApplication::clipboard()->text();
290 newtransfer = newtransfer.trimmed();
292 if(!newtransfer.isEmpty())
304 if (e->button() == Qt::LeftButton)
305 toggleMinimizeRestore();
313 move( QCursor::pos().x() - dx, QCursor::pos().y() - dy );
321 popupTimer->start(2000);
333 p.drawPixmap(0, 0, cachedPixmap);
336 void DropTarget::toggleSticky()
342 KWindowSystem::setState(winId(), KWindowSystem::SkipTaskbar | KWindowSystem::StaysOnTop | KWindowSystem::Sticky);
344 KWindowSystem::clearState(winId(), KWindowSystem::Sticky);
347 void DropTarget::toggleMinimizeRestore()
349 bool nextState = parentWidget->isHidden();
351 parentWidget->setVisible( nextState );
354 KWindowSystem::activateWindow(static_cast<KXmlGuiWindow *>(parentWidget)->winId());
359 void DropTarget::slotAnimateShow()
363 ani_vy -= ani_y * 30 * dT;
365 ani_y += ani_vy * dT;
367 move(x(), qRound(position.y() * (1 + ani_y)));
369 if ( fabs(ani_y) < 0.01 && fabs(ani_vy) < 0.01 && animTimer->isActive() )
374 KPassivePopup::message(i18n(
"Drop Target"),
375 i18n(
"You can drag download links into the drop target."),
this);
379 void DropTarget::slotAnimateHide()
383 ani_vy += -2000 * dT;
384 float new_y = y() + ani_vy * dT;
386 if ( new_y < -height() )
390 move( x(), qRound(ani_y) );
392 move( x(), qRound(new_y) );
395 void DropTarget::slotAnimateSync()
400 float i = 2 * M_PI * ani_vy;
401 float j = (i == 0.0) ? 1 : (sin( i ) / i) * (1 + fabs(ani_vy));
406 move( x(), qRound(ani_y) );
408 move( x(), qRound(ani_y + 6*j) );
411 void DropTarget::slotToolTipUpdate()
413 QStringList dataList;
418 switch (transfer->
status()) {
420 data = i18nc(
"%1 filename, %2 total size, %3 status",
"%1(%2) %3",
421 transfer->
source().fileName(),
426 data = i18nc(
"%1 filename, %2 percent complete, %3 downloaded out of %4 total size",
"%1(%2% %3/%4) Speed:%5/s",
427 transfer->
source().fileName(),
434 data = i18nc(
"%1 filename, %2 percent complete, %3 downloaded out of %4 total size, %5 status",
"%1(%2% %3/%4) %5",
435 transfer->
source().fileName(),
445 if (!dataList.empty())
446 tooltipText = dataList.join(
"\n");
448 tooltipText = i18n(
"Ready");
451 void DropTarget::slotToolTipTimer()
453 if (!popupMenu->isVisible() && isVisible() && mask().contains(mapFromGlobal(QCursor::pos())))
454 QToolTip::showText(QCursor::pos(),tooltipText,
this,rect());
457 void DropTarget::slotClose()
462 #include "droptarget.moc"
void mouseMoveEvent(QMouseEvent *e)
static bool dropSticky()
Get DropSticky.
Job::Status status() const
static TransferHandler * addTransfer(KUrl srcUrl, QString destDir=QString(), QString suggestedFileName=QString(), QString groupName=QString(), bool start=false)
Adds a new transfer to the KGet.
void mouseReleaseEvent(QMouseEvent *e)
The job is stopped, but this also indicates that it stopped because an error occurred.
void enterEvent(QEvent *event)
static void setDropPosition(const QPoint &v)
Set DropPosition.
static QPoint dropPosition()
Get DropPosition.
void paintEvent(QPaintEvent *)
DropTarget(MainWindow *parent)
KIO::filesize_t totalSize() const
void dropEvent(QDropEvent *)
void mouseDoubleClickEvent(QMouseEvent *e)
void setDropTargetVisible(bool shown, bool internal=true)
static QList< TransferHandler * > allTransfers()
Gets all transfers.
static TransferTreeModel * model()
static void setShowDropTarget(bool v)
Set ShowDropTarget.
QString statusText() const
void dragEnterEvent(QDragEnterEvent *)
widget events
const KUrl & source() const
static void load(QString filename=QString())
Imports the transfers and groups included in the provided xml file.
void leaveEvent(QEvent *event)
int downloadSpeed() const
void closeEvent(QCloseEvent *)
KIO::filesize_t downloadedSize() const
static void setShowMain(bool v)
Set ShowMain.
static void showNewTransferDialog(const KUrl &url=KUrl())
static bool animateDropTarget()
Get AnimateDropTarget.
static bool showDropTarget()
Get ShowDropTarget.
static bool firstRun()
Get FirstRun.
static void setDropSticky(bool v)
Set DropSticky.
void mousePressEvent(QMouseEvent *e)