Add FashionMode and ClassicMode completed

This commit is contained in:
杨万青 2015-07-02 11:37:11 +08:00
parent 95bd07ad3e
commit 000e06ae8d
9 changed files with 157 additions and 32 deletions

View File

@ -19,8 +19,6 @@ SOURCES += \
src/Widgets/appicon.cpp \ src/Widgets/appicon.cpp \
src/Widgets/dockconstants.cpp \ src/Widgets/dockconstants.cpp \
src/Widgets/docklayout.cpp \ src/Widgets/docklayout.cpp \
src/Widgets/dockmodel.cpp \
src/Widgets/dockview.cpp \
src/Widgets/screenmask.cpp \ src/Widgets/screenmask.cpp \
src/Widgets/windowpreview.cpp \ src/Widgets/windowpreview.cpp \
src/Panel/panel.cpp \ src/Panel/panel.cpp \
@ -36,8 +34,6 @@ HEADERS += \
src/Widgets/appicon.h \ src/Widgets/appicon.h \
src/Widgets/dockconstants.h \ src/Widgets/dockconstants.h \
src/Widgets/docklayout.h \ src/Widgets/docklayout.h \
src/Widgets/dockmodel.h \
src/Widgets/dockview.h \
src/Widgets/screenmask.h \ src/Widgets/screenmask.h \
src/Widgets/windowpreview.h \ src/Widgets/windowpreview.h \
src/Panel/panel.h \ src/Panel/panel.h \

View File

