add dock position settings

Change-Id: I0f22b0b615568f35a928fb25c60e4c30293f32ce
This commit is contained in:
石博文 2016-06-21 15:11:32 +08:00 committed by Hualet Wang
parent b24569cee1
commit 1994db5d83
5 changed files with 73 additions and 12 deletions

View File

@ -35,7 +35,7 @@ MainPanel::MainPanel(QWidget *parent)
setLayout(m_itemLayout);
}
void MainPanel::updateDockSide(const Position dockSide)
void MainPanel::updateDockPosition(const Position dockSide)
{
switch (dockSide)
{
@ -44,6 +44,8 @@ void MainPanel::updateDockSide(const Position dockSide)
case Position::Left:
case Position::Right: m_itemLayout->setDirection(QBoxLayout::TopToBottom); break;
}
adjustItemSize();
}
void MainPanel::resizeEvent(QResizeEvent *e)
@ -110,13 +112,15 @@ DockItem *MainPanel::itemAt(const QPoint &point)
void MainPanel::adjustItemSize()
{
const QSize size(80, 60);
const QList<DockItem *> itemList = m_itemController->itemList();
for (auto item : itemList)
{
switch (item->itemType())
{
case DockItem::Launcher:
case DockItem::App: item->setFixedWidth(80); break;
case DockItem::App: item->setFixedSize(size); break;
default:;
}
}

View File

@ -14,7 +14,7 @@ class MainPanel : public QFrame
public:
explicit MainPanel(QWidget *parent = 0);
void updateDockSide(const Position dockSide);
void updateDockPosition(const Position dockSide);
private:
void resizeEvent(QResizeEvent *e);

View File

@ -23,12 +23,16 @@ DockSettings::DockSettings(QObject *parent)
m_keepHiddenAct(tr("Keep Hidden"), this),
m_smartHideAct(tr("Smart Hide"), this),
m_displayInter(new DBusDisplay(this)),
m_dockInter(new DBusDock(this)),
m_itemController(DockItemController::instance(this))
{
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_fashionModeAct.setCheckable(true);
m_efficientModeAct.setCheckable(true);
m_topPosAct.setCheckable(true);
@ -76,6 +80,7 @@ DockSettings::DockSettings(QObject *parent)
m_settingsMenu.addAction(statusSubMenuAct);
connect(&m_settingsMenu, &DMenu::triggered, this, &DockSettings::menuActionClicked);
connect(m_dockInter, &DBusDock::PositionChanged, this, &DockSettings::positionChanged);
}
Position DockSettings::position() const
@ -83,7 +88,7 @@ Position DockSettings::position() const
return m_position;
}
const QSize DockSettings::mainWindowSize() const
const QSize DockSettings::windowSize() const
{
return m_mainWindowSize;
}
@ -119,6 +124,7 @@ void DockSettings::menuActionClicked(DAction *action)
return m_dockInter->setDisplayMode(Fashion);
if (action == &m_efficientModeAct)
return m_dockInter->setDisplayMode(Efficient);
if (action == &m_topPosAct)
return m_dockInter->setPosition(Top);
if (action == &m_bottomPosAct)
@ -127,6 +133,7 @@ void DockSettings::menuActionClicked(DAction *action)
return m_dockInter->setPosition(Left);
if (action == &m_rightPosAct)
return m_dockInter->setPosition(Right);
if (action == &m_keepShownAct)
return m_dockInter->setHideMode(KeepShowing);
if (action == &m_keepHiddenAct)
@ -134,3 +141,37 @@ void DockSettings::menuActionClicked(DAction *action)
if (action == &m_smartHideAct)
return m_dockInter->setHideMode(SmartHide);
}
void DockSettings::positionChanged()
{
m_position = Dock::Position(m_dockInter->position());
const QRect primaryRect = m_displayInter->primaryRect();
const int defaultHeight = 60;
const int defaultWidth = 60;
switch (m_position)
{
case Top:
case Bottom:
m_mainWindowSize.setHeight(defaultHeight);
m_mainWindowSize.setWidth(primaryRect.width());
break;
case Left:
case Right:
m_mainWindowSize.setHeight(primaryRect.height());
m_mainWindowSize.setWidth(defaultWidth);
break;
default:
Q_ASSERT(false);
}
emit dataChanged();
}
void DockSettings::calculateWindowConfig()
{
}

View File

@ -4,6 +4,7 @@
#include "constants.h"
#include "dbus/dbusdock.h"
#include "dbus/dbusmenumanager.h"
#include "dbus/dbusdisplay.h"
#include "controller/dockitemcontroller.h"
#include <DAction>
@ -24,7 +25,7 @@ public:
explicit DockSettings(QObject *parent = 0);
Position position() const;
const QSize mainWindowSize() const;
const QSize windowSize() const;
void showDockSettingsMenu();
@ -36,6 +37,10 @@ public slots:
private slots:
void menuActionClicked(DAction *action);
void positionChanged();
private:
void calculateWindowConfig();
private:
int m_iconSize;
@ -58,6 +63,7 @@ private:
DAction m_keepHiddenAct;
DAction m_smartHideAct;
DBusDisplay *m_displayInter;
DBusDock *m_dockInter;
DockItemController *m_itemController;
};

View File

@ -64,7 +64,8 @@ void MainWindow::initComponents()
void MainWindow::initConnections()
{
connect(m_displayInter, &DBusDisplay::PrimaryRectChanged, [this] {m_positionUpdateTimer->start();});
connect(m_displayInter, &DBusDisplay::PrimaryRectChanged, m_positionUpdateTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
connect(m_settings, &DockSettings::dataChanged, m_positionUpdateTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
connect(m_positionUpdateTimer, &QTimer::timeout, this, &MainWindow::updatePosition);
}
@ -74,13 +75,22 @@ void MainWindow::updatePosition()
Q_ASSERT(sender() == m_positionUpdateTimer);
clearStrutPartial();
setFixedSize(m_settings->windowSize());
m_mainPanel->updateDockPosition(m_settings->position());
const QRect screenRect = m_displayInter->primaryRect();
setFixedWidth(screenRect.width());
setFixedHeight(60);
move(0, screenRect.height() - 60);
const QRect primaryRect = m_displayInter->primaryRect();
switch (m_settings->position())
{
case Top:
case Left:
move(primaryRect.topLeft()); break;
case Right:
move(primaryRect.right() - width(), 0); break;
case Bottom:
move(0, primaryRect.bottom() - height() + 1); break;
default:
Q_ASSERT(false);
}
setStrutPartial();
}