add app item

Change-Id: I74a2bfd9f5b6658ef66e8a5ab072f3da9137ea1d
This commit is contained in:
石博文 2016-06-03 16:06:11 +08:00 committed by Hualet Wang
parent 68d8db4d25
commit 655683b70f
13 changed files with 442 additions and 9 deletions

View File

@ -1,5 +1,6 @@
#include "dockitemcontroller.h"
#include "dbus/dbusdockentry.h"
#include "item/appitem.h"
#include <QDebug>
@ -13,8 +14,20 @@ DockItemController *DockItemController::instance(QObject *parent)
return INSTANCE;
}
DockItemController::~DockItemController()
{
qDeleteAll(m_itemList);
}
const QList<DockItem *> DockItemController::itemList() const
{
return m_itemList;
}
DockItemController::DockItemController(QObject *parent)
: QObject(parent),
m_entryManager(new DBusDockEntryManager(this))
{
for (auto entry : m_entryManager->entries())
m_itemList.append(new AppItem(entry));
}

View File

@ -2,6 +2,7 @@
#define DOCKITEMCONTROLLER_H
#include "dbus/dbusdockentrymanager.h"
#include "item/dockitem.h"
#include <QObject>
@ -11,13 +12,19 @@ class DockItemController : public QObject
public:
static DockItemController *instance(QObject *parent);
~DockItemController();
const QList<DockItem *> itemList() const;
signals:
void dockItemCountChanged() const;
void dockItemCountChanged(const int count) const;
private:
explicit DockItemController(QObject *parent = 0);
private:
QList<DockItem *> m_itemList;
DBusDockEntryManager *m_entryManager;
static DockItemController *INSTANCE;

54
dbus/dbusdisplay.cpp Normal file
View File

@ -0,0 +1,54 @@
/*
* This file was generated by qdbusxml2cpp version 0.8
* Command line was: qdbusxml2cpp -p DBusDisplay -c DBusDisplay com.deepin.daemon.Display.xml
*
* qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
*
* This is an auto-generated file.
* This file may have been hand-edited. Look for HAND-EDIT comments
* before re-generating it.
*/
#include "dbusdisplay.h"
/*
* Implementation of interface class DBusDisplay
*/
DBusDisplay::DBusDisplay(QObject *parent)
: QDBusAbstractInterface(staticServiceName(), staticObjectPath(), staticInterfaceName(), QDBusConnection::sessionBus(), parent)
{
qDBusRegisterMetaType<BrightnessMap>();
qDBusRegisterMetaType<DisplayRect>();
QDBusConnection::sessionBus().connect(this->service(), this->path(), "org.freedesktop.DBus.Properties", "PropertiesChanged","sa{sv}as", this, SLOT(__propertyChanged__(QDBusMessage)));
}
DBusDisplay::~DBusDisplay()
{
QDBusConnection::sessionBus().disconnect(service(), path(), "org.freedesktop.DBus.Properties", "PropertiesChanged", "sa{sv}as", this, SLOT(propertyChanged(QDBusMessage)));
}
QDBusArgument &operator<<(QDBusArgument &argument, const DisplayRect &rect)
{
argument.beginStructure();
argument << rect.x << rect.y << rect.width << rect.height;
argument.endStructure();
return argument;
}
const QDBusArgument &operator>>(const QDBusArgument &argument, DisplayRect &rect)
{
argument.beginStructure();
argument >> rect.x >> rect.y >> rect.width >> rect.height;
argument.endStructure();
return argument;
}
QDebug operator<<(QDebug deg, const DisplayRect &rect)
{
qDebug() << "x:" << rect.x << "y:" << rect.y << "width:" << rect.width << "height:" << rect.height;
return deg;
}

229
dbus/dbusdisplay.h Normal file
View File

