|
| 1 | +// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. |
| 2 | +// |
| 3 | +// SPDX-License-Identifier: LGPL-3.0-or-later |
| 4 | + |
| 5 | +#include "clipboarditem.h" |
| 6 | +#include "constants.h" |
| 7 | +#include "clipboardcontroller.h" |
| 8 | + |
| 9 | +#include <DDBusSender> |
| 10 | +#include <DGuiApplicationHelper> |
| 11 | + |
| 12 | +#include <QDBusConnection> |
| 13 | +#include <QIcon> |
| 14 | +#include <QJsonDocument> |
| 15 | +#include <QPainter> |
| 16 | +#include <QVBoxLayout> |
| 17 | +#include <QMouseEvent> |
| 18 | + |
| 19 | +DGUI_USE_NAMESPACE |
| 20 | + |
| 21 | +#define SHIFT "shift" |
| 22 | + |
| 23 | +ClipboardItem::ClipboardItem(QWidget* parent) |
| 24 | + : QWidget(parent) |
| 25 | + , m_tipsLabel(new TipsWidget(this)) |
| 26 | + , m_icon(new CommonIconButton(this)) |
| 27 | +{ |
| 28 | + init(); |
| 29 | +} |
| 30 | + |
| 31 | +void ClipboardItem::init() |
| 32 | +{ |
| 33 | + m_tipsLabel->setVisible(false); |
| 34 | + m_tipsLabel->setText(tr("Clipboard")); |
| 35 | + |
| 36 | + m_icon->setFixedSize(Dock::DOCK_PLUGIN_ITEM_FIXED_SIZE); |
| 37 | + m_icon->setIcon(QIcon::fromTheme("clipboard")); |
| 38 | + m_icon->setClickable(true); |
| 39 | + |
| 40 | + auto vLayout = new QVBoxLayout(this); |
| 41 | + vLayout->setSpacing(0); |
| 42 | + vLayout->setMargin(0); |
| 43 | + vLayout->addWidget(m_icon, 0, Qt::AlignCenter); |
| 44 | + |
| 45 | + refreshIcon(); |
| 46 | + |
| 47 | + connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &ClipboardItem::refreshIcon); |
| 48 | + connect(m_icon, &CommonIconButton::clicked, this, [] { |
| 49 | + ClipboardController::ref().toggle(); |
| 50 | + }); |
| 51 | +} |
| 52 | + |
| 53 | +QWidget* ClipboardItem::tipsWidget() |
| 54 | +{ |
| 55 | + return m_tipsLabel; |
| 56 | +} |
| 57 | + |
| 58 | +const QString ClipboardItem::contextMenu() const |
| 59 | +{ |
| 60 | + QList<QVariant> items; |
| 61 | + items.reserve(1); |
| 62 | + |
| 63 | + QMap<QString, QVariant> shift; |
| 64 | + shift["itemId"] = SHIFT; |
| 65 | + shift["itemText"] = tr("Open"); |
| 66 | + shift["isActive"] = true; |
| 67 | + items.push_back(shift); |
| 68 | + |
| 69 | + QMap<QString, QVariant> menu; |
| 70 | + menu["items"] = items; |
| 71 | + menu["checkableMenu"] = false; |
| 72 | + menu["singleCheck"] = false; |
| 73 | + |
| 74 | + return QJsonDocument::fromVariant(menu).toJson(); |
| 75 | +} |
| 76 | + |
| 77 | +void ClipboardItem::invokeMenuItem(const QString menuId, const bool checked) |
| 78 | +{ |
| 79 | + Q_UNUSED(menuId); |
| 80 | + Q_UNUSED(checked); |
| 81 | + |
| 82 | + if (menuId == SHIFT) { |
| 83 | + ClipboardController::ref().toggle(); |
| 84 | + Q_EMIT requestHideApplet(); |
| 85 | + } |
| 86 | +} |
| 87 | + |
| 88 | +void ClipboardItem::refreshIcon() |
| 89 | +{ |
| 90 | + m_icon->setState(CommonIconButton::Default); |
| 91 | +} |
| 92 | + |
| 93 | +void ClipboardItem::resizeEvent(QResizeEvent* e) |
| 94 | +{ |
| 95 | + QWidget::resizeEvent(e); |
| 96 | + |
| 97 | + const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>(); |
| 98 | + if (position == Dock::Bottom || position == Dock::Top) { |
| 99 | + setMaximumWidth(height()); |
| 100 | + setMaximumHeight(QWIDGETSIZE_MAX); |
| 101 | + } else { |
| 102 | + setMaximumHeight(width()); |
| 103 | + setMaximumWidth(QWIDGETSIZE_MAX); |
| 104 | + } |
| 105 | + |
| 106 | + refreshIcon(); |
| 107 | +} |
0 commit comments