diff --git a/dde-dock/dde-dock.pro b/dde-dock/dde-dock.pro index 69c49edad..0cb1d1c2d 100644 --- a/dde-dock/dde-dock.pro +++ b/dde-dock/dde-dock.pro @@ -19,8 +19,6 @@ SOURCES += \ src/Widgets/appicon.cpp \ src/Widgets/dockconstants.cpp \ src/Widgets/docklayout.cpp \ - src/Widgets/dockmodel.cpp \ - src/Widgets/dockview.cpp \ src/Widgets/screenmask.cpp \ src/Widgets/windowpreview.cpp \ src/Panel/panel.cpp \ @@ -36,8 +34,6 @@ HEADERS += \ src/Widgets/appicon.h \ src/Widgets/dockconstants.h \ src/Widgets/docklayout.h \ - src/Widgets/dockmodel.h \ - src/Widgets/dockview.h \ src/Widgets/screenmask.h \ src/Widgets/windowpreview.h \ src/Panel/panel.h \ diff --git a/dde-dock/src/Panel/panel.cpp b/dde-dock/src/Panel/panel.cpp index 07a97c3a1..b5653b345 100644 --- a/dde-dock/src/Panel/panel.cpp +++ b/dde-dock/src/Panel/panel.cpp @@ -9,10 +9,10 @@ Panel::Panel(QWidget *parent) rightLayout = new DockLayout(this); rightLayout->setSortDirection(DockLayout::RightToLeft); rightLayout->setSpacing(dockCons->getAppletsItemSpacing()); - rightLayout->resize(80,dockCons->getAppletsItemHeight()); + rightLayout->resize(80,dockCons->getDockHeight()); leftLayout = new DockLayout(this); - rightLayout->setSpacing(dockCons->getAppItemSpacing()); + leftLayout->setSpacing(dockCons->getAppItemSpacing()); leftLayout->resize(this->width() - rightLayout->width(),dockCons->getDockHeight()); leftLayout->move(0,0); @@ -31,6 +31,9 @@ Panel::Panel(QWidget *parent) connect(leftLayout,SIGNAL(dragStarted()),this,SLOT(slotDragStarted())); connect(leftLayout,SIGNAL(itemDropped()),this,SLOT(slotItemDropped())); + connect(leftLayout, SIGNAL(contentsWidthChange()),this, SLOT(slotLayoutContentsWidthChanged())); + connect(rightLayout, SIGNAL(contentsWidthChange()), this, SLOT(slotLayoutContentsWidthChanged())); + connect(dockCons, SIGNAL(dockModeChanged(DockConstants::DockMode,DockConstants::DockMode)), this, SLOT(slotDockModeChanged(DockConstants::DockMode,DockConstants::DockMode))); @@ -40,6 +43,8 @@ Panel::Panel(QWidget *parent) } panelMenu = new PanelMenu(); + + slotDockModeChanged(dockCons->getDockMode(),dockCons->getDockMode()); } void Panel::resize(const QSize &size) @@ -103,12 +108,32 @@ void Panel::slotExitedMask() void Panel::slotDockModeChanged(DockConstants::DockMode newMode, DockConstants::DockMode oldMode) { + leftLayout->relayout(); + rightLayout->relayout(); + reanchorsLayout(newMode); this->resize(leftLayout->width() + rightLayout->width(),dockCons->getDockHeight()); this->move((parentWidget->width() - leftLayout->width() - rightLayout->width()) / 2,0); } +void Panel::slotLayoutContentsWidthChanged() +{ + reanchorsLayout(dockCons->getDockMode()); + + if (dockCons->getDockMode() == DockConstants::FashionMode) + { + this->resize(leftLayout->getContentsWidth() + rightLayout->getContentsWidth(),dockCons->getDockHeight()); + this->move((parentWidget->width() - leftLayout->getContentsWidth() - rightLayout->getContentsWidth()) / 2,0); + } + else + { + this->resize(leftLayout->width() + rightLayout->width(),dockCons->getDockHeight()); + this->move((parentWidget->width() - leftLayout->width() - rightLayout->width()) / 2,0); + } + +} + void Panel::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::RightButton) diff --git a/dde-dock/src/Panel/panel.h b/dde-dock/src/Panel/panel.h index 377778dfa..3e9324aa0 100644 --- a/dde-dock/src/Panel/panel.h +++ b/dde-dock/src/Panel/panel.h @@ -30,7 +30,9 @@ public slots: void slotEnteredMask(); void slotExitedMask(); +private slots: void slotDockModeChanged(DockConstants::DockMode newMode,DockConstants::DockMode oldMode); + void slotLayoutContentsWidthChanged(); protected: void mousePressEvent(QMouseEvent *event); diff --git a/dde-dock/src/Widgets/appitem.cpp b/dde-dock/src/Widgets/appitem.cpp index 3ccd9fc9a..db548c2e1 100644 --- a/dde-dock/src/Widgets/appitem.cpp +++ b/dde-dock/src/Widgets/appitem.cpp @@ -4,8 +4,9 @@ AppItem::AppItem(QWidget *parent) : AbstractDockItem(parent) { setAcceptDrops(true); - resize(itemWidth, itemHeight); + resize(dockCons->getNormalItemWidth(), dockCons->getItemHeight()); initBackground(); + connect(dockCons, &DockConstants::dockModeChanged,this, &AppItem::slotDockModeChanged); } AppItem::AppItem(QString title, QWidget *parent): @@ -14,8 +15,9 @@ AppItem::AppItem(QString title, QWidget *parent): m_itemTitle = title; setAcceptDrops(true); - resize(itemWidth, itemHeight); + resize(dockCons->getNormalItemWidth(), dockCons->getItemHeight()); initBackground(); + connect(dockCons, &DockConstants::dockModeChanged,this, &AppItem::slotDockModeChanged); } AppItem::AppItem(QString title, QString iconPath, QWidget *parent) : @@ -25,24 +27,86 @@ AppItem::AppItem(QString title, QString iconPath, QWidget *parent) : m_itemIconPath = iconPath; setAcceptDrops(true); - resize(itemWidth, itemHeight); + resize(dockCons->getNormalItemWidth(), dockCons->getItemHeight()); initBackground(); - setIcon(m_itemIconPath); + setIcon(m_itemIconPath,dockCons->getAppIconSize()); + connect(dockCons, &DockConstants::dockModeChanged,this, &AppItem::slotDockModeChanged); +} + +void AppItem::setIcon(const QString &iconPath, int size) +{ + m_appIcon = new AppIcon(iconPath, this); + m_appIcon->resize(size, size); + + reanchorIcon(); +} + +void AppItem::setActived(bool value) +{ + m_isActived = value; + if (!value) + resize(dockCons->getNormalItemWidth(), dockCons->getItemHeight()); + else + resize(dockCons->getActivedItemWidth(), dockCons->getItemHeight()); +} + +void AppItem::setCurrentOpened(bool value) +{ + m_isCurrentOpened = value; +} + +bool AppItem::currentOpened() +{ + return m_isCurrentOpened; +} + +void AppItem::slotDockModeChanged(DockConstants::DockMode newMode, DockConstants::DockMode oldMode) +{ + if (newMode == DockConstants::FashionMode) + { + appBackground->setVisible(false); + } + else + { + appBackground->setVisible(true); + } + + setActived(actived()); + resizeResources(); +} + +void AppItem::reanchorIcon() +{ + switch (dockCons->getDockMode()) { + case DockConstants::FashionMode: + m_appIcon->move((width() - m_appIcon->width()) / 2, 0); + break; + case DockConstants::EfficientMode: + m_appIcon->move((width() - m_appIcon->width()) / 2, (height() - m_appIcon->height()) / 2); + break; + case DockConstants::ClassicMode: + m_appIcon->move((height() - m_appIcon->height()) / 2, (height() - m_appIcon->height()) / 2); + default: + break; + } +} + +void AppItem::resizeBackground() +{ + appBackground->resize(width(),height()); } void AppItem::resizeResources() { if (m_appIcon != NULL) { - m_appIcon->resize(DockConstants::getInstants()->getAppIconSize(), - DockConstants::getInstants()->getAppIconSize()); - m_appIcon->move(width() / 2 - m_appIcon->width() / 2, - height() / 2 - m_appIcon->height() / 2); + m_appIcon->resize(dockCons->getAppIconSize(),dockCons->getAppIconSize()); + reanchorIcon(); } if (appBackground != NULL) { - appBackground->resize(width(), height()); + resizeBackground(); appBackground->move(0,0); } } @@ -50,9 +114,8 @@ void AppItem::resizeResources() void AppItem::initBackground() { appBackground = new AppBackground(this); -// appBackground->setObjectName("appBackground"); - appBackground->resize(width(), height()); appBackground->move(0,0); + connect(this, SIGNAL(widthChanged()),this, SLOT(resizeBackground())); } void AppItem::mousePressEvent(QMouseEvent * event) @@ -61,6 +124,7 @@ void AppItem::mousePressEvent(QMouseEvent * event) emit mousePress(event->globalX(), event->globalY()); ////////////FOR TEST ONLY///////////////////// appBackground->setIsActived(!appBackground->getIsActived()); + setActived(!actived()); } void AppItem::mouseReleaseEvent(QMouseEvent * event) diff --git a/dde-dock/src/Widgets/appitem.h b/dde-dock/src/Widgets/appitem.h index 6b2be73e9..249e8a9a9 100644 --- a/dde-dock/src/Widgets/appitem.h +++ b/dde-dock/src/Widgets/appitem.h @@ -27,6 +27,11 @@ public: AppItem(QString title, QString iconPath, QWidget *parent = 0); ~AppItem(); + void setIcon(const QString &iconPath, int size = 42); + void setActived(bool value); + void setCurrentOpened(bool value); + bool currentOpened(); + protected: void mousePressEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); @@ -38,15 +43,21 @@ protected: void dragLeaveEvent(QDragLeaveEvent * event); void dropEvent(QDropEvent * event); +private slots: + void slotDockModeChanged(DockConstants::DockMode newMode,DockConstants::DockMode oldMode); + void reanchorIcon(); + void resizeBackground(); + private: void resizeResources(); void initBackground(); private: + DockConstants *dockCons = DockConstants::getInstants(); AppBackground * appBackground = NULL; QPoint nextPos; - const int itemWidth = 60; - const int itemHeight = 50; + + bool m_isCurrentOpened = false; }; #endif // APPITEM_H diff --git a/dde-dock/src/Widgets/dockconstants.cpp b/dde-dock/src/Widgets/dockconstants.cpp index 4dd1581e5..c90606632 100644 --- a/dde-dock/src/Widgets/dockconstants.cpp +++ b/dde-dock/src/Widgets/dockconstants.cpp @@ -64,7 +64,7 @@ int DockConstants::getNormalItemWidth() case DockConstants::FashionMode: return 60; case DockConstants::EfficientMode: - return 50; + return 60; case DockConstants::ClassicMode: return 40; default: @@ -79,11 +79,11 @@ int DockConstants::getActivedItemWidth() case DockConstants::FashionMode: return 60; case DockConstants::EfficientMode: - return 50; + return 60; case DockConstants::ClassicMode: - return 80; + return 150; default: - return 50; + return 60; } } @@ -109,7 +109,7 @@ int DockConstants::getAppIconSize() case DockConstants::FashionMode: return 48; case DockConstants::EfficientMode: - return 32; + return 42; case DockConstants::ClassicMode: return 24; default: diff --git a/dde-dock/src/Widgets/docklayout.cpp b/dde-dock/src/Widgets/docklayout.cpp index e2a39e2f6..ab7c55e78 100644 --- a/dde-dock/src/Widgets/docklayout.cpp +++ b/dde-dock/src/Widgets/docklayout.cpp @@ -23,6 +23,7 @@ void DockLayout::insertItem(AbstractDockItem *item, int index) connect(item, &AbstractDockItem::dragStart, this, &DockLayout::slotItemDrag); connect(item, &AbstractDockItem::dragEntered, this, &DockLayout::slotItemEntered); connect(item, &AbstractDockItem::dragExited, this, &DockLayout::slotItemExited); + connect(item, &AbstractDockItem::widthChanged, this, &DockLayout::relayout); relayout(); } @@ -59,12 +60,12 @@ void DockLayout::sortLeftToRight() if (appList.count() <= 0) return; - appList.at(0)->move(itemSpacing,0); + appList.at(0)->move(itemSpacing,(height() - appList.at(0)->height()) / 2); for (int i = 1; i < appList.count(); i ++) { AbstractDockItem * frontItem = appList.at(i - 1); - appList.at(i)->move(frontItem->pos().x() + frontItem->width() + itemSpacing,0); + appList.at(i)->move(frontItem->pos().x() + frontItem->width() + itemSpacing,height() - appList.at(i)->height()); } } @@ -124,6 +125,8 @@ void DockLayout::relayout() default: break; } + + emit contentsWidthChange(); } void DockLayout::addSpacingItem() @@ -144,7 +147,10 @@ void DockLayout::addSpacingItem() animation->setEasingCurve(QEasingCurve::OutCubic); animation->start(); + connect(animation, SIGNAL(finished()),this, SIGNAL(contentsWidthChange())); } + +// emit contentsWidthChange(); } void DockLayout::dragoutFromLayout(int index) @@ -152,6 +158,8 @@ void DockLayout::dragoutFromLayout(int index) AbstractDockItem * tmpItem = appList.takeAt(index); tmpItem->setVisible(false); tmpAppMap.insert(tmpItem,index); + + emit contentsWidthChange(); } int DockLayout::getContentsWidth() @@ -161,6 +169,10 @@ int DockLayout::getContentsWidth() { tmpWidth += appList.at(i)->width(); } + + if (hasSpacingItemInList()) + tmpWidth += tmpAppMap.firstKey()->width() + itemSpacing; + return tmpWidth; } diff --git a/dde-dock/src/Widgets/docklayout.h b/dde-dock/src/Widgets/docklayout.h index a4b6d122e..b2761ead3 100644 --- a/dde-dock/src/Widgets/docklayout.h +++ b/dde-dock/src/Widgets/docklayout.h @@ -29,15 +29,16 @@ public: void setSortDirection(DockLayout::Direction value); int indexOf(AbstractDockItem * item); int indexOf(int x,int y); - void relayout(); - void dragoutFromLayout(int index); int getContentsWidth(); int getItemCount(); +public slots: + void relayout(); + signals: void dragStarted(); void itemDropped(); - void widthChange(int width); + void contentsWidthChange(); protected: void dragEnterEvent(QDragEnterEvent *event); @@ -54,6 +55,7 @@ private: void sortRightToLeft(); void addSpacingItem(); + void dragoutFromLayout(int index); bool hasSpacingItemInList(); private: diff --git a/dde-dock/src/abstractdockitem.h b/dde-dock/src/abstractdockitem.h index a2cdabaed..23d85004a 100644 --- a/dde-dock/src/abstractdockitem.h +++ b/dde-dock/src/abstractdockitem.h @@ -26,11 +26,22 @@ public: virtual void setMoveable(bool value) { m_itemMoveable = value; } virtual bool moveable() { return m_itemMoveable; } - virtual void setActived(bool value) { m_itemActived = value; } - virtual bool actived() { return m_itemActived; } + virtual void setActived(bool value) { m_isActived = value; } + virtual bool actived() { return m_isActived; } + virtual void setHovered(bool value) { m_isHovered = value; } + virtual bool hovered() { return m_isHovered; } virtual void setIndex(int value) { m_itemIndex = value; } virtual int index() { return m_itemIndex; } + void resize(int width,int height){ + QFrame::resize(width,height); + emit widthChanged(); + } + void resize(const QSize &size){ + QFrame::resize(size); + emit widthChanged(); + } + QPoint getNextPos() { return m_itemNextPos; } void setNextPos(const QPoint &value) { m_itemNextPos = value; } void setNextPos(int x, int y) { m_itemNextPos.setX(x); m_itemNextPos.setY(y); } @@ -45,12 +56,14 @@ signals: void mousePress(int x, int y); void mouseRelease(int x, int y); void mouseDoubleClick(); + void widthChanged(); protected: QLabel * m_appIcon = NULL; bool m_itemMoveable = true; - bool m_itemActived = false; + bool m_isActived = false; + bool m_isHovered = false; QString m_itemTitle = ""; QString m_itemIconPath = "";