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/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 \

View File

@ -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)

View File

@ -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);

View File

@ -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)

View File

@ -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

View File

@ -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:

View File

@ -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;
}

View File

@ -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:

View File

@ -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 = "";