diff --git a/dde-dock/Panel/panel.cpp b/dde-dock/Panel/panel.cpp index 35b7be594..d11b854c2 100644 --- a/dde-dock/Panel/panel.cpp +++ b/dde-dock/Panel/panel.cpp @@ -6,13 +6,17 @@ Panel::Panel(QWidget *parent) : QWidget(parent) leftLayout->resize(1024,50); leftLayout->move(0,0); - for (int i = 0; i < 5; i ++) - { - AppItem * tmpButton = new AppItem("App" + QString::number(i),":/test/Resources/images/google-chrome.png"); - tmpButton->resize(50,50); + AppItem * b1 = new AppItem("App",":/test/Resources/images/brasero.png");b1->resize(50,50); + AppItem * b2 = new AppItem("App",":/test/Resources/images/crossover.png");b2->resize(50,50); + AppItem * b3 = new AppItem("App",":/test/Resources/images/gcr-gnupg.png");b3->resize(50,50); + AppItem * b4 = new AppItem("App",":/test/Resources/images/display-im6.q16.png");b4->resize(50,50); + AppItem * b5 = new AppItem("App",":/test/Resources/images/eog.png");b5->resize(50,50); - leftLayout->addItem(tmpButton); - } + leftLayout->addItem(b1); + leftLayout->addItem(b2); + leftLayout->addItem(b3); + leftLayout->addItem(b4); + leftLayout->addItem(b5); } void Panel::resize(const QSize &size) diff --git a/dde-dock/Resources/images/QtProject-qtcreator.png b/dde-dock/Resources/images/QtProject-qtcreator.png new file mode 100644 index 000000000..274fb8342 Binary files /dev/null and b/dde-dock/Resources/images/QtProject-qtcreator.png differ diff --git a/dde-dock/Resources/images/brasero.png b/dde-dock/Resources/images/brasero.png new file mode 100644 index 000000000..7524c1075 Binary files /dev/null and b/dde-dock/Resources/images/brasero.png differ diff --git a/dde-dock/Resources/images/crossover.png b/dde-dock/Resources/images/crossover.png new file mode 100644 index 000000000..fa49c4213 Binary files /dev/null and b/dde-dock/Resources/images/crossover.png differ diff --git a/dde-dock/Resources/images/d-feet.png b/dde-dock/Resources/images/d-feet.png new file mode 100644 index 000000000..50a90c8a3 Binary files /dev/null and b/dde-dock/Resources/images/d-feet.png differ diff --git a/dde-dock/Resources/images/deepin-multitasking-view.svg b/dde-dock/Resources/images/deepin-multitasking-view.svg new file mode 100644 index 000000000..bfcb56f4c --- /dev/null +++ b/dde-dock/Resources/images/deepin-multitasking-view.svg @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/dde-dock/Resources/images/display-im6.q16.png b/dde-dock/Resources/images/display-im6.q16.png new file mode 100644 index 000000000..e44a37d4a Binary files /dev/null and b/dde-dock/Resources/images/display-im6.q16.png differ diff --git a/dde-dock/Resources/images/eog.png b/dde-dock/Resources/images/eog.png new file mode 100644 index 000000000..6b2a53661 Binary files /dev/null and b/dde-dock/Resources/images/eog.png differ diff --git a/dde-dock/Resources/images/file-roller.png b/dde-dock/Resources/images/file-roller.png new file mode 100644 index 000000000..cd43da32b Binary files /dev/null and b/dde-dock/Resources/images/file-roller.png differ diff --git a/dde-dock/Resources/images/gcr-gnupg.png b/dde-dock/Resources/images/gcr-gnupg.png new file mode 100644 index 000000000..f151fdf5e Binary files /dev/null and b/dde-dock/Resources/images/gcr-gnupg.png differ diff --git a/dde-dock/Resources/images/gcr-key-pair.png b/dde-dock/Resources/images/gcr-key-pair.png new file mode 100644 index 000000000..2ba1f1516 Binary files /dev/null and b/dde-dock/Resources/images/gcr-key-pair.png differ diff --git a/dde-dock/Resources/images/gcr-key.png b/dde-dock/Resources/images/gcr-key.png new file mode 100644 index 000000000..af1abf73a Binary files /dev/null and b/dde-dock/Resources/images/gcr-key.png differ diff --git a/dde-dock/Resources/images/gcr-password.png b/dde-dock/Resources/images/gcr-password.png new file mode 100644 index 000000000..0b96362c1 Binary files /dev/null and b/dde-dock/Resources/images/gcr-password.png differ diff --git a/dde-dock/Resources/images/gcr-smart-card.png b/dde-dock/Resources/images/gcr-smart-card.png new file mode 100644 index 000000000..b4eaa92de Binary files /dev/null and b/dde-dock/Resources/images/gcr-smart-card.png differ diff --git a/dde-dock/Resources/images/gparted.png b/dde-dock/Resources/images/gparted.png new file mode 100644 index 000000000..ead33781a Binary files /dev/null and b/dde-dock/Resources/images/gparted.png differ diff --git a/dde-dock/Resources/images/inkscape.png b/dde-dock/Resources/images/inkscape.png new file mode 100644 index 000000000..aa445e4bc Binary files /dev/null and b/dde-dock/Resources/images/inkscape.png differ diff --git a/dde-dock/Resources/images/remmina.png b/dde-dock/Resources/images/remmina.png new file mode 100644 index 000000000..e8c214708 Binary files /dev/null and b/dde-dock/Resources/images/remmina.png differ diff --git a/dde-dock/Resources/images/terminator.png b/dde-dock/Resources/images/terminator.png new file mode 100644 index 000000000..977bed702 Binary files /dev/null and b/dde-dock/Resources/images/terminator.png differ diff --git a/dde-dock/Resources/images/vim.png b/dde-dock/Resources/images/vim.png new file mode 100644 index 000000000..c6e04fab2 Binary files /dev/null and b/dde-dock/Resources/images/vim.png differ diff --git a/dde-dock/Widgets/appitem.cpp b/dde-dock/Widgets/appitem.cpp index b50012888..80ac6afbb 100644 --- a/dde-dock/Widgets/appitem.cpp +++ b/dde-dock/Widgets/appitem.cpp @@ -37,7 +37,6 @@ void AppItem::setIcon(const QString &iconPath, int size) { appIcon = new AppIcon(iconPath,this); appIcon->resize(size,size); -// appIcon->setIcon(iconPath); appIcon->move(this->width() / 2, this->height() / 2); } @@ -73,6 +72,22 @@ int AppItem::getIndex() return this->itemIndex; } +QPoint AppItem::getNextPos() +{ + return this->nextPos; +} + +void AppItem::setNextPos(const QPoint &value) +{ + this->nextPos = value; +} + +void AppItem::setNextPos(int x, int y) +{ + this->nextPos.setX(x); + this->nextPos.setY(y); +} + void AppItem::resizeResources() { if (appIcon != NULL) @@ -97,12 +112,13 @@ void AppItem::initBackground() void AppItem::mousePressEvent(QMouseEvent * event) { - qWarning() << "press..."; +// qWarning() << "mouse press..."; emit mousePress(event->globalX(), event->globalY(),this); } void AppItem::mouseReleaseEvent(QMouseEvent * event) { +// qWarning() << "mouse release..."; emit mouseRelease(event->globalX(), event->globalY(),this); } @@ -116,6 +132,16 @@ void AppItem::mouseDoubleClickEvent(QMouseEvent * event) emit mouseDoubleClick(this); } +void AppItem::enterEvent(QEvent *event) +{ + emit mouseEntered(this); +} + +void AppItem::leaveEvent(QEvent *event) +{ + emit mouseExited(this); +} + AppItem::~AppItem() { diff --git a/dde-dock/Widgets/appitem.h b/dde-dock/Widgets/appitem.h index dc2af8ec8..450c606b9 100644 --- a/dde-dock/Widgets/appitem.h +++ b/dde-dock/Widgets/appitem.h @@ -15,6 +15,7 @@ class AppItem : public QFrame { Q_OBJECT + Q_PROPERTY(QPoint pos READ pos WRITE move) public: AppItem(QWidget *parent = 0); AppItem(QString title, QWidget *parent = 0); @@ -29,14 +30,21 @@ public: bool getMoveable(); void setIndex(int value); int getIndex(); + QPoint getNextPos(); + void setNextPos(const QPoint &value); + void setNextPos(int x, int y); protected: void mousePressEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); void mouseDoubleClickEvent(QMouseEvent *); + void enterEvent(QEvent * event); + void leaveEvent(QEvent * event); signals: + void mouseEntered(AppItem *item); + void mouseExited(AppItem *item); void mousePress(int x, int y, AppItem *item); void mouseRelease(int x, int y, AppItem *item); void mouseMove(int x, int y, AppItem *item); @@ -49,6 +57,7 @@ private: private: AppBackground * appBackground = NULL; AppIcon * appIcon = NULL; + QPoint nextPos; int itemIndex; bool itemMoveable = true; diff --git a/dde-dock/Widgets/docklayout.cpp b/dde-dock/Widgets/docklayout.cpp index 45b24ebee..435a2e87e 100644 --- a/dde-dock/Widgets/docklayout.cpp +++ b/dde-dock/Widgets/docklayout.cpp @@ -23,6 +23,9 @@ void DockLayout::insertItem(AppItem *item, int index) appList.insert(index,item); connect(item, SIGNAL(mouseMove(int,int,AppItem*)),this,SLOT(slotItemDrag(int,int,AppItem*))); + connect(item,SIGNAL(mouseRelease(int,int,AppItem*)),this,SLOT(slotItemRelease(int,int,AppItem*))); + connect(item,SIGNAL(mouseEntered(AppItem*)),this,SLOT(slotItemEntered(AppItem*))); + connect(item, SIGNAL(mouseExited(AppItem*)),this,SLOT(slotItemExited(AppItem*))); relayout(); } @@ -103,6 +106,42 @@ void DockLayout::relayout() } } +void DockLayout::dragoutFromLayout(int index) +{ + AppItem * tmpItem = appList.takeAt(index); + tmpItem->setVisible(false); + + if (index == appList.count())//note,target hast been remove before + { + qWarning() << "out of range..."; + return;//at the end of list + } + + //move follow item,note,target hast been remove before + AppItem * followItem = appList.at(index); + followItem->setNextPos(followItem->x() - tmpItem->width() - itemSpacing,0); + //move last item + for (int i = index + 1; i < appList.count(); i ++) + { + AppItem * frontItem = appList.at(i - 1); + AppItem * targetItem = appList.at(i); + targetItem->setNextPos(frontItem->getNextPos().x() + frontItem->width() + itemSpacing,0); + } + + for (int i = index; i < appList.count(); i ++) + { + AppItem *button= appList.at(i); + QPropertyAnimation *animation = new QPropertyAnimation(button, "pos"); + animation->setStartValue(button->pos()); + animation->setEndValue(button->getNextPos()); + animation->setDuration(500 + i * 100); + animation->setEasingCurve(QEasingCurve::InOutBack); + + animation->start(); + } + +} + void DockLayout::sortLeftToRight() { if (appList.count() <= 0) @@ -134,7 +173,7 @@ void DockLayout::sortBottomToTop() int DockLayout::indexOf(AppItem *item) { - return appList.indexOf(item); + return appList.indexOf(item); } int DockLayout::indexOf(int x, int y) @@ -145,5 +184,32 @@ int DockLayout::indexOf(int x, int y) void DockLayout::slotItemDrag(int x, int y, AppItem *item) { - qWarning() << "Item draging..."<setVisible(true); + if (indexOf(item) == -1) + { + qWarning() << "---------" << lastHoverIndex; + insertItem(item,lastHoverIndex); + } +} + +void DockLayout::slotItemEntered(AppItem *item) +{ + this->lastHoverIndex = indexOf(item); +} + +void DockLayout::slotItemExited(AppItem *item) +{ + } diff --git a/dde-dock/Widgets/docklayout.h b/dde-dock/Widgets/docklayout.h index 7b72f9719..1e93ec313 100644 --- a/dde-dock/Widgets/docklayout.h +++ b/dde-dock/Widgets/docklayout.h @@ -3,6 +3,8 @@ #include #include +#include +#include #include "appitem.h" class DockLayout : public QWidget @@ -36,6 +38,7 @@ public: void setSpacing(qreal spacing); void setSortDirection(DockLayout::Direction value); void relayout(); + void dragoutFromLayout(int index); int indexOf(AppItem * item); int indexOf(int x,int y); @@ -45,6 +48,9 @@ public slots: private slots: void slotItemDrag(int x,int y,AppItem *item); + void slotItemRelease(int x, int y, AppItem *item); + void slotItemEntered(AppItem *item); + void slotItemExited(AppItem *item); private: void sortLeftToRight(); @@ -54,6 +60,7 @@ private: private: QList appList; + QMap tmpAppMap;//only one item inside DockLayout::Direction sortDirection = DockLayout::LeftToRight; qreal itemSpacing = 10; @@ -61,6 +68,8 @@ private: qreal rightMargin = 0; qreal topMargin = 0; qreal bottomMargin = 0; + + int lastHoverIndex = 0; }; #endif // DOCKLAYOUT_H diff --git a/dde-dock/images.qrc b/dde-dock/images.qrc index d07d7a34b..1d2103450 100644 --- a/dde-dock/images.qrc +++ b/dde-dock/images.qrc @@ -1,5 +1,23 @@ Resources/images/google-chrome.png + Resources/images/brasero.png + Resources/images/crossover.png + Resources/images/d-feet.png + Resources/images/deepin-multitasking-view.svg + Resources/images/display-im6.q16.png + Resources/images/eog.png + Resources/images/file-roller.png + Resources/images/gcr-gnupg.png + Resources/images/gcr-key-pair.png + Resources/images/gcr-key.png + Resources/images/gcr-password.png + Resources/images/gcr-smart-card.png + Resources/images/gparted.png + Resources/images/inkscape.png + Resources/images/QtProject-qtcreator.png + Resources/images/remmina.png + Resources/images/terminator.png + Resources/images/vim.png