/* * Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd. * * Author: xuwenw * * Maintainer: xuwenw * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "mainpanelcontrol.h" #include #include DWIDGET_USE_NAMESPACE MainPanelControl::MainPanelControl(QWidget *parent) : QWidget(parent) , m_mainPanelLayout(new QBoxLayout(QBoxLayout::LeftToRight, this)) , m_fixedAreaWidget(new QWidget(this)) , m_appAreaWidget(new QWidget(this)) , m_trayAreaWidget(new QWidget(this)) , m_pluginAreaWidget(new QWidget(this)) , m_fixedAreaLayout(new QBoxLayout(QBoxLayout::LeftToRight)) , m_trayAreaLayout(new QBoxLayout(QBoxLayout::LeftToRight)) , m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight)) , m_appAreaSonWidget(new QWidget(this)) , m_appAreaSonLayout(new QBoxLayout(QBoxLayout::LeftToRight)) , m_position(Qt::TopEdge) { init(); updateMainPanelLayout(); } MainPanelControl::~MainPanelControl() { } void MainPanelControl::init() { m_mainPanelLayout->setMargin(0); m_mainPanelLayout->setContentsMargins(0, 0, 0, 0); m_fixedAreaLayout->setMargin(0); m_fixedAreaLayout->setContentsMargins(0, 0, 0, 0); m_pluginLayout->setMargin(0); m_pluginLayout->setSpacing(0); m_pluginLayout->setContentsMargins(0, 0, 0, 0); m_trayAreaLayout->setMargin(0); m_trayAreaLayout->setContentsMargins(0, 0, 0, 0); m_appAreaSonLayout->setMargin(0); m_appAreaSonLayout->setContentsMargins(0, 0, 0, 0); m_mainPanelLayout->addWidget(m_fixedAreaWidget); m_fixedAreaWidget->setLayout(m_fixedAreaLayout); m_mainPanelLayout->addWidget(m_appAreaWidget); m_mainPanelLayout->addWidget(m_trayAreaWidget); m_trayAreaWidget->setLayout(m_trayAreaLayout); m_mainPanelLayout->addWidget(m_pluginAreaWidget); m_pluginAreaWidget->setLayout(m_pluginLayout); m_appAreaSonWidget->setLayout(m_appAreaSonLayout); DAnchors anchors(m_appAreaSonWidget); anchors.setAnchor(Qt::AnchorHorizontalCenter, this, Qt::AnchorHorizontalCenter); anchors.setAnchor(Qt::AnchorVerticalCenter, this, Qt::AnchorVerticalCenter); } void MainPanelControl::updateMainPanelLayout() { switch (m_position) { case Qt::TopEdge: case Qt::BottomEdge: m_fixedAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_pluginAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); m_trayAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); m_mainPanelLayout->setDirection(QBoxLayout::LeftToRight); m_fixedAreaLayout->setDirection(QBoxLayout::LeftToRight); m_pluginLayout->setDirection(QBoxLayout::LeftToRight); m_trayAreaLayout->setDirection(QBoxLayout::LeftToRight); m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight); break; case Qt::RightEdge: case Qt::LeftEdge: m_fixedAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_pluginAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_trayAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_mainPanelLayout->setDirection(QBoxLayout::TopToBottom); m_fixedAreaLayout->setDirection(QBoxLayout::TopToBottom); m_pluginLayout->setDirection(QBoxLayout::TopToBottom); m_trayAreaLayout->setDirection(QBoxLayout::TopToBottom); m_appAreaSonLayout->setDirection(QBoxLayout::TopToBottom); break; default: break; } QTimer::singleShot(0, this, &MainPanelControl::updateAppAreaSonWidgetSize); } void MainPanelControl::addFixedAreaItem(QWidget *wdg) { m_fixedAreaLayout->addWidget(wdg, 0, Qt::AlignCenter); } void MainPanelControl::addAppAreaItem(QWidget *wdg) { m_appAreaSonLayout->addWidget(wdg, 0, Qt::AlignCenter); } void MainPanelControl::addTrayAreaItem(QWidget *wdg) { m_trayAreaLayout->addWidget(wdg, 0, Qt::AlignCenter); } void MainPanelControl::addPluginAreaItem(QWidget *wdg) { m_pluginLayout->addWidget(wdg, 0, Qt::AlignCenter); } void MainPanelControl::resizeEvent(QResizeEvent *event) { updateAppAreaSonWidgetSize(); return QWidget::resizeEvent(event); } void MainPanelControl::updateAppAreaSonWidgetSize() { if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) { m_appAreaSonWidget->setMaximumHeight(QWIDGETSIZE_MAX); m_appAreaSonWidget->setMaximumWidth(qMin((m_appAreaWidget->geometry().right() - width() / 2) * 2, m_appAreaWidget->width())); } else { m_appAreaSonWidget->setMaximumWidth(QWIDGETSIZE_MAX); m_appAreaSonWidget->setMaximumHeight(qMin((m_appAreaWidget->geometry().bottom() - height() / 2) * 2, m_appAreaWidget->height())); } m_appAreaSonWidget->adjustSize(); } void MainPanelControl::setPositonValue(const Qt::Edge val) { m_position = val; }