mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +00:00
refactor: 优化任务栏电源按钮的展示
调整右侧固定区域的插件的展示方式,通过读取插件的图标和文本的方式来自绘实现 Log: Influence: 任务栏右侧电源按钮,调整任务栏尺寸 Task: https://pms.uniontech.com/task-view-110311.html Change-Id: Iee19bd8af12506124bd4ef37805c68671a09651f
This commit is contained in:
parent
5fac561991
commit
e9db102f26
@ -59,7 +59,7 @@ void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, con
|
||||
connect(static_cast<TrayPluginItem *>(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<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
|
@ -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;
|
||||
|
@ -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<QHBoxLayout *>(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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: donghualin <donghualin@uniontech.com>
|
||||
@ -25,6 +25,7 @@
|
||||
|
||||
#include <DListView>
|
||||
#include <QBoxLayout>
|
||||
#include <QDir>
|
||||
#include <QMetaObject>
|
||||
|
||||
#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<StretchPluginsItem *>(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<StretchPluginsItem *>(childObject);
|
||||
if (!childItem)
|
||||
continue;
|
||||
|
||||
PluginsItem *item = qobject_cast<PluginsItem *>(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<PluginsItem *>(widget);
|
||||
int itemHeight = 0;
|
||||
for (QObject *childObject : childs) {
|
||||
StretchPluginsItem *item = qobject_cast<StretchPluginsItem *>(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<QFont> 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);
|
||||
}
|
||||
|
@ -26,8 +26,8 @@
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
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<StretchPluginsItem *> 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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user