diff --git a/src/plugins/projectexplorer/iprojectproperties.h b/src/plugins/projectexplorer/iprojectproperties.h index b50c2e186e3..33ed0ac0d13 100644 --- a/src/plugins/projectexplorer/iprojectproperties.h +++ b/src/plugins/projectexplorer/iprojectproperties.h @@ -31,6 +31,8 @@ #define IPROJECTPROPERTIES_H #include "projectexplorer_export.h" +#include "propertiespanel.h" +#include "panelswidget.h" #include #include @@ -40,32 +42,6 @@ namespace ProjectExplorer { class Project; class Target; -namespace Constants { - const int PANEL_LEFT_MARGIN = 70; -} - -class PROJECTEXPLORER_EXPORT PropertiesPanel -{ - Q_DISABLE_COPY(PropertiesPanel) - -public: - PropertiesPanel() {} - ~PropertiesPanel() { delete m_widget; } - - QString displayName() const { return m_displayName; } - QIcon icon() const { return m_icon; } - QWidget *widget() const { return m_widget; } - - void setDisplayName(const QString &name) { m_displayName = name; } - void setIcon(const QIcon &icon) { m_icon = icon; } - void setWidget(QWidget *widget) { m_widget = widget; } - -private: - QString m_displayName; - QWidget *m_widget; - QIcon m_icon; -}; - class PROJECTEXPLORER_EXPORT IProjectPanelFactory : public QObject { Q_OBJECT diff --git a/src/plugins/projectexplorer/panelswidget.cpp b/src/plugins/projectexplorer/panelswidget.cpp new file mode 100644 index 00000000000..e4111167d88 --- /dev/null +++ b/src/plugins/projectexplorer/panelswidget.cpp @@ -0,0 +1,210 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ +#include "panelswidget.h" + +#include "propertiespanel.h" + +#include +#include +#include + +#include +#include + +namespace { +const int ICON_SIZE(64); + +const int ABOVE_HEADING_MARGIN(10); +const int ABOVE_CONTENTS_MARGIN(4); +const int BELOW_CONTENTS_MARGIN(16); +const int PANEL_LEFT_MARGIN = 70; + +} // anonymous namespace +/// +// OnePixelBlackLine +/// +/// \brief The OnePixelBlackLine class + +using namespace ProjectExplorer; + +namespace { +class OnePixelBlackLine : public QWidget +{ +public: + OnePixelBlackLine(QWidget *parent) + : QWidget(parent) + { + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + setMinimumHeight(1); + setMaximumHeight(1); + } + void paintEvent(QPaintEvent *e) + { + Q_UNUSED(e); + QPainter p(this); + QColor fillColor = Utils::StyleHelper::mergedColors( + palette().button().color(), Qt::black, 80); + p.fillRect(contentsRect(), fillColor); + } +}; + +class RootWidget : public QWidget +{ +public: + RootWidget(QWidget *parent) : QWidget(parent) { + setFocusPolicy(Qt::NoFocus); + } + void paintEvent(QPaintEvent *); +}; + +void RootWidget::paintEvent(QPaintEvent *e) +{ + QWidget::paintEvent(e); + + QPainter painter(this); + QColor light = Utils::StyleHelper::mergedColors( + palette().button().color(), Qt::white, 30); + QColor dark = Utils::StyleHelper::mergedColors( + palette().button().color(), Qt::black, 85); + + painter.setPen(light); + painter.drawLine(rect().topRight(), rect().bottomRight()); + painter.setPen(dark); + painter.drawLine(rect().topRight() - QPoint(1,0), rect().bottomRight() - QPoint(1,0)); +} +} + +/// +// PanelsWidget +/// + +PanelsWidget::PanelsWidget(QWidget *parent) : + QScrollArea(parent), + m_root(new RootWidget(this)) +{ + // We want a 900px wide widget with and the scrollbar at the + // side of the screen. + m_root->setMaximumWidth(900); + m_root->setContentsMargins(0, 0, 40, 0); + + QPalette pal; + QColor background = Utils::StyleHelper::mergedColors( + palette().window().color(), Qt::white, 85); + pal.setColor(QPalette::All, QPalette::Window, background.darker(102)); + setPalette(pal); + pal.setColor(QPalette::All, QPalette::Window, background); + m_root->setPalette(pal); + + // The layout holding the individual panels: + QVBoxLayout *topLayout = new QVBoxLayout(m_root); + topLayout->setMargin(0); + topLayout->setSpacing(0); + + m_layout = new QGridLayout; + m_layout->setColumnMinimumWidth(0, ICON_SIZE + 4); + m_layout->setSpacing(0); + topLayout->addLayout(m_layout); + topLayout->addStretch(100); + + setWidget(m_root); + setFrameStyle(QFrame::NoFrame); + setWidgetResizable(true); + setFocusPolicy(Qt::NoFocus); +} + +PanelsWidget::~PanelsWidget() +{ + qDeleteAll(m_panels); +} + +/* + * Add a widget with heading information into the grid + * layout of the PanelsWidget. + * + * ... + * +--------+-------------------------------------------+ ABOVE_HEADING_MARGIN + * | icon | name | + * + +-------------------------------------------+ + * | | line | + * + +-------------------------------------------+ ABOVE_CONTENTS_MARGIN + * | | widget (with contentsmargins adjusted!) | + * +--------+-------------------------------------------+ BELOW_CONTENTS_MARGIN + */ +void PanelsWidget::addPropertiesPanel(PropertiesPanel *panel) +{ + QTC_ASSERT(panel, return); + + const int headerRow = m_layout->rowCount(); + + // icon: + if (!panel->icon().isNull()) { + QLabel *iconLabel = new QLabel(m_root); + iconLabel->setPixmap(panel->icon().pixmap(ICON_SIZE, ICON_SIZE)); + iconLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0); + m_layout->addWidget(iconLabel, headerRow, 0, 3, 1, Qt::AlignTop | Qt::AlignHCenter); + } + + // name: + QLabel *nameLabel = new QLabel(m_root); + nameLabel->setText(panel->displayName()); + QPalette palette = nameLabel->palette(); + for (int i = QPalette::Active; i < QPalette::NColorGroups; ++i ) { + QColor foregroundColor = palette.color(QPalette::ColorGroup(i), QPalette::Foreground); + foregroundColor.setAlpha(110); + palette.setBrush(QPalette::ColorGroup(i), QPalette::Foreground, foregroundColor); + } + nameLabel->setPalette(palette); + nameLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0); + QFont f = nameLabel->font(); + f.setBold(true); + f.setPointSizeF(f.pointSizeF() * 1.6); + nameLabel->setFont(f); + m_layout->addWidget(nameLabel, headerRow, 1, 1, 1, Qt::AlignVCenter | Qt::AlignLeft); + + // line: + const int lineRow(headerRow + 1); + QWidget *line = new OnePixelBlackLine(m_root); + m_layout->addWidget(line, lineRow, 1, 1, -1, Qt::AlignTop); + + // add the widget: + const int widgetRow(lineRow + 1); + addPanelWidget(panel, widgetRow); +} + +void PanelsWidget::addPanelWidget(PropertiesPanel *panel, int row) +{ + QWidget *widget = panel->widget(); + widget->setContentsMargins(PANEL_LEFT_MARGIN, + ABOVE_CONTENTS_MARGIN, 0, + BELOW_CONTENTS_MARGIN); + widget->setParent(m_root); + m_layout->addWidget(widget, row, 0, 1, 2); + + m_panels.append(panel); +} diff --git a/src/plugins/projectexplorer/panelswidget.h b/src/plugins/projectexplorer/panelswidget.h new file mode 100644 index 00000000000..25b73a014de --- /dev/null +++ b/src/plugins/projectexplorer/panelswidget.h @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ +#ifndef PANELSWIDGET_H +#define PANELSWIDGET_H + +#include "projectexplorer_export.h" + +#include + +QT_BEGIN_NAMESPACE +class QGridLayout; +QT_END_NAMESPACE + +namespace ProjectExplorer { +class PropertiesPanel; + +class PROJECTEXPLORER_EXPORT PanelsWidget : public QScrollArea +{ + Q_OBJECT +public: + explicit PanelsWidget(QWidget *parent = 0); + ~PanelsWidget(); + // Adds a widget + void addPropertiesPanel(PropertiesPanel *panel); + +private: + void addPanelWidget(PropertiesPanel *panel, int row); + + QList m_panels; + QGridLayout *m_layout; + QWidget *m_root; +}; + +} // end namespace +#endif // PANELSWIDGET_H diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index 1766bd159b6..9d6ab19a5b0 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -147,7 +147,9 @@ HEADERS += projectexplorer.h \ ipotentialkit.h \ selectablefilesmodel.h \ addnewmodel.h \ - xcodebuildparser.h + xcodebuildparser.h \ + propertiespanel.h \ + panelswidget.h SOURCES += projectexplorer.cpp \ abi.cpp \ @@ -282,7 +284,9 @@ SOURCES += projectexplorer.cpp \ selectablefilesmodel.cpp \ addnewmodel.cpp \ xcodebuildparser.cpp \ - iprojectproperties.cpp + iprojectproperties.cpp \ + propertiespanel.cpp \ + panelswidget.cpp FORMS += processstep.ui \ editorsettingspropertiespage.ui \ diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs index 36548265322..1221922cf4a 100644 --- a/src/plugins/projectexplorer/projectexplorer.qbs +++ b/src/plugins/projectexplorer/projectexplorer.qbs @@ -106,6 +106,7 @@ QtcPlugin { "namedwidget.cpp", "namedwidget.h", "nodesvisitor.cpp", "nodesvisitor.h", "osparser.cpp", "osparser.h", + "panelswidget.cpp", "panelswidget.h" "processparameters.cpp", "processparameters.h", "processstep.cpp", "processstep.h", "processstep.ui", "project.cpp", "project.h", @@ -124,6 +125,7 @@ QtcPlugin { "projecttreewidget.cpp", "projecttreewidget.h", "projectwindow.cpp", "projectwindow.h", "projectwizardpage.cpp", "projectwizardpage.h", "projectwizardpage.ui", + "propertiespanel.cpp", "propertiespanel.h" "removetaskhandler.cpp", "removetaskhandler.h", "runconfiguration.cpp", "runconfiguration.h", "runconfigurationmodel.cpp", "runconfigurationmodel.h", diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index 5c11a1527cf..7e0f92de19e 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -30,6 +30,7 @@ #include "projectwindow.h" #include "doubletabwidget.h" +#include "panelswidget.h" #include "kitmanager.h" #include "project.h" @@ -43,183 +44,12 @@ #include #include #include -#include -#include -#include -#include #include +#include using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; - -namespace { -const int ICON_SIZE(64); - -const int ABOVE_HEADING_MARGIN(10); -const int ABOVE_CONTENTS_MARGIN(4); -const int BELOW_CONTENTS_MARGIN(16); - -} // anonymous namespace - -/// -// OnePixelBlackLine -/// - -class OnePixelBlackLine : public QWidget -{ -public: - OnePixelBlackLine(QWidget *parent) - : QWidget(parent) - { - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - setMinimumHeight(1); - setMaximumHeight(1); - } - void paintEvent(QPaintEvent *e) - { - Q_UNUSED(e); - QPainter p(this); - QColor fillColor = Utils::StyleHelper::mergedColors( - palette().button().color(), Qt::black, 80); - p.fillRect(contentsRect(), fillColor); - } -}; - -class RootWidget : public QWidget -{ -public: - RootWidget(QWidget *parent) : QWidget(parent) { - setFocusPolicy(Qt::NoFocus); - } - void paintEvent(QPaintEvent *); -}; - -void RootWidget::paintEvent(QPaintEvent *e) -{ - QWidget::paintEvent(e); - - QPainter painter(this); - QColor light = Utils::StyleHelper::mergedColors( - palette().button().color(), Qt::white, 30); - QColor dark = Utils::StyleHelper::mergedColors( - palette().button().color(), Qt::black, 85); - - painter.setPen(light); - painter.drawLine(rect().topRight(), rect().bottomRight()); - painter.setPen(dark); - painter.drawLine(rect().topRight() - QPoint(1,0), rect().bottomRight() - QPoint(1,0)); -} - -/// -// PanelsWidget -/// - -PanelsWidget::PanelsWidget(QWidget *parent) : - QScrollArea(parent), - m_root(new RootWidget(this)) -{ - // We want a 900px wide widget with and the scrollbar at the - // side of the screen. - m_root->setMaximumWidth(900); - m_root->setContentsMargins(0, 0, 40, 0); - - QPalette pal; - QColor background = Utils::StyleHelper::mergedColors( - palette().window().color(), Qt::white, 85); - pal.setColor(QPalette::All, QPalette::Window, background.darker(102)); - setPalette(pal); - pal.setColor(QPalette::All, QPalette::Window, background); - m_root->setPalette(pal); - - // The layout holding the individual panels: - QVBoxLayout *topLayout = new QVBoxLayout(m_root); - topLayout->setMargin(0); - topLayout->setSpacing(0); - - m_layout = new QGridLayout; - m_layout->setColumnMinimumWidth(0, ICON_SIZE + 4); - m_layout->setSpacing(0); - topLayout->addLayout(m_layout); - topLayout->addStretch(100); - - setWidget(m_root); - setFrameStyle(QFrame::NoFrame); - setWidgetResizable(true); - setFocusPolicy(Qt::NoFocus); -} - -PanelsWidget::~PanelsWidget() -{ - qDeleteAll(m_panels); -} - -/* - * Add a widget with heading information into the grid - * layout of the PanelsWidget. - * - * ... - * +--------+-------------------------------------------+ ABOVE_HEADING_MARGIN - * | icon | name | - * + +-------------------------------------------+ - * | | line | - * + +-------------------------------------------+ ABOVE_CONTENTS_MARGIN - * | | widget (with contentsmargins adjusted!) | - * +--------+-------------------------------------------+ BELOW_CONTENTS_MARGIN - */ -void PanelsWidget::addPropertiesPanel(PropertiesPanel *panel) -{ - QTC_ASSERT(panel, return); - - const int headerRow = m_layout->rowCount(); - - // icon: - if (!panel->icon().isNull()) { - QLabel *iconLabel = new QLabel(m_root); - iconLabel->setPixmap(panel->icon().pixmap(ICON_SIZE, ICON_SIZE)); - iconLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0); - m_layout->addWidget(iconLabel, headerRow, 0, 3, 1, Qt::AlignTop | Qt::AlignHCenter); - } - - // name: - QLabel *nameLabel = new QLabel(m_root); - nameLabel->setText(panel->displayName()); - QPalette palette = nameLabel->palette(); - for (int i = QPalette::Active; i < QPalette::NColorGroups; ++i ) { - QColor foregroundColor = palette.color(QPalette::ColorGroup(i), QPalette::Foreground); - foregroundColor.setAlpha(110); - palette.setBrush(QPalette::ColorGroup(i), QPalette::Foreground, foregroundColor); - } - nameLabel->setPalette(palette); - nameLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0); - QFont f = nameLabel->font(); - f.setBold(true); - f.setPointSizeF(f.pointSizeF() * 1.6); - nameLabel->setFont(f); - m_layout->addWidget(nameLabel, headerRow, 1, 1, 1, Qt::AlignVCenter | Qt::AlignLeft); - - // line: - const int lineRow(headerRow + 1); - QWidget *line = new OnePixelBlackLine(m_root); - m_layout->addWidget(line, lineRow, 1, 1, -1, Qt::AlignTop); - - // add the widget: - const int widgetRow(lineRow + 1); - addPanelWidget(panel, widgetRow); -} - -void PanelsWidget::addPanelWidget(PropertiesPanel *panel, int row) -{ - QWidget *widget = panel->widget(); - widget->setContentsMargins(Constants::PANEL_LEFT_MARGIN, - ABOVE_CONTENTS_MARGIN, 0, - BELOW_CONTENTS_MARGIN); - widget->setParent(m_root); - m_layout->addWidget(widget, row, 0, 1, 2); - - m_panels.append(panel); -} - /// // ProjectWindow /// diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h index c1bd14edd96..9253d3656d1 100644 --- a/src/plugins/projectexplorer/projectwindow.h +++ b/src/plugins/projectexplorer/projectwindow.h @@ -33,39 +33,15 @@ #include "projectexplorer_export.h" #include -#include +#include QT_BEGIN_NAMESPACE -class QLabel; -class QGridLayout; -class QMenu; class QStackedWidget; QT_END_NAMESPACE namespace ProjectExplorer { - -class PropertiesPanel; class Project; class Target; -class BuildConfiguration; -class RunConfiguration; - -class PROJECTEXPLORER_EXPORT PanelsWidget : public QScrollArea -{ - Q_OBJECT -public: - explicit PanelsWidget(QWidget *parent); - ~PanelsWidget(); - // Adds a widget - void addPropertiesPanel(PropertiesPanel *panel); - -private: - void addPanelWidget(PropertiesPanel *panel, int row); - - QList m_panels; - QGridLayout *m_layout; - QWidget *m_root; -}; namespace Internal { diff --git a/src/plugins/projectexplorer/propertiespanel.cpp b/src/plugins/projectexplorer/propertiespanel.cpp new file mode 100644 index 00000000000..1a59911154b --- /dev/null +++ b/src/plugins/projectexplorer/propertiespanel.cpp @@ -0,0 +1,2 @@ +#include "propertiespanel.h" + diff --git a/src/plugins/projectexplorer/propertiespanel.h b/src/plugins/projectexplorer/propertiespanel.h new file mode 100644 index 00000000000..f5a60530698 --- /dev/null +++ b/src/plugins/projectexplorer/propertiespanel.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ +#ifndef PROPERTIESPANEL_H +#define PROPERTIESPANEL_H + +#include "projectexplorer_export.h" + +#include +#include + +namespace ProjectExplorer { +class PROJECTEXPLORER_EXPORT PropertiesPanel +{ + Q_DISABLE_COPY(PropertiesPanel) + +public: + PropertiesPanel() {} + ~PropertiesPanel() { delete m_widget; } + + QString displayName() const { return m_displayName; } + QIcon icon() const { return m_icon; } + QWidget *widget() const { return m_widget; } + + void setDisplayName(const QString &name) { m_displayName = name; } + void setIcon(const QIcon &icon) { m_icon = icon; } + void setWidget(QWidget *widget) { m_widget = widget; } + +private: + QString m_displayName; + QWidget *m_widget; + QIcon m_icon; +}; +} +#endif // PROPERTIESPANEL_H diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp index f14c17897f6..c84494d572e 100644 --- a/src/plugins/projectexplorer/targetsettingspanel.cpp +++ b/src/plugins/projectexplorer/targetsettingspanel.cpp @@ -33,6 +33,7 @@ #include "buildsettingspropertiespage.h" #include "ipotentialkit.h" #include "kitoptionspage.h" +#include "panelswidget.h" #include "project.h" #include "projectimporter.h" #include "projectwindow.h" diff --git a/src/plugins/qnx/bardescriptoreditorwidget.cpp b/src/plugins/qnx/bardescriptoreditorwidget.cpp index af1238e6ce1..182b3b168be 100644 --- a/src/plugins/qnx/bardescriptoreditorwidget.cpp +++ b/src/plugins/qnx/bardescriptoreditorwidget.cpp @@ -43,7 +43,7 @@ #include #include -#include +#include #include #include #include