mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +00:00
Add FashionMode and ClassicMode part1
This commit is contained in:
parent
ca5e659ab0
commit
95bd07ad3e
@ -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
|
||||
}
|
||||
|
@ -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 \
|
||||
|
@ -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()
|
||||
{
|
||||
|
||||
|
@ -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
|
||||
|
63
dde-dock/src/Panel/panelmenu.cpp
Normal file
63
dde-dock/src/Panel/panelmenu.cpp
Normal 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();
|
||||
}
|
44
dde-dock/src/Panel/panelmenu.h
Normal file
44
dde-dock/src/Panel/panelmenu.h
Normal 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
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ private:
|
||||
private:
|
||||
static DockConstants * dockConstants;
|
||||
|
||||
DockMode m_currentMode = DockConstants::FashionMode;
|
||||
DockMode m_currentMode = DockConstants::EfficientMode;
|
||||
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user