feat(dock): add change display's mode function

This commit is contained in:
wangxuwen 2019-08-28 11:37:19 +08:00
parent 4f47ac2970
commit 90ee436025
4 changed files with 30 additions and 12 deletions

View File

@ -21,6 +21,7 @@
#include "mainpanelcontrol.h" #include "mainpanelcontrol.h"
#include "../item/dockitem.h" #include "../item/dockitem.h"
#include "util/docksettings.h"
#include <DAnchors> #include <DAnchors>
@ -76,10 +77,17 @@ void MainPanelControl::init()
m_appAreaSonLayout->setSpacing(0); m_appAreaSonLayout->setSpacing(0);
m_trayAreaLayout->setSpacing(0); m_trayAreaLayout->setSpacing(0);
m_pluginLayout->setSpacing(0); m_pluginLayout->setSpacing(0);
}
void MainPanelControl::updateDisplayMode(DisplayMode m_displayMode)
{
DAnchorsBase::clearAnchors(m_appAreaSonWidget);
DAnchors<QWidget> anchors(m_appAreaSonWidget); DAnchors<QWidget> anchors(m_appAreaSonWidget);
anchors.setAnchor(Qt::AnchorHorizontalCenter, this, Qt::AnchorHorizontalCenter); if (m_displayMode == Dock::DisplayMode::Fashion) {
anchors.setAnchor(Qt::AnchorVerticalCenter, this, Qt::AnchorVerticalCenter); anchors.setAnchor(Qt::AnchorHorizontalCenter, this, Qt::AnchorHorizontalCenter);
} else {
anchors.setAnchor(Qt::AnchorLeft, m_appAreaWidget, Qt::AnchorLeft);
}
} }
void MainPanelControl::updateMainPanelLayout() void MainPanelControl::updateMainPanelLayout()
@ -169,7 +177,7 @@ void MainPanelControl::updateAppAreaSonWidgetSize()
QWidget *w = m_appAreaSonLayout->itemAt(i)->widget(); QWidget *w = m_appAreaSonLayout->itemAt(i)->widget();
if (w) { if (w) {
if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) { if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) {
w->setFixedSize(height(), height()); w->setMaximumSize(height(), height());
} else { } else {
w->setMaximumSize(width(), width()); w->setMaximumSize(width(), width());
} }
@ -190,7 +198,6 @@ void MainPanelControl::updateAppAreaSonWidgetSize()
if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) { if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) {
m_appAreaSonWidget->setMaximumWidth(qMin((m_appAreaWidget->geometry().right() - width() / 2) * 2, m_appAreaWidget->width())); m_appAreaSonWidget->setMaximumWidth(qMin((m_appAreaWidget->geometry().right() - width() / 2) * 2, m_appAreaWidget->width()));
} else { } else {
m_appAreaSonWidget->setMaximumWidth(QWIDGETSIZE_MAX);
m_appAreaSonWidget->setMaximumHeight(qMin((m_appAreaWidget->geometry().bottom() - height() / 2) * 2, m_appAreaWidget->height())); m_appAreaSonWidget->setMaximumHeight(qMin((m_appAreaWidget->geometry().bottom() - height() / 2) * 2, m_appAreaWidget->height()));
} }

View File

