Improve panel menu
    Init dock mode width dbus data
    Update DockConstants
    Fix systray item width error and crash
This commit is contained in:
杨万青 2015-07-14 10:14:22 +08:00
parent 7116e4d030
commit a16b501494
10 changed files with 179 additions and 57 deletions

View File

@ -51,8 +51,21 @@ void SystrayPlugin::changeMode(Dock::DockMode newMode, Dock::DockMode oldMode)
{
m_mode = newMode;
CompositeTrayItem * compositeItem = NULL;
QWidget * widget = m_items.value(CompositeItemKey);
if (!widget)
{
compositeItem = new CompositeTrayItem;
m_items[CompositeItemKey] = compositeItem;
}
else
compositeItem = qobject_cast<CompositeTrayItem*>(widget);
compositeItem->resize(Dock::APPLET_FASHION_ITEM_WIDTH,Dock::APPLET_FASHION_ITEM_HEIGHT);
if (oldMode == Dock::FashionMode && newMode != Dock::FashionMode) {
CompositeTrayItem * compositeItem = qobject_cast<CompositeTrayItem*>(m_items.value(CompositeItemKey));
compositeItem->setParent(NULL);
qDebug() << "SystrayPlugin change mode to other mode.";
@ -65,15 +78,6 @@ void SystrayPlugin::changeMode(Dock::DockMode newMode, Dock::DockMode oldMode)
m_proxier->itemRemovedEvent(CompositeItemKey);
} else if (newMode == Dock::FashionMode && oldMode != Dock::FashionMode) {
CompositeTrayItem * compositeItem = NULL;
QWidget * widget = m_items.value(CompositeItemKey);
if (!widget) {
compositeItem = new CompositeTrayItem;
m_items[CompositeItemKey] = compositeItem;
} else {
compositeItem = qobject_cast<CompositeTrayItem*>(widget);
}
qDebug() << "SystrayPlugin change mode to fashion mode.";
foreach (QWidget * widget, m_items) {

View File

@ -3,6 +3,7 @@
DockModeData::DockModeData(QObject *parent) :
QObject(parent)
{
initDDS();
}
DockModeData * DockModeData::dockModeData = NULL;
@ -21,10 +22,17 @@ Dock::DockMode DockModeData::getDockMode()
void DockModeData::setDockMode(Dock::DockMode value)
{
Dock::DockMode tmpValue = m_currentMode;
m_currentMode = value;
m_dds->SetDisplayMode(value);
}
emit dockModeChanged(value, tmpValue);
Dock::HideMode DockModeData::getHideMode()
{
return m_hideMode;
}
void DockModeData::setHideMode(Dock::HideMode value)
{
m_dds->SetHideMode(value);
}
int DockModeData::getDockHeight()
@ -177,3 +185,33 @@ int DockModeData::getAppletsIconSize()
}
}
void DockModeData::slotDockModeChanged(int mode)
{
Dock::DockMode tmpMode = Dock::DockMode(mode);
Dock::DockMode oldmode = m_currentMode;
m_currentMode = tmpMode;
emit dockModeChanged(tmpMode,oldmode);
}
void DockModeData::slotHideModeChanged(int mode)
{
Dock::HideMode tmpMode = Dock::HideMode(mode);
Dock::HideMode oldMode = m_hideMode;
m_hideMode = tmpMode;
emit hideModeChanged(tmpMode,oldMode);
}
void DockModeData::initDDS()
{
m_dds = new DBusDockSetting(this);
connect(m_dds,&DBusDockSetting::DisplayModeChanged,this,&DockModeData::slotDockModeChanged);
connect(m_dds,&DBusDockSetting::HideModeChanged,this,&DockModeData::slotHideModeChanged);
m_currentMode = Dock::DockMode(m_dds->GetDisplayMode().value());
m_hideMode = Dock::HideMode(m_dds->GetHideMode().value());
emit dockModeChanged(m_currentMode,m_currentMode);
emit hideModeChanged(m_hideMode,m_hideMode);
}

View File

@ -3,6 +3,8 @@
#include <QObject>
#include <QStringList>
#include <QDebug>
#include "DBus/dbusdocksetting.h"
#include "dockconstants.h"
class DockModeData : public QObject
@ -13,6 +15,8 @@ public:
Dock::DockMode getDockMode();
void setDockMode(Dock::DockMode value);
Dock::HideMode getHideMode();
void setHideMode(Dock::HideMode value);
int getDockHeight();
int getItemHeight();
@ -27,15 +31,23 @@ public:
signals:
void dockModeChanged(Dock::DockMode newMode,Dock::DockMode oldMode);
void hideModeChanged(Dock::HideMode newMode,Dock::HideMode oldMode);
private slots:
void slotDockModeChanged(int mode);
void slotHideModeChanged(int mode);
private:
explicit DockModeData(QObject *parent = 0);
void initDDS();
private:
static DockModeData * dockModeData;
Dock::DockMode m_currentMode = Dock::EfficientMode;
Dock::HideMode m_hideMode = Dock::KeepShowing;
DBusDockSetting *m_dds = NULL;
};
#endif // DOCKMODEDATA_H

