summaryrefslogtreecommitdiffstats
path: root/lib/kofficeui/KoTabBar.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kofficeui/KoTabBar.h')
-rw-r--r--lib/kofficeui/KoTabBar.h275
1 files changed, 275 insertions, 0 deletions
diff --git a/lib/kofficeui/KoTabBar.h b/lib/kofficeui/KoTabBar.h
new file mode 100644
index 00000000..e582c3d2
--- /dev/null
+++ b/lib/kofficeui/KoTabBar.h
@@ -0,0 +1,275 @@
+/* This file is part of the KDE project
+ Copyright (C) 2003 Ariya Hidayat <ariya@kde.org>
+ Copyright (C) 2003 Norbert Andres <nandres@web.de>
+ Copyright (C) 2002 Laurent Montel <montel@kde.org>
+ Copyright (C) 1999 David Faure <faure@kde.org>
+ Copyright (C) 1999 Boris Wedl <boris.wedl@kfunigraz.ac.at>
+ Copyright (C) 1998-2000 Torben Weis <weis@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef kotabbar_h
+#define kotabbar_h
+
+#include <qwidget.h>
+#include <qstringlist.h>
+#include <koffice_export.h>
+class KoTabBarPrivate;
+
+/**
+ * The KoTabBar class provides a tab bar, for use to switch active
+ * page/sheet in a document.
+ *
+ * The tab bar is typically used in the main view.
+ * It is the small widget on the bottom left corner.
+ * Pages/sheets are displayed as tabs, clicking on
+ * one of the tab will activate the corresponding sheet (this is actually
+ * done in main view). Current active page/sheet is marked by bold text.
+ *
+ * The tab bar supports page/sheet reorder by dragging a certain tab
+ * and move it to another location. The main view should handle the necessary
+ * action to perform the actual reorder.
+ *
+ * There are four scroll buttons available in the tab bar. They are used
+ * to shift the tabs in left and right direction, for example when there
+ * are more tabs than the space available to display all tabs.
+ *
+ * Since a page/sheet can be hidden, the tab bar only shows the visible page/sheet.
+ * When a hidden page or sheet is shown again, it will be on the same position as
+ * before it was hidden.
+ *
+ * When the document is protected, it is necessary to set the tab bar as
+ * read-only using setReadOnly (see also readOnly). If it is set to true,
+ * tabs can not be moved by dragging and context menu will not be displayed.
+ *
+ * @short A bar with tabs and scroll buttons.
+ */
+class KOFFICEUI_EXPORT KoTabBar : public QWidget
+{
+ Q_OBJECT
+
+ Q_PROPERTY( QString activeTab READ activeTab WRITE setActiveTab )
+ Q_PROPERTY( bool readOnly READ readOnly WRITE setReadOnly )
+ Q_PROPERTY( QStringList tabs READ tabs WRITE setTabs )
+ Q_PROPERTY( unsigned count READ count )
+
+public:
+
+ /**
+ * Creates a new tabbar.
+ */
+ KoTabBar( QWidget* parent = 0, const char *name = 0 );
+
+ /**
+ * Destroy the tabbar.
+ */
+ virtual ~KoTabBar();
+
+ /**
+ * Returns true if the tab bar is read only.
+ */
+ bool readOnly() const;
+
+ /**
+ * Returns true if tabs and scroll buttons will be laid out in a mirrored
+ * (right to left) fashion.
+ */
+ bool reverseLayout() const;
+
+ /**
+ * Returns all the tab as list of strings.
+ */
+ QStringList tabs() const;
+
+ /**
+ * Returns number of tabs.
+ * This is the same as KoTabBar::tabs().count()
+ */
+ unsigned count() const;
+
+ /**
+ * Returns the active tab.
+ */
+ QString activeTab() const;
+
+ /**
+ * Returns true if it is possible to scroll one tab back.
+ *
+ * \sa scrollBack
+ */
+ bool canScrollBack() const;
+
+ /**
+ * Returns true if it is possible to scroll one tab forward.
+ *
+ * \sa scrollForward
+ */
+ bool canScrollForward() const;
+
+ /**
+ * Ensures that specified tab is visible.
+ */
+ void ensureVisible( const QString& tab );
+
+public slots:
+
+ /**
+ * Replaces all tabs with the list of strings.
+ */
+ void setTabs( const QStringList& list );
+
+ /**
+ * Sets the tab bar to be read only.
+ *
+ * If the tab bar is read only, tab reordering is not allowed.
+ * This means that signal tabMoved, contextMenu and doubleClicked
+ * would not be emitted.
+ */
+ void setReadOnly( bool ro );
+
+ /**
+ * If reverse is true, dialogs and scroll buttonswidgets will be laid out in a mirrored
+ * as if the sheet is in right to left languages (such as Arabic and Hebrew)
+ */
+ void setReverseLayout( bool reverse );
+
+ /**
+ * Adds a tab to the tab bar.
+ */
+ void addTab( const QString& text );
+
+ /**
+ * Removes a tab from the bar. If the tab was the active one then
+ * no tab will be active.
+ * It is recommended to call setActiveTab after a call to this function.
+ */
+ void removeTab( const QString& text );
+
+ /**
+ * Renames a tab.
+ */
+ void renameTab( const QString& old_name, const QString& new_name );
+
+ /**
+ * Moves a tab to another position and reorder other tabs.
+ *
+ * Example 1: if there are four tabs A - B - C - D, then
+ * moveTab(2,1) will yield A - C - B - D. This is because
+ * 2nd tab (i.e C) is moved to a position before 1th tab (i.e B).
+ *
+ * Example 2: for these tabs: X - Y - Z, moveTab(0,3) will
+ * move tab X after tab Z so that the result is Y - Z - X.
+ */
+ void moveTab( unsigned tab, unsigned target );
+
+ /**
+ * Scrolls one tab back. Does nothing if the leftmost tab (rightmost tab
+ * when reverseLayout is true) is already the first tab.
+ *
+ * \sa canScrollBack
+ */
+ void scrollBack();
+
+ /**
+ * Scrolls one tab forward. Does nothing if the rightmost tab (leftmost tab
+ * when reverseLayout is true) is already the last tab.
+ *
+ * \sa canScrollForward
+ */
+ void scrollForward();
+
+ /**
+ * Scrolls to the first tab. Does nothing if the leftmost tab (rightmost tab
+ * when reverseLayout is true) is already the first tab.
+ *
+ * \sa canScrollBack
+ */
+ void scrollFirst();
+
+ /**
+ * Scrolls to the last tab. Does nothing if the rightmost tab (leftmost tab
+ * when reverseLayout is true) is already the last tab.
+ *
+ * \sa canScrollForward
+ */
+ void scrollLast();
+
+ /**
+ * Sets active tab.
+ */
+ void setActiveTab( const QString& text );
+
+ /**
+ * Removes all tabs.
+ */
+ void clear();
+
+ QSize sizeHint() const;
+
+signals:
+
+ /**
+ * Emitted if the active tab changed.
+ */
+ void tabChanged( const QString& _text );
+
+ /**
+ * This signal is emitted whenever a tab is dragged, moved and
+ * released. This means that the user wants to move a tab into
+ * another position (right before target).
+ *
+ * When the signal is emitted, the tabs are not reordered.
+ * Therefore if you just ignore this signal, than no tab reorder
+ * is possible. Call moveTab (from the slot connected to this signal)
+ * to perform the actual tab reorder.
+ */
+ void tabMoved( unsigned tab, unsigned target );
+
+ /**
+ * This signal is emitted whenever the tab bar is right-clicked.
+ * Typically it is used to popup a context menu.
+ */
+ void contextMenu( const QPoint& pos );
+
+ /**
+ * This signal is emitted whenever the tab bar is double-clicked.
+ */
+ void doubleClicked();
+
+protected slots:
+ void autoScrollBack();
+ void autoScrollForward();
+
+protected:
+ virtual void paintEvent ( QPaintEvent* ev );
+ virtual void resizeEvent( QResizeEvent* ev );
+ virtual void mousePressEvent ( QMouseEvent* ev );
+ virtual void mouseReleaseEvent ( QMouseEvent* ev );
+ virtual void mouseDoubleClickEvent ( QMouseEvent* ev );
+ virtual void mouseMoveEvent ( QMouseEvent* ev );
+ virtual void wheelEvent ( QWheelEvent * e );
+
+private:
+ KoTabBarPrivate *d;
+
+ // don't allow copy or assignment
+ KoTabBar( const KoTabBar& );
+ KoTabBar& operator=( const KoTabBar& );
+};
+
+
+#endif // kotabbar_h