@ -0,0 +1,229 @@
/*
* This file was generated by qdbusxml2cpp version 0.8
* Command line was: qdbusxml2cpp -p DBusDisplay -c DBusDisplay com.deepin.daemon.Display.xml
*
* qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
*
* This is an auto-generated file.
* Do not edit! All changes made to it will be lost.
*/
#ifndef DBUSDISPLAY_H_1439948860
#define DBUSDISPLAY_H_1439948860
#include <QtCore/QObject>
#include <QtCore/QByteArray>
#include <QtCore/QList>
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QVariant>
#include <QtDBus/QtDBus>
typedef QMap<QString, double> BrightnessMap;
Q_DECLARE_METATYPE(BrightnessMap)
struct DisplayRect{
qint16 x;
qint16 y;
quint16 width;
quint16 height;
operator QRect() const
{
return QRect(x, y, width, height);
}
};
Q_DECLARE_METATYPE(DisplayRect)
QDBusArgument &operator<<(QDBusArgument &argument, const DisplayRect &rect);
const QDBusArgument &operator>>(const QDBusArgument &argument, DisplayRect &rect);
QDebug operator<<(QDebug deg, const DisplayRect &rect);
/*
* Proxy class for interface com.deepin.daemon.Display
*/
class DBusDisplay: public QDBusAbstractInterface
{
Q_OBJECT
Q_SLOT void __propertyChanged__(const QDBusMessage& msg)
{
QList<QVariant> arguments = msg.arguments();
if (3 != arguments.count())
return;
QString interfaceName = msg.arguments().at(0).toString();
if (interfaceName !="com.deepin.daemon.Display")
return;
QVariantMap changedProps = qdbus_cast<QVariantMap>(arguments.at(1).value<QDBusArgument>());
QStringList keys = changedProps.keys();
foreach(const QString &prop, keys) {
const QMetaObject* self = metaObject();
for (int i=self->propertyOffset(); i < self->propertyCount(); ++i) {
QMetaProperty p = self->property(i);
if (p.name() == prop) {
Q_EMIT p.notifySignal().invoke(this);
}
}
}
}
public:
static inline const char *staticInterfaceName()
{ return "com.deepin.daemon.Display"; }
static inline const char *staticServiceName()
{ return "com.deepin.daemon.Display"; }
static inline const char *staticObjectPath()
{ return "/com/deepin/daemon/Display"; }
public:
explicit DBusDisplay(QObject *parent = 0);
~DBusDisplay();
Q_PROPERTY(BrightnessMap Brightness READ brightness NOTIFY BrightnessChanged)
inline BrightnessMap brightness() const
{ return qvariant_cast< BrightnessMap >(property("Brightness")); }
Q_PROPERTY(QDBusObjectPath BuiltinOutput READ builtinOutput NOTIFY BuiltinOutputChanged)
inline QDBusObjectPath builtinOutput() const
{ return qvariant_cast< QDBusObjectPath >(property("BuiltinOutput")); }
Q_PROPERTY(short DisplayMode READ displayMode NOTIFY DisplayModeChanged)
inline short displayMode() const
{ return qvariant_cast< short >(property("DisplayMode")); }
Q_PROPERTY(bool HasChanged READ hasChanged NOTIFY HasChangedChanged)
inline bool hasChanged() const
{ return qvariant_cast< bool >(property("HasChanged")); }
Q_PROPERTY(QList<QDBusObjectPath> Monitors READ monitors NOTIFY MonitorsChanged)
inline QList<QDBusObjectPath> monitors() const
{ return qvariant_cast< QList<QDBusObjectPath> >(property("Monitors")); }
Q_PROPERTY(QString Primary READ primary NOTIFY PrimaryChanged)
inline QString primary() const
{ return qvariant_cast< QString >(property("Primary")); }
Q_PROPERTY(DisplayRect PrimaryRect READ primaryRect NOTIFY PrimaryRectChanged)
inline DisplayRect primaryRect() const
{ return qvariant_cast< DisplayRect >(property("PrimaryRect")); }
Q_PROPERTY(ushort ScreenHeight READ screenHeight NOTIFY ScreenHeightChanged)
inline ushort screenHeight() const
{ return qvariant_cast< ushort >(property("ScreenHeight")); }
Q_PROPERTY(ushort ScreenWidth READ screenWidth NOTIFY ScreenWidthChanged)
inline ushort screenWidth() const
{ return qvariant_cast< ushort >(property("ScreenWidth")); }
public Q_SLOTS: // METHODS
inline QDBusPendingReply<> Apply()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("Apply"), argumentList);
}
inline QDBusPendingReply<> AssociateTouchScreen(const QString &in0, const QString &in1)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1);
return asyncCallWithArgumentList(QStringLiteral("AssociateTouchScreen"), argumentList);
}
inline QDBusPendingReply<> ChangeBrightness(const QString &in0, double in1)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1);
return asyncCallWithArgumentList(QStringLiteral("ChangeBrightness"), argumentList);
}
inline QDBusPendingReply<> JoinMonitor(const QString &in0, const QString &in1)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1);
return asyncCallWithArgumentList(QStringLiteral("JoinMonitor"), argumentList);
}
inline QDBusPendingReply<QString> QueryCurrentPlanName()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("QueryCurrentPlanName"), argumentList);
}
inline QDBusPendingReply<int> QueryOutputFeature(const QString &in0)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0);
return asyncCallWithArgumentList(QStringLiteral("QueryOutputFeature"), argumentList);
}
inline QDBusPendingReply<> Reset()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("Reset"), argumentList);
}
inline QDBusPendingReply<> ResetBrightness(const QString &in0)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0);
return asyncCallWithArgumentList(QStringLiteral("ResetBrightness"), argumentList);
}
inline QDBusPendingReply<> ResetChanges()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("ResetChanges"), argumentList);
}
inline QDBusPendingReply<> SaveChanges()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("SaveChanges"), argumentList);
}
inline QDBusPendingReply<> SetBrightness(const QString &in0, double in1)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1);
return asyncCallWithArgumentList(QStringLiteral("SetBrightness"), argumentList);
}
inline QDBusPendingReply<> SetPrimary(const QString &in0)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0);
return asyncCallWithArgumentList(QStringLiteral("SetPrimary"), argumentList);
}
inline QDBusPendingReply<> SplitMonitor(const QString &in0)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0);
return asyncCallWithArgumentList(QStringLiteral("SplitMonitor"), argumentList);
}
inline QDBusPendingReply<> SwitchMode(short in0, const QString &in1)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1);
return asyncCallWithArgumentList(QStringLiteral("SwitchMode"), argumentList);
}
Q_SIGNALS: // SIGNALS
// void PrimaryChanged(const QRect &in0);
// begin property changed signals
void BrightnessChanged();
void BuiltinOutputChanged();
void DisplayModeChanged();
void HasChangedChanged();
void MonitorsChanged();
void PrimaryChanged();
void PrimaryRectChanged();
void ScreenHeightChanged();
void ScreenWidthChanged();
};
#endif