View File

@ -48,22 +48,6 @@ Panel::Panel(QWidget *parent)
}
initAppManager();
slotDockModeChanged(dockCons->getDockMode(),dockCons->getDockMode());
}
void Panel::resize(const QSize &size)
{
QWidget::resize(size);
reanchorsLayout(dockCons->getDockMode());
}
void Panel::resize(int width, int height)
{
QWidget::resize(width,height);
reanchorsLayout(dockCons->getDockMode());
}
void Panel::showScreenMask()
@ -114,25 +98,12 @@ void Panel::slotDockModeChanged(Dock::DockMode newMode, Dock::DockMode oldMode)
reanchorsLayout(newMode);
this->resize(leftLayout->width() + rightLayout->width(),dockCons->getDockHeight());
this->move((parentWidget->width() - leftLayout->width() - rightLayout->width()) / 2,0);
qWarning() << "AppCount:********" << leftLayout->getItemCount();
}
void Panel::slotLayoutContentsWidthChanged()
{
reanchorsLayout(dockCons->getDockMode());
if (dockCons->getDockMode() == Dock::FashionMode)
{
this->resize(leftLayout->getContentsWidth() + rightLayout->getContentsWidth(),dockCons->getDockHeight());
this->move((parentWidget->width() - leftLayout->getContentsWidth() - rightLayout->getContentsWidth()) / 2,0);
}
else
{
this->resize(leftLayout->width() + rightLayout->width(),dockCons->getDockHeight());
this->move((parentWidget->width() - leftLayout->width() - rightLayout->width()) / 2,0);
}
}
void Panel::slotAddAppItem(AppItem *item)
@ -170,10 +141,12 @@ void Panel::reanchorsLayout(Dock::DockMode mode)
if (mode == Dock::FashionMode)
{
leftLayout->resize(leftLayout->getContentsWidth() + dockCons->getAppItemSpacing(),dockCons->getDockHeight());
rightLayout->setSortDirection(DockLayout::LeftToRight);
rightLayout->resize(rightLayout->getContentsWidth(),dockCons->getDockHeight());
rightLayout->move(leftLayout->width() - dockCons->getAppItemSpacing(),0);
this->resize(leftLayout->getContentsWidth() + rightLayout->getContentsWidth(),dockCons->getDockHeight());
this->move((parentWidget->width() - leftLayout->getContentsWidth() - rightLayout->getContentsWidth()) / 2,0);
}
else
{
@ -182,6 +155,9 @@ void Panel::reanchorsLayout(Dock::DockMode mode)
rightLayout->move(parentWidget->width() - rightLayout->width(),0);
leftLayout->resize(parentWidget->width() - rightLayout->width() ,dockCons->getDockHeight());
this->resize(leftLayout->width() + rightLayout->width(),dockCons->getDockHeight());
this->move((parentWidget->width() - leftLayout->width() - rightLayout->width()) / 2,0);
}
}

