Add FashionMode and ClassicMode part1

This commit is contained in:
杨万青 2015-07-01 19:51:33 +08:00
parent ca5e659ab0
commit 95bd07ad3e
12 changed files with 254 additions and 97 deletions

View File

@ -27,3 +27,13 @@ QLabel#AppBackground[isActived="true"][isHovered="false"][isCurrentOpened="false
border-style: solid;
border-color: rgba(255,255,255,0.3);
}
QLabel#panelMenuContent {
background: rgba(255,255,255,0.8);
border-radius: 5px;
}
PanelMenuItem:hover {
background: gray;
color: #ffffff
}

View File

@ -25,7 +25,8 @@ SOURCES += \
src/Widgets/windowpreview.cpp \
src/Panel/panel.cpp \
src/Widgets/appitem.cpp \
src/systraymanager.cpp
src/systraymanager.cpp \
src/Panel/panelmenu.cpp
HEADERS += \
src/abstractdockitem.h \
@ -41,7 +42,8 @@ HEADERS += \
src/Widgets/windowpreview.h \
src/Panel/panel.h \
src/Widgets/appitem.h \
src/systraymanager.h
src/systraymanager.h \
src/Panel/panelmenu.h
RESOURCES += \
images.qrc \

View File

@ -5,8 +5,15 @@ Panel::Panel(QWidget *parent)
: QLabel(parent),parentWidget(parent)
{
this->setObjectName("Panel");
rightLayout = new DockLayout(this);
rightLayout->setSortDirection(DockLayout::RightToLeft);
rightLayout->setSpacing(dockCons->getAppletsItemSpacing());
rightLayout->resize(80,dockCons->getAppletsItemHeight());
leftLayout = new DockLayout(this);
leftLayout->resize(1024,50);
rightLayout->setSpacing(dockCons->getAppItemSpacing());
leftLayout->resize(this->width() - rightLayout->width(),dockCons->getDockHeight());
leftLayout->move(0,0);
AppItem * b1 = new AppItem("App",":/test/Resources/images/brasero.png");
@ -24,29 +31,29 @@ Panel::Panel(QWidget *parent)
connect(leftLayout,SIGNAL(dragStarted()),this,SLOT(slotDragStarted()));
connect(leftLayout,SIGNAL(itemDropped()),this,SLOT(slotItemDropped()));
rightLayout = new DockLayout(this);
rightLayout->setSortDirection(DockLayout::RightToLeft);
rightLayout->resize(300,50);
rightLayout->move(0,0);
connect(dockCons, SIGNAL(dockModeChanged(DockConstants::DockMode,DockConstants::DockMode)),
this, SLOT(slotDockModeChanged(DockConstants::DockMode,DockConstants::DockMode)));
SystrayManager *manager = new SystrayManager();
foreach (AbstractDockItem *item, manager->trayIcons()) {
rightLayout->addItem(item);
}
panelMenu = new PanelMenu();
}
void Panel::resize(const QSize &size)
{
QWidget::resize(size);
leftLayout->resize(this->width() * 2 / 3,this->height());
rightLayout->move(this->width() - rightLayout->width(),0);
reanchorsLayout(dockCons->getDockMode());
}
void Panel::resize(int width, int height)
{
QWidget::resize(width,height);
leftLayout->resize(this->width() * 2 / 3,this->height());
rightLayout->move(this->width() - rightLayout->width(),0);
reanchorsLayout(dockCons->getDockMode());
}
void Panel::showScreenMask()
@ -94,6 +101,58 @@ void Panel::slotExitedMask()
// leftLayout->relayout();
}
void Panel::slotDockModeChanged(DockConstants::DockMode newMode, DockConstants::DockMode oldMode)
{
reanchorsLayout(newMode);
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)
showMenu();
}
void Panel::mouseReleaseEvent(QMouseEvent *event)
{
}
void Panel::reanchorsLayout(DockConstants::DockMode mode)
{
if (mode == DockConstants::FashionMode)
{
leftLayout->resize(leftLayout->getContentsWidth() + dockCons->getAppItemSpacing(),dockCons->getDockHeight());
rightLayout->setSortDirection(DockLayout::LeftToRight);
rightLayout->resize(rightLayout->getContentsWidth(),dockCons->getDockHeight());
rightLayout->move(leftLayout->width() - dockCons->getAppItemSpacing(),0);
}
else
{
rightLayout->setSortDirection(DockLayout::RightToLeft);
rightLayout->resize(rightLayout->getContentsWidth(),dockCons->getDockHeight());
rightLayout->move(parentWidget->width() - rightLayout->width(),0);
leftLayout->resize(parentWidget->width() - rightLayout->width() ,dockCons->getDockHeight());
}
}
void Panel::showMenu()
{
QPoint tmpPos = QCursor::pos();
panelMenu->move(tmpPos.x(),tmpPos.y() - panelMenu->height());
panelMenu->show();
}
void Panel::hideMenu()
{
}
Panel::~Panel()
{

View File

@ -5,9 +5,11 @@
#include <QLabel>
#include <QPushButton>
#include <QDebug>
#include "Widgets/dockconstants.h"
#include "Widgets/appitem.h"
#include "Widgets/docklayout.h"
#include "Widgets/screenmask.h"
#include "panelmenu.h"
class Panel : public QLabel
{
@ -22,19 +24,31 @@ public:
void showScreenMask();
void hideScreenMask();
signals:
public slots:
void slotDragStarted();
void slotItemDropped();
void slotEnteredMask();
void slotExitedMask();
void slotDockModeChanged(DockConstants::DockMode newMode,DockConstants::DockMode oldMode);
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private:
void reanchorsLayout(DockConstants::DockMode mode);
void showMenu();
void hideMenu();
private:
DockLayout * leftLayout;
DockLayout *rightLayout;
QWidget * parentWidget = NULL;
ScreenMask * maskWidget = NULL;
DockConstants *dockCons = DockConstants::getInstants();
PanelMenu *panelMenu = NULL;
};
#endif // PANEL_H

View File

@ -0,0 +1,63 @@
#include "panelmenu.h"
PanelMenuItem::PanelMenuItem(QString text, QWidget *parent) : QLabel(text,parent)
{
this->setAlignment(Qt::AlignCenter);
}
void PanelMenuItem::mousePressEvent(QMouseEvent *event)
{
// emit itemClicked();
}
void PanelMenuItem::mouseReleaseEvent(QMouseEvent *event)
{
emit itemClicked();
}
PanelMenu::PanelMenu(QWidget *parent) : QWidget(parent)
{
this->resize(150,100);
this->setWindowFlags(Qt::ToolTip);
QLabel * menuContent = new QLabel(this);
menuContent->setObjectName("panelMenuContent");
menuContent->resize(this->width(),this->height());
menuContent->move(0,0);
PanelMenuItem *fashionItem = new PanelMenuItem("Fashion Mode",this);
fashionItem->resize(this->width(),MENU_ITEM_HEIGHT);
fashionItem->move(0,0);
connect(fashionItem, SIGNAL(itemClicked()),this, SLOT(changeToFashionMode()));
PanelMenuItem *efficientItem = new PanelMenuItem("Efficient Mode",this);
efficientItem->resize(this->width(),MENU_ITEM_HEIGHT);
efficientItem->move(0,MENU_ITEM_HEIGHT + MENU_ITEM_SPACING);
connect(efficientItem, SIGNAL(itemClicked()),this, SLOT(changeToEfficientMode()));
PanelMenuItem *classictItem = new PanelMenuItem("Classic Mode",this);
classictItem->resize(this->width(),MENU_ITEM_HEIGHT);
classictItem->move(0,MENU_ITEM_HEIGHT*2 + MENU_ITEM_SPACING*2);
connect(classictItem, SIGNAL(itemClicked()),this, SLOT(changeToClassicMode()));
}
void PanelMenu::changeToFashionMode()
{
qWarning() << "Change to fashion mode...";
dockCons->setDockMode(DockConstants::FashionMode);
this->hide();
}
void PanelMenu::changeToEfficientMode()
{
qWarning() << "Change to efficient mode...";
dockCons->setDockMode(DockConstants::EfficientMode);
this->hide();
}
void PanelMenu::changeToClassicMode()
{
qWarning() << "Change to classic mode...";
dockCons->setDockMode(DockConstants::ClassicMode);
this->hide();
}

View File

@ -0,0 +1,44 @@
#ifndef PANELMENU_H
#define PANELMENU_H
#include <QWidget>
#include <QLabel>
#include <QDebug>
#include "Widgets/dockconstants.h"
class PanelMenuItem : public QLabel
{
Q_OBJECT
public:
explicit PanelMenuItem(QString text, QWidget *parent = 0);
signals:
void itemClicked();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
};
class PanelMenu : public QWidget
{
Q_OBJECT
public:
explicit PanelMenu(QWidget *parent = 0);
signals:
public slots:
private slots:
void changeToFashionMode();
void changeToEfficientMode();
void changeToClassicMode();
private:
DockConstants *dockCons = DockConstants::getInstants();
const int MENU_ITEM_HEIGHT = 30;
const int MENU_ITEM_SPACING = 3;
};
#endif // PANELMENU_H

View File

@ -139,11 +139,11 @@ int DockConstants::getAppletsItemWidth()
case DockConstants::FashionMode:
return 60;
case DockConstants::EfficientMode:
return 40;
return 50;
case DockConstants::ClassicMode:
return 40;
return 50;
default:
return 40;
return 50;
}
}
@ -154,11 +154,11 @@ int DockConstants::getAppletsItemSpacing()
case DockConstants::FashionMode:
return 10;
case DockConstants::EfficientMode:
return 6;
return 10;
case DockConstants::ClassicMode:
return 6;
return 10;
default:
return 6;
return 10;
}
}

