support dock position setting

Change-Id: I9234175a1d910415af56866668a0eebf0d7cb060
This commit is contained in:
石博文 2016-06-21 17:24:03 +08:00 committed by Hualet Wang
parent 1dfa6568dc
commit ecd94e4220
9 changed files with 97 additions and 34 deletions

View File

@ -85,6 +85,12 @@ public:
inline void setPosition(int value)
{ setProperty("Position", QVariant::fromValue(int(value))); }
Q_PROPERTY(quint32 IconSize READ iconSize WRITE setIconSize NOTIFY IconSizeChanged)
inline quint32 iconSize() const
{ return qvariant_cast< quint32 >(property("IconSize")); }
inline void setIconSize(quint32 value)
{ setProperty("IconSize", QVariant::fromValue(value)); }
public Q_SLOTS: // METHODS
inline QDBusPendingReply<> ActivateWindow(uint in0)
{
@ -132,6 +138,7 @@ void EntriesChanged();
void HideModeChanged();
void HideStateChanged();
void PositionChanged();
void IconSizeChanged();
};
namespace com {

View File

@ -8,6 +8,7 @@
#define APP_DRAG_THRESHOLD 20
int AppItem::IconBaseSize;
QPoint AppItem::MousePressPos;
DBusClientManager *AppItem::ClientInter = nullptr;
//uint AppItem::ActiveWindowId = 0;
@ -33,6 +34,26 @@ const QString AppItem::appId() const
return m_id;
}
void AppItem::setIconBaseSize(const int size)
{
IconBaseSize = size;
}
int AppItem::iconBaseSize()
{
return IconBaseSize;
}
int AppItem::itemBaseWidth()
{
return itemBaseHeight() / 0.7;
}
int AppItem::itemBaseHeight()
{
return IconBaseSize / 0.8;
}
void AppItem::paintEvent(QPaintEvent *e)
{
DockItem::paintEvent(e);
@ -41,12 +62,12 @@ void AppItem::paintEvent(QPaintEvent *e)
return;
const QRect itemRect = rect();
const int iconSize = std::min(itemRect.width(), itemRect.height());
// const int iconSize = std::min(itemRect.width(), itemRect.height());
QRect iconRect;
iconRect.setWidth(iconSize);
iconRect.setHeight(iconSize);
iconRect.moveTopLeft(itemRect.center() - iconRect.center());
// QRect iconRect;
// iconRect.setWidth(iconSize);
// iconRect.setHeight(iconSize);
// iconRect.moveTopLeft(itemRect.center() - iconRect.center());
QPainter painter(this);
@ -60,7 +81,7 @@ void AppItem::paintEvent(QPaintEvent *e)
painter.fillRect(backgroundRect, Qt::gray);
// draw icon
painter.drawPixmap(rect().center() - m_icon.rect().center(), m_icon);
painter.drawPixmap(itemRect.center() - m_icon.rect().center(), m_icon);
// draw text
// painter.setPen(Qt::red);

View File

@ -13,6 +13,10 @@ public:
explicit AppItem(const QDBusObjectPath &entry, QWidget *parent = nullptr);
const QString appId() const;
static void setIconBaseSize(const int size);
static int iconBaseSize();
static int itemBaseHeight();
static int itemBaseWidth();
private:
void paintEvent(QPaintEvent *e);
@ -40,6 +44,7 @@ private:
QString m_id;
QPixmap m_icon;
static int IconBaseSize;
static QPoint MousePressPos;
static DBusClientManager *ClientInter;
// static uint ActiveWindowId;

View File

@ -6,20 +6,19 @@
#include <QMouseEvent>
#include <QJsonObject>
Position DockItem::DockPosition = Position::Top;
DockItem::DockItem(const ItemType type, QWidget *parent)
: QWidget(parent),
m_side(Position::Top),
m_type(type),
m_menuManagerInter(new DBusMenuManager(this))
{
}
void DockItem::setDockSide(const Position side)
void DockItem::setDockPosition(const Position side)
{
m_side = side;
update();
DockPosition = side;
}
DockItem::ItemType DockItem::itemType() const

View File

@ -22,7 +22,7 @@ public:
public:
explicit DockItem(const ItemType type, QWidget *parent = nullptr);
void setDockSide(const Position side);
static void setDockPosition(const Position side);
ItemType itemType() const;
@ -38,10 +38,11 @@ protected:
virtual const QString contextMenu() const;
protected:
Position m_side;
ItemType m_type;
DBusMenuManager *m_menuManagerInter;
static Position DockPosition;
};
#endif // DOCKITEM_H

View File

