summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/navigationsubwidget.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-09-16 12:26:28 +0200
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-09-16 12:26:28 +0200
commitd6057ae6002d294bf76bf5ddef2c883fdbd38cee (patch)
treed06b51dc3c3a8c3cfa64c6c308a228e06bb1c3cf /src/plugins/coreplugin/navigationsubwidget.cpp
parentb8cc8e210c67ba870044d6eddc5f9e00fbedbb75 (diff)
downloadqt-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.cpp222
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