View File

@ -6,11 +6,11 @@
#include <QPushButton>
#include <QDebug>
#include "Controller/dockmodedata.h"
#include "Controller/appmanager.h"
#include "Widgets/appitem.h"
#include "Widgets/docklayout.h"
#include "Widgets/screenmask.h"
#include "panelmenu.h"
#include "Controller/appmanager.h"
class Panel : public QLabel
{
@ -19,9 +19,6 @@ public:
explicit Panel(QWidget *parent = 0);
~Panel();
void resize(const QSize &size);
void resize(int width,int height);
void showScreenMask();
void hideScreenMask();

View File

@ -32,9 +32,15 @@ void PanelMenu::showMenu(int x, int 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));
contentArry.append(createRadioItemObj("Fashion mode",ToFashionMode,DockModeGroup,dockCons->getDockMode() == Dock::FashionMode));
contentArry.append(createRadioItemObj("Efficient mode",ToEfficientMode,DockModeGroup,dockCons->getDockMode() == Dock::EfficientMode));
contentArry.append(createRadioItemObj("Classic mode",ToClassicMode,DockModeGroup,dockCons->getDockMode() == Dock::ClassicMode));
contentArry.append(createItemObj("",OperationType(-1)));
contentArry.append(createRadioItemObj("Keep showing",ToKeepShowing,HideModeGroup,dockCons->getHideMode() == Dock::KeepShowing));
contentArry.append(createRadioItemObj("Keep hidden",ToKeepHidden,HideModeGroup,dockCons->getHideMode() == Dock::KeepHidden));
contentArry.append(createRadioItemObj("Smart hide",ToSmartHide,HideModeGroup,dockCons->getHideMode() == Dock::SmartHide));
contentArry.append(createItemObj("",OperationType(-1)));
contentArry.append(createItemObj("Notification area setting",ToPluginSetting));
QJsonObject contentObj;
contentObj.insert("items",contentArry);
@ -47,7 +53,10 @@ void PanelMenu::showMenu(int x, int y)
void PanelMenu::slotItemInvoked(const QString &itemId, bool result)
{
OperationType tt = OperationType(itemId.toInt());
if (itemId.split(":").length() < 1)
return;
OperationType tt = OperationType(itemId.split(":").at(0).toInt());
switch (tt)
{
case ToFashionMode:
@ -59,11 +68,19 @@ void PanelMenu::slotItemInvoked(const QString &itemId, bool result)
case ToClassicMode:
changeToClassicMode();
break;
case ToKeepShowing:
changeToKeepShowing();
break;
case ToKeepHidden:
changeToKeepHidden();
break;
case ToSmartHide:
changeToSmartHide();
break;
default:
break;
}
qWarning() << itemId << result << tt;
}
void PanelMenu::changeToFashionMode()
@ -84,6 +101,24 @@ void PanelMenu::changeToClassicMode()
dockCons->setDockMode(Dock::ClassicMode);
}
void PanelMenu::changeToKeepShowing()
{
qWarning() << "Change to keep showing mode...";
dockCons->setHideMode(Dock::KeepShowing);
}
void PanelMenu::changeToKeepHidden()
{
qWarning() << "Change to keep hidden mode...";
dockCons->setHideMode(Dock::KeepHidden);
}
void PanelMenu::changeToSmartHide()
{
qWarning() << "Change to smart hide mode...";
dockCons->setHideMode(Dock::SmartHide);
}
QJsonObject PanelMenu::createItemObj(const QString &itemName, OperationType type)
{
QJsonObject itemObj;
@ -99,3 +134,19 @@ QJsonObject PanelMenu::createItemObj(const QString &itemName, OperationType type
return itemObj;
}
QJsonObject PanelMenu::createRadioItemObj(const QString &itemName, OperationType type, MenuGroup group, bool check)
{
QJsonObject itemObj;
itemObj.insert("itemId",QString::number(type) + ":radio:" + QString::number(group));
itemObj.insert("itemText",itemName);
itemObj.insert("itemIcon","");
itemObj.insert("itemIconHover","");
itemObj.insert("itemIconInactive","");
itemObj.insert("itemExtra","");
itemObj.insert("isActive",true);
itemObj.insert("checked",check);
itemObj.insert("itemSubMenu",QJsonObject());
return itemObj;
}

View File

@ -10,6 +10,7 @@
#include "DBus/dbusmenumanager.h"
#include "DBus/dbusmenu.h"
#include "Controller/dockmodedata.h"
#include "../dockconstants.h"
class PanelMenu : public QObject
{
@ -18,8 +19,17 @@ public:
enum OperationType {
ToFashionMode,
ToEfficientMode,
ToClassicMode
ToClassicMode,
ToKeepShowing,
ToKeepHidden,
ToSmartHide,
ToPluginSetting
};
enum MenuGroup{
DockModeGroup,
HideModeGroup
};
static PanelMenu * instance();
void showMenu(int x,int y);
@ -34,14 +44,19 @@ private:
void changeToFashionMode();
void changeToEfficientMode();
void changeToClassicMode();
void changeToKeepShowing();
void changeToKeepHidden();
void changeToSmartHide();
QJsonObject createItemObj(const QString &itemName,OperationType type);
QJsonObject createRadioItemObj(const QString &itemName,OperationType type,MenuGroup group,bool check);
private:
static PanelMenu * m_panelMenu;
DockModeData *dockCons = DockModeData::instance();
QString m_menuInterfacePath = "";
DBusMenuManager *m_menuManager = NULL;
DBusDockSetting m_dockSetting;
};

View File

@ -146,6 +146,15 @@ void AppItem::initBackground()
appBackground = new AppBackground(this);
appBackground->move(0,0);
connect(this, SIGNAL(widthChanged()),this, SLOT(resizeBackground()));
if (dockCons->getDockMode() == Dock::FashionMode)
{
appBackground->setVisible(false);
}
else
{
appBackground->setVisible(true);
}
}
void AppItem::initClientManager()

