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

View File

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

View File

@ -72,8 +72,6 @@ MainWindow::MainWindow(QWidget *parent)
m_launched(false),
m_updatePanelVisible(false),
m_mainPanel(new MainPanelControl(this)),
m_platformWindowHandle(this),
m_wmHelper(DWindowManagerHelper::instance()),
@ -107,6 +105,8 @@ MainWindow::MainWindow(QWidget *parent)
m_settings = &DockSettings::Instance();
m_xcbMisc->set_window_type(winId(), XcbMisc::Dock);
m_size = m_settings->m_mainWindowSize;
m_mainPanel = new MainPanelControl(this);
m_mainPanel->updateDisplayMode(m_settings->displayMode());
initSNIHost();
initComponents();
initConnections();
@ -386,7 +386,7 @@ void MainWindow::initConnections()
connect(m_settings, &DockSettings::windowVisibleChanged, this, &MainWindow::updatePanelVisible, Qt::QueuedConnection);
connect(m_settings, &DockSettings::displayModeChanegd, m_positionUpdateTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
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::requestWindowAutoHide, m_settings, &DockSettings::setAutoHide);
// connect(m_mainPanel, &MainPanelControl::geometryChanged, this, &MainWindow::panelGeometryChanged);
@ -662,6 +662,9 @@ void MainWindow::expand()
break;
}
if (finishPos == pos())
return;
m_panelShowAni->setStartValue(startPos);
m_panelShowAni->setEndValue(finishPos);
m_panelShowAni->start();
@ -790,9 +793,6 @@ void MainWindow::positionCheck()
if (QPoint(pos() - scaledFrontPos).manhattanLength() < 2)
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
//internalMove();
}
@ -843,10 +843,10 @@ void MainWindow::mouseMoveEvent(QMouseEvent *event)
int ydiff = QCursor::pos().y() - m_resizePoint.y();
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());
} 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());
} else if (Dock::Left == m_settings->position()) {
} else {
@ -911,3 +911,8 @@ void MainWindow::resizeMainPanelWindow()
default: break;
}
}
void MainWindow::updateDisplayMode()
{
m_mainPanel->updateDisplayMode(m_settings->displayMode());
}

View File

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