mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
Use DMenu to show panel menu
This commit is contained in:
parent
c0c3a0af55
commit
7116e4d030
@ -47,8 +47,6 @@ Panel::Panel(QWidget *parent)
|
||||
proxy->plugin()->init(proxy);
|
||||
}
|
||||
|
||||
panelMenu = new PanelMenu();
|
||||
|
||||
initAppManager();
|
||||
|
||||
slotDockModeChanged(dockCons->getDockMode(),dockCons->getDockMode());
|
||||
@ -191,13 +189,7 @@ void Panel::showMenu()
|
||||
{
|
||||
QPoint tmpPos = QCursor::pos();
|
||||
|
||||
panelMenu->move(tmpPos.x(),tmpPos.y() - panelMenu->height());
|
||||
panelMenu->show();
|
||||
}
|
||||
|
||||
void Panel::hideMenu()
|
||||
{
|
||||
|
||||
PanelMenu::instance()->showMenu(tmpPos.x(),tmpPos.y());
|
||||
}
|
||||
|
||||
void Panel::initAppManager()
|
||||
|
@ -46,7 +46,6 @@ private:
|
||||
void reanchorsLayout(Dock::DockMode mode);
|
||||
|
||||
void showMenu();
|
||||
void hideMenu();
|
||||
|
||||
void initAppManager();
|
||||
private:
|
||||
@ -56,7 +55,6 @@ private:
|
||||
QWidget * parentWidget = NULL;
|
||||
ScreenMask * maskWidget = NULL;
|
||||
DockModeData *dockCons = DockModeData::instance();
|
||||
PanelMenu *panelMenu = NULL;
|
||||
};
|
||||
|
||||
#endif // PANEL_H
|
||||
|
@ -1,63 +1,101 @@
|
||||
#include "panelmenu.h"
|
||||
|
||||
PanelMenuItem::PanelMenuItem(QString text, QWidget *parent) : QLabel(text,parent)
|
||||
|
||||
PanelMenu * PanelMenu::m_panelMenu = NULL;
|
||||
PanelMenu * PanelMenu::instance()
|
||||
{
|
||||
this->setAlignment(Qt::AlignCenter);
|
||||
if (!m_panelMenu)
|
||||
m_panelMenu = new PanelMenu();
|
||||
return m_panelMenu;
|
||||
}
|
||||
|
||||
void PanelMenuItem::mousePressEvent(QMouseEvent *event)
|
||||
PanelMenu::PanelMenu(QObject *parent) : QObject(parent)
|
||||
{
|
||||
// emit itemClicked();
|
||||
m_menuManager = new DBusMenuManager(this);
|
||||
}
|
||||
|
||||
void PanelMenuItem::mouseReleaseEvent(QMouseEvent *event)
|
||||
void PanelMenu::showMenu(int x, int y)
|
||||
{
|
||||
emit itemClicked();
|
||||
if (m_menuManager && m_menuManager->isValid()){
|
||||
QDBusPendingReply<QDBusObjectPath> pr = m_menuManager->RegisterMenu();
|
||||
if (pr.count() == 1)
|
||||
{
|
||||
QDBusObjectPath op = pr.argumentAt(0).value<QDBusObjectPath>();
|
||||
m_menuInterfacePath = op.path();
|
||||
DBusMenu *m_menu = new DBusMenu(m_menuInterfacePath,this);
|
||||
connect(m_menu,&DBusMenu::MenuUnregistered,m_menu,&DBusMenu::deleteLater);
|
||||
connect(m_menu,&DBusMenu::ItemInvoked,this,&PanelMenu::slotItemInvoked);
|
||||
|
||||
QJsonObject targetObj;
|
||||
targetObj.insert("x",QJsonValue(x));
|
||||
targetObj.insert("y",QJsonValue(y));
|
||||
targetObj.insert("isDockMenu",QJsonValue(false));
|
||||
|
||||
QJsonArray contentArry;
|
||||
contentArry.append(createItemObj("Fashion Mode",ToFashionMode));
|
||||
contentArry.append(createItemObj("Efficient Mode",ToEfficientMode));
|
||||
contentArry.append(createItemObj("Classic Mode",ToClassicMode));
|
||||
|
||||
QJsonObject contentObj;
|
||||
contentObj.insert("items",contentArry);
|
||||
targetObj.insert("menuJsonContent",QString(QJsonDocument(contentObj).toJson()));
|
||||
|
||||
m_menu->ShowMenu(QString(QJsonDocument(targetObj).toJson()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PanelMenu::PanelMenu(QWidget *parent) : QWidget(parent)
|
||||
void PanelMenu::slotItemInvoked(const QString &itemId, bool result)
|
||||
{
|
||||
this->resize(150,100);
|
||||
this->setWindowFlags(Qt::ToolTip);
|
||||
OperationType tt = OperationType(itemId.toInt());
|
||||
switch (tt)
|
||||
{
|
||||
case ToFashionMode:
|
||||
changeToFashionMode();
|
||||
break;
|
||||
case ToEfficientMode:
|
||||
changeToEfficientMode();
|
||||
break;
|
||||
case ToClassicMode:
|
||||
changeToClassicMode();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
QLabel * menuContent = new QLabel(this);
|
||||
menuContent->setObjectName("panelMenuContent");
|
||||
menuContent->resize(this->width(),this->height());
|
||||
menuContent->move(0,0);
|
||||
|
||||
PanelMenuItem *fashionItem = new PanelMenuItem("Fashion Mode",this);
|
||||
fashionItem->resize(this->width(),MENU_ITEM_HEIGHT);
|
||||
fashionItem->move(0,0);
|
||||
connect(fashionItem, SIGNAL(itemClicked()),this, SLOT(changeToFashionMode()));
|
||||
|
||||
PanelMenuItem *efficientItem = new PanelMenuItem("Efficient Mode",this);
|
||||
efficientItem->resize(this->width(),MENU_ITEM_HEIGHT);
|
||||
efficientItem->move(0,MENU_ITEM_HEIGHT + MENU_ITEM_SPACING);
|
||||
connect(efficientItem, SIGNAL(itemClicked()),this, SLOT(changeToEfficientMode()));
|
||||
|
||||
PanelMenuItem *classictItem = new PanelMenuItem("Classic Mode",this);
|
||||
classictItem->resize(this->width(),MENU_ITEM_HEIGHT);
|
||||
classictItem->move(0,MENU_ITEM_HEIGHT*2 + MENU_ITEM_SPACING*2);
|
||||
connect(classictItem, SIGNAL(itemClicked()),this, SLOT(changeToClassicMode()));
|
||||
qWarning() << itemId << result << tt;
|
||||
}
|
||||
|
||||
void PanelMenu::changeToFashionMode()
|
||||
{
|
||||
qWarning() << "Change to fashion mode...";
|
||||
dockCons->setDockMode(Dock::FashionMode);
|
||||
this->hide();
|
||||
}
|
||||
|
||||
void PanelMenu::changeToEfficientMode()
|
||||
{
|
||||
qWarning() << "Change to efficient mode...";
|
||||
dockCons->setDockMode(Dock::EfficientMode);
|
||||
this->hide();
|
||||
}
|
||||
|
||||
void PanelMenu::changeToClassicMode()
|
||||
{
|
||||
qWarning() << "Change to classic mode...";
|
||||
dockCons->setDockMode(Dock::ClassicMode);
|
||||
this->hide();
|
||||
}
|
||||
|
||||
QJsonObject PanelMenu::createItemObj(const QString &itemName, OperationType type)
|
||||
{
|
||||
QJsonObject itemObj;
|
||||
itemObj.insert("itemId",QString::number(type));
|
||||
itemObj.insert("itemText",itemName);
|
||||
itemObj.insert("itemIcon","");
|
||||
itemObj.insert("itemIconHover","");
|
||||
itemObj.insert("itemIconInactive","");
|
||||
itemObj.insert("itemExtra","");
|
||||
itemObj.insert("isActive",true);
|
||||
itemObj.insert("checked",false);
|
||||
itemObj.insert("itemSubMenu",QJsonObject());
|
||||
|
||||
return itemObj;
|
||||
}
|
||||
|
@ -3,42 +3,46 @@
|
||||
|
||||
#include <QWidget>
|
||||
#include <QLabel>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
#include <QDebug>
|
||||
#include "DBus/dbusmenumanager.h"
|
||||
#include "DBus/dbusmenu.h"
|
||||
#include "Controller/dockmodedata.h"
|
||||
|
||||
class PanelMenuItem : public QLabel
|
||||
class PanelMenu : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PanelMenuItem(QString text, QWidget *parent = 0);
|
||||
|
||||
signals:
|
||||
void itemClicked();
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
void mouseReleaseEvent(QMouseEvent *event);
|
||||
};
|
||||
|
||||
class PanelMenu : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PanelMenu(QWidget *parent = 0);
|
||||
enum OperationType {
|
||||
ToFashionMode,
|
||||
ToEfficientMode,
|
||||
ToClassicMode
|
||||
};
|
||||
static PanelMenu * instance();
|
||||
|
||||
void showMenu(int x,int y);
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
private slots:
|
||||
void slotItemInvoked(const QString &itemId,bool result);
|
||||
|
||||
private:
|
||||
explicit PanelMenu(QObject *parent = 0);
|
||||
|
||||
void changeToFashionMode();
|
||||
void changeToEfficientMode();
|
||||
void changeToClassicMode();
|
||||
|
||||
private:
|
||||
DockModeData *dockCons = DockModeData::instance();
|
||||
QJsonObject createItemObj(const QString &itemName,OperationType type);
|
||||
|
||||
private:
|
||||
static PanelMenu * m_panelMenu;
|
||||
DockModeData *dockCons = DockModeData::instance();
|
||||
QString m_menuInterfacePath = "";
|
||||
DBusMenuManager *m_menuManager = NULL;
|
||||
|
||||
const int MENU_ITEM_HEIGHT = 30;
|
||||
const int MENU_ITEM_SPACING = 3;
|
||||
};
|
||||
|
||||
#endif // PANELMENU_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user