View File

@ -13,7 +13,9 @@ SOURCES += main.cpp \
item/dockitem.cpp \
panel/mainpanel.cpp \
controller/dockitemcontroller.cpp \
dbus/dbusdockentry.cpp
dbus/dbusdockentry.cpp \
dbus/dbusdisplay.cpp \
item/appitem.cpp
HEADERS += \
window/mainwindow.h \
@ -22,4 +24,6 @@ HEADERS += \
item/dockitem.h \
panel/mainpanel.h \
controller/dockitemcontroller.h \
dbus/dbusdockentry.h
dbus/dbusdockentry.h \
dbus/dbusdisplay.h \
item/appitem.h

19
item/appitem.cpp Normal file
View File

@ -0,0 +1,19 @@
#include "appitem.h"
#include <QPainter>
AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent)
: DockItem(parent),
m_itemEntry(new DBusDockEntry(entry.path(), this))
{
}
void AppItem::paintEvent(QPaintEvent *e)
{
DockItem::paintEvent(e);
QPainter painter(this);
painter.fillRect(rect(), Qt::cyan);
painter.drawText(rect(), m_itemEntry->id());
}

21
item/appitem.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef APPITEM_H
#define APPITEM_H
#include "dockitem.h"
#include "dbus/dbusdockentry.h"
class AppItem : public DockItem
{
Q_OBJECT
public:
explicit AppItem(const QDBusObjectPath &entry, QWidget *parent = nullptr);
private:
void paintEvent(QPaintEvent *e);
private:
DBusDockEntry *m_itemEntry;
};
#endif // APPITEM_H

