diff --git a/frame/panel/mainpanel.cpp b/frame/panel/mainpanel.cpp index 58b92adb2..6dd1bd99a 100644 --- a/frame/panel/mainpanel.cpp +++ b/frame/panel/mainpanel.cpp @@ -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 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:; } } diff --git a/frame/panel/mainpanel.h b/frame/panel/mainpanel.h index 5b366d22c..06e6a4576 100644 --- a/frame/panel/mainpanel.h +++ b/frame/panel/mainpanel.h @@ -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); diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index 6c5bd3052..c2a82468f 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -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() +{ + +} diff --git a/frame/util/docksettings.h b/frame/util/docksettings.h index cd8749320..b2f6c87d4 100644 --- a/frame/util/docksettings.h +++ b/frame/util/docksettings.h @@ -4,6 +4,7 @@ #include "constants.h" #include "dbus/dbusdock.h" #include "dbus/dbusmenumanager.h" +#include "dbus/dbusdisplay.h" #include "controller/dockitemcontroller.h" #include @@ -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; }; diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 5667ed3fc..733f79a61 100644 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -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(&QTimer::start)); + connect(m_settings, &DockSettings::dataChanged, m_positionUpdateTimer, static_cast(&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(); }