mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
feat(dock): add position changed fanction
This commit is contained in:
parent
0a5fd622db
commit
865cb40b78
@ -45,7 +45,7 @@ MainPanelControl::MainPanelControl(QWidget *parent)
|
|||||||
, m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
, m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
||||||
, m_appAreaSonWidget(new QWidget(this))
|
, m_appAreaSonWidget(new QWidget(this))
|
||||||
, m_appAreaSonLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
, m_appAreaSonLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
||||||
, m_position(Qt::TopEdge)
|
, m_position(Position::Top)
|
||||||
, m_placeholderItem(nullptr)
|
, m_placeholderItem(nullptr)
|
||||||
, m_appDragWidget(nullptr)
|
, m_appDragWidget(nullptr)
|
||||||
, m_dislayMode(Efficient)
|
, m_dislayMode(Efficient)
|
||||||
@ -56,6 +56,7 @@ MainPanelControl::MainPanelControl(QWidget *parent)
|
|||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
|
|
||||||
connect(this, SIGNAL(displayModeChanged()), this, SLOT(onDisplayModeChanged()));
|
connect(this, SIGNAL(displayModeChanged()), this, SLOT(onDisplayModeChanged()));
|
||||||
|
connect(this, SIGNAL(positionChanged()), this, SLOT(onPositionChanged()));
|
||||||
}
|
}
|
||||||
|
|
||||||
MainPanelControl::~MainPanelControl()
|
MainPanelControl::~MainPanelControl()
|
||||||
@ -99,8 +100,8 @@ void MainPanelControl::setDisplayMode(const DisplayMode mode)
|
|||||||
void MainPanelControl::updateMainPanelLayout()
|
void MainPanelControl::updateMainPanelLayout()
|
||||||
{
|
{
|
||||||
switch (m_position) {
|
switch (m_position) {
|
||||||
case Qt::TopEdge:
|
case Position::Top:
|
||||||
case Qt::BottomEdge:
|
case Position::Bottom:
|
||||||
m_fixedAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
m_fixedAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
||||||
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
m_pluginAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
m_pluginAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
||||||
@ -111,8 +112,8 @@ void MainPanelControl::updateMainPanelLayout()
|
|||||||
m_trayAreaLayout->setDirection(QBoxLayout::LeftToRight);
|
m_trayAreaLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight);
|
m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight);
|
||||||
break;
|
break;
|
||||||
case Qt::RightEdge:
|
case Position::Right:
|
||||||
case Qt::LeftEdge:
|
case Position::Left:
|
||||||
m_fixedAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
m_fixedAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
m_pluginAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
m_pluginAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
@ -182,7 +183,7 @@ void MainPanelControl::updateAppAreaSonWidgetSize()
|
|||||||
for (int i = 0; i < m_appAreaSonLayout->count(); ++i) {
|
for (int i = 0; i < m_appAreaSonLayout->count(); ++i) {
|
||||||
QWidget *w = m_appAreaSonLayout->itemAt(i)->widget();
|
QWidget *w = m_appAreaSonLayout->itemAt(i)->widget();
|
||||||
if (w) {
|
if (w) {
|
||||||
if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) {
|
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
|
||||||
w->setMaximumSize(height(), height());
|
w->setMaximumSize(height(), height());
|
||||||
} else {
|
} else {
|
||||||
w->setMaximumSize(width(), width());
|
w->setMaximumSize(width(), width());
|
||||||
@ -193,7 +194,7 @@ void MainPanelControl::updateAppAreaSonWidgetSize()
|
|||||||
for (int i = 0; i < m_fixedAreaLayout->count(); ++i) {
|
for (int i = 0; i < m_fixedAreaLayout->count(); ++i) {
|
||||||
QWidget *w = m_fixedAreaLayout->itemAt(i)->widget();
|
QWidget *w = m_fixedAreaLayout->itemAt(i)->widget();
|
||||||
if (w) {
|
if (w) {
|
||||||
if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) {
|
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
|
||||||
w->setMaximumSize(height(), height());
|
w->setMaximumSize(height(), height());
|
||||||
} else {
|
} else {
|
||||||
w->setMaximumSize(width(), width());
|
w->setMaximumSize(width(), width());
|
||||||
@ -201,7 +202,7 @@ void MainPanelControl::updateAppAreaSonWidgetSize()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) {
|
if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
|
||||||
m_appAreaSonWidget->setMaximumWidth(qMin((m_appAreaWidget->geometry().right() - width() / 2) * 2, m_appAreaWidget->width()));
|
m_appAreaSonWidget->setMaximumWidth(qMin((m_appAreaWidget->geometry().right() - width() / 2) * 2, m_appAreaWidget->width()));
|
||||||
} else {
|
} else {
|
||||||
m_appAreaSonWidget->setMaximumHeight(qMin((m_appAreaWidget->geometry().bottom() - height() / 2) * 2, m_appAreaWidget->height()));
|
m_appAreaSonWidget->setMaximumHeight(qMin((m_appAreaWidget->geometry().bottom() - height() / 2) * 2, m_appAreaWidget->height()));
|
||||||
@ -210,9 +211,12 @@ void MainPanelControl::updateAppAreaSonWidgetSize()
|
|||||||
m_appAreaSonWidget->adjustSize();
|
m_appAreaSonWidget->adjustSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainPanelControl::setPositonValue(const Qt::Edge val)
|
void MainPanelControl::setPositonValue(const Position position)
|
||||||
{
|
{
|
||||||
m_position = val;
|
if (m_position == position)
|
||||||
|
return;
|
||||||
|
m_position = position;
|
||||||
|
emit positionChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainPanelControl::insertItem(const int index, DockItem *item)
|
void MainPanelControl::insertItem(const int index, DockItem *item)
|
||||||
@ -481,10 +485,10 @@ void MainPanelControl::startDrag(DockItem *item)
|
|||||||
|
|
||||||
Dock::Position position;
|
Dock::Position position;
|
||||||
switch (m_position) {
|
switch (m_position) {
|
||||||
case Qt::TopEdge: position = Dock::Top; break;
|
case Position::Top: position = Dock::Top; break;
|
||||||
case Qt::BottomEdge: position = Dock::Bottom; break;
|
case Position::Bottom: position = Dock::Bottom; break;
|
||||||
case Qt::LeftEdge: position = Dock::Left; break;
|
case Position::Left: position = Dock::Left; break;
|
||||||
case Qt::RightEdge: position = Dock::Right; break;
|
case Position::Right: position = Dock::Right; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
appDrag->appDragWidget()->setOriginPos((m_appAreaSonWidget->mapToGlobal(item->pos())));
|
appDrag->appDragWidget()->setOriginPos((m_appAreaSonWidget->mapToGlobal(item->pos())));
|
||||||
@ -591,3 +595,12 @@ void MainPanelControl::onDisplayModeChanged()
|
|||||||
{
|
{
|
||||||
updateDisplayMode();
|
updateDisplayMode();
|
||||||
}
|
}
|
||||||
|
void MainPanelControl::updatePosition()
|
||||||
|
{
|
||||||
|
onPositionChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainPanelControl::onPositionChanged()
|
||||||
|
{
|
||||||
|
updateMainPanelLayout();
|
||||||
|
}
|
||||||
|
@ -53,7 +53,7 @@ public:
|
|||||||
void removeAppAreaItem(QWidget *wdg);
|
void removeAppAreaItem(QWidget *wdg);
|
||||||
void removeTrayAreaItem(QWidget *wdg);
|
void removeTrayAreaItem(QWidget *wdg);
|
||||||
void removePluginAreaItem(QWidget *wdg);
|
void removePluginAreaItem(QWidget *wdg);
|
||||||
void setPositonValue(const Qt::Edge val);
|
void setPositonValue(const Position position);
|
||||||
void setDisplayMode(const DisplayMode m_displayMode);
|
void setDisplayMode(const DisplayMode m_displayMode);
|
||||||
|
|
||||||
MainPanelDelegate *delegate() const;
|
MainPanelDelegate *delegate() const;
|
||||||
@ -63,6 +63,7 @@ signals:
|
|||||||
void itemMoved(DockItem *sourceItem, DockItem *targetItem);
|
void itemMoved(DockItem *sourceItem, DockItem *targetItem);
|
||||||
void itemAdded(const QString &appDesktop, int idx);
|
void itemAdded(const QString &appDesktop, int idx);
|
||||||
void displayModeChanged();
|
void displayModeChanged();
|
||||||
|
void positionChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
@ -71,6 +72,7 @@ private:
|
|||||||
void updateAppAreaSonWidgetSize();
|
void updateAppAreaSonWidgetSize();
|
||||||
void updateMainPanelLayout();
|
void updateMainPanelLayout();
|
||||||
void updateDisplayMode();
|
void updateDisplayMode();
|
||||||
|
void updatePosition();
|
||||||
|
|
||||||
void dragMoveEvent(QDragMoveEvent *e) override;
|
void dragMoveEvent(QDragMoveEvent *e) override;
|
||||||
void dragEnterEvent(QDragEnterEvent *e) override;
|
void dragEnterEvent(QDragEnterEvent *e) override;
|
||||||
@ -87,6 +89,7 @@ public slots:
|
|||||||
void insertItem(const int index, DockItem *item);
|
void insertItem(const int index, DockItem *item);
|
||||||
void removeItem(DockItem *item);
|
void removeItem(DockItem *item);
|
||||||
void onDisplayModeChanged();
|
void onDisplayModeChanged();
|
||||||
|
void onPositionChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QBoxLayout *m_mainPanelLayout;
|
QBoxLayout *m_mainPanelLayout;
|
||||||
@ -99,7 +102,7 @@ private:
|
|||||||
QBoxLayout *m_pluginLayout;
|
QBoxLayout *m_pluginLayout;
|
||||||
QWidget *m_appAreaSonWidget;
|
QWidget *m_appAreaSonWidget;
|
||||||
QBoxLayout *m_appAreaSonLayout;
|
QBoxLayout *m_appAreaSonLayout;
|
||||||
Qt::Edge m_position;
|
Position m_position;
|
||||||
QPointer<PlaceholderItem> m_placeholderItem;
|
QPointer<PlaceholderItem> m_placeholderItem;
|
||||||
MainPanelDelegate *m_delegate;
|
MainPanelDelegate *m_delegate;
|
||||||
QString m_draggingMimeKey;
|
QString m_draggingMimeKey;
|
||||||
|
@ -503,12 +503,12 @@ void MainWindow::updateGeometry()
|
|||||||
// DockDisplayMode and DockPosition MUST be set before invoke setFixedSize method of MainPanel
|
// DockDisplayMode and DockPosition MUST be set before invoke setFixedSize method of MainPanel
|
||||||
// m_mainPanel->updateDockDisplayMode(m_settings->displayMode());
|
// m_mainPanel->updateDockDisplayMode(m_settings->displayMode());
|
||||||
|
|
||||||
Qt::Edge panelPos;
|
Position panelPos;
|
||||||
switch (position) {
|
switch (position) {
|
||||||
case Dock::Top: panelPos = Qt::TopEdge; break;
|
case Dock::Top: panelPos = Position::Top; break;
|
||||||
case Dock::Bottom: panelPos = Qt::BottomEdge; break;
|
case Dock::Bottom: panelPos = Position::Bottom; break;
|
||||||
case Dock::Left: panelPos = Qt::LeftEdge; break;
|
case Dock::Left: panelPos = Position::Left; break;
|
||||||
case Dock::Right: panelPos = Qt::RightEdge; break;
|
case Dock::Right: panelPos = Position::Right; break;
|
||||||
}
|
}
|
||||||
m_mainPanel->setPositonValue(panelPos);
|
m_mainPanel->setPositonValue(panelPos);
|
||||||
// this->setFixedSize has been overridden for size animation
|
// this->setFixedSize has been overridden for size animation
|
||||||
|
Loading…
x
Reference in New Issue
Block a user