diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-09-16 12:26:28 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-09-16 12:26:28 +0200 |
commit | d6057ae6002d294bf76bf5ddef2c883fdbd38cee (patch) | |
tree | d06b51dc3c3a8c3cfa64c6c308a228e06bb1c3cf /src/plugins/coreplugin/navigationsubwidget.cpp | |
parent | b8cc8e210c67ba870044d6eddc5f9e00fbedbb75 (diff) | |
download | qt-creator-d6057ae6002d294bf76bf5ddef2c883fdbd38cee.tar.gz |
Header cleanup in coreplugin, part 1
Diffstat (limited to 'src/plugins/coreplugin/navigationsubwidget.cpp')
-rw-r--r-- | src/plugins/coreplugin/navigationsubwidget.cpp | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/src/plugins/coreplugin/navigationsubwidget.cpp b/src/plugins/coreplugin/navigationsubwidget.cpp new file mode 100644 index 0000000000..85376a3421 --- /dev/null +++ b/src/plugins/coreplugin/navigationsubwidget.cpp @@ -0,0 +1,222 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "navigationsubwidget.h" +#include "navigationwidget.h" + +#include "icore.h" +#include "icontext.h" +#include "coreconstants.h" +#include "inavigationwidgetfactory.h" +#include "modemanager.h" +#include "actionmanager/actionmanager.h" +#include "actionmanager/command.h" +#include "uniqueidmanager.h" + +#include <extensionsystem/pluginmanager.h> + +#include <utils/styledbar.h> + +#include <QtCore/QDebug> +#include <QtCore/QSettings> + +#include <QtGui/QAction> +#include <QtGui/QHBoxLayout> +#include <QtGui/QResizeEvent> +#include <QtGui/QToolButton> +#include <QtGui/QShortcut> +#include <QtGui/QStandardItemModel> + +Q_DECLARE_METATYPE(Core::INavigationWidgetFactory *) + +namespace Core { +namespace Internal { + +//// +// NavigationSubWidget +//// + +NavigationSubWidget::NavigationSubWidget(NavigationWidget *parentWidget, int position, int factoryIndex) + : m_parentWidget(parentWidget), + m_position(position) +{ + m_navigationComboBox = new NavComboBox(this); + m_navigationComboBox->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); + m_navigationComboBox->setFocusPolicy(Qt::TabFocus); + m_navigationComboBox->setMinimumContentsLength(0); + m_navigationComboBox->setModel(parentWidget->factoryModel()); + m_navigationWidget = 0; + m_navigationWidgetFactory = 0; + + m_toolBar = new Utils::StyledBar(this); + QHBoxLayout *toolBarLayout = new QHBoxLayout; + toolBarLayout->setMargin(0); + toolBarLayout->setSpacing(0); + m_toolBar->setLayout(toolBarLayout); + toolBarLayout->addWidget(m_navigationComboBox); + + QToolButton *splitAction = new QToolButton(); + splitAction->setIcon(QIcon(QLatin1String(Constants::ICON_SPLIT_HORIZONTAL))); + splitAction->setToolTip(tr("Split")); + QToolButton *close = new QToolButton(); + close->setIcon(QIcon(QLatin1String(Constants::ICON_CLOSE))); + close->setToolTip(tr("Close")); + + toolBarLayout->addWidget(splitAction); + toolBarLayout->addWidget(close); + + QVBoxLayout *lay = new QVBoxLayout(); + lay->setMargin(0); + lay->setSpacing(0); + setLayout(lay); + lay->addWidget(m_toolBar); + + connect(splitAction, SIGNAL(clicked()), this, SIGNAL(splitMe())); + connect(close, SIGNAL(clicked()), this, SIGNAL(closeMe())); + + setFactoryIndex(factoryIndex); + + connect(m_navigationComboBox, SIGNAL(currentIndexChanged(int)), + this, SLOT(comboBoxIndexChanged(int))); + + comboBoxIndexChanged(factoryIndex); +} + +NavigationSubWidget::~NavigationSubWidget() +{ +} + +void NavigationSubWidget::comboBoxIndexChanged(int factoryIndex) +{ + saveSettings(); + + // Remove toolbutton + foreach (QWidget *w, m_additionalToolBarWidgets) + delete w; + m_additionalToolBarWidgets.clear(); + + // Remove old Widget + delete m_navigationWidget; + m_navigationWidget = 0; + m_navigationWidgetFactory = 0; + if (factoryIndex == -1) + return; + + // Get new stuff + m_navigationWidgetFactory = m_navigationComboBox->itemData(factoryIndex, + NavigationWidget::FactoryObjectRole).value<INavigationWidgetFactory *>(); + NavigationView n = m_navigationWidgetFactory->createWidget(); + m_navigationWidget = n.widget; + layout()->addWidget(m_navigationWidget); + + // Add Toolbutton + m_additionalToolBarWidgets = n.dockToolBarWidgets; + QHBoxLayout *layout = qobject_cast<QHBoxLayout *>(m_toolBar->layout()); + foreach (QToolButton *w, m_additionalToolBarWidgets) { + layout->insertWidget(layout->count()-2, w); + } + + restoreSettings(); +} + +void NavigationSubWidget::setFocusWidget() +{ + if (m_navigationWidget) + m_navigationWidget->setFocus(); +} + +INavigationWidgetFactory *NavigationSubWidget::factory() +{ + return m_navigationWidgetFactory; +} + + +void NavigationSubWidget::saveSettings() +{ + if (!m_navigationWidget || !factory()) + return; + factory()->saveSettings(position(), m_navigationWidget); +} + +void NavigationSubWidget::restoreSettings() +{ + if (!m_navigationWidget || !factory()) + return; + factory()->restoreSettings(position(), m_navigationWidget); +} + +Core::Command *NavigationSubWidget::command(const QString &title) const +{ + const QHash<QString, Core::Command*> commandMap = m_parentWidget->commandMap(); + QHash<QString, Core::Command*>::const_iterator r = commandMap.find(title); + if (r != commandMap.end()) + return r.value(); + return 0; +} + +int NavigationSubWidget::factoryIndex() const +{ + return m_navigationComboBox->currentIndex(); +} + +void NavigationSubWidget::setFactoryIndex(int i) +{ + m_navigationComboBox->setCurrentIndex(i); +} + +int NavigationSubWidget::position() const +{ + return m_position; +} + +void NavigationSubWidget::setPosition(int position) +{ + m_position = position; +} + +CommandComboBox::CommandComboBox(QWidget *parent) : QComboBox(parent) +{ +} + +bool CommandComboBox::event(QEvent *e) +{ + if (e->type() == QEvent::ToolTip) { + const QString text = currentText(); + if (const Core::Command *cmd = command(text)) { + const QString tooltip = tr("Activate %1").arg(text); + setToolTip(cmd->stringWithAppendedShortcut(tooltip)); + } else { + setToolTip(text); + } + } + return QComboBox::event(e); +} + +} // namespace Internal +} // namespace Core |