@ -1,4 +1,5 @@
#include "mainpanel.h"
#include "item/appitem.h"
#include <QBoxLayout>
#include <QDragEnterEvent>
@ -7,6 +8,7 @@ DockItem *MainPanel::DragingItem = nullptr;
MainPanel::MainPanel(QWidget *parent)
: QFrame(parent),
m_position(Dock::Top),
m_itemLayout(new QBoxLayout(QBoxLayout::LeftToRight, this)),
m_itemController(DockItemController::instance(this))
@ -35,9 +37,11 @@ MainPanel::MainPanel(QWidget *parent)
setLayout(m_itemLayout);
}
void MainPanel::updateDockPosition(const Position dockSide)
void MainPanel::updateDockPosition(const Position dockPosition)
{
switch (dockSide)
m_position = dockPosition;
switch (m_position)
{
case Position::Top:
case Position::Bottom: m_itemLayout->setDirection(QBoxLayout::LeftToRight); break;
@ -112,7 +116,24 @@ DockItem *MainPanel::itemAt(const QPoint &point)
void MainPanel::adjustItemSize()
{
const QSize size(80, 60);
QSize itemSize;
switch (m_position)
{
case Top:
case Bottom:
itemSize.setHeight(height());
itemSize.setWidth(AppItem::itemBaseWidth());
break;
case Left:
case Right:
itemSize.setWidth(width());
itemSize.setHeight(AppItem::itemBaseHeight());
break;
default:
Q_ASSERT(false);
}
const QList<DockItem *> itemList = m_itemController->itemList();
for (auto item : itemList)
@ -120,12 +141,10 @@ void MainPanel::adjustItemSize()
switch (item->itemType())
{
case DockItem::Launcher:
case DockItem::App: item->setFixedSize(size); break;
case DockItem::App: item->setFixedSize(itemSize); break;
default:;
}
}
updateGeometry();
}
void MainPanel::itemInserted(const int index, DockItem *item)
@ -133,8 +152,6 @@ void MainPanel::itemInserted(const int index, DockItem *item)
initItemConnection(item);
m_itemLayout->insertWidget(index, item);
item->setFixedWidth(80);
adjustSize();
}

View File

@ -14,7 +14,7 @@ class MainPanel : public QFrame
public:
explicit MainPanel(QWidget *parent = 0);
void updateDockPosition(const Position dockSide);
void updateDockPosition(const Position dockPosition);
private:
void resizeEvent(QResizeEvent *e);
@ -33,6 +33,7 @@ private slots:
void itemDragStarted();
private:
Position m_position;
QBoxLayout *m_itemLayout;
DockItemController *m_itemController;

View File

@ -1,4 +1,5 @@
#include "docksettings.h"
#include "item/appitem.h"
#include <QDebug>
@ -29,9 +30,8 @@ DockSettings::DockSettings(QObject *parent)
{
m_position = Dock::Position(m_dockInter->position());
m_displayMode = Dock::DisplayMode(m_dockInter->displayMode());
m_mainWindowSize.setWidth(m_displayInter->primaryRect().width);
m_mainWindowSize.setHeight(60);
m_iconSize = m_dockInter->iconSize();
AppItem::setIconBaseSize(m_iconSize);
m_fashionModeAct.setCheckable(true);
m_efficientModeAct.setCheckable(true);
@ -81,6 +81,8 @@ DockSettings::DockSettings(QObject *parent)
connect(&m_settingsMenu, &DMenu::triggered, this, &DockSettings::menuActionClicked);
connect(m_dockInter, &DBusDock::PositionChanged, this, &DockSettings::positionChanged);
calculateWindowConfig();
}
Position DockSettings::position() const
@ -134,6 +136,13 @@ void DockSettings::menuActionClicked(DAction *action)
if (action == &m_rightPosAct)
return m_dockInter->setPosition(Right);
if (action == &m_largeSizeAct)
return m_dockInter->setIconSize(ICON_SIZE_LARGE);
if (action == &m_mediumSizeAct)
return m_dockInter->setIconSize(ICON_SIZE_MEDIUM);
if (action == &m_smallSizeAct)
return m_dockInter->setIconSize(ICON_SIZE_SMALL);
if (action == &m_keepShownAct)
return m_dockInter->setHideMode(KeepShowing);
if (action == &m_keepHiddenAct)
@ -145,10 +154,18 @@ void DockSettings::menuActionClicked(DAction *action)
void DockSettings::positionChanged()
{
m_position = Dock::Position(m_dockInter->position());
DockItem::setDockPosition(m_position);
calculateWindowConfig();
emit dataChanged();
}
void DockSettings::calculateWindowConfig()
{
const QRect primaryRect = m_displayInter->primaryRect();
const int defaultHeight = 60;
const int defaultWidth = 60;
const int defaultHeight = AppItem::itemBaseHeight();
const int defaultWidth = AppItem::itemBaseWidth();
switch (m_position)
{
@ -167,11 +184,4 @@ void DockSettings::positionChanged()
default:
Q_ASSERT(false);
}
emit dataChanged();
}
void DockSettings::calculateWindowConfig()
{
}

View File

@ -22,6 +22,8 @@ MainWindow::MainWindow(QWidget *parent)
initComponents();
initConnections();
m_positionUpdateTimer->start();
}
MainWindow::~MainWindow()