]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/urlnavigator.h
Dolphin is now a KUniqueApplication. A lot of thanks go to Oscar Blumberg, who submit...
[dolphin.git] / src / urlnavigator.h
index 35ae5454a2484e08aca32391d244ea6f68142f41..9482619d62a91fcbc83d007ddd58198681e5762b 100644 (file)
@@ -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 (<peter.penz@gmx.at>)                *
+ *   Copyright (C) 2006 by Aaron J. Seigo (<aseigo@kde.org>)               *
+ *   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 <q3hbox.h>
-//Added by qt3to4:
-#include <QLabel>
-#include <Q3ValueList>
-#include <QKeyEvent>
-#include <Q3PopupMenu>
 #include <kurl.h>
-#include <qstring.h>
+#include <QWidget>
+#include <QLinkedList>
 
-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<KUrl> UrlStack;
+typedef QLinkedList<KUrl> 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<HistoryElem>& history(int& index) const;
+    const QLinkedList<HistoryElem>& 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<HistoryElem> m_history;
-    QCheckBox* m_toggleButton;
-    BookmarkSelector* m_bookmarkSelector;
-    KUrlComboBox* m_pathBox;
-    ProtocolCombo* m_protocols;
-    QLabel* m_protocolSeparator;
-    QLineEdit* m_host;
-    Q3ValueList<QWidget*> 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<HistoryElem> m_history;
+    QPushButton* m_toggleButton;
+    BookmarkSelector* m_bookmarkSelector;
+    KUrlComboBox* m_pathBox;
+    ProtocolCombo* m_protocols;
+    QLabel* m_protocolSeparator;
+    QLineEdit* m_host;
+    QLinkedList<UrlNavigatorButton*> m_navButtons;
+    QWidget* m_filler;
+    //UrlStack m_urls;
 };
 
 #endif