View File

@ -39,7 +39,7 @@ private:
private:
static DockConstants * dockConstants;
DockMode m_currentMode = DockConstants::FashionMode;
DockMode m_currentMode = DockConstants::EfficientMode;
};

View File

@ -7,11 +7,6 @@ DockLayout::DockLayout(QWidget *parent) :
this->setAcceptDrops(true);
}
void DockLayout::setParent(QWidget *parent)
{
this->setParent(parent);
}
void DockLayout::addItem(AbstractDockItem *item)
{
insertItem(item,appList.count());
@ -35,6 +30,7 @@ void DockLayout::insertItem(AbstractDockItem *item, int index)
void DockLayout::removeItem(int index)
{
delete appList.takeAt(index);
relayout();
}
void DockLayout::moveItem(int from, int to)
@ -48,35 +44,6 @@ void DockLayout::setItemMoveable(int index, bool moveable)
appList.at(index)->setMoveable(moveable);
}
void DockLayout::setMargin(qreal margin)
{
this->leftMargin = margin;
this->rightMargin = margin;
this->topMargin = margin;
this->bottomMargin = margin;
}
void DockLayout::setMargin(DockLayout::MarginEdge edge, qreal margin)
{
switch(edge)
{
case DockLayout::LeftMargin:
this->leftMargin = margin;
break;
case DockLayout::RightMargin:
this->rightMargin = margin;
break;
case DockLayout::TopMargin:
this->topMargin = margin;
break;
case DockLayout::BottomMargin:
this->bottomMargin = margin;
break;
default:
break;
}
}
void DockLayout::setSpacing(qreal spacing)
{
this->itemSpacing = spacing;
@ -116,16 +83,6 @@ void DockLayout::sortRightToLeft()
}
}
void DockLayout::sortTopToBottom()
{
}
void DockLayout::sortBottomToTop()
{
}
bool DockLayout::hasSpacingItemInList()
{
if (appList.count() <= 1)
@ -164,12 +121,6 @@ void DockLayout::relayout()
case RightToLeft:
sortRightToLeft();
break;
case TopToBottom:
sortTopToBottom();
break;
case BottomToTop:
sortBottomToTop();
break;
default:
break;
}
@ -203,6 +154,21 @@ void DockLayout::dragoutFromLayout(int index)
tmpAppMap.insert(tmpItem,index);
}
int DockLayout::getContentsWidth()
{
int tmpWidth = appList.count() * itemSpacing;
for (int i = 0; i < appList.count(); i ++)
{
tmpWidth += appList.at(i)->width();
}
return tmpWidth;
}
int DockLayout::getItemCount()
{
return appList.count();
}
void DockLayout::dragEnterEvent(QDragEnterEvent *event)
{
event->setDropAction(Qt::MoveAction);
@ -260,7 +226,6 @@ void DockLayout::slotItemEntered(QDragEnterEvent *)
int tmpIndex = indexOf(item);
lastHoverIndex = tmpIndex;
qWarning() << "========" << lastHoverIndex;
if (!hasSpacingItemInList())
{
addSpacingItem();
@ -280,10 +245,6 @@ void DockLayout::slotItemEntered(QDragEnterEvent *)
case RightToLeft:
movingForward = tmpPos.x() - m_lastPost.x() > 0;
break;
case TopToBottom:
break;
case BottomToTop:
break;
}
m_lastPost = tmpPos;

View File

@ -7,6 +7,7 @@
#include <QPropertyAnimation>
#include <QCursor>
#include "appitem.h"
#include "dockconstants.h"
class DockLayout : public QWidget
{
@ -14,38 +15,29 @@ class DockLayout : public QWidget
public:
enum Direction{
LeftToRight,
RightToLeft,
TopToBottom,
BottomToTop
};
enum MarginEdge{
LeftMargin,
RightMargin,
TopMargin,
BottomMargin
RightToLeft
};
explicit DockLayout(QWidget *parent = 0);
void setParent(QWidget *parent);
void addItem(AbstractDockItem * item);
void insertItem(AbstractDockItem *item, int index);
void removeItem(int index);
void moveItem(int from, int to);
void setItemMoveable(int index, bool moveable);
void setMargin(qreal margin);
void setMargin(DockLayout::MarginEdge edge, qreal margin);
void setSpacing(qreal spacing);
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();
signals:
void dragStarted();
void itemDropped();
void widthChange(int width);
protected:
void dragEnterEvent(QDragEnterEvent *event);
@ -60,8 +52,6 @@ private slots:
private:
void sortLeftToRight();
void sortRightToLeft();
void sortTopToBottom();
void sortBottomToTop();
void addSpacingItem();
bool hasSpacingItemInList();
@ -72,10 +62,6 @@ private:
DockLayout::Direction sortDirection = DockLayout::LeftToRight;
qreal itemSpacing = 10;
qreal leftMargin = 0;
qreal rightMargin = 0;
qreal topMargin = 0;
qreal bottomMargin = 0;
bool movingForward = false;
int lastHoverIndex = 0;

View File

@ -4,15 +4,26 @@ MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
QRect rec = QApplication::desktop()->screenGeometry();
this->resize(rec.width(),50);
Panel * mainPanel = new Panel(this);
mainPanel->setMinimumSize(this->width(),this->height());
this->resize(rec.width(),DockConstants::getInstants()->getDockHeight());
mainPanel = new Panel(this);
mainPanel->resize(this->width(),this->height());
mainPanel->move(0,0);
this->setWindowFlags(Qt::ToolTip);
this->setAttribute(Qt::WA_TranslucentBackground);
this->move(0,rec.height() - 100);
connect(DockConstants::getInstants(), SIGNAL(dockModeChanged(DockConstants::DockMode,DockConstants::DockMode)),
this, SLOT(slotDockModeChanged(DockConstants::DockMode,DockConstants::DockMode)));
}
void MainWidget::slotDockModeChanged(DockConstants::DockMode newMode, DockConstants::DockMode oldMode)
{
QRect rec = QApplication::desktop()->screenGeometry();
this->resize(rec.width(),DockConstants::getInstants()->getDockHeight());
// mainPanel->resize(this->width(),this->height());
// mainPanel->move(0,0);
}
MainWidget::~MainWidget()

View File

@ -6,6 +6,7 @@
#include <QWidget>
#include <QScreen>
#include <QDebug>
#include "Widgets/dockconstants.h"
#include "Panel/panel.h"
class MainWidget : public QWidget
@ -15,6 +16,12 @@ class MainWidget : public QWidget
public:
MainWidget(QWidget *parent = 0);
~MainWidget();
public slots:
void slotDockModeChanged(DockConstants::DockMode newMode,DockConstants::DockMode oldMode);
private:
Panel *mainPanel = NULL;
};
#endif // MAINWIDGET_H