/************************************************************************** ** ** This file is part of Qt Creator ** ** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** ** GNU Lesser General Public License Usage ** ** 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. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** Other Usage ** ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** **************************************************************************/ #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 "id.h" #include #include #include #include #include #include #include #include #include #include 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_DOCUMENT))); 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(); NavigationView n = m_navigationWidgetFactory->createWidget(); m_navigationWidget = n.widget; layout()->addWidget(m_navigationWidget); // Add Toolbutton m_additionalToolBarWidgets = n.dockToolBarWidgets; QHBoxLayout *layout = qobject_cast(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 commandMap = m_parentWidget->commandMap(); QHash::const_iterator r = commandMap.find(Id(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 Pane").arg(text); setToolTip(cmd->stringWithAppendedShortcut(tooltip)); } else { setToolTip(text); } } return QComboBox::event(e); } } // namespace Internal } // namespace Core