View File

@ -4,15 +4,35 @@
namespace Dock {
enum DockMode {
FashionMode,
EfficientMode,
ClassicMode
FashionMode = 0,
EfficientMode = 1,
ClassicMode = 2
};
enum HideMode {
KeepShowing = 0,
KeepHidden = 1,
SmartHide = 3
};
const int APP_PREVIEW_WIDTH = 160;
const int APP_PREVIEW_HEIGHT = 100;
const int APP_PREVIEW_MARGIN = 18 ;
const int APPLET_FASHION_ITEM_HEIGHT = 60;
const int APPLET_FASHION_ITEM_WIDTH = 60;
const int APPLET_FASHION_ITEM_SPACING = 10;
const int APPLET_FASHION_ICON_SIZE = 48;
const int APPLET_EFFICIENT_ITEM_HEIGHT = 50;
const int APPLET_EFFICIENT_ITEM_WIDTH = 50;
const int APPLET_EFFICIENT_ITEM_SPACING = 10;
const int APPLET_EFFICIENT_ICON_SIZE = 24;
const int APPLET_CLASSIC_ITEM_HEIGHT = 40;
const int APPLET_CLASSIC_ITEM_WIDTH = 50;
const int APPLET_CLASSIC_ITEM_SPACING = 10;
const int APPLET_CLASSIC_ICON_SIZE = 24;
}
#endif // DOCKCONSTANTS_H

View File

@ -11,7 +11,7 @@ MainWidget::MainWidget(QWidget *parent)
this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
this->move(0,rec.height());
this->move(0,rec.height() - 100);
connect(DockModeData::instance(), SIGNAL(dockModeChanged(Dock::DockMode,Dock::DockMode)),
this, SLOT(slotDockModeChanged(Dock::DockMode,Dock::DockMode)));