2014-11-13 01:04:59 +02:00
|
|
|
/*****************************************************************************
|
|
|
|
* Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at> *
|
|
|
|
* Copyright (C) 2006 by Aaron J. Seigo <aseigo@kde.org> *
|
|
|
|
* *
|
|
|
|
* This library is free software; you can redistribute it and/or *
|
|
|
|
* modify it under the terms of the GNU Library General Public *
|
|
|
|
* License as published by the Free Software Foundation; either *
|
|
|
|
* version 2 of the License, or (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* This library is distributed in the hope that it will be useful, *
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
|
|
|
* Library General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU Library General Public License *
|
|
|
|
* along with this library; see the file COPYING.LIB. If not, write to *
|
|
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *
|
|
|
|
* Boston, MA 02110-1301, USA. *
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#ifndef KURLNAVIGATORBUTTON_P_H
|
|
|
|
#define KURLNAVIGATORBUTTON_P_H
|
|
|
|
|
|
|
|
#include "kurlnavigatorbuttonbase_p.h"
|
|
|
|
#include "kurlnavigatormenu_p.h"
|
|
|
|
|
2015-09-24 17:34:26 +00:00
|
|
|
#include <QtCore/qpointer.h>
|
2019-05-17 16:14:26 +00:00
|
|
|
#include <QDropEvent>
|
|
|
|
#include <QPaintEvent>
|
|
|
|
#include <QTimer>
|
2014-11-13 01:04:59 +02:00
|
|
|
#include <kio/global.h>
|
|
|
|
#include <kio/udsentry.h>
|
|
|
|
#include <kurl.h>
|
|
|
|
|
|
|
|
class KJob;
|
|
|
|
|
|
|
|
namespace KIO
|
|
|
|
{
|
|
|
|
class Job;
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace KDEPrivate
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Button of the URL navigator which contains one part of an URL.
|
|
|
|
*
|
|
|
|
* It is possible to drop a various number of items to an UrlNavigatorButton. In this case
|
|
|
|
* a context menu is opened where the user must select whether he wants
|
|
|
|
* to copy, move or link the dropped items to the URL part indicated by
|
|
|
|
* the button.
|
|
|
|
*/
|
|
|
|
class KUrlNavigatorButton : public KUrlNavigatorButtonBase
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
explicit KUrlNavigatorButton(const KUrl& url, QWidget* parent);
|
|
|
|
virtual ~KUrlNavigatorButton();
|
|
|
|
|
|
|
|
void setUrl(const KUrl& url);
|
|
|
|
KUrl url() const;
|
|
|
|
|
|
|
|
/* Implementation note: QAbstractButton::setText() is not virtual,
|
|
|
|
* but KUrlNavigatorButton needs to adjust the minimum size when
|
|
|
|
* the text has been changed. KUrlNavigatorButton::setText() hides
|
|
|
|
* QAbstractButton::setText() which is not nice, but sufficient for
|
|
|
|
* the usage in KUrlNavigator.
|
|
|
|
*/
|
|
|
|
void setText(const QString& text);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the name of the sub directory that should be marked when
|
|
|
|
* opening the sub directories popup.
|
|
|
|
*/
|
|
|
|
void setActiveSubDirectory(const QString& subDir);
|
|
|
|
QString activeSubDirectory() const;
|
|
|
|
|
|
|
|
/** @see QWidget::sizeHint() */
|
|
|
|
virtual QSize sizeHint() const;
|
|
|
|
|
|
|
|
void setShowMnemonic(bool show);
|
|
|
|
bool showMnemonic() const;
|
|
|
|
|
|
|
|
Q_SIGNALS:
|
|
|
|
/**
|
|
|
|
* Is emitted if URLs have been dropped
|
|
|
|
* to the destination \a destination.
|
|
|
|
*/
|
|
|
|
void urlsDropped(const KUrl& destination, QDropEvent* event);
|
|
|
|
|
|
|
|
void clicked(const KUrl& url, Qt::MouseButton button);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Is emitted, if KUrlNavigatorButton::setUrl() cannot resolve
|
|
|
|
* the text synchronously and KUrlNavigator::text() will return
|
|
|
|
* an empty string in this case. The signal finishedTextResolving() is
|
|
|
|
* emitted, as soon as the text has been resolved.
|
|
|
|
*/
|
|
|
|
void startedTextResolving();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Is emitted, if the asynchronous resolving of the text has
|
|
|
|
* been finished (see startTextResolving()).
|
|
|
|
* KUrlNavigatorButton::text() contains the resolved text.
|
|
|
|
*/
|
|
|
|
void finishedTextResolving();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void paintEvent(QPaintEvent* event);
|
|
|
|
virtual void enterEvent(QEvent* event);
|
|
|
|
virtual void leaveEvent(QEvent* event);
|
|
|
|
virtual void keyPressEvent(QKeyEvent* event);
|
|
|
|
virtual void dropEvent(QDropEvent* event);
|
|
|
|
virtual void dragEnterEvent(QDragEnterEvent* event);
|
|
|
|
virtual void dragMoveEvent(QDragMoveEvent* event);
|
|
|
|
virtual void dragLeaveEvent(QDragLeaveEvent* event);
|
|
|
|
virtual void mousePressEvent(QMouseEvent* event);
|
|
|
|
virtual void mouseReleaseEvent(QMouseEvent* event);
|
|
|
|
virtual void mouseMoveEvent(QMouseEvent* event);
|
|
|
|
virtual void wheelEvent(QWheelEvent* event);
|
|
|
|
|
|
|
|
private Q_SLOTS:
|
|
|
|
/**
|
|
|
|
* Requests to load the sub-directories after a short delay.
|
|
|
|
* startSubDirsJob() is invoked if the delay is exceeded.
|
|
|
|
*/
|
|
|
|
void requestSubDirs();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Starts to load the sub directories asynchronously. The directories
|
|
|
|
* are stored in m_subDirs by addEntriesToSubDirs().
|
|
|
|
*/
|
|
|
|
void startSubDirsJob();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds the entries from the sub-directories job to m_subDirs. The entries
|
|
|
|
* will be shown if the job has been finished in openSubDirsMenu() or
|
|
|
|
* replaceButton().
|
|
|
|
*/
|
|
|
|
void addEntriesToSubDirs(KIO::Job* job, const KIO::UDSEntryList& entries);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Is called after the sub-directories job has been finished and opens a menu
|
|
|
|
* showing all sub directories.
|
|
|
|
*/
|
|
|
|
void openSubDirsMenu(KJob* job);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Is called after the sub-directories job has been finished and replaces
|
|
|
|
* the button content by the current sub directory (triggered by
|
|
|
|
* the scroll wheel).
|
|
|
|
*/
|
|
|
|
void replaceButton(KJob* job);
|
|
|
|
|
|
|
|
void urlsDropped(QAction* action, QDropEvent* event);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Is called, if an action of a sub-menu has been triggered by
|
|
|
|
* a click with the middle mouse-button.
|
|
|
|
*/
|
|
|
|
void slotMenuActionClicked(QAction* action);
|
|
|
|
|
|
|
|
void statFinished(KJob*);
|
|
|
|
|
|
|
|
private:
|
|
|
|
/**
|
|
|
|
* Cancels any request done by requestSubDirs().
|
|
|
|
*/
|
|
|
|
void cancelSubDirsRequest();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return Text without mnemonic characters.
|
|
|
|
*/
|
|
|
|
QString plainText() const;
|
|
|
|
|
|
|
|
int arrowWidth() const;
|
|
|
|
bool isAboveArrow(int x) const;
|
|
|
|
bool isTextClipped() const;
|
|
|
|
void updateMinimumWidth();
|
|
|
|
void initMenu(KUrlNavigatorMenu* menu, int startIndex);
|
|
|
|
|
|
|
|
private:
|
|
|
|
bool m_hoverArrow;
|
|
|
|
bool m_pendingTextChange;
|
|
|
|
bool m_replaceButton;
|
|
|
|
bool m_showMnemonic;
|
|
|
|
int m_wheelSteps;
|
|
|
|
KUrl m_url;
|
|
|
|
|
|
|
|
QString m_subDir;
|
|
|
|
QTimer* m_openSubDirsTimer;
|
|
|
|
KIO::Job* m_subDirsJob;
|
|
|
|
|
|
|
|
/// pair of name and display name
|
|
|
|
QList<QPair<QString,QString> > m_subDirs;
|
|
|
|
|
|
|
|
static QPointer<KUrlNavigatorMenu> m_subDirsMenu;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace KDEPrivate
|
|
|
|
|
|
|
|
#endif
|