mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
add plugins setting window
Change-Id: Ic9817c9c3385c9fff880bc7ae7da475d6f0439ab
This commit is contained in:
parent
7fc70a5d97
commit
f8d3dd42f2
Notes:
Deepin Code Review
2016-06-14 07:19:47 +00:00
Verified+1: Anonymous Coward #1000004 Code-Review+2: <mr.asianwang@gmail.com> Submitted-by: <mr.asianwang@gmail.com> Submitted-at: Sun, 06 Sep 2015 11:21:20 +0800 Reviewed-on: https://cr.deepin.io/6767 Project: dde/dde-dock Branch: refs/heads/master
@ -67,10 +67,10 @@ QWidget * TrashPlugin::getApplet(QString)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void TrashPlugin::changeMode(Dock::DockMode newMode,
|
||||
Dock::DockMode)
|
||||
void TrashPlugin::changeMode(Dock::DockMode newMode, Dock::DockMode oldMode)
|
||||
{
|
||||
setMode(newMode);
|
||||
if (newMode != oldMode)
|
||||
setMode(newMode);
|
||||
}
|
||||
|
||||
QString TrashPlugin::getMenuContent(QString)
|
||||
@ -99,8 +99,10 @@ void TrashPlugin::setMode(Dock::DockMode mode)
|
||||
|
||||
if (mode == Dock::FashionMode)
|
||||
m_proxy->itemAddedEvent(m_id);
|
||||
else
|
||||
else{
|
||||
m_proxy->itemRemovedEvent(m_id);
|
||||
m_item->setParent(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
QJsonObject TrashPlugin::createMenuItem(QString itemId, QString itemName, bool checkable, bool checked)
|
||||
@ -121,7 +123,6 @@ QJsonObject TrashPlugin::createMenuItem(QString itemId, QString itemName, bool c
|
||||
return itemObj;
|
||||
}
|
||||
|
||||
|
||||
TrashPlugin::~TrashPlugin()
|
||||
{
|
||||
|
||||
|
@ -63,3 +63,32 @@ PanelMenuItem:hover {
|
||||
background: gray;
|
||||
color: #ffffff
|
||||
}
|
||||
|
||||
/********************************Plugin Setting********************/
|
||||
QLabel#PluginSettingTitle {
|
||||
color:#b4b4b4;
|
||||
}
|
||||
|
||||
QLabel#PluginSettingLineTitle {
|
||||
color:#b4b4b4;
|
||||
}
|
||||
|
||||
QWidget#PluginsSettingFrame {
|
||||
background-color: rgba(0,0,0,0.9);
|
||||
border-radius: 3;
|
||||
}
|
||||
|
||||
QPushButton#PluginSettingCloseButton{
|
||||
|
||||
border-image: url(":/images/Resource/dark/images/dark_close_small_normal.png");
|
||||
}
|
||||
|
||||
QPushButton#PluginSettingCloseButton:hover{
|
||||
border-image: url(":/images/Resource/dark/images/dark_close_small_hover.png");
|
||||
}
|
||||
|
||||
|
||||
QPushButton#PluginSettingCloseButton:pressed{
|
||||
border-image: url(":/images/Resource/dark/images/dark_close_small_press.png");
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,8 @@ SOURCES += \
|
||||
src/Widgets/launcheritem.cpp \
|
||||
src/Widgets/reflectioneffect.cpp \
|
||||
src/Widgets/highlighteffect.cpp \
|
||||
src/Widgets/previewarrowrectangle.cpp
|
||||
src/Widgets/previewarrowrectangle.cpp \
|
||||
src/Panel/pluginssettingframe.cpp
|
||||
|
||||
HEADERS += \
|
||||
src/abstractdockitem.h \
|
||||
@ -84,13 +85,14 @@ HEADERS += \
|
||||
src/Widgets/launcheritem.h \
|
||||
src/Widgets/reflectioneffect.h \
|
||||
src/Widgets/highlighteffect.h \
|
||||
src/Widgets/previewarrowrectangle.h
|
||||
src/Widgets/previewarrowrectangle.h \
|
||||
src/Panel/pluginssettingframe.h
|
||||
|
||||
RESOURCES += \
|
||||
images.qrc \
|
||||
qss.qrc
|
||||
|
||||
PKGCONFIG += gtk+-2.0 x11 cairo xcb xcb-ewmh xcb-damage
|
||||
PKGCONFIG += gtk+-2.0 x11 cairo xcb xcb-ewmh xcb-damage dui
|
||||
CONFIG += c++11 link_pkgconfig
|
||||
|
||||
target.path = /usr/bin/
|
||||
|
@ -107,6 +107,10 @@ void Panel::initPluginManager()
|
||||
connect(pluginManager, &DockPluginManager::itemRemoved, [=](AbstractDockItem* item) {
|
||||
m_pluginLayout->removeItem(item);
|
||||
});
|
||||
connect(PanelMenu::instance(), &PanelMenu::settingPlugin, [=]{
|
||||
QRect rec = QApplication::desktop()->screenGeometry();
|
||||
pluginManager->onPluginsSetting(rec.height() - height());
|
||||
});
|
||||
|
||||
pluginManager->initAll();
|
||||
}
|
||||
|
@ -77,6 +77,9 @@ void PanelMenu::slotItemInvoked(const QString &itemId, bool result)
|
||||
case ToSmartHide:
|
||||
changeToSmartHide();
|
||||
break;
|
||||
case ToPluginSetting:
|
||||
emit settingPlugin();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ public:
|
||||
|
||||
void showMenu(int x,int y);
|
||||
signals:
|
||||
void settingPlugin();
|
||||
|
||||
private slots:
|
||||
void slotItemInvoked(const QString &itemId,bool result);
|
||||
|
171
dde-dock/src/Panel/pluginssettingframe.cpp
Normal file
171
dde-dock/src/Panel/pluginssettingframe.cpp
Normal file
@ -0,0 +1,171 @@
|
||||
#include "pluginssettingframe.h"
|
||||
|
||||
PluginsSettingLine::PluginsSettingLine(bool checked, const QString &id, const QString &title, const QPixmap &icon, QWidget *parent)
|
||||
:m_pluginId(id), QLabel(parent)
|
||||
{
|
||||
QHBoxLayout *mainLayout = new QHBoxLayout(this);
|
||||
mainLayout->setContentsMargins(CONTENT_MARGIN, 0, CONTENT_MARGIN, 0);
|
||||
mainLayout->setSpacing(0);
|
||||
|
||||
m_iconLabel = new QLabel;
|
||||
m_iconLabel->setFixedSize(ICON_SIZE, ICON_SIZE);
|
||||
m_iconLabel->setPixmap(icon.scaled(ICON_SIZE, ICON_SIZE));
|
||||
|
||||
m_titleLabel = new QLabel;
|
||||
m_titleLabel->setObjectName("PluginSettingLineTitle");
|
||||
m_titleLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
|
||||
setTitle(title);
|
||||
|
||||
m_switchButton = new DSwitchButton;
|
||||
m_switchButton->setChecked(checked);
|
||||
connect(m_switchButton, &DSwitchButton::checkedChanged, [=](bool checked){
|
||||
emit disableChanged(m_pluginId, !checked);
|
||||
});
|
||||
|
||||
mainLayout->addWidget(m_iconLabel);
|
||||
mainLayout->addSpacing(ICON_SPACING);
|
||||
mainLayout->addWidget(m_titleLabel);
|
||||
mainLayout->addStretch();
|
||||
mainLayout->addWidget(m_switchButton);
|
||||
}
|
||||
|
||||
void PluginsSettingLine::setTitle(const QString &title)
|
||||
{
|
||||
m_titleLabel->setText(title);
|
||||
|
||||
QFontMetrics fm(m_titleLabel->font());
|
||||
m_titleLabel->setText(fm.elidedText(title,Qt::ElideRight, MAX_TEXT_WIDTH));
|
||||
}
|
||||
|
||||
void PluginsSettingLine::setIcon(const QPixmap &icon)
|
||||
{
|
||||
m_iconLabel->setPixmap(icon.scaled(ICON_SIZE, ICON_SIZE));
|
||||
}
|
||||
|
||||
QString PluginsSettingLine::pluginId() const
|
||||
{
|
||||
return m_pluginId;
|
||||
}
|
||||
|
||||
bool PluginsSettingLine::checked(bool check)
|
||||
{
|
||||
return m_switchButton->checked();
|
||||
}
|
||||
|
||||
void PluginsSettingLine::setPluginId(const QString &pluginId)
|
||||
{
|
||||
m_pluginId = pluginId;
|
||||
}
|
||||
|
||||
void PluginsSettingLine::setChecked(const bool checked)
|
||||
{
|
||||
m_switchButton->setChecked(checked);
|
||||
}
|
||||
|
||||
|
||||
PluginsSettingFrame::PluginsSettingFrame(QWidget *parent) :
|
||||
QFrame(parent)
|
||||
{
|
||||
setObjectName("PluginsSettingFrame");
|
||||
setAttribute(Qt::WA_TranslucentBackground);
|
||||
setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
|
||||
|
||||
QWidget *contentFrame = new QWidget;
|
||||
contentFrame->setObjectName("PluginsSettingFrame");
|
||||
QVBoxLayout *contentLayout = new QVBoxLayout(this);
|
||||
contentLayout->setContentsMargins(0, 0, 0, 0);
|
||||
contentLayout->setSpacing(0);
|
||||
contentLayout->addWidget(contentFrame);
|
||||
|
||||
m_mainLayout = new QVBoxLayout(contentFrame);
|
||||
m_mainLayout->setSpacing(LINE_SPACING);
|
||||
m_mainLayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
initCloseTitle();
|
||||
|
||||
setFixedWidth(WIN_WIDTH);
|
||||
}
|
||||
|
||||
void PluginsSettingFrame::onPluginAdd(bool checked, const QString &id, const QString &title, const QPixmap &icon)
|
||||
{
|
||||
if (m_lineMap.keys().indexOf(id) != -1)
|
||||
return;
|
||||
|
||||
PluginsSettingLine *line = new PluginsSettingLine(checked, id, title, icon);
|
||||
connect(line, &PluginsSettingLine::disableChanged, this, &PluginsSettingFrame::disableChanged);
|
||||
|
||||
m_mainLayout->addWidget(line, 1, Qt::AlignTop);
|
||||
|
||||
m_lineMap.insert(id, line);
|
||||
|
||||
resizeWithLineCount();
|
||||
}
|
||||
|
||||
void PluginsSettingFrame::onPluginRemove(const QString &id)
|
||||
{
|
||||
PluginsSettingLine * line = m_lineMap.take(id);
|
||||
if (line){
|
||||
m_mainLayout->removeWidget(line);
|
||||
line->deleteLater();
|
||||
|
||||
resizeWithLineCount();
|
||||
}
|
||||
}
|
||||
|
||||
void PluginsSettingFrame::clear()
|
||||
{
|
||||
foreach (QString uuid, m_lineMap.keys()) {
|
||||
m_lineMap.take(uuid)->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
void PluginsSettingFrame::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
move(event->globalPos() - m_pressPosition);
|
||||
QFrame::mouseMoveEvent(event);
|
||||
}
|
||||
|
||||
void PluginsSettingFrame::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
if(event->button() & Qt::LeftButton)
|
||||
{
|
||||
m_pressPosition = event->globalPos() - frameGeometry().topLeft();
|
||||
}
|
||||
QFrame::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void PluginsSettingFrame::mouseReleaseEvent(QMouseEvent *event)
|
||||
{
|
||||
QFrame::mouseReleaseEvent(event);
|
||||
}
|
||||
|
||||
void PluginsSettingFrame::resizeWithLineCount()
|
||||
{
|
||||
setFixedHeight((m_lineMap.count() + 1) * (LINE_HEIGHT + LINE_SPACING));
|
||||
}
|
||||
|
||||
void PluginsSettingFrame::initCloseTitle()
|
||||
{
|
||||
QLabel *titleLabel = new QLabel(tr("Notice Region Setting"));
|
||||
titleLabel->setAlignment(Qt::AlignCenter);
|
||||
titleLabel->setObjectName("PluginSettingTitle");
|
||||
QPushButton *closeButton = new QPushButton;
|
||||
closeButton->setFocusPolicy(Qt::NoFocus);
|
||||
closeButton->setFixedSize(ICON_SIZE, ICON_SIZE);
|
||||
closeButton->setObjectName("PluginSettingCloseButton");
|
||||
connect(closeButton, &QPushButton::clicked, [=]{
|
||||
this->hide();
|
||||
});
|
||||
|
||||
QHBoxLayout *titleLayout = new QHBoxLayout;
|
||||
titleLayout->setAlignment(Qt::AlignVCenter);
|
||||
titleLayout->setContentsMargins(0, CONTENT_MARGIN, CONTENT_MARGIN, 0);
|
||||
titleLayout->setSpacing(0);
|
||||
|
||||
titleLayout->addWidget(titleLabel, 1);
|
||||
titleLayout->addWidget(closeButton, 1);
|
||||
|
||||
m_mainLayout->addLayout(titleLayout, 1);
|
||||
DSeparatorHorizontal *sp = new DSeparatorHorizontal;
|
||||
m_mainLayout->addWidget(sp);
|
||||
}
|
87
dde-dock/src/Panel/pluginssettingframe.h
Normal file
87
dde-dock/src/Panel/pluginssettingframe.h
Normal file
@ -0,0 +1,87 @@
|
||||
#ifndef PLUGINSSETTINGFRAME_H
|
||||
#define PLUGINSSETTINGFRAME_H
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QMouseEvent>
|
||||
#include <QPushButton>
|
||||
#include <QFrame>
|
||||
#include <QLabel>
|
||||
#include <QDebug>
|
||||
#include <libdui/dswitchbutton.h>
|
||||
#include <libdui/dseparatorhorizontal.h>
|
||||
|
||||
DUI_USE_NAMESPACE
|
||||
|
||||
class PluginsSettingLine : public QLabel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PluginsSettingLine(bool checked = false,
|
||||
const QString &id = "",
|
||||
const QString &title = "",
|
||||
const QPixmap &icon = QPixmap(),
|
||||
QWidget *parent = 0);
|
||||
|
||||
void setIcon(const QPixmap &icon);
|
||||
void setTitle(const QString &title);
|
||||
void setPluginId(const QString &pluginId);
|
||||
void setChecked(const bool checked);
|
||||
|
||||
QString pluginId() const;
|
||||
bool checked(bool check);
|
||||
|
||||
signals:
|
||||
void disableChanged(QString id, bool check);
|
||||
|
||||
private:
|
||||
QLabel *m_iconLabel = NULL;
|
||||
QLabel *m_titleLabel = NULL;
|
||||
DSwitchButton *m_switchButton = NULL;
|
||||
|
||||
QString m_pluginId = "";
|
||||
|
||||
const int ICON_SIZE = 16;
|
||||
const int ICON_SPACING = 6;
|
||||
const int CONTENT_MARGIN = 6;
|
||||
const int MAX_TEXT_WIDTH = 125;
|
||||
};
|
||||
|
||||
class PluginsSettingFrame : public QFrame
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PluginsSettingFrame(QWidget *parent = 0);
|
||||
|
||||
public slots:
|
||||
void onPluginAdd(bool checked = false,
|
||||
const QString &id = "",
|
||||
const QString &title = "",
|
||||
const QPixmap &icon = QPixmap());
|
||||
void onPluginRemove(const QString &id);
|
||||
void clear();
|
||||
|
||||
signals:
|
||||
void disableChanged(QString id, bool check);
|
||||
|
||||
protected:
|
||||
void mouseMoveEvent(QMouseEvent *event);
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
void mouseReleaseEvent(QMouseEvent *event);
|
||||
|
||||
private:
|
||||
void resizeWithLineCount();
|
||||
void initCloseTitle();
|
||||
|
||||
QPoint m_pressPosition;
|
||||
QVBoxLayout *m_mainLayout;
|
||||
QMap<QString, PluginsSettingLine *> m_lineMap;
|
||||
|
||||
const int ICON_SIZE = 24;
|
||||
const int CONTENT_MARGIN = 6;
|
||||
const int LINE_SPACING = 5;
|
||||
const int LINE_HEIGHT = 30;
|
||||
const int WIN_WIDTH = 230;
|
||||
};
|
||||
|
||||
#endif // PLUGINSSETTINGFRAME_H
|
@ -21,7 +21,6 @@ signals:
|
||||
void pressed();
|
||||
void released();
|
||||
|
||||
public slots:
|
||||
private:
|
||||
void setIcon(const QString &path);
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef DOCKPLUGININTERFACE_H
|
||||
#define DOCKPLUGININTERFACE_H
|
||||
|
||||
#include <QPixmap>
|
||||
#include <QObject>
|
||||
#include <QStringList>
|
||||
|
||||
@ -21,6 +22,7 @@ public:
|
||||
virtual QString getName(QString id) = 0;
|
||||
virtual QString getTitle(QString id) = 0;
|
||||
virtual QString getCommand(QString id) = 0;
|
||||
virtual QPixmap getIcon(QString id) {Q_UNUSED(id); return QPixmap("");}
|
||||
virtual bool canDisable(QString id) = 0;
|
||||
virtual bool isDisabled(QString id) = 0;
|
||||
virtual void setDisabled(QString id, bool disabled) = 0;
|
||||
|
@ -10,6 +10,8 @@
|
||||
DockPluginManager::DockPluginManager(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
m_settingFrame = new PluginsSettingFrame;
|
||||
|
||||
m_searchPaths << "/usr/share/dde-dock/plugins/";
|
||||
|
||||
m_watcher = new QFileSystemWatcher(this);
|
||||
@ -27,6 +29,8 @@ DockPluginManager::DockPluginManager(QObject *parent) :
|
||||
|
||||
connect(m_watcher, &QFileSystemWatcher::fileChanged, this, &DockPluginManager::watchedFileChanged);
|
||||
connect(m_watcher, &QFileSystemWatcher::directoryChanged, this, &DockPluginManager::watchedDirectoryChanged);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void DockPluginManager::initAll()
|
||||
@ -34,12 +38,22 @@ void DockPluginManager::initAll()
|
||||
foreach (DockPluginProxy * proxy, m_proxies.values()) {
|
||||
proxy->plugin()->init(proxy);
|
||||
}
|
||||
|
||||
refreshSettingWindow();
|
||||
}
|
||||
|
||||
void DockPluginManager::onPluginsSetting(int y)
|
||||
{
|
||||
m_settingFrame->move(QCursor::pos().x(), y - m_settingFrame->height());
|
||||
m_settingFrame->show();
|
||||
}
|
||||
|
||||
// public slots
|
||||
void DockPluginManager::onDockModeChanged(Dock::DockMode newMode,
|
||||
Dock::DockMode oldMode)
|
||||
void DockPluginManager::onDockModeChanged(Dock::DockMode newMode, Dock::DockMode oldMode)
|
||||
{
|
||||
if (newMode == oldMode)
|
||||
return;
|
||||
|
||||
qDebug() << "DockPluginManager::onDockModeChanged " << newMode << oldMode;
|
||||
|
||||
foreach (DockPluginProxy * proxy, m_proxies) {
|
||||
@ -48,6 +62,7 @@ void DockPluginManager::onDockModeChanged(Dock::DockMode newMode,
|
||||
}
|
||||
|
||||
updatePluginPos(newMode, oldMode);
|
||||
refreshSettingWindow();
|
||||
}
|
||||
|
||||
// private methods
|
||||
@ -75,17 +90,10 @@ DockPluginProxy * DockPluginManager::loadPlugin(const QString &path)
|
||||
if (proxy) {
|
||||
m_proxies[path] = proxy;
|
||||
m_watcher->addPath(path);
|
||||
|
||||
connect(proxy, &DockPluginProxy::itemAdded, [=](AbstractDockItem *item, QString uuid){
|
||||
if (pluginLoader->metaData()["MetaData"].toObject()["sys_plugin"].toBool())
|
||||
handleSysPluginAdd(item, uuid);
|
||||
else
|
||||
handleNormalPluginAdd(item);
|
||||
});
|
||||
connect(proxy, &DockPluginProxy::itemRemoved, [=](AbstractDockItem *item){
|
||||
m_sysPlugins.remove(item);
|
||||
m_normalPlugins.removeAt(m_normalPlugins.indexOf(item));
|
||||
emit itemRemoved(item);
|
||||
connect(proxy, &DockPluginProxy::itemAdded, this, &DockPluginManager::onPluginItemAdded);
|
||||
connect(proxy, &DockPluginProxy::itemRemoved, this, &DockPluginManager::onPluginItemRemoved);
|
||||
connect(m_settingFrame, &PluginsSettingFrame::disableChanged, [=](QString uuid, bool disable){
|
||||
interface->setDisabled(uuid, disable);
|
||||
});
|
||||
|
||||
return proxy;
|
||||
@ -113,17 +121,54 @@ void DockPluginManager::unloadPlugin(const QString &path)
|
||||
void DockPluginManager::updatePluginPos(Dock::DockMode newMode, Dock::DockMode oldMode)
|
||||
{
|
||||
if (newMode == Dock::FashionMode && oldMode != Dock::FashionMode){
|
||||
foreach (AbstractDockItem *item, m_normalPlugins) {
|
||||
foreach (AbstractDockItem *item, m_normalPlugins.keys()) {
|
||||
emit itemMove(NULL, item); //Move to the front of the list
|
||||
}
|
||||
}else if (oldMode == Dock::FashionMode){
|
||||
AbstractDockItem * systrayItem = sysPluginItem(SYSTRAY_PLUGIN_ID);
|
||||
foreach (AbstractDockItem *item, m_normalPlugins) {
|
||||
foreach (AbstractDockItem *item, m_normalPlugins.keys()) {
|
||||
emit itemMove(systrayItem, item); //Move to the back of systray plugin
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DockPluginManager::refreshSettingWindow()
|
||||
{
|
||||
m_settingFrame->clear();
|
||||
|
||||
foreach (DockPluginProxy *proxy, m_proxies.values()) {
|
||||
QStringList ids = proxy->plugin()->ids();
|
||||
foreach (QString uuid, ids) {
|
||||
if (proxy->plugin()->canDisable(uuid)){
|
||||
m_settingFrame->onPluginAdd(!proxy->plugin()->isDisabled(uuid),
|
||||
uuid,
|
||||
proxy->plugin()->getName(uuid),
|
||||
proxy->plugin()->getIcon(uuid));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DockPluginManager::onPluginItemAdded(AbstractDockItem *item, QString uuid)
|
||||
{
|
||||
DockPluginProxy *proxy = qobject_cast<DockPluginProxy *>(sender());
|
||||
if (!proxy)
|
||||
return;
|
||||
|
||||
if (proxy->isSystemPlugin())
|
||||
handleSysPluginAdd(item, uuid);
|
||||
else
|
||||
handleNormalPluginAdd(item, uuid);
|
||||
}
|
||||
|
||||
void DockPluginManager::onPluginItemRemoved(AbstractDockItem *item, QString uuid)
|
||||
{
|
||||
m_sysPlugins.remove(item);
|
||||
m_normalPlugins.remove(item);
|
||||
|
||||
emit itemRemoved(item);
|
||||
}
|
||||
|
||||
// private slots
|
||||
void DockPluginManager::watchedFileChanged(const QString & file)
|
||||
{
|
||||
@ -165,6 +210,9 @@ AbstractDockItem *DockPluginManager::sysPluginItem(QString id)
|
||||
|
||||
void DockPluginManager::handleSysPluginAdd(AbstractDockItem *item, QString uuid)
|
||||
{
|
||||
if (!item || m_sysPlugins.values().indexOf(uuid) != -1)
|
||||
return;
|
||||
|
||||
m_sysPlugins.insert(item, uuid);
|
||||
|
||||
if (uuid == SYSTRAY_PLUGIN_ID){
|
||||
@ -177,9 +225,12 @@ void DockPluginManager::handleSysPluginAdd(AbstractDockItem *item, QString uuid)
|
||||
emit itemAppend(item);
|
||||
}
|
||||
|
||||
void DockPluginManager::handleNormalPluginAdd(AbstractDockItem *item)
|
||||
void DockPluginManager::handleNormalPluginAdd(AbstractDockItem *item, QString uuid)
|
||||
{
|
||||
m_normalPlugins.append(item);
|
||||
if (!item || m_normalPlugins.values().indexOf(uuid) != -1)
|
||||
return;
|
||||
|
||||
m_normalPlugins.insert(item, uuid);
|
||||
|
||||
if (m_dockModeData->getDockMode() == Dock::FashionMode)
|
||||
emit itemInsert(NULL, item);
|
||||
|
@ -1,13 +1,14 @@
|
||||
#ifndef DOCKPLUGINMANAGER_H
|
||||
#define DOCKPLUGINMANAGER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QMap>
|
||||
#include <QObject>
|
||||
#include <QStringList>
|
||||
|
||||
#include "dockconstants.h"
|
||||
#include "abstractdockitem.h"
|
||||
#include "Controller/dockmodedata.h"
|
||||
#include "Panel/pluginssettingframe.h"
|
||||
|
||||
class QFileSystemWatcher;
|
||||
class DockPluginProxy;
|
||||
@ -26,6 +27,7 @@ signals:
|
||||
void itemRemoved(AbstractDockItem * item);
|
||||
|
||||
public slots:
|
||||
void onPluginsSetting(int y);
|
||||
void onDockModeChanged(Dock::DockMode newMode,
|
||||
Dock::DockMode oldMode);
|
||||
|
||||
@ -37,14 +39,18 @@ private:
|
||||
AbstractDockItem * sysPluginItem(QString id);
|
||||
DockPluginProxy * loadPlugin(const QString & path);
|
||||
void handleSysPluginAdd(AbstractDockItem *item, QString uuid);
|
||||
void handleNormalPluginAdd(AbstractDockItem *item);
|
||||
void handleNormalPluginAdd(AbstractDockItem *item, QString uuid);
|
||||
void unloadPlugin(const QString & path);
|
||||
void updatePluginPos(Dock::DockMode newMode, Dock::DockMode oldMode);
|
||||
void refreshSettingWindow();
|
||||
void onPluginItemAdded(AbstractDockItem *item, QString uuid);
|
||||
void onPluginItemRemoved(AbstractDockItem *item, QString uuid);
|
||||
|
||||
private:
|
||||
PluginsSettingFrame *m_settingFrame = NULL;
|
||||
QMap<AbstractDockItem *, QString> m_sysPlugins;
|
||||
QMap<AbstractDockItem *, QString> m_normalPlugins;
|
||||
QMap<QString, DockPluginProxy*> m_proxies;
|
||||
QList<AbstractDockItem *> m_normalPlugins;
|
||||
QFileSystemWatcher * m_watcher = NULL;
|
||||
QStringList m_searchPaths;
|
||||
DockModeData *m_dockModeData = DockModeData::instance();
|
||||
|
@ -13,8 +13,8 @@ DockPluginProxy::DockPluginProxy(QPluginLoader * loader, DockPluginInterface * p
|
||||
|
||||
DockPluginProxy::~DockPluginProxy()
|
||||
{
|
||||
foreach (AbstractDockItem * item, m_items.values()) {
|
||||
emit itemRemoved(item);
|
||||
foreach (QString id, m_items.keys()) {
|
||||
emit itemRemoved(m_items.take(id), id);
|
||||
}
|
||||
m_items.clear();
|
||||
|
||||
@ -34,17 +34,20 @@ Dock::DockMode DockPluginProxy::dockMode()
|
||||
return DockModeData::instance()->getDockMode();
|
||||
}
|
||||
|
||||
bool DockPluginProxy::isSystemPlugin()
|
||||
{
|
||||
return m_loader->metaData()["MetaData"].toObject()["sys_plugin"].toBool();
|
||||
}
|
||||
|
||||
void DockPluginProxy::itemAddedEvent(QString id)
|
||||
{
|
||||
qDebug() << "Item added on plugin " << m_plugin->getPluginName() << id;
|
||||
if (m_plugin->getItem(id)) {
|
||||
qDebug() << "Item added on plugin " << m_plugin->getPluginName() << id;
|
||||
|
||||
if (!m_items.contains(id)) {
|
||||
if (m_plugin->getItem(id)) {
|
||||
AbstractDockItem * item = new PluginItemWrapper(m_plugin, id);
|
||||
m_items[id] = item;
|
||||
AbstractDockItem * item = new PluginItemWrapper(m_plugin, id);
|
||||
m_items[id] = item;
|
||||
|
||||
emit itemAdded(item, id);
|
||||
}
|
||||
emit itemAdded(item, id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,7 +59,7 @@ void DockPluginProxy::itemRemovedEvent(QString id)
|
||||
if (item) {
|
||||
m_items.take(id);
|
||||
|
||||
emit itemRemoved(item);
|
||||
emit itemRemoved(item, id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@ public:
|
||||
DockPluginProxy(QPluginLoader * loader, DockPluginInterface * plugin);
|
||||
~DockPluginProxy();
|
||||
|
||||
bool isSystemPlugin();
|
||||
DockPluginInterface * plugin();
|
||||
|
||||
Dock::DockMode dockMode() Q_DECL_OVERRIDE;
|
||||
@ -24,7 +25,7 @@ public:
|
||||
|
||||
signals:
|
||||
void itemAdded(AbstractDockItem * item, QString uuid);
|
||||
void itemRemoved(AbstractDockItem * item);
|
||||
void itemRemoved(AbstractDockItem * item, QString uuid);
|
||||
|
||||
private:
|
||||
QMap<QString, AbstractDockItem*> m_items;
|
||||
|
Loading…
x
Reference in New Issue
Block a user