@ -9,10 +9,10 @@ Panel::Panel(QWidget *parent)
rightLayout = new DockLayout(this); rightLayout = new DockLayout(this);
rightLayout->setSortDirection(DockLayout::RightToLeft); rightLayout->setSortDirection(DockLayout::RightToLeft);
rightLayout->setSpacing(dockCons->getAppletsItemSpacing()); rightLayout->setSpacing(dockCons->getAppletsItemSpacing());
rightLayout->resize(80,dockCons->getAppletsItemHeight()); rightLayout->resize(80,dockCons->getDockHeight());
leftLayout = new DockLayout(this); leftLayout = new DockLayout(this);
rightLayout->setSpacing(dockCons->getAppItemSpacing()); leftLayout->setSpacing(dockCons->getAppItemSpacing());
leftLayout->resize(this->width() - rightLayout->width(),dockCons->getDockHeight()); leftLayout->resize(this->width() - rightLayout->width(),dockCons->getDockHeight());
leftLayout->move(0,0); leftLayout->move(0,0);
@ -31,6 +31,9 @@ Panel::Panel(QWidget *parent)
connect(leftLayout,SIGNAL(dragStarted()),this,SLOT(slotDragStarted())); connect(leftLayout,SIGNAL(dragStarted()),this,SLOT(slotDragStarted()));
connect(leftLayout,SIGNAL(itemDropped()),this,SLOT(slotItemDropped())); 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)), connect(dockCons, SIGNAL(dockModeChanged(DockConstants::DockMode,DockConstants::DockMode)),
this, SLOT(slotDockModeChanged(DockConstants::DockMode,DockConstants::DockMode))); this, SLOT(slotDockModeChanged(DockConstants::DockMode,DockConstants::DockMode)));
@ -40,6 +43,8 @@ Panel::Panel(QWidget *parent)
} }
panelMenu = new PanelMenu(); panelMenu = new PanelMenu();
slotDockModeChanged(dockCons->getDockMode(),dockCons->getDockMode());
} }
void Panel::resize(const QSize &size) void Panel::resize(const QSize &size)
@ -103,12 +108,32 @@ void Panel::slotExitedMask()
void Panel::slotDockModeChanged(DockConstants::DockMode newMode, DockConstants::DockMode oldMode) void Panel::slotDockModeChanged(DockConstants::DockMode newMode, DockConstants::DockMode oldMode)
{ {
leftLayout->relayout();
rightLayout->relayout();
reanchorsLayout(newMode); reanchorsLayout(newMode);
this->resize(leftLayout->width() + rightLayout->width(),dockCons->getDockHeight()); this->resize(leftLayout->width() + rightLayout->width(),dockCons->getDockHeight());
this->move((parentWidget->width() - leftLayout->width() - rightLayout->width()) / 2,0); 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) void Panel::mousePressEvent(QMouseEvent *event)
{ {
if (event->button() == Qt::RightButton) if (event->button() == Qt::RightButton)

View File

@ -30,7 +30,9 @@ public slots:
void slotEnteredMask(); void slotEnteredMask();
void slotExitedMask(); void slotExitedMask();
private slots:
void slotDockModeChanged(DockConstants::DockMode newMode,DockConstants::DockMode oldMode); void slotDockModeChanged(DockConstants::DockMode newMode,DockConstants::DockMode oldMode);
void slotLayoutContentsWidthChanged();
protected: protected:
void mousePressEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event);

View File

@ -4,8 +4,9 @@ AppItem::AppItem(QWidget *parent) :
AbstractDockItem(parent) AbstractDockItem(parent)
{ {
setAcceptDrops(true); setAcceptDrops(true);
resize(itemWidth, itemHeight); resize(dockCons->getNormalItemWidth(), dockCons->getItemHeight());
initBackground(); initBackground();
connect(dockCons, &DockConstants::dockModeChanged,this, &AppItem::slotDockModeChanged);
} }
AppItem::AppItem(QString title, QWidget *parent): AppItem::AppItem(QString title, QWidget *parent):
@ -14,8 +15,9 @@ AppItem::AppItem(QString title, QWidget *parent):
m_itemTitle = title; m_itemTitle = title;
setAcceptDrops(true); setAcceptDrops(true);
resize(itemWidth, itemHeight); resize(dockCons->getNormalItemWidth(), dockCons->getItemHeight());
initBackground(); initBackground();
connect(dockCons, &DockConstants::dockModeChanged,this, &AppItem::slotDockModeChanged);
} }
AppItem::AppItem(QString title, QString iconPath, QWidget *parent) : AppItem::AppItem(QString title, QString iconPath, QWidget *parent) :
@ -25,24 +27,86 @@ AppItem::AppItem(QString title, QString iconPath, QWidget *parent) :
m_itemIconPath = iconPath; m_itemIconPath = iconPath;
setAcceptDrops(true); setAcceptDrops(true);
resize(itemWidth, itemHeight); resize(dockCons->getNormalItemWidth(), dockCons->getItemHeight());
initBackground(); 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() void AppItem::resizeResources()
{ {
if (m_appIcon != NULL) if (m_appIcon != NULL)
{ {
m_appIcon->resize(DockConstants::getInstants()->getAppIconSize(), m_appIcon->resize(dockCons->getAppIconSize(),dockCons->getAppIconSize());
DockConstants::getInstants()->getAppIconSize()); reanchorIcon();
m_appIcon->move(width() / 2 - m_appIcon->width() / 2,
height() / 2 - m_appIcon->height() / 2);
} }
if (appBackground != NULL) if (appBackground != NULL)
{ {
appBackground->resize(width(), height()); resizeBackground();
appBackground->move(0,0); appBackground->move(0,0);
} }
} }
@ -50,9 +114,8 @@ void AppItem::resizeResources()
void AppItem::initBackground() void AppItem::initBackground()
{ {
appBackground = new AppBackground(this); appBackground = new AppBackground(this);
// appBackground->setObjectName("appBackground");
appBackground->resize(width(), height());
appBackground->move(0,0); appBackground->move(0,0);
connect(this, SIGNAL(widthChanged()),this, SLOT(resizeBackground()));
} }
void AppItem::mousePressEvent(QMouseEvent * event) void AppItem::mousePressEvent(QMouseEvent * event)
@ -61,6 +124,7 @@ void AppItem::mousePressEvent(QMouseEvent * event)
emit mousePress(event->globalX(), event->globalY()); emit mousePress(event->globalX(), event->globalY());
////////////FOR TEST ONLY///////////////////// ////////////FOR TEST ONLY/////////////////////
appBackground->setIsActived(!appBackground->getIsActived()); appBackground->setIsActived(!appBackground->getIsActived());
setActived(!actived());
} }
void AppItem::mouseReleaseEvent(QMouseEvent * event) void AppItem::mouseReleaseEvent(QMouseEvent * event)