@ -22,9 +22,13 @@
#ifndef MAINPANELCONTROL_H #ifndef MAINPANELCONTROL_H
#define MAINPANELCONTROL_H #define MAINPANELCONTROL_H
#include "constants.h"
#include <QWidget> #include <QWidget>
#include <QBoxLayout> #include <QBoxLayout>
using namespace Dock;
class DockItem; class DockItem;
class MainPanelControl : public QWidget class MainPanelControl : public QWidget
{ {
@ -42,6 +46,7 @@ public:
void removeTrayAreaItem(QWidget *wdg); void removeTrayAreaItem(QWidget *wdg);
void removePluginAreaItem(QWidget *wdg); void removePluginAreaItem(QWidget *wdg);
void setPositonValue(const Qt::Edge val); void setPositonValue(const Qt::Edge val);
void updateDisplayMode(DisplayMode m_displayMode);
signals: signals:
void itemMoved(DockItem *sourceItem, DockItem *targetItem); void itemMoved(DockItem *sourceItem, DockItem *targetItem);

View File

@ -72,8 +72,6 @@ MainWindow::MainWindow(QWidget *parent)
m_launched(false), m_launched(false),
m_updatePanelVisible(false), m_updatePanelVisible(false),
m_mainPanel(new MainPanelControl(this)),
m_platformWindowHandle(this), m_platformWindowHandle(this),
m_wmHelper(DWindowManagerHelper::instance()), m_wmHelper(DWindowManagerHelper::instance()),
@ -107,6 +105,8 @@ MainWindow::MainWindow(QWidget *parent)
m_settings = &DockSettings::Instance(); m_settings = &DockSettings::Instance();
m_xcbMisc->set_window_type(winId(), XcbMisc::Dock); m_xcbMisc->set_window_type(winId(), XcbMisc::Dock);
m_size = m_settings->m_mainWindowSize; m_size = m_settings->m_mainWindowSize;
m_mainPanel = new MainPanelControl(this);
m_mainPanel->updateDisplayMode(m_settings->displayMode());
initSNIHost(); initSNIHost();
initComponents(); initComponents();
initConnections(); initConnections();
@ -386,7 +386,7 @@ void MainWindow::initConnections()
connect(m_settings, &DockSettings::windowVisibleChanged, this, &MainWindow::updatePanelVisible, Qt::QueuedConnection); connect(m_settings, &DockSettings::windowVisibleChanged, this, &MainWindow::updatePanelVisible, Qt::QueuedConnection);
connect(m_settings, &DockSettings::displayModeChanegd, m_positionUpdateTimer, static_cast<void (QTimer::*)()>(&QTimer::start)); connect(m_settings, &DockSettings::displayModeChanegd, m_positionUpdateTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
connect(&DockSettings::Instance(), &DockSettings::opacityChanged, this, &MainWindow::setMaskAlpha); connect(&DockSettings::Instance(), &DockSettings::opacityChanged, this, &MainWindow::setMaskAlpha);
connect(m_settings, &DockSettings::displayModeChanegd, this, &MainWindow::updateDisplayMode, Qt::QueuedConnection);
// connect(m_mainPanel, &MainPanelControl::requestRefershWindowVisible, this, &MainWindow::updatePanelVisible, Qt::QueuedConnection); // connect(m_mainPanel, &MainPanelControl::requestRefershWindowVisible, this, &MainWindow::updatePanelVisible, Qt::QueuedConnection);
// connect(m_mainPanel, &MainPanelControl::requestWindowAutoHide, m_settings, &DockSettings::setAutoHide); // connect(m_mainPanel, &MainPanelControl::requestWindowAutoHide, m_settings, &DockSettings::setAutoHide);
// connect(m_mainPanel, &MainPanelControl::geometryChanged, this, &MainWindow::panelGeometryChanged); // connect(m_mainPanel, &MainPanelControl::geometryChanged, this, &MainWindow::panelGeometryChanged);
@ -662,6 +662,9 @@ void MainWindow::expand()
break; break;
} }
if (finishPos == pos())
return;
m_panelShowAni->setStartValue(startPos); m_panelShowAni->setStartValue(startPos);
m_panelShowAni->setEndValue(finishPos); m_panelShowAni->setEndValue(finishPos);
m_panelShowAni->start(); m_panelShowAni->start();
@ -790,9 +793,6 @@ void MainWindow::positionCheck()
if (QPoint(pos() - scaledFrontPos).manhattanLength() < 2) if (QPoint(pos() - scaledFrontPos).manhattanLength() < 2)
return; return;
qWarning() << "Dock position may error!!!!!";
qDebug() << pos() << m_settings->frontendWindowRect() << m_settings->windowRect(m_settings->position(), false);
// this may cause some position error and animation caton // this may cause some position error and animation caton
//internalMove(); //internalMove();
} }
@ -843,10 +843,10 @@ void MainWindow::mouseMoveEvent(QMouseEvent *event)
int ydiff = QCursor::pos().y() - m_resizePoint.y(); int ydiff = QCursor::pos().y() - m_resizePoint.y();
if (Dock::Top == m_settings->position()) { if (Dock::Top == m_settings->position()) {
m_settings->m_mainWindowSize.setHeight(qBound(MAINWINDOW_MIN_SIZE,m_size.height() + ydiff, MAINWINDOW_MAX_SIZE)); m_settings->m_mainWindowSize.setHeight(qBound(MAINWINDOW_MIN_SIZE, m_size.height() + ydiff, MAINWINDOW_MAX_SIZE));
m_settings->m_mainWindowSize.setWidth(width()); m_settings->m_mainWindowSize.setWidth(width());
} else if (Dock::Bottom == m_settings->position()) { } else if (Dock::Bottom == m_settings->position()) {
m_settings->m_mainWindowSize.setHeight(qBound(MAINWINDOW_MIN_SIZE,m_size.height() - ydiff, MAINWINDOW_MAX_SIZE)); m_settings->m_mainWindowSize.setHeight(qBound(MAINWINDOW_MIN_SIZE, m_size.height() - ydiff, MAINWINDOW_MAX_SIZE));
m_settings->m_mainWindowSize.setWidth(width()); m_settings->m_mainWindowSize.setWidth(width());
} else if (Dock::Left == m_settings->position()) { } else if (Dock::Left == m_settings->position()) {
} else { } else {
@ -911,3 +911,8 @@ void MainWindow::resizeMainPanelWindow()
default: break; default: break;
} }
} }
void MainWindow::updateDisplayMode()
{
m_mainPanel->updateDisplayMode(m_settings->displayMode());
}

View File

@ -94,6 +94,7 @@ private slots:
void compositeChanged(); void compositeChanged();
void internalMove() { internalMove(m_posChangeAni->currentValue().toPoint()); } void internalMove() { internalMove(m_posChangeAni->currentValue().toPoint()); }
void internalMove(const QPoint &p); void internalMove(const QPoint &p);
void updateDisplayMode();
void expand(); void expand();
void narrow(const Position prevPos); void narrow(const Position prevPos);