X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/5252c12db4929886dbe502013e0a1fee6500f568..abf17941f7:/src/urlnavigator.h diff --git a/src/urlnavigator.h b/src/urlnavigator.h index 35ae5454a..9482619d6 100644 --- a/src/urlnavigator.h +++ b/src/urlnavigator.h @@ -1,47 +1,43 @@ /*************************************************************************** -* Copyright (C) 2006 by Peter Penz * -* peter.penz@gmx.at * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) any later version. * -* * -* This program 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 General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with this program; if not, write to the * -* Free Software Foundation, Inc., * -* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ + * Copyright (C) 2006 by Peter Penz () * + * Copyright (C) 2006 by Aaron J. Seigo () * + * Copyright (C) 2006 by Patrice Tremblay * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ #ifndef URLNAVIGATOR_H #define URLNAVIGATOR_H -#include -//Added by qt3to4: -#include -#include -#include -#include #include -#include +#include +#include -class QComboBox; +class QHBoxLayout; class QLabel; class QLineEdit; -class Q3PopupMenu; -class QCheckBox; +class QMouseEvent; +class QPushButton; class KUrl; class KFileItem; class KUrlComboBox; class BookmarkSelector; -class DolphinView; +class UrlNavigatorButton; class ProtocolCombo; /** @@ -60,13 +56,11 @@ class ProtocolCombo; * * The URL navigator also remembers the URL history and allows to go * back and forward within this history. - * - * @author Peter Penz */ -typedef Q3ValueList UrlStack; +typedef QLinkedList UrlStack; -class URLNavigator : public Q3HBox +class UrlNavigator : public QWidget { Q_OBJECT @@ -102,15 +96,8 @@ public: int m_contentsY; }; - URLNavigator(const KUrl& url, DolphinView* dolphinView);; - virtual ~URLNavigator(); - - /** - * Sets the current active URL. - * The signals URLNavigator::urlChanged and URLNavigator::historyChanged - * are submitted. - */ - void setURL(const KUrl& url); + UrlNavigator(const KUrl& url, QWidget* parent); + virtual ~UrlNavigator(); /** Returns the current active URL. */ const KUrl& url() const; @@ -124,32 +111,32 @@ public: * @param index Output parameter which indicates the current * index of the location. */ - const Q3ValueList& history(int& index) const; + const QLinkedList& history(int& index) const; /** * Goes back one step in the URL history. The signals - * URLNavigator::urlChanged and URLNavigator::historyChanged + * UrlNavigator::urlChanged and UrlNavigator::historyChanged * are submitted. */ void goBack(); /** * Goes forward one step in the URL history. The signals - * URLNavigator::urlChanged and URLNavigator::historyChanged + * UrlNavigator::urlChanged and UrlNavigator::historyChanged * are submitted. */ void goForward(); /** * Goes up one step of the URL path. The signals - * URLNavigator::urlChanged and URLNavigator::historyChanged + * UrlNavigator::urlChanged and UrlNavigator::historyChanged * are submitted. */ void goUp(); /** - * Goes to the home URL. The signals URLNavigator::urlChanged - * and URLNavigator::historyChanged are submitted. + * Goes to the home URL. The signals UrlNavigator::urlChanged + * and UrlNavigator::historyChanged are submitted. */ void goHome(); @@ -158,69 +145,117 @@ public: * If false is returned, each part of the URL is presented by a button * for fast navigation. */ - bool isURLEditable() const; + bool isUrlEditable() const; /** * Switches to the edit mode and assures that the keyboard focus * is assigned. */ - void editURL(bool editOrBrowse); //TODO: switch to an enum + void editUrl(bool editOrBrowse); //TODO: switch to an enum - DolphinView* dolphinView() const; + /** + * Set the URL navigator to the active mode, if \a active + * is true. The active mode is default. Using the URL navigator + * in the inactive mode is useful when having split views, + * where the inactive view is indicated by a an inactive URL + * navigator visually. + */ + void setActive(bool active); + + /** + * Returns true, if the URL navigator is in the active mode. + * @see UrlNavigator::setActive() + */ + bool isActive() const { return m_active; } + + /** + * Handles the dropping of the URLs \a urls to the given + * destination \a destination and emits the signal urlsDropped. + */ + void dropUrls(const KUrl::List& urls, + const KUrl& destination); + +public slots: + /** + * Sets the current active URL. + * The signals UrlNavigator::urlChanged and UrlNavigator::historyChanged + * are submitted. + */ + void setUrl(const KUrl& url); + + /** + * Activates the URL navigator (UrlNavigator::isActive() will return true) + * and emits the signal 'activationChanged()'. + */ + void requestActivation(); + + /** + * Stores the coordinates of the contents into + * the current history element. + */ + void storeContentsPosition(int x, int y); signals: + /** + * Is emitted, if the URL navigator has been activated by + * a user interaction. + */ + void activated(); + + /** + * Is emitted, if the URL has been changed e. g. by + * the user. + * @see setUrl() + */ void urlChanged(const KUrl& url); + + /** + * Is emitted, if the history has been changed. Usually + * the history is changed if a new URL has been selected. + */ void historyChanged(); + /** + * Is emitted if the URLs \a urls have been dropped + * to the destination \a destination. + */ + void urlsDropped(const KUrl::List& urls, + const KUrl& destination); + protected: - /** If the Escape key is pressed, the navigation bar should switch - to the browse mode. */ + /** + * If the Escape key is pressed, the navigation bar should switch + * to the browse mode. + */ virtual void keyReleaseEvent(QKeyEvent* event); + /** + * Paste the clipboard content as URL, if the middle mouse + * button has been clicked. + */ + virtual void mouseReleaseEvent(QMouseEvent* event); + private slots: void slotReturnPressed(const QString& text); - void slotURLActivated(const KUrl& url); + void slotUrlActivated(const KUrl& url); void slotRemoteHostActivated(); void slotProtocolChanged(const QString& protocol); - - void slotRequestActivation(); - void slotBookmarkActivated(int index); - void slotRedirection(const KUrl&, const KUrl&); /** - * Stores the coordinates of the moved content into - * the current history element. Is usually triggered - * by the signal 'contentsMoved' emitted by DolphinView. - */ - void slotContentsMoved(int x, int y); - - /** - * Switches the navigation bar between the editable and noneditable - * state (see setURLEditable()) and is connected to the clicked signal + * Switches the navigation bar between the breadcrumb view and the + * traditional view (see setUrlEditable()) and is connected to the clicked signal * of the navigation bar button. */ - void slotClicked(); + void switchView(); private: - int m_historyIndex; - DolphinView* m_dolphinView; - Q3ValueList m_history; - QCheckBox* m_toggleButton; - BookmarkSelector* m_bookmarkSelector; - KUrlComboBox* m_pathBox; - ProtocolCombo* m_protocols; - QLabel* m_protocolSeparator; - QLineEdit* m_host; - Q3ValueList m_navButtons; - //UrlStack m_urls; - /** - * Allows to edit the URL of the navigation bar if \a editable + * Allows to edit the Url of the navigation bar if \a editable * is true. If \a editable is false, each part of - * the URL is presented by a button for a fast navigation. + * the Url is presented by a button for a fast navigation. */ - void setURLEditable(bool editable); + void setUrlEditable(bool editable); /** * Updates the history element with the current file item @@ -228,6 +263,46 @@ private: */ void updateHistoryElem(); void updateContent(); + + /** + * Updates all buttons to have one button for each part of the + * path \a path. Existing buttons, which are available by m_navButtons, + * are reused if possible. If the path is longer, new buttons will be + * created, if the path is shorter, the remaining buttons will be deleted. + * @param startIndex Start index of path part (/), where the buttons + * should be created for each following part. + */ + void updateButtons(const QString& path, int startIndex); + + /** + * Deletes all URL navigator buttons. m_navButtons is + * empty after this operation. + */ + void deleteButtons(); + + /** + * Appends the widget at the end of the URL navigator. It is assured + * that the filler widget remains as last widget to fill the remaining + * width. + */ + void appendWidget(QWidget* widget); + +private: + bool m_active; + int m_historyIndex; + + QHBoxLayout* m_layout; + + QLinkedList m_history; + QPushButton* m_toggleButton; + BookmarkSelector* m_bookmarkSelector; + KUrlComboBox* m_pathBox; + ProtocolCombo* m_protocols; + QLabel* m_protocolSeparator; + QLineEdit* m_host; + QLinkedList m_navButtons; + QWidget* m_filler; + //UrlStack m_urls; }; #endif