View File

@ -27,6 +27,11 @@ public:
AppItem(QString title, QString iconPath, QWidget *parent = 0); AppItem(QString title, QString iconPath, QWidget *parent = 0);
~AppItem(); ~AppItem();
void setIcon(const QString &iconPath, int size = 42);
void setActived(bool value);
void setCurrentOpened(bool value);
bool currentOpened();
protected: protected:
void mousePressEvent(QMouseEvent *); void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *);
@ -38,15 +43,21 @@ protected:
void dragLeaveEvent(QDragLeaveEvent * event); void dragLeaveEvent(QDragLeaveEvent * event);
void dropEvent(QDropEvent * event); void dropEvent(QDropEvent * event);
private slots:
void slotDockModeChanged(DockConstants::DockMode newMode,DockConstants::DockMode oldMode);
void reanchorIcon();
void resizeBackground();
private: private:
void resizeResources(); void resizeResources();
void initBackground(); void initBackground();
private: private:
DockConstants *dockCons = DockConstants::getInstants();
AppBackground * appBackground = NULL; AppBackground * appBackground = NULL;
QPoint nextPos; QPoint nextPos;
const int itemWidth = 60;
const int itemHeight = 50; bool m_isCurrentOpened = false;
}; };
#endif // APPITEM_H #endif // APPITEM_H

View File

@ -64,7 +64,7 @@ int DockConstants::getNormalItemWidth()
case DockConstants::FashionMode: case DockConstants::FashionMode:
return 60; return 60;
case DockConstants::EfficientMode: case DockConstants::EfficientMode:
return 50; return 60;
case DockConstants::ClassicMode: case DockConstants::ClassicMode:
return 40; return 40;
default: default:
@ -79,11 +79,11 @@ int DockConstants::getActivedItemWidth()
case DockConstants::FashionMode: case DockConstants::FashionMode:
return 60; return 60;
case DockConstants::EfficientMode: case DockConstants::EfficientMode:
return 50; return 60;
case DockConstants::ClassicMode: case DockConstants::ClassicMode:
return 80; return 150;
default: default:
return 50; return 60;
} }
} }
@ -109,7 +109,7 @@ int DockConstants::getAppIconSize()
case DockConstants::FashionMode: case DockConstants::FashionMode:
return 48; return 48;
case DockConstants::EfficientMode: case DockConstants::EfficientMode:
return 32; return 42;
case DockConstants::ClassicMode: case DockConstants::ClassicMode:
return 24; return 24;
default: default:

View File

