summaryrefslogtreecommitdiffstats
path: root/src/urlnavigator.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/urlnavigator.h')
-rw-r--r--src/urlnavigator.h210
1 files changed, 210 insertions, 0 deletions
diff --git a/src/urlnavigator.h b/src/urlnavigator.h
new file mode 100644
index 0000000..706215a
--- /dev/null
+++ b/src/urlnavigator.h
@@ -0,0 +1,210 @@
+/***************************************************************************
+* Copyright (C) 2006 by Peter Penz *
+* *
+* 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 <qhbox.h>
+#include <kurl.h>
+#include <qstring.h>
+
+class DolphinView;
+class QPopupMenu;
+class QPushButton;
+class QComboBox;
+class BookmarkSelector;
+class KURLComboBox;
+class KFileItem;
+
+/**
+ * @brief Navigation bar which contains the current shown 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
+ * 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
+ * back and forward within this history.
+ *
+ * @author Peter Penz
+*/
+class URLNavigator : public QHBox
+{
+ Q_OBJECT
+
+public:
+ /**
+ * @brief Represents the history element of an URL.
+ *
+ * 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.
+ */
+ class HistoryElem {
+ public:
+ HistoryElem();
+ HistoryElem(const KURL& url);
+ ~HistoryElem(); // non virtual
+
+ const KURL& url() const { return m_url; }
+
+ void setCurrentFileName(const QString& name) { m_currentFileName = name; }
+ const QString& currentFileName() const { return m_currentFileName; }
+
+ void setContentsX(int x) { m_contentsX = x; }
+ int contentsX() const { return m_contentsX; }
+
+ void setContentsY(int y) { m_contentsY = y; }
+ int contentsY() const { return m_contentsY; }
+
+ private:
+ KURL m_url;
+ QString m_currentFileName;
+ int m_contentsX;
+ 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);
+
+ /** Returns the current active URL. */
+ const KURL& url() const;
+
+ /** 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
+ * history element.
+ * @param index Output parameter which indicates the current
+ * index of the location.
+ */
+ const QValueList<HistoryElem>& history(int& index) const;
+
+ /**
+ * 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
+ * URLNavigator::urlChanged and URLNavigator::historyChanged
+ * are submitted.
+ */
+ void goForward();
+
+ /**
+ * 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
+ * and URLNavigator::historyChanged are submitted.
+ */
+ void goHome();
+
+ /**
+ * 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.
+ */
+ void setURLEditable(bool editable);
+
+ /**
+ * @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;
+
+ /**
+ * Switches to the edit mode and assures that the keyboard focus
+ * is assigned.
+ */
+ void editURL();
+
+ DolphinView* dolphinView() const;
+
+signals:
+ void urlChanged(const KURL& url);
+ void historyChanged();
+
+protected:
+ /** If the Escape key is pressed, the navigation bar should switch
+ to the browse mode. */
+ virtual void keyReleaseEvent(QKeyEvent* event);
+
+private slots:
+ void slotReturnPressed(const QString& text);
+ void slotURLActivated(const KURL& url);
+
+ void slotRequestActivation();
+ void slotBookmarkActivated(int index);
+
+ /**
+ * 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
+ * of the navigation bar button.
+ */
+ void slotClicked();
+
+private:
+ int m_historyIndex;
+ DolphinView* m_dolphinView;
+ QValueList<HistoryElem> m_history;
+ QPushButton* m_toggleButton;
+ BookmarkSelector* m_bookmarkSelector;
+ KURLComboBox* m_pathBox;
+
+ /**
+ * Updates the history element with the current file item
+ * and the contents position.
+ */
+ void updateHistoryElem();
+ void updateContent();
+};
+
+#endif