]> 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 1815a902c0a2d37c83e2cd9d037cb5b096b22ef0..9482619d62a91fcbc83d007ddd58198681e5762b 100644 (file)
 #ifndef URLNAVIGATOR_H
 #define URLNAVIGATOR_H
 
-#include <khbox.h>
 #include <kurl.h>
+#include <QWidget>
 #include <QLinkedList>
 
+class QHBoxLayout;
 class QLabel;
 class QLineEdit;
-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.
  *
  * The URL navigator offers two modes:
- * - Editable:     Represents the 'classic' mode, where the current Url
+ * - 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
@@ -57,15 +60,15 @@ class ProtocolCombo;
 
 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.
      */
@@ -96,14 +99,14 @@ 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.
@@ -111,35 +114,35 @@ public:
     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;
@@ -220,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);
@@ -232,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;
-    QLinkedList<HistoryElem> m_history;
-    QCheckBox* m_toggleButton;
-    BookmarkSelector* m_bookmarkSelector;
-    KUrlComboBox* m_pathBox;
-    ProtocolCombo* m_protocols;
-    QLabel* m_protocolSeparator;
-    QLineEdit* m_host;
-    QLinkedList<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
@@ -264,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