@ -23,6 +23,7 @@ void DockLayout::insertItem(AbstractDockItem *item, int index)
connect(item, &AbstractDockItem::dragStart, this, &DockLayout::slotItemDrag); connect(item, &AbstractDockItem::dragStart, this, &DockLayout::slotItemDrag);
connect(item, &AbstractDockItem::dragEntered, this, &DockLayout::slotItemEntered); connect(item, &AbstractDockItem::dragEntered, this, &DockLayout::slotItemEntered);
connect(item, &AbstractDockItem::dragExited, this, &DockLayout::slotItemExited); connect(item, &AbstractDockItem::dragExited, this, &DockLayout::slotItemExited);
connect(item, &AbstractDockItem::widthChanged, this, &DockLayout::relayout);
relayout(); relayout();
} }
@ -59,12 +60,12 @@ void DockLayout::sortLeftToRight()
if (appList.count() <= 0) if (appList.count() <= 0)
return; 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 ++) for (int i = 1; i < appList.count(); i ++)
{ {
AbstractDockItem * 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,height() - appList.at(i)->height());
} }
} }
@ -124,6 +125,8 @@ void DockLayout::relayout()
default: default:
break; break;
} }
emit contentsWidthChange();
} }
void DockLayout::addSpacingItem() void DockLayout::addSpacingItem()
@ -144,7 +147,10 @@ void DockLayout::addSpacingItem()
animation->setEasingCurve(QEasingCurve::OutCubic); animation->setEasingCurve(QEasingCurve::OutCubic);
animation->start(); animation->start();
connect(animation, SIGNAL(finished()),this, SIGNAL(contentsWidthChange()));
} }
// emit contentsWidthChange();
} }
void DockLayout::dragoutFromLayout(int index) void DockLayout::dragoutFromLayout(int index)
@ -152,6 +158,8 @@ void DockLayout::dragoutFromLayout(int index)
AbstractDockItem * tmpItem = appList.takeAt(index); AbstractDockItem * tmpItem = appList.takeAt(index);
tmpItem->setVisible(false); tmpItem->setVisible(false);
tmpAppMap.insert(tmpItem,index); tmpAppMap.insert(tmpItem,index);
emit contentsWidthChange();
} }
int DockLayout::getContentsWidth() int DockLayout::getContentsWidth()
@ -161,6 +169,10 @@ int DockLayout::getContentsWidth()
{ {
tmpWidth += appList.at(i)->width(); tmpWidth += appList.at(i)->width();
} }
if (hasSpacingItemInList())
tmpWidth += tmpAppMap.firstKey()->width() + itemSpacing;
return tmpWidth; return tmpWidth;
} }

View File

@ -29,15 +29,16 @@ public:
void setSortDirection(DockLayout::Direction value); void setSortDirection(DockLayout::Direction value);
int indexOf(AbstractDockItem * item); int indexOf(AbstractDockItem * item);
int indexOf(int x,int y); int indexOf(int x,int y);
void relayout();
void dragoutFromLayout(int index);
int getContentsWidth(); int getContentsWidth();
int getItemCount(); int getItemCount();
public slots:
void relayout();
signals: signals:
void dragStarted(); void dragStarted();
void itemDropped(); void itemDropped();
void widthChange(int width); void contentsWidthChange();
protected: protected:
void dragEnterEvent(QDragEnterEvent *event); void dragEnterEvent(QDragEnterEvent *event);
@ -54,6 +55,7 @@ private:
void sortRightToLeft(); void sortRightToLeft();
void addSpacingItem(); void addSpacingItem();
void dragoutFromLayout(int index);
bool hasSpacingItemInList(); bool hasSpacingItemInList();
private: private:

View File

@ -26,11 +26,22 @@ public:
virtual void setMoveable(bool value) { m_itemMoveable = value; } virtual void setMoveable(bool value) { m_itemMoveable = value; }
virtual bool moveable() { return m_itemMoveable; } virtual bool moveable() { return m_itemMoveable; }
virtual void setActived(bool value) { m_itemActived = value; } virtual void setActived(bool value) { m_isActived = value; }
virtual bool actived() { return m_itemActived; } 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 void setIndex(int value) { m_itemIndex = value; }
virtual int index() { return m_itemIndex; } 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; } QPoint getNextPos() { return m_itemNextPos; }
void setNextPos(const QPoint &value) { m_itemNextPos = value; } void setNextPos(const QPoint &value) { m_itemNextPos = value; }
void setNextPos(int x, int y) { m_itemNextPos.setX(x); m_itemNextPos.setY(y); } 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 mousePress(int x, int y);
void mouseRelease(int x, int y); void mouseRelease(int x, int y);
void mouseDoubleClick(); void mouseDoubleClick();
void widthChanged();
protected: protected:
QLabel * m_appIcon = NULL; QLabel * m_appIcon = NULL;
bool m_itemMoveable = true; bool m_itemMoveable = true;
bool m_itemActived = false; bool m_isActived = false;
bool m_isHovered = false;
QString m_itemTitle = ""; QString m_itemTitle = "";
QString m_itemIconPath = ""; QString m_itemIconPath = "";