/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** 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 The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ #include "panelswidget.h" #include #include #include #include #include #include #include #include #include using namespace Utils; namespace ProjectExplorer { 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; } /// // PanelsWidget /// PanelsWidget::PanelsWidget(QWidget *parent) : QWidget(parent) { const auto splitter = new Core::MiniSplitter(this); m_root = new QWidget(nullptr); m_root->setFocusPolicy(Qt::NoFocus); m_root->setContentsMargins(0, 0, 40, 0); splitter->addWidget(m_root); splitter->addWidget(new QWidget); splitter->setStretchFactor(1, 100); // Force root widget to its minimum size initially const auto scroller = new QScrollArea(this); scroller->setWidget(splitter); scroller->setFrameStyle(QFrame::NoFrame); scroller->setWidgetResizable(true); scroller->setFocusPolicy(Qt::NoFocus); // The layout holding the individual panels: auto topLayout = new QVBoxLayout(m_root); topLayout->setContentsMargins(0, 0, 0, 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); auto layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->addWidget(new Utils::StyledBar(this)); layout->addWidget(scroller); //layout->addWidget(new FindToolBarPlaceHolder(this)); } PanelsWidget::PanelsWidget(const QString &displayName, const QIcon &icon, QWidget *widget) : PanelsWidget(nullptr) { addPropertiesPanel(displayName, icon, widget); } PanelsWidget::~PanelsWidget() = default; /* * 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(const QString &displayName, const QIcon &icon, QWidget *widget) { const int headerRow = m_layout->rowCount(); // icon: if (!icon.isNull()) { auto iconLabel = new QLabel(m_root); iconLabel->setPixmap(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: auto nameLabel = new QLabel(m_root); nameLabel->setText(displayName); 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; auto line = new QFrame(m_root); line->setFrameShape(QFrame::HLine); line->setForegroundRole(QPalette::Midlight); line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_layout->addWidget(line, lineRow, 1, 1, -1, Qt::AlignTop); // add the widget: const int widgetRow = lineRow + 1; widget->setContentsMargins(PANEL_LEFT_MARGIN, ABOVE_CONTENTS_MARGIN, 0, BELOW_CONTENTS_MARGIN); widget->setParent(m_root); m_layout->addWidget(widget, widgetRow, 0, 1, 2); } } // ProjectExplorer