X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxttabwidget.cpp;fp=src%2Fcontrib%2Flibqxt-2007-10-24%2Fsrc%2Fgui%2Fqxttabwidget.cpp;h=0000000000000000000000000000000000000000;hp=3a5b4e3d2b692381bdf5b0b2fe7493a32d98d3d1;hb=140d8a132103d2fa9baf55036e09b165624de167;hpb=97d674034551438238c568e8b42efb08e1ba7354 diff --git a/src/contrib/libqxt-2007-10-24/src/gui/qxttabwidget.cpp b/src/contrib/libqxt-2007-10-24/src/gui/qxttabwidget.cpp deleted file mode 100644 index 3a5b4e3d..00000000 --- a/src/contrib/libqxt-2007-10-24/src/gui/qxttabwidget.cpp +++ /dev/null @@ -1,397 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) Qxt Foundation. Some rights reserved. -** -** This file is part of the QxtGui module of the Qt eXTension library -** -** This library is free software; you can redistribute it and/or modify it -** under the terms of th Common Public License, version 1.0, as published by -** IBM. -** -** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY -** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY -** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR -** FITNESS FOR A PARTICULAR PURPOSE. -** -** You should have received a copy of the CPL along with this file. -** See the LICENSE file and the cpl1.0.txt file included with the source -** distribution for more information. If you did not receive a copy of the -** license, contact the Qxt Foundation. -** -** -** -****************************************************************************/ -#include "qxttabwidget.h" -#include -#include -#include -#include -#include - -typedef QList Actions; - -class QxtTabWidgetPrivate : public QxtPrivate -{ -public: - QXT_DECLARE_PUBLIC(QxtTabWidget); - - QxtTabWidgetPrivate(); - int tabIndexAt(const QPoint& pos) const; - - QList actions; - Qt::ContextMenuPolicy policy; -}; - -QxtTabWidgetPrivate::QxtTabWidgetPrivate() : policy(Qt::DefaultContextMenu) -{} - -int QxtTabWidgetPrivate::tabIndexAt(const QPoint& pos) const -{ - const int count = qxt_p().count(); - const QTabBar* tabBar = qxt_p().tabBar(); - for (int i = 0; i < count; ++i) - if (tabBar->tabRect(i).contains(pos)) - return i; - return -1; -} - -/*! - \class QxtTabWidget QxtTabWidget - \ingroup QxtGui - \brief An extended QTabWidget. - - QxtTabWidget provides some convenience for handling tab specific context menus. - - Example usage: - \code - QxtTabWidget* tabWidget = new QxtTabWidget(); - tabWidget->addTab(tab0, "1"); - tabWidget->addTab(tab1, "2"); - - QList actions0; - actions0 << new QAction("Quisque", tab0) << new QAction("Aenean", tab0); - QList actions1; - actions1 << new QAction("Phasellus", tab1) << new QAction("Maecenas", tab1); - - tabWidget->setTabContextMenuPolicy(Qt::ActionsContextMenu); - tabWidget->addTabActions(0, actions0); - tabWidget->addTabActions(1, actions1); - \endcode - - \image html qxttabwidget.png "QxtTabWidget in WindowsXP style." - - \note http://www.trolltech.com/developer/task-tracker/index_html?method=entry&id=137891 - */ - -/*! - \fn QxtTabWidget::tabContextMenuRequested(int index, const QPoint& globalPos) - - This signal is emitted whenever the context menu is requested over - tab at \a index at \a globalPos. - */ - -/*! - Constructs a new QxtTabWidget with \a parent. - */ -QxtTabWidget::QxtTabWidget(QWidget* parent) : QTabWidget(parent) -{ - QXT_INIT_PRIVATE(QxtTabWidget); -} - -/*! - Destructs the tab widget. - */ -QxtTabWidget::~QxtTabWidget() -{} - -/*! - \property QxtTabWidget::tabContextMenuPolicy - \brief This property holds how the tab specific context menus are handled. - - The default value of this property is \b Qt::DefaultContextMenu, - which means that the tabContextMenuEvent() handler is called. - Other values are \b Qt::NoContextMenu, \b Qt::PreventContextMenu - (since Qt 4.2), \b Qt::ActionsContextMenu, and \b Qt::CustomContextMenu. - With \b Qt::CustomContextMenu, the signal tabContextMenuRequested() is - emitted. - - \sa tabContextMenuEvent(), tabContextMenuRequested(), tabActions() - */ -Qt::ContextMenuPolicy QxtTabWidget::tabContextMenuPolicy() const -{ - return qxt_d().policy; -} - -void QxtTabWidget::setTabContextMenuPolicy(Qt::ContextMenuPolicy policy) -{ - qxt_d().policy = policy; -} - -/*! - Appends the \a action to the list of actions of the - tab at \a index. - - \sa removeTabAction(), insertTabAction(), tabActions() - */ -void QxtTabWidget::addTabAction(int index, QAction* action) -{ - insertTabAction(index, 0, action); -} - -/*! - This convenience function creates a new action with \a text. The function - adds the newly created action to the list of actions of the tab at - \a index, and returns it. - - \sa addTabAction() - */ -QAction* QxtTabWidget::addTabAction(int index, const QString& text) -{ - return addTabAction(index, QIcon(), text, 0, 0); -} - -/*! - This convenience function creates a new action with \a icon and \a text. - The function adds the newly created action to the list of actions of the - tab at \a index, and returns it. - - \sa addTabAction() - */ -QAction* QxtTabWidget::addTabAction(int index, const QIcon& icon, const QString& text) -{ - return addTabAction(index, icon, text, 0, 0); -} - -/*! - This convenience function creates a new action with \a text and - an optional \a shortcut. The action's triggered() signal is - connected to the \a receiver's \a member slot. The function adds - the newly created action to the list of actions of the tab at - \a index, and returns it. - - \note In order to make it possible for the shortcut to work even - when the context menu is not open, the action must be added to - a visible widget. The corresponding tab is a good alternative. - - \code - QWidget* tab = createNewTab(); - tabWidget->addTab(tab, title); - QAction* action = tabWidget->addTabAction(index, tr("Close"), this, SLOT(closeCurrentTab()), tr("Ctrl+W")); - tab->addAction(act); - \endcode - - \sa addTabAction(), QWidget::addAction() - */ -QAction* QxtTabWidget::addTabAction(int index, const QString& text, const QObject* receiver, const char* member, const QKeySequence& shortcut) -{ - return addTabAction(index, QIcon(), text, receiver, member, shortcut); -} - -/*! - This convenience function creates a new action with \a icon, \a text - and an optional \a shortcut. The action's triggered() signal is connected - to the \a receiver's \a member slot. The function adds the newly created - action to the list of actions of the tab at \a index, and returns it. - - \sa addTabAction() - */ -QAction* QxtTabWidget::addTabAction(int index, const QIcon& icon, const QString& text, const QObject* receiver, const char* member, const QKeySequence& shortcut) -{ - QAction* action = new QAction(icon, text, this); - addTabAction(index, action); - if (receiver && member) - connect(action, SIGNAL(triggered()), receiver, member); - action->setShortcut(shortcut); - return action; -} - -/*! - Appends the \a actions to the list of actions of the - tab at \a index. - - \sa removeTabAction(), addTabAction() - */ -void QxtTabWidget::addTabActions(int index, QList actions) -{ - foreach (QAction* action, actions) - { - insertTabAction(index, 0, action); - } -} - -/*! - Clears the list of actions of the tab at \a index. - - \note Only actions owned by the tab widget are deleted. - - \sa removeTabAction(), addTabAction() - */ -void QxtTabWidget::clearTabActions(int index) -{ - Q_ASSERT(index >= 0 && index < qxt_d().actions.count()); - - while (qxt_d().actions[index].count()) - { - QAction* action = qxt_d().actions[index].last(); - removeTabAction(index, action); - if (action->parent() == this) - delete action; - } -} - -/*! - Inserts the \a action to the list of actions of the - tab at \a index, before the action \a before. It appends - the action if \a before is \c 0. - - \sa removeTabAction(), addTabAction(), tabContextMenuPolicy, tabActions() - */ -void QxtTabWidget::insertTabAction(int index, QAction* before, QAction* action) -{ - Q_ASSERT(index >= 0 && index < qxt_d().actions.count()); - - if (!action) - { - qWarning("QxtTabWidget::insertTabAction: Attempt to insert a null action"); - return; - } - - const Actions& actions = qxt_d().actions.at(index); - if (actions.contains(action)) - removeTabAction(index, action); - - int pos = actions.indexOf(before); - if (pos < 0) - { - before = 0; - pos = actions.count(); - } - qxt_d().actions[index].insert(pos, action); - - QActionEvent e(QEvent::ActionAdded, action, before); - QApplication::sendEvent(this, &e); -} - -/*! - Inserts the \a actions to the list of actions of the - tab at \a index, before the action \a before. It appends - the action if \a before is \c 0. - - \sa removeAction(), QMenu, insertAction(), contextMenuPolicy - */ -void QxtTabWidget::insertTabActions(int index, QAction* before, QList actions) -{ - foreach (QAction* action, actions) - { - insertTabAction(index, before, action); - } -} - -/*! - Removes the action \a action from the list of actions of the - tab at \a index. - - \note The removed action is not deleted. - - \sa insertTabAction(), tabActions(), insertTabAction() - */ -void QxtTabWidget::removeTabAction(int index, QAction* action) -{ - Q_ASSERT(index >= 0 && index < qxt_d().actions.count()); - - if (!action) - { - qWarning("QxtTabWidget::removeTabAction: Attempt to remove a null action"); - return; - } - - if (qxt_d().actions[index].removeAll(action)) - { - QActionEvent e(QEvent::ActionRemoved, action); - QApplication::sendEvent(this, &e); - } -} - -/*! - Returns the (possibly empty) list of actions for the - tab at \a index. - - \sa tabContextMenuPolicy, insertTabAction(), removeTabAction() - */ -QList QxtTabWidget::tabActions(int index) const -{ - Q_ASSERT(index >= 0 && index < qxt_d().actions.count()); - return qxt_d().actions.at(index); -} - -void QxtTabWidget::tabInserted(int index) -{ - Q_ASSERT(index >= 0 && index <= qxt_d().actions.count()); - qxt_d().actions.insert(index, Actions()); -} - -void QxtTabWidget::tabRemoved(int index) -{ - Q_ASSERT(index >= 0 && index < qxt_d().actions.count()); - qxt_d().actions.removeAt(index); -} - -void QxtTabWidget::contextMenuEvent(QContextMenuEvent* event) -{ - const QPoint& pos = event->pos(); - if (!tabBar()->geometry().contains(pos)) - return QTabWidget::contextMenuEvent(event); - - const int index = qxt_d().tabIndexAt(event->pos()); - switch (qxt_d().policy) - { - case Qt::NoContextMenu: - event->ignore(); - break; - -#if QT_VERSION >= 0x040200 - case Qt::PreventContextMenu: - event->accept(); - break; -#endif // QT_VERSION - - case Qt::ActionsContextMenu: - if (index != -1 && qxt_d().actions.at(index).count()) - { - QMenu::exec(qxt_d().actions.at(index), event->globalPos()); - } - break; - - case Qt::CustomContextMenu: - if (index != -1) - { - emit tabContextMenuRequested(index, event->globalPos()); - } - break; - - case Qt::DefaultContextMenu: - default: - if (index != -1) - { - tabContextMenuEvent(index, event); - } - break; - } -} - -/*! - This event handler, for event \a event, can be reimplemented in a - subclass to receive context menu events for the tab at \a index. - - The handler is called when \b tabContextMenuPolicy is - \b Qt::DefaultContextMenu. - - The default implementation ignores the context menu event. - - \sa tabContextMenuPolicy, tabContextMenuRequested() - */ -void QxtTabWidget::tabContextMenuEvent(int index, QContextMenuEvent* event) -{ - Q_UNUSED(index); - event->ignore(); -}