add settings class

Change-Id: Idc33ed878fa343a748fc28ccf6f6dc89bee73d4c
This commit is contained in:
石博文 2016-06-06 10:59:29 +08:00 committed by Hualet Wang
parent 655683b70f
commit 525f24a712
8 changed files with 99 additions and 27 deletions

View File

@ -15,7 +15,8 @@ SOURCES += main.cpp \
controller/dockitemcontroller.cpp \
dbus/dbusdockentry.cpp \
dbus/dbusdisplay.cpp \
item/appitem.cpp
item/appitem.cpp \
util/docksettings.cpp
HEADERS += \
window/mainwindow.h \
@ -26,4 +27,5 @@ HEADERS += \
controller/dockitemcontroller.h \
dbus/dbusdockentry.h \
dbus/dbusdisplay.h \
item/appitem.h
item/appitem.h \
util/docksettings.h

View File

@ -6,14 +6,23 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent)
: DockItem(parent),
m_itemEntry(new DBusDockEntry(entry.path(), this))
{
qDebug() << m_itemEntry->data();
}
void AppItem::paintEvent(QPaintEvent *e)
{
DockItem::paintEvent(e);
const QRect itemRect = rect();
const int iconSize = std::min(itemRect.width(), itemRect.height());
QRect iconRect;
iconRect.setWidth(iconSize);
iconRect.setHeight(iconSize);
iconRect.moveTopLeft(itemRect.center() - iconRect.center());
QPainter painter(this);
painter.fillRect(rect(), Qt::cyan);
painter.fillRect(iconRect, Qt::yellow);
painter.drawText(rect(), m_itemEntry->id());
}

View File

@ -1,22 +1,34 @@
#include "mainpanel.h"
#include <QHBoxLayout>
#include <QBoxLayout>
MainPanel::MainPanel(QWidget *parent)
: QFrame(parent),
m_itemLayout(new QBoxLayout(QBoxLayout::LeftToRight, this)),
m_itemController(DockItemController::instance(this))
{
setObjectName("MainPanel");
setStyleSheet("QWidget #MainPanel {"
"border:none;"
"background-color:red;"
// "border-radius:5px 5px 5px 5px;"
"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);
m_itemLayout->addWidget(item);
setLayout(m_itemLayout);
}
void MainPanel::updateDockSide(const DockSettings::DockSide dockSide)
{
switch (dockSide)
{
case DockSettings::Top:
case DockSettings::Bottom: m_itemLayout->setDirection(QBoxLayout::LeftToRight); break;
case DockSettings::Left:
case DockSettings::Right: m_itemLayout->setDirection(QBoxLayout::TopToBottom); break;
}
}

View File

@ -2,8 +2,10 @@
#define MAINPANEL_H
#include "controller/dockitemcontroller.h"
#include "util/docksettings.h"
#include <QFrame>
#include <QBoxLayout>
class MainPanel : public QFrame
{
@ -12,7 +14,11 @@ class MainPanel : public QFrame
public:
explicit MainPanel(QWidget *parent = 0);
void updateDockSide(const DockSettings::DockSide dockSide);
private:
QBoxLayout *m_itemLayout;
DockItemController *m_itemController;
};

12
util/docksettings.cpp Normal file
View File

@ -0,0 +1,12 @@
#include "docksettings.h"
DockSettings::DockSettings(QObject *parent)
: QObject(parent)
{
}
DockSettings::DockSide DockSettings::side() const
{
return Top;
}

27
util/docksettings.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef DOCKSETTINGS_H
#define DOCKSETTINGS_H
#include <QObject>
class DockSettings : public QObject
{
Q_OBJECT
public:
enum DockSide {
Top,
Bottom,
Left,
Right,
};
public:
explicit DockSettings(QObject *parent = 0);
DockSide side() const;
signals:
void dockSideChanged(const DockSide side) const;
};
#endif // DOCKSETTINGS_H

View File

@ -1,26 +1,23 @@
#include "mainwindow.h"
#include "panel/mainpanel.h"
#include <QDebug>
#include <QResizeEvent>
MainWindow::MainWindow(QWidget *parent)
: QWidget(parent),
m_position(BOTTOM),
m_mainPanel(new MainPanel(this)),
m_settings(new DockSettings(this)),
m_displayInter(new DBusDisplay(this)),
m_positionUpdateTimer(new QTimer(this))
{
setWindowFlags(Qt::FramelessWindowHint);
setWindowFlags(Qt::X11BypassWindowManagerHint);
setAttribute(Qt::WA_TranslucentBackground);
connect(m_positionUpdateTimer, &QTimer::timeout, this, &MainWindow::updatePosition);
m_positionUpdateTimer->setSingleShot(true);
m_positionUpdateTimer->setInterval(200);
m_positionUpdateTimer->start();
initComponents();
initConnections();
}
void MainWindow::resizeEvent(QResizeEvent *e)
@ -41,6 +38,18 @@ void MainWindow::keyPressEvent(QKeyEvent *e)
}
}
void MainWindow::initComponents()
{
m_positionUpdateTimer->setSingleShot(true);
m_positionUpdateTimer->setInterval(200);
m_positionUpdateTimer->start();
}
void MainWindow::initConnections()
{
connect(m_positionUpdateTimer, &QTimer::timeout, this, &MainWindow::updatePosition);
}
void MainWindow::updatePosition()
{
const QRect rect = m_displayInter->primaryRect();

View File

@ -2,38 +2,33 @@
#define MAINWINDOW_H
#include "xcb/xcb_misc.h"
#include "panel/mainpanel.h"
#include "dbus/dbusdisplay.h"
#include "util/docksettings.h"
#include <QWidget>
#include <QTimer>
class MainPanel;
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);
void initComponents();
void initConnections();
private slots:
void updatePosition();
private:
Position m_position;
MainPanel *m_mainPanel;
DockSettings *m_settings;
DBusDisplay *m_displayInter;
QTimer *m_positionUpdateTimer;