From bbb5e08d5899d0fc31f168c5c506e0afb70a97d1 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Thu, 9 May 2013 16:16:28 +0200 Subject: [PATCH] working menu to switch between panel alignments --- src/shell/panelview.cpp | 64 ++++++++++- src/shell/panelview.h | 8 ++ .../panelconfiguration/ToolBar.qml | 101 ++++++++++++++++++ 3 files changed, 168 insertions(+), 5 deletions(-) diff --git a/src/shell/panelview.cpp b/src/shell/panelview.cpp index 472fabc19..116474f65 100644 --- a/src/shell/panelview.cpp +++ b/src/shell/panelview.cpp @@ -116,6 +116,7 @@ void PanelView::setAlignment(Qt::Alignment alignment) } m_alignment = alignment; + config().writeEntry("alignment", (int)m_alignment); positionPanel(); } @@ -158,6 +159,31 @@ void PanelView::setThickness(int value) m_corona->requestApplicationConfigSync(); } +int PanelView::length() const +{ + if (formFactor() == Plasma::Vertical) { + config().readEntry("length", screen()->size().height()); + } else { + config().readEntry("length", screen()->size().width()); + } +} + +void PanelView::setLength(int value) +{ + if (value == length()) { + return; + } + + if (formFactor() == Plasma::Vertical) { + setHeight(value); + } else { + setWidth(value); + } + config().writeEntry("length", value); + emit lengthChanged(); + m_corona->requestApplicationConfigSync(); +} + int PanelView::maximumLength() const { return m_maxLength; @@ -181,6 +207,7 @@ void PanelView::setMaximumLength(int length) config().writeEntry("maxLength", length); m_maxLength = length; emit maximumLengthChanged(); + positionPanel(); m_corona->requestApplicationConfigSync(); } @@ -206,6 +233,7 @@ void PanelView::setMinimumLength(int length) } config().writeEntry("minLength", length); m_minLength = length; + positionPanel(); emit minimumLengthChanged(); m_corona->requestApplicationConfigSync(); } @@ -218,17 +246,18 @@ void PanelView::positionPanel() QScreen *s = screen(); const int oldThickness = thickness(); - + switch (containment()->location()) { case Plasma::TopEdge: containment()->setFormFactor(Plasma::Horizontal); restore(); + switch (m_alignment) { case Qt::AlignCenter: setPosition(QPoint(s->virtualGeometry().center().x(), s->virtualGeometry().top()) + QPoint(m_offset - size().width()/2, 0)); break; case Qt::AlignRight: - setPosition(s->virtualGeometry().topRight() + QPoint(-m_offset - size().width(), 0)); + setPosition(s->virtualGeometry().topRight() - QPoint(m_offset + size().width(), 0)); break; case Qt::AlignLeft: default: @@ -244,7 +273,7 @@ void PanelView::positionPanel() setPosition(QPoint(s->virtualGeometry().left(), s->virtualGeometry().center().y()) + QPoint(0, m_offset)); break; case Qt::AlignRight: - setPosition(s->virtualGeometry().bottomLeft() + QPoint(0, -m_offset - size().height())); + setPosition(s->virtualGeometry().bottomLeft() - QPoint(0, m_offset + size().height())); break; case Qt::AlignLeft: default: @@ -260,7 +289,7 @@ void PanelView::positionPanel() setPosition(QPoint(s->virtualGeometry().right(), s->virtualGeometry().center().y()) - QPoint(width(), 0) + QPoint(0, m_offset - size().height()/2)); break; case Qt::AlignRight: - setPosition(s->virtualGeometry().bottomRight() - QPoint(width(), 0) + QPoint(0, -m_offset - size().height())); + setPosition(s->virtualGeometry().bottomRight() - QPoint(width(), 0) - QPoint(0, m_offset + size().height())); break; case Qt::AlignLeft: default: @@ -277,7 +306,7 @@ void PanelView::positionPanel() setPosition(QPoint(s->virtualGeometry().center().x(), s->virtualGeometry().bottom()) + QPoint(m_offset - size().width()/2, 0)); break; case Qt::AlignRight: - setPosition(s->virtualGeometry().bottomRight() - QPoint(0, height()) + QPoint(-m_offset - size().width(), 0)); + setPosition(s->virtualGeometry().bottomRight() - QPoint(0, height()) - QPoint(m_offset + size().width(), 0)); break; case Qt::AlignLeft: default: @@ -334,4 +363,29 @@ void PanelView::restore() emit offsetChanged(); } +void PanelView::resizeEvent(QResizeEvent *ev) +{ + if (containment()->formFactor() == Plasma::Vertical) { + config().writeEntry("length", ev->size().height()); + config().writeEntry("thickness", ev->size().width()); + if (ev->size().height() != ev->oldSize().height()) { + emit lengthChanged(); + } + if (ev->size().width() != ev->oldSize().width()) { + emit thicknessChanged(); + } + } else { + config().writeEntry("length", ev->size().width()); + config().writeEntry("thickness", ev->size().height()); + if (ev->size().width() != ev->oldSize().width()) { + emit lengthChanged(); + } + if (ev->size().height() != ev->oldSize().height()) { + emit thicknessChanged(); + } + } + + View::resizeEvent(ev); +} + #include "moc_panelview.cpp" diff --git a/src/shell/panelview.h b/src/shell/panelview.h index 29e168795..d8d86a798 100644 --- a/src/shell/panelview.h +++ b/src/shell/panelview.h @@ -32,6 +32,7 @@ class PanelView : public View Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged) Q_PROPERTY(int offset READ offset WRITE setOffset NOTIFY offsetChanged) Q_PROPERTY(int thickness READ thickness WRITE setThickness NOTIFY thicknessChanged) + Q_PROPERTY(int length READ length WRITE setLength NOTIFY lengthChanged) Q_PROPERTY(int maximumLength READ maximumLength WRITE setMaximumLength NOTIFY maximumLengthChanged) Q_PROPERTY(int minimumLength READ minimumLength WRITE setMinimumLength NOTIFY minimumLengthChanged) @@ -52,17 +53,24 @@ public: int thickness() const; void setThickness(int thickness); + int length() const; + void setLength(int value); + int maximumLength() const; void setMaximumLength(int length); int minimumLength() const; void setMinimumLength(int length); +protected: + void resizeEvent(QResizeEvent *ev); + Q_SIGNALS: void alignmentChanged(); void offsetChanged(); void screenGeometryChanged(); void thicknessChanged(); + void lengthChanged(); void maximumLengthChanged(); void minimumLengthChanged(); diff --git a/src/shell/qmlpackages/desktop/contents/configuration/panelconfiguration/ToolBar.qml b/src/shell/qmlpackages/desktop/contents/configuration/panelconfiguration/ToolBar.qml index ac3bb2ea6..18ddf50a6 100644 --- a/src/shell/qmlpackages/desktop/contents/configuration/panelconfiguration/ToolBar.qml +++ b/src/shell/qmlpackages/desktop/contents/configuration/panelconfiguration/ToolBar.qml @@ -59,6 +59,63 @@ Item { } } + PlasmaComponents.Button { + id: moreSettingsButton + property QtObject contextMenu + text: "More settings" + onClicked: { + if (!contextMenu) { + contextMenu = contextMenuComponent.createObject(moreSettingsButton) + } + contextMenu.open() + } + } + + Component { + id: contextMenuComponent + PlasmaComponents.ContextMenu { + visualParent: moreSettingsButton + PlasmaComponents.MenuItem { + id: leftToggle + text: "Left" + checkable: true + checked: panel.alignment == Qt.AlignLeft + onClicked: panel.alignment = Qt.AlignLeft + onToggled: { + if (checked) { + centerToggle.checked = false + rightToggle.checked = false + } + } + } + PlasmaComponents.MenuItem { + id: centerToggle + text: "Center" + checkable: true + checked: panel.alignment == Qt.AlignCenter + onClicked: panel.alignment = Qt.AlignCenter + onToggled: { + if (checked) { + leftToggle.checked = false + rightToggle.checked = false + } + } + } + PlasmaComponents.MenuItem { + id: rightToggle + text: "Right" + checkable: true + checked: panel.alignment == Qt.AlignRight + onClicked: panel.alignment = Qt.AlignRight + onToggled: { + if (checked) { + centerToggle.checked = false + leftToggle.checked = false + } + } + } + } + } //BEGIN States states: [ @@ -77,6 +134,17 @@ Item { right: root.parent.right } } + AnchorChanges { + target: moreSettingsButton + anchors { + verticalCenter: root.verticalCenter + horizontalCenter: undefined + top: undefined + bottom: undefined + left: undefined + right: root.right + } + } }, State { name: "BottomEdge" @@ -93,6 +161,17 @@ Item { right: root.parent.right } } + AnchorChanges { + target: moreSettingsButton + anchors { + verticalCenter: root.verticalCenter + horizontalCenter: undefined + top: undefined + bottom: undefined + left: undefined + right: root.right + } + } }, State { name: "LeftEdge" @@ -109,6 +188,17 @@ Item { right: root.parent.right } } + AnchorChanges { + target: moreSettingsButton + anchors { + verticalCenter: undefined + horizontalCenter: root.verticalCenter + top: undefined + bottom: root.bottom + left: undefined + right: undefined + } + } }, State { name: "RightEdge" @@ -125,6 +215,17 @@ Item { right: undefined } } + AnchorChanges { + target: moreSettingsButton + anchors { + verticalCenter: undefined + horizontalCenter: root.verticalCenter + top: undefined + bottom: root.bottom + left: undefined + right: undefined + } + } } ] //END States