diff --git a/dde-dock/Resources/qss/default.qss b/dde-dock/Resources/qss/default.qss index d34617f64..0c07bae3e 100644 --- a/dde-dock/Resources/qss/default.qss +++ b/dde-dock/Resources/qss/default.qss @@ -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 +} diff --git a/dde-dock/dde-dock.pro b/dde-dock/dde-dock.pro index f607b493f..69c49edad 100644 --- a/dde-dock/dde-dock.pro +++ b/dde-dock/dde-dock.pro @@ -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 \ diff --git a/dde-dock/src/Panel/panel.cpp b/dde-dock/src/Panel/panel.cpp index 23c5a7149..07a97c3a1 100644 --- a/dde-dock/src/Panel/panel.cpp +++ b/dde-dock/src/Panel/panel.cpp @@ -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() { diff --git a/dde-dock/src/Panel/panel.h b/dde-dock/src/Panel/panel.h index c95aae3db..377778dfa 100644 --- a/dde-dock/src/Panel/panel.h +++ b/dde-dock/src/Panel/panel.h @@ -5,9 +5,11 @@ #include #include #include +#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 diff --git a/dde-dock/src/Panel/panelmenu.cpp b/dde-dock/src/Panel/panelmenu.cpp new file mode 100644 index 000000000..d06aa233b --- /dev/null +++ b/dde-dock/src/Panel/panelmenu.cpp @@ -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(); +} diff --git a/dde-dock/src/Panel/panelmenu.h b/dde-dock/src/Panel/panelmenu.h new file mode 100644 index 000000000..9eff97bfe --- /dev/null +++ b/dde-dock/src/Panel/panelmenu.h @@ -0,0 +1,44 @@ +#ifndef PANELMENU_H +#define PANELMENU_H + +#include +#include +#include +#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 diff --git a/dde-dock/src/Widgets/dockconstants.cpp b/dde-dock/src/Widgets/dockconstants.cpp index cce20d0c7..4dd1581e5 100644 --- a/dde-dock/src/Widgets/dockconstants.cpp +++ b/dde-dock/src/Widgets/dockconstants.cpp @@ -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; } } diff --git a/dde-dock/src/Widgets/dockconstants.h b/dde-dock/src/Widgets/dockconstants.h index 8ca8a4607..4183991d6 100644 --- a/dde-dock/src/Widgets/dockconstants.h +++ b/dde-dock/src/Widgets/dockconstants.h @@ -39,7 +39,7 @@ private: private: static DockConstants * dockConstants; - DockMode m_currentMode = DockConstants::FashionMode; + DockMode m_currentMode = DockConstants::EfficientMode; }; diff --git a/dde-dock/src/Widgets/docklayout.cpp b/dde-dock/src/Widgets/docklayout.cpp index 238967378..e2a39e2f6 100644 --- a/dde-dock/src/Widgets/docklayout.cpp +++ b/dde-dock/src/Widgets/docklayout.cpp @@ -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; diff --git a/dde-dock/src/Widgets/docklayout.h b/dde-dock/src/Widgets/docklayout.h index a00dc6fde..a4b6d122e 100644 --- a/dde-dock/src/Widgets/docklayout.h +++ b/dde-dock/src/Widgets/docklayout.h @@ -7,6 +7,7 @@ #include #include #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; diff --git a/dde-dock/src/mainwidget.cpp b/dde-dock/src/mainwidget.cpp index 7e2854014..ab0fe9ebe 100644 --- a/dde-dock/src/mainwidget.cpp +++ b/dde-dock/src/mainwidget.cpp @@ -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() diff --git a/dde-dock/src/mainwidget.h b/dde-dock/src/mainwidget.h index 0a33a4790..53dfd0f7b 100644 --- a/dde-dock/src/mainwidget.h +++ b/dde-dock/src/mainwidget.h @@ -6,6 +6,7 @@ #include #include #include +#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