mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
AppItems in docklayout API to AbstractDockItem
This commit is contained in:
parent
40127b7d49
commit
c06ed28b6f
@ -30,22 +30,6 @@ AppItem::AppItem(QString title, QString iconPath, QWidget *parent) :
|
|||||||
setIcon(m_itemIconPath);
|
setIcon(m_itemIconPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
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()
|
void AppItem::resizeResources()
|
||||||
{
|
{
|
||||||
if (m_appIcon != NULL)
|
if (m_appIcon != NULL)
|
||||||
@ -73,24 +57,24 @@ void AppItem::initBackground()
|
|||||||
void AppItem::mousePressEvent(QMouseEvent * event)
|
void AppItem::mousePressEvent(QMouseEvent * event)
|
||||||
{
|
{
|
||||||
//qWarning() << "mouse press...";
|
//qWarning() << "mouse press...";
|
||||||
emit mousePress(event->globalX(), event->globalY(),this);
|
emit mousePress(event->globalX(), event->globalY());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppItem::mouseReleaseEvent(QMouseEvent * event)
|
void AppItem::mouseReleaseEvent(QMouseEvent * event)
|
||||||
{
|
{
|
||||||
// qWarning() << "mouse release...";
|
// qWarning() << "mouse release...";
|
||||||
emit mouseRelease(event->globalX(), event->globalY(),this);
|
emit mouseRelease(event->globalX(), event->globalY());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppItem::mouseDoubleClickEvent(QMouseEvent * event)
|
void AppItem::mouseDoubleClickEvent(QMouseEvent * event)
|
||||||
{
|
{
|
||||||
emit mouseDoubleClick(this);
|
emit mouseDoubleClick();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppItem::mouseMoveEvent(QMouseEvent *event)
|
void AppItem::mouseMoveEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
//this event will only execp onec then handle by Drag
|
//this event will only execp onec then handle by Drag
|
||||||
emit dragStart(this);
|
emit dragStart();
|
||||||
|
|
||||||
Qt::MouseButtons btn = event->buttons();
|
Qt::MouseButtons btn = event->buttons();
|
||||||
if(btn == Qt::LeftButton)
|
if(btn == Qt::LeftButton)
|
||||||
@ -112,17 +96,17 @@ void AppItem::mouseMoveEvent(QMouseEvent *event)
|
|||||||
|
|
||||||
void AppItem::enterEvent(QEvent *event)
|
void AppItem::enterEvent(QEvent *event)
|
||||||
{
|
{
|
||||||
emit mouseEntered(this);
|
emit mouseEntered();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppItem::leaveEvent(QEvent *event)
|
void AppItem::leaveEvent(QEvent *event)
|
||||||
{
|
{
|
||||||
emit mouseExited(this);
|
emit mouseExited();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppItem::dragEnterEvent(QDragEnterEvent *event)
|
void AppItem::dragEnterEvent(QDragEnterEvent *event)
|
||||||
{
|
{
|
||||||
emit dragEntered(event,this);
|
emit dragEntered(event);
|
||||||
|
|
||||||
AppItem *tmpItem = NULL;
|
AppItem *tmpItem = NULL;
|
||||||
tmpItem = dynamic_cast<AppItem *>(event->source());
|
tmpItem = dynamic_cast<AppItem *>(event->source());
|
||||||
@ -139,13 +123,13 @@ void AppItem::dragEnterEvent(QDragEnterEvent *event)
|
|||||||
|
|
||||||
void AppItem::dragLeaveEvent(QDragLeaveEvent *event)
|
void AppItem::dragLeaveEvent(QDragLeaveEvent *event)
|
||||||
{
|
{
|
||||||
emit dragExited(event,this);
|
emit dragExited(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppItem::dropEvent(QDropEvent *event)
|
void AppItem::dropEvent(QDropEvent *event)
|
||||||
{
|
{
|
||||||
qWarning() << "Item get drop:" << event->pos();
|
qWarning() << "Item get drop:" << event->pos();
|
||||||
emit drop(event,this);
|
emit drop(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
AppItem::~AppItem()
|
AppItem::~AppItem()
|
||||||
|
@ -27,10 +27,6 @@ public:
|
|||||||
AppItem(QString title, QString iconPath, QWidget *parent = 0);
|
AppItem(QString title, QString iconPath, QWidget *parent = 0);
|
||||||
~AppItem();
|
~AppItem();
|
||||||
|
|
||||||
QPoint getNextPos();
|
|
||||||
void setNextPos(const QPoint &value);
|
|
||||||
void setNextPos(int x, int y);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent *);
|
void mousePressEvent(QMouseEvent *);
|
||||||
void mouseReleaseEvent(QMouseEvent *);
|
void mouseReleaseEvent(QMouseEvent *);
|
||||||
@ -42,17 +38,6 @@ protected:
|
|||||||
void dragLeaveEvent(QDragLeaveEvent * event);
|
void dragLeaveEvent(QDragLeaveEvent * event);
|
||||||
void dropEvent(QDropEvent * event);
|
void dropEvent(QDropEvent * event);
|
||||||
|
|
||||||
signals:
|
|
||||||
void dragStart(AppItem *item);
|
|
||||||
void dragEntered(QDragEnterEvent * event,AppItem *item);
|
|
||||||
void dragExited(QDragLeaveEvent * event,AppItem *item);
|
|
||||||
void drop(QDropEvent * event,AppItem *item);
|
|
||||||
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 mouseDoubleClick( AppItem *item);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void resizeResources();
|
void resizeResources();
|
||||||
void initBackground();
|
void initBackground();
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "docklayout.h"
|
#include "docklayout.h"
|
||||||
|
#include "abstractdockitem.h"
|
||||||
|
|
||||||
DockLayout::DockLayout(QWidget *parent) :
|
DockLayout::DockLayout(QWidget *parent) :
|
||||||
QWidget(parent)
|
QWidget(parent)
|
||||||
@ -11,22 +12,22 @@ void DockLayout::setParent(QWidget *parent)
|
|||||||
this->setParent(parent);
|
this->setParent(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DockLayout::addItem(AppItem *item)
|
void DockLayout::addItem(AbstractDockItem *item)
|
||||||
{
|
{
|
||||||
insertItem(item,appList.count());
|
insertItem(item,appList.count());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DockLayout::insertItem(AppItem *item, int index)
|
void DockLayout::insertItem(AbstractDockItem *item, int index)
|
||||||
{
|
{
|
||||||
item->setParent(this);
|
item->setParent(this);
|
||||||
int appCount = appList.count();
|
int appCount = appList.count();
|
||||||
index = index > appCount ? appCount : (index < 0 ? 0 : index);
|
index = index > appCount ? appCount : (index < 0 ? 0 : index);
|
||||||
|
|
||||||
appList.insert(index,item);
|
appList.insert(index,item);
|
||||||
connect(item,SIGNAL(mouseRelease(int,int,AppItem*)),this,SLOT(slotItemRelease(int,int,AppItem*)));
|
connect(item, &AbstractDockItem::mouseRelease, this, &DockLayout::slotItemRelease);
|
||||||
connect(item, SIGNAL(dragStart(AppItem*)),this,SLOT(slotItemDrag(AppItem*)));
|
connect(item, &AbstractDockItem::dragStart, this, &DockLayout::slotItemDrag);
|
||||||
connect(item,SIGNAL(dragEntered(QDragEnterEvent*,AppItem*)),this,SLOT(slotItemEntered(QDragEnterEvent*,AppItem*)));
|
connect(item, &AbstractDockItem::dragEntered, this, &DockLayout::slotItemEntered);
|
||||||
connect(item,SIGNAL(dragExited(QDragLeaveEvent*,AppItem*)),this,SLOT(slotItemExited(QDragLeaveEvent*,AppItem*)));
|
connect(item, &AbstractDockItem::dragExited, this, &DockLayout::slotItemExited);
|
||||||
|
|
||||||
relayout();
|
relayout();
|
||||||
}
|
}
|
||||||
@ -95,7 +96,7 @@ void DockLayout::sortLeftToRight()
|
|||||||
|
|
||||||
for (int i = 1; i < appList.count(); i ++)
|
for (int i = 1; i < appList.count(); i ++)
|
||||||
{
|
{
|
||||||
AppItem * frontItem = appList.at(i - 1);
|
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,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -109,8 +110,8 @@ void DockLayout::sortRightToLeft()
|
|||||||
|
|
||||||
for (int i = 1; i < appList.count(); i++)
|
for (int i = 1; i < appList.count(); i++)
|
||||||
{
|
{
|
||||||
AppItem *fromItem = appList.at(i - 1);
|
AbstractDockItem *fromItem = appList.at(i - 1);
|
||||||
AppItem *toItem = appList.at(i);
|
AbstractDockItem *toItem = appList.at(i);
|
||||||
toItem->move(fromItem->x() - itemSpacing - toItem->width(),0);
|
toItem->move(fromItem->x() - itemSpacing - toItem->width(),0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -125,7 +126,7 @@ void DockLayout::sortBottomToTop()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int DockLayout::indexOf(AppItem *item)
|
int DockLayout::indexOf(AbstractDockItem *item)
|
||||||
{
|
{
|
||||||
return appList.indexOf(item);
|
return appList.indexOf(item);
|
||||||
}
|
}
|
||||||
@ -162,10 +163,10 @@ void DockLayout::addSpacingItem()
|
|||||||
if (tmpAppMap.isEmpty())
|
if (tmpAppMap.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
AppItem *tmpItem = tmpAppMap.firstKey();
|
AbstractDockItem *tmpItem = tmpAppMap.firstKey();
|
||||||
for (int i = appList.count() -1;i > lastHoverIndex; i-- )
|
for (int i = appList.count() -1;i > lastHoverIndex; i-- )
|
||||||
{
|
{
|
||||||
AppItem *targetItem = appList.at(i);
|
AbstractDockItem *targetItem = appList.at(i);
|
||||||
targetItem->setNextPos(targetItem->x() + tmpItem->width() + itemSpacing,0);
|
targetItem->setNextPos(targetItem->x() + tmpItem->width() + itemSpacing,0);
|
||||||
|
|
||||||
QPropertyAnimation *animation = new QPropertyAnimation(targetItem, "pos");
|
QPropertyAnimation *animation = new QPropertyAnimation(targetItem, "pos");
|
||||||
@ -180,7 +181,7 @@ void DockLayout::addSpacingItem()
|
|||||||
|
|
||||||
void DockLayout::dragoutFromLayout(int index)
|
void DockLayout::dragoutFromLayout(int index)
|
||||||
{
|
{
|
||||||
AppItem * tmpItem = appList.takeAt(index);
|
AbstractDockItem * tmpItem = appList.takeAt(index);
|
||||||
tmpItem->setVisible(false);
|
tmpItem->setVisible(false);
|
||||||
tmpAppMap.insert(tmpItem,index);
|
tmpAppMap.insert(tmpItem,index);
|
||||||
}
|
}
|
||||||
@ -193,7 +194,7 @@ void DockLayout::dragEnterEvent(QDragEnterEvent *event)
|
|||||||
|
|
||||||
void DockLayout::dropEvent(QDropEvent *event)
|
void DockLayout::dropEvent(QDropEvent *event)
|
||||||
{
|
{
|
||||||
AppItem * tmpItem = tmpAppMap.firstKey();
|
AbstractDockItem * tmpItem = tmpAppMap.firstKey();
|
||||||
tmpAppMap.remove(tmpItem);
|
tmpAppMap.remove(tmpItem);
|
||||||
tmpItem->setVisible(true);
|
tmpItem->setVisible(true);
|
||||||
if (indexOf(tmpItem) == -1)
|
if (indexOf(tmpItem) == -1)
|
||||||
@ -207,9 +208,11 @@ void DockLayout::dropEvent(QDropEvent *event)
|
|||||||
emit itemDropped();
|
emit itemDropped();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DockLayout::slotItemDrag(AppItem *item)
|
void DockLayout::slotItemDrag()
|
||||||
{
|
{
|
||||||
// qWarning() << "Item draging..."<<x<<y<<item;
|
// qWarning() << "Item draging..."<<x<<y<<item;
|
||||||
|
AbstractDockItem *item = qobject_cast<AbstractDockItem*>(sender());
|
||||||
|
|
||||||
int tmpIndex = indexOf(item);
|
int tmpIndex = indexOf(item);
|
||||||
if (tmpIndex != -1)
|
if (tmpIndex != -1)
|
||||||
{
|
{
|
||||||
@ -221,10 +224,12 @@ void DockLayout::slotItemDrag(AppItem *item)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DockLayout::slotItemRelease(int x, int y, AppItem *item)
|
void DockLayout::slotItemRelease(int, int)
|
||||||
{
|
{
|
||||||
//outside frame,destroy it
|
//outside frame,destroy it
|
||||||
//inside frame,insert it
|
//inside frame,insert it
|
||||||
|
AbstractDockItem *item = qobject_cast<AbstractDockItem*>(sender());
|
||||||
|
|
||||||
item->setVisible(true);
|
item->setVisible(true);
|
||||||
if (indexOf(item) == -1)
|
if (indexOf(item) == -1)
|
||||||
{
|
{
|
||||||
@ -232,8 +237,10 @@ void DockLayout::slotItemRelease(int x, int y, AppItem *item)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DockLayout::slotItemEntered(QDragEnterEvent * event,AppItem *item)
|
void DockLayout::slotItemEntered(QDragEnterEvent *)
|
||||||
{
|
{
|
||||||
|
AbstractDockItem *item = qobject_cast<AbstractDockItem*>(sender());
|
||||||
|
|
||||||
int tmpIndex = indexOf(item);
|
int tmpIndex = indexOf(item);
|
||||||
QPoint tmpPos = QCursor::pos();
|
QPoint tmpPos = QCursor::pos();
|
||||||
|
|
||||||
@ -259,7 +266,7 @@ void DockLayout::slotItemEntered(QDragEnterEvent * event,AppItem *item)
|
|||||||
|
|
||||||
if (!tmpAppMap.isEmpty())
|
if (!tmpAppMap.isEmpty())
|
||||||
{
|
{
|
||||||
AppItem *targetItem = appList.at(tmpIndex);
|
AbstractDockItem *targetItem = appList.at(tmpIndex);
|
||||||
if (movingForward)
|
if (movingForward)
|
||||||
{
|
{
|
||||||
targetItem->setNextPos(QPoint(targetItem->x() + tmpAppMap.firstKey()->width() + itemSpacing,0));
|
targetItem->setNextPos(QPoint(targetItem->x() + tmpAppMap.firstKey()->width() + itemSpacing,0));
|
||||||
@ -277,7 +284,7 @@ void DockLayout::slotItemEntered(QDragEnterEvent * event,AppItem *item)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DockLayout::slotItemExited(QDragLeaveEvent *event,AppItem *item)
|
void DockLayout::slotItemExited(QDragLeaveEvent *)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,8 @@ public:
|
|||||||
explicit DockLayout(QWidget *parent = 0);
|
explicit DockLayout(QWidget *parent = 0);
|
||||||
|
|
||||||
void setParent(QWidget *parent);
|
void setParent(QWidget *parent);
|
||||||
void addItem(AppItem * item);
|
void addItem(AbstractDockItem * item);
|
||||||
void insertItem(AppItem *item, int index);
|
void insertItem(AbstractDockItem *item, int index);
|
||||||
void removeItem(int index);
|
void removeItem(int index);
|
||||||
void moveItem(int from, int to);
|
void moveItem(int from, int to);
|
||||||
void setItemMoveable(int index, bool moveable);
|
void setItemMoveable(int index, bool moveable);
|
||||||
@ -38,7 +38,7 @@ public:
|
|||||||
void setMargin(DockLayout::MarginEdge edge, qreal margin);
|
void setMargin(DockLayout::MarginEdge edge, qreal margin);
|
||||||
void setSpacing(qreal spacing);
|
void setSpacing(qreal spacing);
|
||||||
void setSortDirection(DockLayout::Direction value);
|
void setSortDirection(DockLayout::Direction value);
|
||||||
int indexOf(AppItem * item);
|
int indexOf(AbstractDockItem * item);
|
||||||
int indexOf(int x,int y);
|
int indexOf(int x,int y);
|
||||||
void relayout();
|
void relayout();
|
||||||
void addSpacingItem();
|
void addSpacingItem();
|
||||||
@ -53,10 +53,10 @@ protected:
|
|||||||
void dropEvent(QDropEvent *event);
|
void dropEvent(QDropEvent *event);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void slotItemDrag(AppItem *item);
|
void slotItemDrag();
|
||||||
void slotItemRelease(int x, int y, AppItem *item);
|
void slotItemRelease(int x, int y);
|
||||||
void slotItemEntered(QDragEnterEvent * event,AppItem *item);
|
void slotItemEntered(QDragEnterEvent * event);
|
||||||
void slotItemExited(QDragLeaveEvent *event,AppItem *item);
|
void slotItemExited(QDragLeaveEvent *event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void sortLeftToRight();
|
void sortLeftToRight();
|
||||||
@ -65,8 +65,8 @@ private:
|
|||||||
void sortBottomToTop();
|
void sortBottomToTop();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<AppItem *> appList;
|
QList<AbstractDockItem *> appList;
|
||||||
QMap<AppItem *,int> tmpAppMap;//only one item inside
|
QMap<AbstractDockItem *,int> tmpAppMap;//only one item inside
|
||||||
|
|
||||||
DockLayout::Direction sortDirection = DockLayout::LeftToRight;
|
DockLayout::Direction sortDirection = DockLayout::LeftToRight;
|
||||||
qreal itemSpacing = 10;
|
qreal itemSpacing = 10;
|
||||||
|
@ -31,6 +31,21 @@ public:
|
|||||||
virtual void setIndex(int value) { m_itemIndex = value; }
|
virtual void setIndex(int value) { m_itemIndex = value; }
|
||||||
virtual int index() { return m_itemIndex; }
|
virtual int index() { return m_itemIndex; }
|
||||||
|
|
||||||
|
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); }
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void dragStart();
|
||||||
|
void dragEntered(QDragEnterEvent * event);
|
||||||
|
void dragExited(QDragLeaveEvent * event);
|
||||||
|
void drop(QDropEvent * event);
|
||||||
|
void mouseEntered();
|
||||||
|
void mouseExited();
|
||||||
|
void mousePress(int x, int y);
|
||||||
|
void mouseRelease(int x, int y);
|
||||||
|
void mouseDoubleClick();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QLabel * m_appIcon = NULL;
|
QLabel * m_appIcon = NULL;
|
||||||
|
|
||||||
@ -39,6 +54,7 @@ protected:
|
|||||||
|
|
||||||
QString m_itemTitle = "";
|
QString m_itemTitle = "";
|
||||||
QString m_itemIconPath = "";
|
QString m_itemIconPath = "";
|
||||||
|
QPoint m_itemNextPos;
|
||||||
|
|
||||||
int m_itemIndex = 0;
|
int m_itemIndex = 0;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user