diff --git a/frame/controller/dockpluginscontroller.cpp b/frame/controller/dockpluginscontroller.cpp index c941c78fa..012a92f5c 100644 --- a/frame/controller/dockpluginscontroller.cpp +++ b/frame/controller/dockpluginscontroller.cpp @@ -59,7 +59,7 @@ void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, con connect(static_cast(item), &TrayPluginItem::trayVisableCountChanged, this, &DockPluginsController::trayVisableCountChanged, Qt::UniqueConnection); } else { - item = createPluginsItem(itemInter, itemKey, pluginApi); + item = new PluginsItem(itemInter, itemKey, pluginApi); } mPluginsMap[itemInter][itemKey] = item; @@ -67,11 +67,6 @@ void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, con emit pluginItemInserted(item); } -PluginsItem *DockPluginsController::createPluginsItem(PluginsItemInterface *const itemInter, const QString &itemKey, const QString &pluginApi) -{ - return new PluginsItem(itemInter, itemKey, pluginApi); -} - void DockPluginsController::itemUpdate(PluginsItemInterface *const itemInter, const QString &itemKey) { PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); diff --git a/frame/controller/dockpluginscontroller.h b/frame/controller/dockpluginscontroller.h index 6765951cf..af759c5de 100644 --- a/frame/controller/dockpluginscontroller.h +++ b/frame/controller/dockpluginscontroller.h @@ -54,9 +54,6 @@ public: void startLoader(); -protected: - virtual PluginsItem *createPluginsItem(PluginsItemInterface *const itemInter, const QString &itemKey, const QString &pluginApi); - signals: void pluginItemInserted(PluginsItem *pluginItem) const; void pluginItemRemoved(PluginsItem *pluginItem) const; diff --git a/frame/item/pluginsitem.cpp b/frame/item/pluginsitem.cpp index 43ec245b3..8c8c37b77 100644 --- a/frame/item/pluginsitem.cpp +++ b/frame/item/pluginsitem.cpp @@ -325,27 +325,3 @@ PluginsItemInterface *PluginsItem::pluginItem() const { return m_pluginInter; } - -StretchPluginsItem::StretchPluginsItem(PluginsItemInterface * const pluginInter, const QString &itemKey, const QString &plginApi, QWidget *parent) - : PluginsItem (pluginInter, itemKey, plginApi, parent) - , m_nameLabel(new QLabel(this)) -{ - m_nameLabel->setFont(DFontSizeManager::instance()->t10()); - m_nameLabel->setText(pluginInter->pluginDisplayName()); - m_nameLabel->setAlignment(Qt::AlignCenter); - QBoxLayout *mainLayout = static_cast(layout()); - mainLayout->setContentsMargins(0, 0, 0, 0); - mainLayout->setDirection(QBoxLayout::Direction::TopToBottom); - mainLayout->addSpacing(10); - mainLayout->addWidget(m_nameLabel); -} - -StretchPluginsItem::~StretchPluginsItem() -{ -} - -void StretchPluginsItem::resizeEvent(QResizeEvent *event) -{ - m_nameLabel->setVisible(height() >= 30); - PluginsItem::resizeEvent(event); -} diff --git a/frame/item/pluginsitem.h b/frame/item/pluginsitem.h index e08a81f4d..0073a689a 100644 --- a/frame/item/pluginsitem.h +++ b/frame/item/pluginsitem.h @@ -91,19 +91,4 @@ private: const QGSettings *m_gsettings; }; -class StretchPluginsItem : public PluginsItem -{ - Q_OBJECT - -public: - StretchPluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, const QString &plginApi, QWidget *parent = nullptr); - ~StretchPluginsItem() override; - -protected: - void resizeEvent(QResizeEvent *event) override; - -private: - QLabel *m_nameLabel; -}; - #endif // PLUGINSITEM_H diff --git a/frame/window/mainpanelcontrol.cpp b/frame/window/mainpanelcontrol.cpp index 287724afb..d8470d827 100755 --- a/frame/window/mainpanelcontrol.cpp +++ b/frame/window/mainpanelcontrol.cpp @@ -1314,11 +1314,11 @@ void MainPanelControl::resizeDesktopWidget() { QSize suitableSize = m_trayManagerWidget->suitableSize(); if (m_position == Position::Right || m_position == Position::Left) { - m_desktopWidget->setFixedSize(width(), DESKTOP_SIZE); - m_trayManagerWidget->setFixedSize(width(), suitableSize.height()); + m_desktopWidget->setFixedSize(QWIDGETSIZE_MAX, DESKTOP_SIZE); + m_trayManagerWidget->setFixedSize(QWIDGETSIZE_MAX, suitableSize.height()); } else { - m_desktopWidget->setFixedSize(DESKTOP_SIZE, height()); - m_trayManagerWidget->setFixedSize(suitableSize.width(), height()); + m_desktopWidget->setFixedSize(DESKTOP_SIZE, QWIDGETSIZE_MAX); + m_trayManagerWidget->setFixedSize(suitableSize.width(), QWIDGETSIZE_MAX); } if (DisplayMode::Fashion == m_dislayMode) diff --git a/frame/window/systempluginwindow.cpp b/frame/window/systempluginwindow.cpp index 0eee3497e..827b6fd2c 100644 --- a/frame/window/systempluginwindow.cpp +++ b/frame/window/systempluginwindow.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd. * * Author: donghualin @@ -25,6 +25,7 @@ #include #include +#include #include #define MAXICONSIZE 48 @@ -39,10 +40,10 @@ SystemPluginWindow::SystemPluginWindow(QWidget *parent) , m_mainLayout(new QBoxLayout(QBoxLayout::Direction::LeftToRight, this)) { initUi(); - connect(m_pluginController, &DockPluginsController::pluginItemInserted, this, &SystemPluginWindow::onPluginItemAdded); - connect(m_pluginController, &DockPluginsController::pluginItemRemoved, this, &SystemPluginWindow::onPluginItemRemoved); - connect(m_pluginController, &DockPluginsController::pluginItemUpdated, this, &SystemPluginWindow::onPluginItemUpdated); - QMetaObject::invokeMethod(m_pluginController, &DockPluginsController::startLoader, Qt::QueuedConnection); + connect(m_pluginController, &FixedPluginController::pluginItemInserted, this, &SystemPluginWindow::onPluginItemAdded); + connect(m_pluginController, &FixedPluginController::pluginItemRemoved, this, &SystemPluginWindow::onPluginItemRemoved); + connect(m_pluginController, &FixedPluginController::pluginItemUpdated, this, &SystemPluginWindow::onPluginItemUpdated); + QMetaObject::invokeMethod(m_pluginController, &FixedPluginController::startLoader, Qt::QueuedConnection); } SystemPluginWindow::~SystemPluginWindow() @@ -60,52 +61,43 @@ void SystemPluginWindow::setPositon(Position position) m_mainLayout->setDirection(QBoxLayout::Direction::LeftToRight); else m_mainLayout->setDirection(QBoxLayout::Direction::TopToBottom); + + QObjectList childObjects = children(); + for (QObject *childObject : childObjects) { + StretchPluginsItem *item = qobject_cast(childObject); + if (!item) + continue; + + item->setPosition(m_position); + } } QSize SystemPluginWindow::suitableSize() { - QMargins m = m_mainLayout->contentsMargins(); - if (m_mainLayout->direction() == QBoxLayout::Direction::LeftToRight) { - int itemSize = height() - m_mainLayout->contentsMargins().top() - m_mainLayout->contentsMargins().bottom(); - int itemWidth = m.left() + m.right(); - for (int i = 0; i < m_mainLayout->count(); i++) { - QWidget *widget = m_mainLayout->itemAt(i)->widget(); - if (!widget) + QObjectList childs = children(); + if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { + int itemWidth = 0; + for (QObject *childObject : childs) { + StretchPluginsItem *childItem = qobject_cast(childObject); + if (!childItem) continue; - PluginsItem *item = qobject_cast(widget); - if (!item) - continue; - - // 如果是横向的,则高度是固定,高宽一致,因此读取高度作为它的尺寸值 - itemWidth += itemSize; - if (i < m_mainLayout->count() - 1) - itemWidth += m_mainLayout->spacing(); + itemWidth += childItem->suitableSize().width(); } - itemWidth += m.right(); - return QSize(itemWidth, height()); + return QSize(itemWidth, QWIDGETSIZE_MAX); } - int itemSize = width() - m_mainLayout->contentsMargins().left() - m_mainLayout->contentsMargins().right(); - int itemHeight = m.top(); - for (int i = 0; i < m_mainLayout->count(); i++) { - QWidget *widget = m_mainLayout->itemAt(i)->widget(); - if (!widget) - continue; - - PluginsItem *item = qobject_cast(widget); + int itemHeight = 0; + for (QObject *childObject : childs) { + StretchPluginsItem *item = qobject_cast(childObject); if (!item) continue; - itemHeight += itemSize; - if (i < m_mainLayout->count() - 1) - itemHeight += m_mainLayout->spacing(); + itemHeight += item->suitableSize().height(); } - itemHeight += m.bottom(); - - return QSize(width(), itemHeight); + return QSize(QWIDGETSIZE_MAX, itemHeight); } void SystemPluginWindow::resizeEvent(QResizeEvent *event) @@ -116,68 +108,239 @@ void SystemPluginWindow::resizeEvent(QResizeEvent *event) void SystemPluginWindow::initUi() { - m_mainLayout->setContentsMargins(8, 8, 8, 8); - m_mainLayout->setSpacing(5); + m_mainLayout->setContentsMargins(0, 0, 0, 0); + m_mainLayout->setSpacing(0); } -int SystemPluginWindow::calcIconSize() const -{ - switch (m_position) { - case Dock::Position::Top: - case Dock::Position::Bottom: { - if (height() >= 56) - return MAXICONSIZE; - if (height() <= 40) - return MINICONSIZE; - return height() - ICONMARGIN * 2; - } - case Dock::Position::Left: - case Dock::Position::Right: { - if (width() >= 56) - return MAXICONSIZE; - if (width() <= 40) - return MINICONSIZE; - return width() - ICONMARGIN * 2; - } - } - return -1; -} - -void SystemPluginWindow::onPluginItemAdded(PluginsItem *pluginItem) +void SystemPluginWindow::onPluginItemAdded(StretchPluginsItem *pluginItem) { if (m_mainLayout->children().contains(pluginItem)) return; + pluginItem->setPosition(m_position); + pluginItem->setParent(this); + pluginItem->show(); m_mainLayout->addWidget(pluginItem); Q_EMIT sizeChanged(); } -void SystemPluginWindow::onPluginItemRemoved(PluginsItem *pluginItem) +void SystemPluginWindow::onPluginItemRemoved(StretchPluginsItem *pluginItem) { if (!m_mainLayout->children().contains(pluginItem)) return; + pluginItem->setParent(nullptr); + pluginItem->hide(); m_mainLayout->removeWidget(pluginItem); Q_EMIT sizeChanged(); } -void SystemPluginWindow::onPluginItemUpdated(PluginsItem *pluginItem) +void SystemPluginWindow::onPluginItemUpdated(StretchPluginsItem *pluginItem) { - pluginItem->refreshIcon(); + pluginItem->update(); } // can loader plugins FixedPluginController::FixedPluginController(QObject *parent) - : DockPluginsController(parent) + : AbstractPluginsController(parent) { + setObjectName("FixedPluginController"); } -PluginsItem *FixedPluginController::createPluginsItem(PluginsItemInterface * const itemInter, const QString &itemKey, const QString &pluginApi) +void FixedPluginController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) { - return new StretchPluginsItem(itemInter, itemKey, pluginApi); + StretchPluginsItem *item = new StretchPluginsItem(itemInter, itemKey); + m_pluginItems << item; + Q_EMIT pluginItemInserted(item); +} + +void FixedPluginController::itemUpdate(PluginsItemInterface * const itemInter, const QString &) +{ + for (StretchPluginsItem *item : m_pluginItems) { + if (item->pluginInter() == itemInter) { + Q_EMIT pluginItemUpdated(item); + break; + } + } +} + +void FixedPluginController::itemRemoved(PluginsItemInterface * const itemInter, const QString &) +{ + for (StretchPluginsItem *item : m_pluginItems) { + if (item->pluginInter() == itemInter) { + m_pluginItems.removeOne(item); + Q_EMIT pluginItemRemoved(item); + item->deleteLater(); + break; + } + } } bool FixedPluginController::needLoad(PluginsItemInterface *itemInter) { return (itemInter->pluginName().compare("shutdown") == 0); } + +void FixedPluginController::startLoader() +{ + QString pluginsDir(qApp->applicationDirPath() + "/../plugins"); + QDir dir(pluginsDir); + if (!dir.exists()) + pluginsDir = "/usr/lib/dde-dock/plugins"; + + AbstractPluginsController::startLoader(new PluginLoader(pluginsDir, this)); +} + +#define ICONSIZE 20 +#define ICONTEXTSPACE 6 +#define PLUGIN_ITEM_DRAG_THRESHOLD 20 + +StretchPluginsItem::StretchPluginsItem(PluginsItemInterface * const pluginInter, const QString &itemKey, QWidget *parent) + : DockItem(parent) + , m_pluginInter(pluginInter) + , m_itemKey(itemKey) + , m_position(Dock::Position::Bottom) +{ +} + +StretchPluginsItem::~StretchPluginsItem() +{ +} + +void StretchPluginsItem::setPosition(Position position) +{ + m_position = position; + update(); +} + +QString StretchPluginsItem::itemKey() const +{ + return m_itemKey; +} + +PluginsItemInterface *StretchPluginsItem::pluginInter() const +{ + return m_pluginInter; +} + +void StretchPluginsItem::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event); + QPainter painter(this); + const QIcon *icon = m_pluginInter->icon(); + + QRect rctPixmap(rect()); + if (needShowText()) { + int textHeight = QFontMetrics(textFont()).height(); + // 文本与图标的间距为6 + int iconTop = (height() - textHeight - ICONSIZE - ICONTEXTSPACE) / 2; + rctPixmap.setX((width() - ICONSIZE) / 2); + rctPixmap.setY(iconTop); + rctPixmap.setWidth(ICONSIZE); + rctPixmap.setHeight(ICONSIZE); + // 先绘制下面的文本 + painter.setFont(textFont()); + painter.drawText(QRect(0, iconTop + ICONSIZE + ICONTEXTSPACE, width(), textHeight), Qt::AlignCenter, m_pluginInter->pluginDisplayName()); + } else { + rctPixmap.setX((width() - ICONSIZE) / 2); + rctPixmap.setY((height() - ICONSIZE) / 2); + rctPixmap.setWidth(ICONSIZE); + rctPixmap.setHeight(ICONSIZE); + } + + // 绘制图标 + if (icon) + painter.drawPixmap(rctPixmap, icon->pixmap(ICONSIZE, ICONSIZE)); +} + +QSize StretchPluginsItem::suitableSize() const +{ + if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { + int textWidth = QFontMetrics(textFont()).boundingRect(m_pluginInter->pluginDisplayName()).width(); + return QSize(qMax(textWidth, ICONSIZE) + 10 * 2, -1); + } + + int height = 6; // 图标上边距6 + height += ICONSIZE; // 图标尺寸20 + height += ICONTEXTSPACE; // 图标与文字间距6 + height += QFontMetrics(textFont()).height(); // 文本高度 + height += 4; // 下间距4 + return QSize(-1, height); +} + +QFont StretchPluginsItem::textFont() const +{ + if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { + static QList fonts{ DFontSizeManager::instance()->t9(), + DFontSizeManager::instance()->t8(), + DFontSizeManager::instance()->t7(), + DFontSizeManager::instance()->t6() }; +#define MINHEIGHT 50 + int index = qMin(qMax((height() - MINHEIGHT) / 2, 0), fonts.size() - 1); + return fonts[index]; + } + + return DFontSizeManager::instance()->t10(); +} + +bool StretchPluginsItem::needShowText() const +{ + if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) + return height() > (ICONSIZE + QFontMetrics(textFont()).height() + ICONTEXTSPACE); + + return true; +} + +const QString StretchPluginsItem::contextMenu() const +{ + return m_pluginInter->itemContextMenu(m_itemKey); +} + +void StretchPluginsItem::mousePressEvent(QMouseEvent *e) +{ + m_hover = false; + update(); + + if (PopupWindow->isVisible()) + hideNonModel(); + + if (e->button() == Qt::LeftButton) + m_mousePressPoint = e->pos(); + + m_popupTipsDelayTimer->stop(); + hideNonModel(); + + if (e->button() == Qt::RightButton + && perfectIconRect().contains(e->pos())) + return showContextMenu(); + + DockItem::mousePressEvent(e); +} + +void StretchPluginsItem::mouseReleaseEvent(QMouseEvent *e) +{ + DockItem::mouseReleaseEvent(e); + + if (e->button() != Qt::LeftButton) + return; + + if (checkAndResetTapHoldGestureState() && e->source() == Qt::MouseEventSynthesizedByQt) + return; + + const QPoint distance = e->pos() - m_mousePressPoint; + if (distance.manhattanLength() < PLUGIN_ITEM_DRAG_THRESHOLD) + mouseClick(); +} + +void StretchPluginsItem::mouseClick() +{ + const QString command = m_pluginInter->itemCommand(m_itemKey); + if (!command.isEmpty()) { + QProcess::startDetached(command); + return; + } + + // request popup applet + if (QWidget *w = m_pluginInter->itemPopupApplet(m_itemKey)) + showPopupApplet(w); +} diff --git a/frame/window/systempluginwindow.h b/frame/window/systempluginwindow.h index 7e3ad955a..3252f8081 100644 --- a/frame/window/systempluginwindow.h +++ b/frame/window/systempluginwindow.h @@ -26,8 +26,8 @@ #include -class DockPluginsController; -class PluginsItem; +class FixedPluginController; +class StretchPluginsItem; class QBoxLayout; namespace Dtk { namespace Widget { class DListView; } } @@ -47,33 +47,80 @@ public: Q_SIGNALS: void sizeChanged(); -private: - void initUi(); - int calcIconSize() const; +protected: void resizeEvent(QResizeEvent *event) override; +private: + void initUi(); + private Q_SLOTS: - void onPluginItemAdded(PluginsItem *pluginItem); - void onPluginItemRemoved(PluginsItem *pluginItem); - void onPluginItemUpdated(PluginsItem *pluginItem); + void onPluginItemAdded(StretchPluginsItem *pluginItem); + void onPluginItemRemoved(StretchPluginsItem *pluginItem); + void onPluginItemUpdated(StretchPluginsItem *pluginItem); private: - DockPluginsController *m_pluginController; + FixedPluginController *m_pluginController; DListView *m_listView; Dock::Position m_position; QBoxLayout *m_mainLayout; }; -class FixedPluginController : public DockPluginsController +class FixedPluginController : public AbstractPluginsController { Q_OBJECT public: explicit FixedPluginController(QObject *parent); + void startLoader(); + +Q_SIGNALS: + void pluginItemInserted(StretchPluginsItem *); + void pluginItemRemoved(StretchPluginsItem *); + void pluginItemUpdated(StretchPluginsItem *); protected: - PluginsItem *createPluginsItem(PluginsItemInterface *const itemInter, const QString &itemKey, const QString &pluginApi) override; + void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) override; + void itemUpdate(PluginsItemInterface * const itemInter, const QString &) override; + void itemRemoved(PluginsItemInterface * const itemInter, const QString &) override; bool needLoad(PluginsItemInterface *itemInter) override; + + void requestWindowAutoHide(PluginsItemInterface * const, const QString &, const bool) override {} + void requestRefreshWindowVisible(PluginsItemInterface * const, const QString &) override {} + void requestSetAppletVisible(PluginsItemInterface * const, const QString &, const bool) override {} + +private: + QList m_pluginItems; +}; + +class StretchPluginsItem : public DockItem +{ + Q_OBJECT + +public: + StretchPluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent = nullptr); + ~StretchPluginsItem() override; + void setPosition(Dock::Position position); + PluginsItemInterface *pluginInter() const; + QString itemKey() const; + QSize suitableSize() const; + +protected: + void paintEvent(QPaintEvent *event) override; + void mousePressEvent(QMouseEvent *e) override; + void mouseReleaseEvent(QMouseEvent *e) override; + + const QString contextMenu() const override; + +private: + void mouseClick(); + QFont textFont() const; + bool needShowText() const; + +private: + PluginsItemInterface *m_pluginInter; + QString m_itemKey; + Dock::Position m_position; + QPoint m_mousePressPoint; }; #endif // SYSTEMPLUGINWINDOW_H diff --git a/frame/window/traymanagerwindow.cpp b/frame/window/traymanagerwindow.cpp index 79f361889..b8cc261ba 100644 --- a/frame/window/traymanagerwindow.cpp +++ b/frame/window/traymanagerwindow.cpp @@ -115,12 +115,9 @@ int TrayManagerWindow::appDatetimeSize() } int trayHeight = m_trayView->suitableSize().height(); - int datetimeHeight = m_dateTimeWidget->suitableSize().height(); QMargins m = m_appDatetimeLayout->contentsMargins(); int traypluginHeight = trayHeight + m_quickIconWidget->suitableSize().height() + m.top() + m.bottom() + m_appPluginLayout->spacing(); - if (m_appDatetimeLayout->direction() == QBoxLayout::Direction::TopToBottom) - return traypluginHeight + m_appDatetimeLayout->spacing() + m_dateTimeWidget->suitableSize().height() + 10; - return (traypluginHeight > datetimeHeight ? traypluginHeight : datetimeHeight) + 10; + return traypluginHeight + m_appDatetimeLayout->spacing() + m_dateTimeWidget->suitableSize().height() + 10; } QSize TrayManagerWindow::suitableSize() @@ -129,10 +126,10 @@ QSize TrayManagerWindow::suitableSize() if (m_postion == Dock::Position::Top || m_postion == Dock::Position::Bottom) { return QSize(appDatetimeSize() + m_appDatetimeLayout->spacing() + m_systemPluginWidget->suitableSize().width() + m_mainLayout->spacing() + - m.left() + m.right(), height()); + m.left() + m.right(), QWIDGETSIZE_MAX); } - return QSize(width(), appDatetimeSize() + m_appDatetimeLayout->spacing() + + return QSize(QWIDGETSIZE_MAX, appDatetimeSize() + m_appDatetimeLayout->spacing() + m_systemPluginWidget->suitableSize().height() + m_mainLayout->spacing() + m.top() + m.bottom()); } @@ -317,7 +314,6 @@ void TrayManagerWindow::resetChildWidgetSize() case Dock::Position::Bottom: { int trayWidth = m_trayView->suitableSize().width(); QMargins m = m_appPluginLayout->contentsMargins(); - m_appPluginDatetimeWidget->setFixedHeight(QWIDGETSIZE_MAX);// 取消固定高度显示 if (m_appDatetimeLayout->direction() == QBoxLayout::Direction::LeftToRight) { // 单行显示 int trayHeight = m_appPluginDatetimeWidget->height() - m.top() - m.bottom(); @@ -326,26 +322,28 @@ void TrayManagerWindow::resetChildWidgetSize() m_appPluginWidget->setFixedSize(trayWidth + m_quickIconWidget->suitableSize().width(), trayHeight); m_dateTimeWidget->setFixedSize(m_dateTimeWidget->suitableSize().width(), trayHeight); // 设置右侧的电源按钮的尺寸 - m_systemPluginWidget->setFixedSize(m_systemPluginWidget->suitableSize().width(), QWIDGETSIZE_MAX); + m_systemPluginWidget->setFixedSize(m_systemPluginWidget->suitableSize()); m_mainLayout->setContentsMargins(4, 4, 4 ,4); m_mainLayout->setSpacing(4); m_appDatetimeLayout->setSpacing(4); } else { // 多行显示 - m_trayView->setFixedSize(trayWidth, QWIDGETSIZE_MAX); - m_quickIconWidget->setFixedSize(m_quickIconWidget->suitableSize().width(), QWIDGETSIZE_MAX); + int trayHeight = m_appPluginDatetimeWidget->height() / 2 + 4 - m.top() - m.bottom(); + m_trayView->setFixedSize(trayWidth, trayHeight); + m_quickIconWidget->setFixedSize(m_quickIconWidget->suitableSize().width(), trayHeight); m_appPluginWidget->setFixedSize(trayWidth + m_quickIconWidget->suitableSize().width(), m_appPluginDatetimeWidget->height() / 2 + 4); // 因为是两行,所以对于时间控件的尺寸,只能设置最小值 int dateTimeWidth = qMax(m_appPluginWidget->width(), m_dateTimeWidget->suitableSize().width()); m_dateTimeWidget->setMinimumSize(dateTimeWidth, QWIDGETSIZE_MAX); - m_systemPluginWidget->setFixedSize(m_systemPluginWidget->suitableSize().width(), QWIDGETSIZE_MAX); - + m_systemPluginWidget->setFixedSize(m_systemPluginWidget->suitableSize()); int contentSpace = qMin(MAXDIFF, qMax(height() - MINHIGHT, 0)) + MINSPACE; m_mainLayout->setContentsMargins(contentSpace, contentSpace, contentSpace, contentSpace); m_appDatetimeLayout->setSpacing(0); m_mainLayout->setSpacing(contentSpace); } - m_appPluginDatetimeWidget->setFixedWidth(appDatetimeSize()); + QMargins margin = m_mainLayout->contentsMargins(); + int appDateHeight = height() - margin.top() - margin.bottom(); + m_appPluginDatetimeWidget->setFixedSize(appDatetimeSize(), appDateHeight); break; } case Dock::Position::Left: @@ -353,7 +351,6 @@ void TrayManagerWindow::resetChildWidgetSize() int trayHeight = m_trayView->suitableSize().height(); int quickAreaHeight = m_quickIconWidget->suitableSize().height(); QMargins m = m_appPluginLayout->contentsMargins(); - m_appPluginDatetimeWidget->setFixedWidth(QWIDGETSIZE_MAX);// 取消固定宽度显示 // 左右方向始终只有一列 int datetimeHeight = m_dateTimeWidget->suitableSize().height(); int sizeWidth = m_appPluginDatetimeWidget->width() - m.left() - m.right(); @@ -361,13 +358,15 @@ void TrayManagerWindow::resetChildWidgetSize() m_quickIconWidget->setFixedSize(sizeWidth, quickAreaHeight); m_dateTimeWidget->setFixedSize(sizeWidth, datetimeHeight); m_appPluginWidget->setFixedSize(sizeWidth, trayHeight + quickAreaHeight); - m_appPluginDatetimeWidget->setFixedHeight(appDatetimeSize()); - m_systemPluginWidget->setFixedSize(QWIDGETSIZE_MAX, m_systemPluginWidget->suitableSize().height()); + m_systemPluginWidget->setFixedSize(m_systemPluginWidget->suitableSize()); int contentSpace = qMin(MAXDIFF, qMax(width() - MINHIGHT, 0)) + MINSPACE; m_mainLayout->setContentsMargins(contentSpace, contentSpace, contentSpace, contentSpace); m_appDatetimeLayout->setSpacing(0); m_mainLayout->setSpacing(contentSpace); + + int appDateWidth = width() - (contentSpace * 2); + m_appPluginDatetimeWidget->setFixedSize(appDateWidth, appDatetimeSize()); break; } }