┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/urlnavigator.h
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2006-11-21 06:02:05 +0000
committerPeter Penz <[email protected]>2006-11-21 06:02:05 +0000
commit5252c12db4929886dbe502013e0a1fee6500f568 (patch)
tree589d970fd03a9ce4b524f1cc020d980a3a11bdd8 /src/urlnavigator.h
commited initial version of Dolphin
svn path=/trunk/playground/utils/dolphin/; revision=606622
Diffstat (limited to 'src/urlnavigator.h')
-rw-r--r--src/urlnavigator.h233
1 files changed, 233 insertions, 0 deletions
diff --git a/src/urlnavigator.h b/src/urlnavigator.h
new file mode 100644
index 000000000..35ae5454a
--- /dev/null
+++ b/src/urlnavigator.h
@@ -0,0 +1,233 @@
+/***************************************************************************
+* 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., *
+* 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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>
+
+class QComboBox;
+class QLabel;
+class QLineEdit;
+class Q3PopupMenu;
+class QCheckBox;
+
+class KUrl;
+class KFileItem;
+class KUrlComboBox;
+
+class BookmarkSelector;
+class DolphinView;
+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
+ * 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
+*/
+
+typedef Q3ValueList<KUrl> UrlStack;
+
+class URLNavigator : public Q3HBox
+{
+ 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 Q3ValueList<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();
+
+ /**
+ * @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(bool editOrBrowse); //TODO: switch to an enum
+
+ 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 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
+ * of the navigation bar button.
+ */
+ void slotClicked();
+
+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
+ * 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);
+
+ /**
+ * Updates the history element with the current file item
+ * and the contents position.
+ */
+ void updateHistoryElem();
+ void updateContent();
+};
+
+#endif