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