View File

@ -5,3 +5,8 @@ DockItem::DockItem(QWidget *parent)
{
}
void DockItem::paintEvent(QPaintEvent *e)
{
QWidget::paintEvent(e);
}

View File

@ -7,8 +7,17 @@ class DockItem : public QWidget
{
Q_OBJECT
enum ItemType {
Launcher,
App,
Plugins,
};
public:
explicit DockItem(QWidget *parent = 0);
explicit DockItem(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent *e);
};
#endif // DOCKITEM_H

View File

@ -1,7 +1,22 @@
#include "mainpanel.h"
#include <QHBoxLayout>
MainPanel::MainPanel(QWidget *parent)
: QFrame(parent)
: QFrame(parent),
m_itemController(DockItemController::instance(this))
{
setStyleSheet("background-color:red;");
setObjectName("MainPanel");
setStyleSheet("QWidget #MainPanel {"
"border:none;"
"background-color:red;"
// "border-radius:5px 5px 5px 5px;"
"}");
QHBoxLayout *layout = new QHBoxLayout;
setLayout(layout);
const QList<DockItem *> itemList = m_itemController->itemList();
for (auto item : itemList)
layout->addWidget(item);
}

View File

@ -1,6 +1,8 @@
#ifndef MAINPANEL_H
#define MAINPANEL_H
#include "controller/dockitemcontroller.h"
#include <QFrame>
class MainPanel : public QFrame
@ -9,6 +11,9 @@ class MainPanel : public QFrame
public:
explicit MainPanel(QWidget *parent = 0);
private:
DockItemController *m_itemController;
};
#endif // MAINPANEL_H

View File

@ -5,9 +5,22 @@
MainWindow::MainWindow(QWidget *parent)
: QWidget(parent),
m_position(BOTTOM),
m_mainPanel(new MainPanel(this)),
m_itemController(DockItemController::instance(this))
m_displayInter(new DBusDisplay(this)),
m_positionUpdateTimer(new QTimer(this))
{
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground);
connect(m_positionUpdateTimer, &QTimer::timeout, this, &MainWindow::updatePosition);
m_positionUpdateTimer->setSingleShot(true);
m_positionUpdateTimer->setInterval(200);
m_positionUpdateTimer->start();
}
void MainWindow::resizeEvent(QResizeEvent *e)
@ -16,3 +29,24 @@ void MainWindow::resizeEvent(QResizeEvent *e)
m_mainPanel->setFixedSize(e->size());
}
void MainWindow::keyPressEvent(QKeyEvent *e)
{
switch (e->key())
{
#ifdef QT_DEBUG
case Qt::Key_Escape: qApp->quit(); break;
#endif
default:;
}
}
void MainWindow::updatePosition()
{
const QRect rect = m_displayInter->primaryRect();
setFixedWidth(rect.width());
setFixedHeight(80);
move(0, 0);
}

View File

@ -3,22 +3,40 @@
#include "xcb/xcb_misc.h"
#include "panel/mainpanel.h"
#include "controller/dockitemcontroller.h"
#include "dbus/dbusdisplay.h"
#include <QWidget>
#include <QTimer>
class MainWindow : public QWidget
{
Q_OBJECT
enum Position {
TOP,
BOTTOM,
LEFT,
RIGHT,
};
public:
explicit MainWindow(QWidget *parent = 0);
private:
void resizeEvent(QResizeEvent *e);
void keyPressEvent(QKeyEvent *e);
private slots:
void updatePosition();
private:
Position m_position;
MainPanel *m_mainPanel;
DockItemController *m_itemController;
DBusDisplay *m_displayInter;
QTimer *m_positionUpdateTimer;
};
#endif // MAINWINDOW_H