From 1c953821c1f6b34abcd59b0ef1ad634da37e8c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Wed, 11 Dec 2013 14:57:07 +0100 Subject: [PATCH] [kwin/tabbox] Adjust Compact to API change --- .../qml/clients/compact/contents/ui/main.qml | 317 +++++++++--------- 1 file changed, 155 insertions(+), 162 deletions(-) diff --git a/tabbox/qml/clients/compact/contents/ui/main.qml b/tabbox/qml/clients/compact/contents/ui/main.qml index c0be74f8b8..a50a9aa167 100644 --- a/tabbox/qml/clients/compact/contents/ui/main.qml +++ b/tabbox/qml/clients/compact/contents/ui/main.qml @@ -20,179 +20,172 @@ along with this program. If not, see . import QtQuick 2.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.qtextracomponents 2.0 +import org.kde.kwin 2.0 as KWin -Item { - id: compactTabBox - property int screenWidth : 0 - property int screenHeight : 0 - property string longestCaption: "" - property int optimalWidth: compactListView.maxRowWidth - property int optimalHeight: compactListView.rowHeight * compactListView.count + background.topMargin + background.bottomMargin - property bool canStretchX: true - property bool canStretchY: false - property string maskImagePath: background.maskImagePath - property double maskWidth: background.centerWidth - property double maskHeight: background.centerHeight - property int maskTopMargin: background.centerTopMargin - property int maskLeftMargin: background.centerLeftMargin - width: Math.min(Math.max(screenWidth * 0.2, optimalWidth), screenWidth * 0.8) - height: Math.min(Math.max(screenHeight * 0.2, optimalHeight), screenHeight * 0.8) - focus: true +KWin.Switcher { + id: tabBox + currentIndex: compactListView.currentIndex - property int textMargin: 2 - - onLongestCaptionChanged: { - compactListView.maxRowWidth = compactListView.calculateMaxRowWidth(); - } - - function setModel(model) { - compactListView.model = model; - compactListView.maxRowWidth = compactListView.calculateMaxRowWidth(); - } - - /** - * Returns the caption with adjustments for minimized items. - * @param caption the original caption - * @param mimized whether the item is minimized - * @return Caption adjusted for minimized state - **/ - function itemCaption(caption, minimized) { - var text = caption; - if (minimized) { - text = "(" + text + ")"; + PlasmaCore.Dialog { + id: dialog + location: PlasmaCore.Types.Floating + visible: tabBox.visible + windowFlags: Qt.X11BypassWindowManagerHint + onVisibleChanged: { + if (visible) { + dialog.x = tabBox.screenGeometry.x + tabBox.screenGeometry.width * 0.5 - dialogMainItem.width * 0.5; + dialog.y = tabBox.screenGeometry.y + tabBox.screenGeometry.height * 0.5 - dialogMainItem.height * 0.5; + } } - return text; - } - // just to get the margin sizes - PlasmaCore.FrameSvgItem { - id: hoverItem - imagePath: "widgets/viewitem" - prefix: "hover" - visible: false - } + mainItem: Item { + id: dialogMainItem + property int optimalWidth: compactListView.maxRowWidth + property int optimalHeight: compactListView.rowHeight * compactListView.count + property bool canStretchX: true + property bool canStretchY: false + width: Math.min(Math.max(tabBox.screenGeometry.width * 0.2, optimalWidth), tabBox.screenGeometry.width * 0.8) + height: Math.min(Math.max(tabBox.screenGeometry.height * 0.2, optimalHeight), tabBox.screenGeometry.height * 0.8) + focus: true - ShadowedSvgItem { - id: background - anchors.fill: parent - } + property int textMargin: 2 - // delegate - Component { - id: listDelegate - Item { - id: delegateItem - width: compactListView.width - height: compactListView.rowHeight - opacity: minimized ? 0.6 : 1.0 - QIconItem { - id: iconItem - icon: model.icon - width: 16 - height: 16 + /** + * Returns the caption with adjustments for minimized items. + * @param caption the original caption + * @param mimized whether the item is minimized + * @return Caption adjusted for minimized state + **/ + function itemCaption(caption, minimized) { + var text = caption; + if (minimized) { + text = "(" + text + ")"; + } + return text; + } + + // just to get the margin sizes + PlasmaCore.FrameSvgItem { + id: hoverItem + imagePath: "widgets/viewitem" + prefix: "hover" + visible: false + } + + // delegate + Component { + id: listDelegate + Item { + id: delegateItem + width: compactListView.width + height: compactListView.rowHeight + opacity: minimized ? 0.6 : 1.0 + QIconItem { + id: iconItem + icon: model.icon + width: 16 + height: 16 + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + leftMargin: hoverItem.margins.left + } + } + Text { + id: captionItem + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignBottom + text: dialogMainItem.itemCaption(caption, minimized) + font.bold: index == compactListView.currentIndex + color: theme.textColor + elide: Text.ElideMiddle + anchors { + left: iconItem.right + right: parent.right + top: parent.top + bottom: parent.bottom + topMargin: hoverItem.margins.top + rightMargin: hoverItem.margins.right + bottomMargin: hoverItem.margins.bottom + leftMargin: 2 * dialogMainItem.textMargin + } + } + MouseArea { + anchors.fill: parent + onClicked: { + compactListView.currentIndex = index; + } + } + } + } + ListView { + function calculateMaxRowWidth() { + var width = 0; + var textElement = Qt.createQmlObject( + 'import QtQuick 2.0;' + + 'Text {\n' + + ' text: "' + dialogMainItem.itemCaption(tabBox.model.longestCaption(), true) + '"\n' + + ' font.bold: true\n' + + ' visible: false\n' + + '}', + compactListView, "calculateMaxRowWidth"); + width = Math.max(textElement.width, width); + textElement.destroy(); + return width + 16 + 2 * dialogMainItem.textMargin + hoverItem.margins.right + hoverItem.margins.left + } + /** + * Calculates the height of one row based on the text height and icon size. + * @return Row height + **/ + function calcRowHeight() { + var textElement = Qt.createQmlObject( + 'import QtQuick 2.0;' + + 'Text {\n' + + ' text: "Some Text"\n' + + ' font.bold: true\n' + + ' visible: false\n' + + '}', + compactListView, "calcRowHeight"); + var height = textElement.height; + textElement.destroy(); + // icon size or two text elements and margins and hoverItem margins + return Math.max(16, height + hoverItem.margins.top + hoverItem.margins.bottom); + } + id: compactListView + // the maximum text width + icon item width (32 + 4 margin) + margins for hover item + property int maxRowWidth: calculateMaxRowWidth() + property int rowHeight: calcRowHeight() anchors { - verticalCenter: parent.verticalCenter - left: parent.left - leftMargin: hoverItem.margins.left + fill: parent + } + model: tabBox.model + clip: true + delegate: listDelegate + highlight: PlasmaCore.FrameSvgItem { + id: highlightItem + imagePath: "widgets/viewitem" + prefix: "hover" + width: compactListView.width + } + highlightMoveDuration: 250 + boundsBehavior: Flickable.StopAtBounds + Connections { + target: tabBox + onCurrentIndexChanged: {compactListView.currentIndex = tabBox.currentIndex;} } } - Text { - id: captionItem - horizontalAlignment: Text.AlignLeft - verticalAlignment: Text.AlignBottom - text: itemCaption(caption, minimized) - font.bold: index == compactListView.currentIndex - color: theme.textColor - elide: Text.ElideMiddle - anchors { - left: iconItem.right - right: parent.right - top: parent.top - bottom: parent.bottom - topMargin: hoverItem.margins.top - rightMargin: hoverItem.margins.right - bottomMargin: hoverItem.margins.bottom - leftMargin: 2 * compactTabBox.textMargin + /* + * Key navigation on outer item for two reasons: + * @li we have to emit the change signal + * @li on multiple invocation it does not work on the list view. Focus seems to be lost. + **/ + Keys.onPressed: { + if (event.key == Qt.Key_Up) { + compactListView.decrementCurrentIndex(); + } else if (event.key == Qt.Key_Down) { + compactListView.incrementCurrentIndex(); } } - MouseArea { - anchors.fill: parent - onClicked: { - compactListView.currentIndex = index; - compactListView.currentIndexChanged(compactListView.currentIndex); - } - } - } - } - ListView { - function calculateMaxRowWidth() { - var width = 0; - var textElement = Qt.createQmlObject( - 'import QtQuick 2.0;' - + 'Text {\n' - + ' text: "' + itemCaption(compactTabBox.longestCaption, true) + '"\n' - + ' font.bold: true\n' - + ' visible: false\n' - + '}', - compactListView, "calculateMaxRowWidth"); - width = Math.max(textElement.width, width); - textElement.destroy(); - return width + 16 + 2 * compactTabBox.textMargin + hoverItem.margins.right + hoverItem.margins.left + background.leftMargin + background.rightMargin - } - /** - * Calculates the height of one row based on the text height and icon size. - * @return Row height - **/ - function calcRowHeight() { - var textElement = Qt.createQmlObject( - 'import QtQuick 2.0;' - + 'Text {\n' - + ' text: "Some Text"\n' - + ' font.bold: true\n' - + ' visible: false\n' - + '}', - compactListView, "calcRowHeight"); - var height = textElement.height; - textElement.destroy(); - // icon size or two text elements and margins and hoverItem margins - return Math.max(16, height + hoverItem.margins.top + hoverItem.margins.bottom); - } - signal currentIndexChanged(int index) - id: compactListView - objectName: "listView" - // the maximum text width + icon item width (32 + 4 margin) + margins for hover item + margins for background - property int maxRowWidth: calculateMaxRowWidth() - property int rowHeight: calcRowHeight() - anchors { - fill: parent - topMargin: background.topMargin - leftMargin: background.leftMargin - rightMargin: background.rightMargin - bottomMargin: background.bottomMargin - } - clip: true - delegate: listDelegate - highlight: PlasmaCore.FrameSvgItem { - id: highlightItem - imagePath: "widgets/viewitem" - prefix: "hover" - width: compactListView.width - } - highlightMoveDuration: 250 - boundsBehavior: Flickable.StopAtBounds - } - /* - * Key navigation on outer item for two reasons: - * @li we have to emit the change signal - * @li on multiple invocation it does not work on the list view. Focus seems to be lost. - **/ - Keys.onPressed: { - if (event.key == Qt.Key_Up) { - compactListView.decrementCurrentIndex(); - compactListView.currentIndexChanged(compactListView.currentIndex); - } else if (event.key == Qt.Key_Down) { - compactListView.incrementCurrentIndex(); - compactListView.currentIndexChanged(compactListView.currentIndex); } } }