]> 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 bafece2ea98e179ac4909e257ecd1add8eb33630..9482619d62a91fcbc83d007ddd58198681e5762b 100644 (file)
@@ -1,80 +1,74 @@
-/**************************************************************************
-*   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.,                                       *
-*   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
-***************************************************************************/
-
-#ifndef UrlNAVIGATOR_H
-#define UrlNAVIGATOR_H
-
-
-//Added by qt3to4:
-#include <QLabel>
-#include <Q3ValueList>
-#include <QKeyEvent>
-#include <Q3PopupMenu>
+/***************************************************************************
+ *   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 <kurl.h>
-#include <qstring.h>
-#include <kvbox.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 UrlNavigatorButton;
 class ProtocolCombo;
 
 /**
- * @brief Navigation bar which contains the current shown Url.
+ * @brief Navigation bar which contains the current shown URL.
  *
- * The Url navigator offers two modes:
- * - Editable:     Represents the 'classic' mode, where the current Url
+ * The URL navigator offers two modes:
+ * - Editable:     Represents the 'classic' mode, where the current URL
  *                 is editable inside a line editor.
- * - Non editable: The Url is represented by a number of buttons, where
- *                 clicking on a button results in activating the Url
+ * - Non editable: The URL is represented by a number of buttons, where
+ *                 clicking on a button results in activating the URL
  *                 the button represents. This mode also supports drag
  *                 and drop of items.
  *
  * The mode can be changed by a toggle button located on the left side of
  * the navigator.
  *
- * The Url navigator also remembers the Url history and allows to go
+ * 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 KHBox
+class UrlNavigator : public QWidget
 {
     Q_OBJECT
 
 public:
     /**
-     * @brief Represents the history element of an Url.
+     * @brief Represents the history element of an URL.
      *
-     * A history element contains the Url, the name of the current file
+     * A history element contains the URL, the name of the current file
      * (the 'current file' is the file where the cursor is located) and
      * the x- and y-position of the content.
      */
@@ -105,50 +99,50 @@ public:
     UrlNavigator(const KUrl& url, QWidget* parent);
     virtual ~UrlNavigator();
 
-    /** Returns the current active Url. */
+    /** Returns the current active URL. */
     const KUrl& url() const;
 
-    /** Returns the portion of the current active Url up to the button at index. */
+    /** Returns the portion of the current active URL up to the button at index. */
     KUrl url(int index) const;
 
     /**
-     * Returns the complete Url history. The index 0 indicates the oldest
+     * Returns the complete URL history. The index 0 indicates the oldest
      * history element.
      * @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
+     * Goes back one step in the URL history. The signals
      * UrlNavigator::urlChanged and UrlNavigator::historyChanged
      * are submitted.
      */
     void goBack();
 
     /**
-     * Goes forward one step in the Url history. The signals
+     * Goes forward one step in the URL history. The signals
      * UrlNavigator::urlChanged and UrlNavigator::historyChanged
      * are submitted.
      */
     void goForward();
 
     /**
-     * Goes up one step of the Url path. The signals
+     * Goes up one step of the URL path. The signals
      * UrlNavigator::urlChanged and UrlNavigator::historyChanged
      * are submitted.
      */
     void goUp();
 
     /**
-     * Goes to the home Url. The signals UrlNavigator::urlChanged
+     * Goes to the home URL. The signals UrlNavigator::urlChanged
      * and UrlNavigator::historyChanged are submitted.
      */
     void goHome();
 
     /**
-     * @return True, if the Url is editable by the user within a line editor.
-     *         If false is returned, each part of the Url is presented by a button
+     * @return True, if the URL is editable by the user within a line editor.
+     *         If false is returned, each part of the URL is presented by a button
      *         for fast navigation.
      */
     bool isUrlEditable() const;
@@ -229,10 +223,18 @@ signals:
                      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);
@@ -241,25 +243,13 @@ private slots:
     void slotRedirection(const KUrl&, const KUrl&);
 
     /**
-     * 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:
-    bool m_active;
-    int m_historyIndex;
-    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
      * is true. If \a editable is false, each part of
@@ -273,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