mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +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,
|
connect(static_cast<TrayPluginItem *>(item), &TrayPluginItem::trayVisableCountChanged,
|
||||||
this, &DockPluginsController::trayVisableCountChanged, Qt::UniqueConnection);
|
this, &DockPluginsController::trayVisableCountChanged, Qt::UniqueConnection);
|
||||||
} else {
|
} else {
|
||||||
item = createPluginsItem(itemInter, itemKey, pluginApi);
|
item = new PluginsItem(itemInter, itemKey, pluginApi);
|
||||||
}
|
}
|
||||||
|
|
||||||
mPluginsMap[itemInter][itemKey] = item;
|
mPluginsMap[itemInter][itemKey] = item;
|
||||||
@ -67,11 +67,6 @@ void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, con
|
|||||||
emit pluginItemInserted(item);
|
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)
|
void DockPluginsController::itemUpdate(PluginsItemInterface *const itemInter, const QString &itemKey)
|
||||||
{
|
{
|
||||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||||
|
@ -54,9 +54,6 @@ public:
|
|||||||
|
|
||||||
void startLoader();
|
void startLoader();
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual PluginsItem *createPluginsItem(PluginsItemInterface *const itemInter, const QString &itemKey, const QString &pluginApi);
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void pluginItemInserted(PluginsItem *pluginItem) const;
|
void pluginItemInserted(PluginsItem *pluginItem) const;
|
||||||
void pluginItemRemoved(PluginsItem *pluginItem) const;
|
void pluginItemRemoved(PluginsItem *pluginItem) const;
|
||||||
|
@ -325,27 +325,3 @@ PluginsItemInterface *PluginsItem::pluginItem() const
|
|||||||
{
|
{
|
||||||
return m_pluginInter;
|
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;
|
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
|
#endif // PLUGINSITEM_H
|
||||||
|
@ -1314,11 +1314,11 @@ void MainPanelControl::resizeDesktopWidget()
|
|||||||
{
|
{
|
||||||
QSize suitableSize = m_trayManagerWidget->suitableSize();
|
QSize suitableSize = m_trayManagerWidget->suitableSize();
|
||||||
if (m_position == Position::Right || m_position == Position::Left) {
|
if (m_position == Position::Right || m_position == Position::Left) {
|
||||||
m_desktopWidget->setFixedSize(width(), DESKTOP_SIZE);
|
m_desktopWidget->setFixedSize(QWIDGETSIZE_MAX, DESKTOP_SIZE);
|
||||||
m_trayManagerWidget->setFixedSize(width(), suitableSize.height());
|
m_trayManagerWidget->setFixedSize(QWIDGETSIZE_MAX, suitableSize.height());
|
||||||
} else {
|
} else {
|
||||||
m_desktopWidget->setFixedSize(DESKTOP_SIZE, height());
|
m_desktopWidget->setFixedSize(DESKTOP_SIZE, QWIDGETSIZE_MAX);
|
||||||
m_trayManagerWidget->setFixedSize(suitableSize.width(), height());
|
m_trayManagerWidget->setFixedSize(suitableSize.width(), QWIDGETSIZE_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisplayMode::Fashion == m_dislayMode)
|
if (DisplayMode::Fashion == m_dislayMode)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
* Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||||
*
|
*
|
||||||
* Author: donghualin <donghualin@uniontech.com>
|
* Author: donghualin <donghualin@uniontech.com>
|
||||||
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <DListView>
|
#include <DListView>
|
||||||
#include <QBoxLayout>
|
#include <QBoxLayout>
|
||||||
|
#include <QDir>
|
||||||
#include <QMetaObject>
|
#include <QMetaObject>
|
||||||
|
|
||||||
#define MAXICONSIZE 48
|
#define MAXICONSIZE 48
|
||||||
@ -39,10 +40,10 @@ SystemPluginWindow::SystemPluginWindow(QWidget *parent)
|
|||||||
, m_mainLayout(new QBoxLayout(QBoxLayout::Direction::LeftToRight, this))
|
, m_mainLayout(new QBoxLayout(QBoxLayout::Direction::LeftToRight, this))
|
||||||
{
|
{
|
||||||
initUi();
|
initUi();
|
||||||
connect(m_pluginController, &DockPluginsController::pluginItemInserted, this, &SystemPluginWindow::onPluginItemAdded);
|
connect(m_pluginController, &FixedPluginController::pluginItemInserted, this, &SystemPluginWindow::onPluginItemAdded);
|
||||||
connect(m_pluginController, &DockPluginsController::pluginItemRemoved, this, &SystemPluginWindow::onPluginItemRemoved);
|
connect(m_pluginController, &FixedPluginController::pluginItemRemoved, this, &SystemPluginWindow::onPluginItemRemoved);
|
||||||
connect(m_pluginController, &DockPluginsController::pluginItemUpdated, this, &SystemPluginWindow::onPluginItemUpdated);
|
connect(m_pluginController, &FixedPluginController::pluginItemUpdated, this, &SystemPluginWindow::onPluginItemUpdated);
|
||||||
QMetaObject::invokeMethod(m_pluginController, &DockPluginsController::startLoader, Qt::QueuedConnection);
|
QMetaObject::invokeMethod(m_pluginController, &FixedPluginController::startLoader, Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemPluginWindow::~SystemPluginWindow()
|
SystemPluginWindow::~SystemPluginWindow()
|
||||||
@ -60,52 +61,43 @@ void SystemPluginWindow::setPositon(Position position)
|
|||||||
m_mainLayout->setDirection(QBoxLayout::Direction::LeftToRight);
|
m_mainLayout->setDirection(QBoxLayout::Direction::LeftToRight);
|
||||||
else
|
else
|
||||||
m_mainLayout->setDirection(QBoxLayout::Direction::TopToBottom);
|
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()
|
QSize SystemPluginWindow::suitableSize()
|
||||||
{
|
{
|
||||||
QMargins m = m_mainLayout->contentsMargins();
|
QObjectList childs = children();
|
||||||
if (m_mainLayout->direction() == QBoxLayout::Direction::LeftToRight) {
|
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
||||||
int itemSize = height() - m_mainLayout->contentsMargins().top() - m_mainLayout->contentsMargins().bottom();
|
int itemWidth = 0;
|
||||||
int itemWidth = m.left() + m.right();
|
for (QObject *childObject : childs) {
|
||||||
for (int i = 0; i < m_mainLayout->count(); i++) {
|
StretchPluginsItem *childItem = qobject_cast<StretchPluginsItem *>(childObject);
|
||||||
QWidget *widget = m_mainLayout->itemAt(i)->widget();
|
if (!childItem)
|
||||||
if (!widget)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
PluginsItem *item = qobject_cast<PluginsItem *>(widget);
|
itemWidth += childItem->suitableSize().width();
|
||||||
if (!item)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// 如果是横向的,则高度是固定,高宽一致,因此读取高度作为它的尺寸值
|
|
||||||
itemWidth += itemSize;
|
|
||||||
if (i < m_mainLayout->count() - 1)
|
|
||||||
itemWidth += m_mainLayout->spacing();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
itemWidth += m.right();
|
return QSize(itemWidth, QWIDGETSIZE_MAX);
|
||||||
return QSize(itemWidth, height());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int itemSize = width() - m_mainLayout->contentsMargins().left() - m_mainLayout->contentsMargins().right();
|
int itemHeight = 0;
|
||||||
int itemHeight = m.top();
|
for (QObject *childObject : childs) {
|
||||||
for (int i = 0; i < m_mainLayout->count(); i++) {
|
StretchPluginsItem *item = qobject_cast<StretchPluginsItem *>(childObject);
|
||||||
QWidget *widget = m_mainLayout->itemAt(i)->widget();
|
|
||||||
if (!widget)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
PluginsItem *item = qobject_cast<PluginsItem *>(widget);
|
|
||||||
if (!item)
|
if (!item)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
itemHeight += itemSize;
|
itemHeight += item->suitableSize().height();
|
||||||
if (i < m_mainLayout->count() - 1)
|
|
||||||
itemHeight += m_mainLayout->spacing();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
itemHeight += m.bottom();
|
return QSize(QWIDGETSIZE_MAX, itemHeight);
|
||||||
|
|
||||||
return QSize(width(), itemHeight);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemPluginWindow::resizeEvent(QResizeEvent *event)
|
void SystemPluginWindow::resizeEvent(QResizeEvent *event)
|
||||||
@ -116,68 +108,239 @@ void SystemPluginWindow::resizeEvent(QResizeEvent *event)
|
|||||||
|
|
||||||
void SystemPluginWindow::initUi()
|
void SystemPluginWindow::initUi()
|
||||||
{
|
{
|
||||||
m_mainLayout->setContentsMargins(8, 8, 8, 8);
|
m_mainLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
m_mainLayout->setSpacing(5);
|
m_mainLayout->setSpacing(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SystemPluginWindow::calcIconSize() const
|
void SystemPluginWindow::onPluginItemAdded(StretchPluginsItem *pluginItem)
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
if (m_mainLayout->children().contains(pluginItem))
|
if (m_mainLayout->children().contains(pluginItem))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
pluginItem->setPosition(m_position);
|
||||||
|
pluginItem->setParent(this);
|
||||||
|
pluginItem->show();
|
||||||
m_mainLayout->addWidget(pluginItem);
|
m_mainLayout->addWidget(pluginItem);
|
||||||
Q_EMIT sizeChanged();
|
Q_EMIT sizeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemPluginWindow::onPluginItemRemoved(PluginsItem *pluginItem)
|
void SystemPluginWindow::onPluginItemRemoved(StretchPluginsItem *pluginItem)
|
||||||
{
|
{
|
||||||
if (!m_mainLayout->children().contains(pluginItem))
|
if (!m_mainLayout->children().contains(pluginItem))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
pluginItem->setParent(nullptr);
|
||||||
|
pluginItem->hide();
|
||||||
m_mainLayout->removeWidget(pluginItem);
|
m_mainLayout->removeWidget(pluginItem);
|
||||||
Q_EMIT sizeChanged();
|
Q_EMIT sizeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemPluginWindow::onPluginItemUpdated(PluginsItem *pluginItem)
|
void SystemPluginWindow::onPluginItemUpdated(StretchPluginsItem *pluginItem)
|
||||||
{
|
{
|
||||||
pluginItem->refreshIcon();
|
pluginItem->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
// can loader plugins
|
// can loader plugins
|
||||||
FixedPluginController::FixedPluginController(QObject *parent)
|
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)
|
bool FixedPluginController::needLoad(PluginsItemInterface *itemInter)
|
||||||
{
|
{
|
||||||
return (itemInter->pluginName().compare("shutdown") == 0);
|
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>
|
#include <QWidget>
|
||||||
|
|
||||||
class DockPluginsController;
|
class FixedPluginController;
|
||||||
class PluginsItem;
|
class StretchPluginsItem;
|
||||||
class QBoxLayout;
|
class QBoxLayout;
|
||||||
|
|
||||||
namespace Dtk { namespace Widget { class DListView; } }
|
namespace Dtk { namespace Widget { class DListView; } }
|
||||||
@ -47,33 +47,80 @@ public:
|
|||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void sizeChanged();
|
void sizeChanged();
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
void initUi();
|
|
||||||
int calcIconSize() const;
|
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void initUi();
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void onPluginItemAdded(PluginsItem *pluginItem);
|
void onPluginItemAdded(StretchPluginsItem *pluginItem);
|
||||||
void onPluginItemRemoved(PluginsItem *pluginItem);
|
void onPluginItemRemoved(StretchPluginsItem *pluginItem);
|
||||||
void onPluginItemUpdated(PluginsItem *pluginItem);
|
void onPluginItemUpdated(StretchPluginsItem *pluginItem);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DockPluginsController *m_pluginController;
|
FixedPluginController *m_pluginController;
|
||||||
DListView *m_listView;
|
DListView *m_listView;
|
||||||
Dock::Position m_position;
|
Dock::Position m_position;
|
||||||
QBoxLayout *m_mainLayout;
|
QBoxLayout *m_mainLayout;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FixedPluginController : public DockPluginsController
|
class FixedPluginController : public AbstractPluginsController
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit FixedPluginController(QObject *parent);
|
explicit FixedPluginController(QObject *parent);
|
||||||
|
void startLoader();
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void pluginItemInserted(StretchPluginsItem *);
|
||||||
|
void pluginItemRemoved(StretchPluginsItem *);
|
||||||
|
void pluginItemUpdated(StretchPluginsItem *);
|
||||||
|
|
||||||
protected:
|
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;
|
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
|
#endif // SYSTEMPLUGINWINDOW_H
|
||||||
|
@ -115,12 +115,9 @@ int TrayManagerWindow::appDatetimeSize()
|
|||||||
}
|
}
|
||||||
|
|
||||||
int trayHeight = m_trayView->suitableSize().height();
|
int trayHeight = m_trayView->suitableSize().height();
|
||||||
int datetimeHeight = m_dateTimeWidget->suitableSize().height();
|
|
||||||
QMargins m = m_appDatetimeLayout->contentsMargins();
|
QMargins m = m_appDatetimeLayout->contentsMargins();
|
||||||
int traypluginHeight = trayHeight + m_quickIconWidget->suitableSize().height() + m.top() + m.bottom() + m_appPluginLayout->spacing();
|
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 + m_appDatetimeLayout->spacing() + m_dateTimeWidget->suitableSize().height() + 10;
|
|
||||||
return (traypluginHeight > datetimeHeight ? traypluginHeight : datetimeHeight) + 10;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize TrayManagerWindow::suitableSize()
|
QSize TrayManagerWindow::suitableSize()
|
||||||
@ -129,10 +126,10 @@ QSize TrayManagerWindow::suitableSize()
|
|||||||
if (m_postion == Dock::Position::Top || m_postion == Dock::Position::Bottom) {
|
if (m_postion == Dock::Position::Top || m_postion == Dock::Position::Bottom) {
|
||||||
return QSize(appDatetimeSize() + m_appDatetimeLayout->spacing() +
|
return QSize(appDatetimeSize() + m_appDatetimeLayout->spacing() +
|
||||||
m_systemPluginWidget->suitableSize().width() + m_mainLayout->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_systemPluginWidget->suitableSize().height() + m_mainLayout->spacing() +
|
||||||
m.top() + m.bottom());
|
m.top() + m.bottom());
|
||||||
}
|
}
|
||||||
@ -317,7 +314,6 @@ void TrayManagerWindow::resetChildWidgetSize()
|
|||||||
case Dock::Position::Bottom: {
|
case Dock::Position::Bottom: {
|
||||||
int trayWidth = m_trayView->suitableSize().width();
|
int trayWidth = m_trayView->suitableSize().width();
|
||||||
QMargins m = m_appPluginLayout->contentsMargins();
|
QMargins m = m_appPluginLayout->contentsMargins();
|
||||||
m_appPluginDatetimeWidget->setFixedHeight(QWIDGETSIZE_MAX);// 取消固定高度显示
|
|
||||||
if (m_appDatetimeLayout->direction() == QBoxLayout::Direction::LeftToRight) {
|
if (m_appDatetimeLayout->direction() == QBoxLayout::Direction::LeftToRight) {
|
||||||
// 单行显示
|
// 单行显示
|
||||||
int trayHeight = m_appPluginDatetimeWidget->height() - m.top() - m.bottom();
|
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_appPluginWidget->setFixedSize(trayWidth + m_quickIconWidget->suitableSize().width(), trayHeight);
|
||||||
m_dateTimeWidget->setFixedSize(m_dateTimeWidget->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->setContentsMargins(4, 4, 4 ,4);
|
||||||
m_mainLayout->setSpacing(4);
|
m_mainLayout->setSpacing(4);
|
||||||
m_appDatetimeLayout->setSpacing(4);
|
m_appDatetimeLayout->setSpacing(4);
|
||||||
} else {
|
} else {
|
||||||
// 多行显示
|
// 多行显示
|
||||||
m_trayView->setFixedSize(trayWidth, QWIDGETSIZE_MAX);
|
int trayHeight = m_appPluginDatetimeWidget->height() / 2 + 4 - m.top() - m.bottom();
|
||||||
m_quickIconWidget->setFixedSize(m_quickIconWidget->suitableSize().width(), QWIDGETSIZE_MAX);
|
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);
|
m_appPluginWidget->setFixedSize(trayWidth + m_quickIconWidget->suitableSize().width(), m_appPluginDatetimeWidget->height() / 2 + 4);
|
||||||
// 因为是两行,所以对于时间控件的尺寸,只能设置最小值
|
// 因为是两行,所以对于时间控件的尺寸,只能设置最小值
|
||||||
int dateTimeWidth = qMax(m_appPluginWidget->width(), m_dateTimeWidget->suitableSize().width());
|
int dateTimeWidth = qMax(m_appPluginWidget->width(), m_dateTimeWidget->suitableSize().width());
|
||||||
m_dateTimeWidget->setMinimumSize(dateTimeWidth, QWIDGETSIZE_MAX);
|
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;
|
int contentSpace = qMin(MAXDIFF, qMax(height() - MINHIGHT, 0)) + MINSPACE;
|
||||||
m_mainLayout->setContentsMargins(contentSpace, contentSpace, contentSpace, contentSpace);
|
m_mainLayout->setContentsMargins(contentSpace, contentSpace, contentSpace, contentSpace);
|
||||||
m_appDatetimeLayout->setSpacing(0);
|
m_appDatetimeLayout->setSpacing(0);
|
||||||
m_mainLayout->setSpacing(contentSpace);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case Dock::Position::Left:
|
case Dock::Position::Left:
|
||||||
@ -353,7 +351,6 @@ void TrayManagerWindow::resetChildWidgetSize()
|
|||||||
int trayHeight = m_trayView->suitableSize().height();
|
int trayHeight = m_trayView->suitableSize().height();
|
||||||
int quickAreaHeight = m_quickIconWidget->suitableSize().height();
|
int quickAreaHeight = m_quickIconWidget->suitableSize().height();
|
||||||
QMargins m = m_appPluginLayout->contentsMargins();
|
QMargins m = m_appPluginLayout->contentsMargins();
|
||||||
m_appPluginDatetimeWidget->setFixedWidth(QWIDGETSIZE_MAX);// 取消固定宽度显示
|
|
||||||
// 左右方向始终只有一列
|
// 左右方向始终只有一列
|
||||||
int datetimeHeight = m_dateTimeWidget->suitableSize().height();
|
int datetimeHeight = m_dateTimeWidget->suitableSize().height();
|
||||||
int sizeWidth = m_appPluginDatetimeWidget->width() - m.left() - m.right();
|
int sizeWidth = m_appPluginDatetimeWidget->width() - m.left() - m.right();
|
||||||
@ -361,13 +358,15 @@ void TrayManagerWindow::resetChildWidgetSize()
|
|||||||
m_quickIconWidget->setFixedSize(sizeWidth, quickAreaHeight);
|
m_quickIconWidget->setFixedSize(sizeWidth, quickAreaHeight);
|
||||||
m_dateTimeWidget->setFixedSize(sizeWidth, datetimeHeight);
|
m_dateTimeWidget->setFixedSize(sizeWidth, datetimeHeight);
|
||||||
m_appPluginWidget->setFixedSize(sizeWidth, trayHeight + quickAreaHeight);
|
m_appPluginWidget->setFixedSize(sizeWidth, trayHeight + quickAreaHeight);
|
||||||
m_appPluginDatetimeWidget->setFixedHeight(appDatetimeSize());
|
m_systemPluginWidget->setFixedSize(m_systemPluginWidget->suitableSize());
|
||||||
m_systemPluginWidget->setFixedSize(QWIDGETSIZE_MAX, m_systemPluginWidget->suitableSize().height());
|
|
||||||
|
|
||||||
int contentSpace = qMin(MAXDIFF, qMax(width() - MINHIGHT, 0)) + MINSPACE;
|
int contentSpace = qMin(MAXDIFF, qMax(width() - MINHIGHT, 0)) + MINSPACE;
|
||||||
m_mainLayout->setContentsMargins(contentSpace, contentSpace, contentSpace, contentSpace);
|
m_mainLayout->setContentsMargins(contentSpace, contentSpace, contentSpace, contentSpace);
|
||||||
m_appDatetimeLayout->setSpacing(0);
|
m_appDatetimeLayout->setSpacing(0);
|
||||||
m_mainLayout->setSpacing(contentSpace);
|
m_mainLayout->setSpacing(contentSpace);
|
||||||
|
|
||||||
|
int appDateWidth = width() - (contentSpace * 2);
|
||||||
|
m_appPluginDatetimeWidget->setFixedSize(appDateWidth, appDatetimeSize());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user