diff --git a/containments/homescreen2/applicationlistmodel.cpp b/containments/homescreen2/applicationlistmodel.cpp index 80e61b7b..4e78bcd3 100644 --- a/containments/homescreen2/applicationlistmodel.cpp +++ b/containments/homescreen2/applicationlistmodel.cpp @@ -103,6 +103,8 @@ void ApplicationListModel::loadApplications() QMap orderedList; QList unorderedList; + int i = 0; // for default bookmarks + // Iterate over all entries in the group while (!subGroupList.isEmpty()) { KSycocaEntry::Ptr groupEntry = subGroupList.first(); @@ -141,8 +143,12 @@ void ApplicationListModel::loadApplications() auto it = m_appPositions.constFind(service->storageId()); if (it != m_appPositions.constEnd()) { + //TODO: proper bookmarks + data.favorite = (*it) < 6; orderedList[*it] = data; } else { + //TODO: proper bookmarks + data.favorite = ++i + m_appPositions.size() < 6; unorderedList << data; } } @@ -184,6 +190,8 @@ QVariant ApplicationListModel::data(const QModelIndex &index, int role) const return index.row(); case ApplicationOnDesktopRole: return m_applicationList.at(index.row()).desktop; + case ApplicationFavoriteRole: + return m_applicationList.at(index.row()).favorite; default: return QVariant(); @@ -222,6 +230,7 @@ void ApplicationListModel::setFavoriteItem(int row, bool favorite) return; } + setDesktopItem(row, false); data.favorite = favorite; emit dataChanged(index(row, 0), index(row, 0)); @@ -238,8 +247,9 @@ void ApplicationListModel::setDesktopItem(int row, bool desktop) return; } + setFavoriteItem(row, false); data.desktop = desktop; -qWarning()< + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. + */ + +import QtQuick 2.4 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.3 as Controls + +import org.kde.plasma.plasmoid 2.0 +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.kquickcontrolsaddons 2.0 + + +Controls.Control { + id: root + + readonly property int reservedSpaceForLabel: metrics.height + property int availableCellHeight: units.iconSizes.huge + reservedSpaceForLabel + + property alias flow: applicationsFlow + + function forceLayout() { + applicationsFlow.forceLayout(); + } + + function showSpacerBefore(item) { + spacer.parent = applicationsFlow + plasmoid.nativeInterface.orderItems(spacer, item); + } + + function hideSpacer() { + spacer.parent = flowParent; + } + + implicitWidth: contentItem.implicitWidth + frame.margins.top + frame.margins.bottom + implicitHeight: contentItem.implicitHeight + frame.margins.top + frame.margins.bottom + + leftPadding: frame.margins.left + topPadding: frame.margins.top + rightPadding: frame.margins.right + bottomPadding: frame.margins.bottom + + background: PlasmaCore.FrameSvgItem { + id: frame + imagePath: "widgets/background" + anchors.fill: parent + } + + contentItem: Item { + id: flowParent + + implicitWidth: applicationsFlow.implicitWidth + implicitHeight: applicationsFlow.implicitHeight + + //NOTE: TextMetrics can't handle multi line + Controls.Label { + id: metrics + text: "M\nM" + visible: false + } + + Item { + id: spacer + width: units.gridUnit * 4 + height: width + } + + Flow { + id: applicationsFlow + anchors.fill: parent + + spacing: 0 + + move: Transition { + NumberAnimation { + duration: units.longDuration + easing.type: Easing.InOutQuad + properties: "x,y" + } + } + } + } +} diff --git a/containments/homescreen2/package/contents/ui/launcher/LauncherGrid.qml b/containments/homescreen2/package/contents/ui/launcher/LauncherGrid.qml index 44f529ec..de11fde2 100644 --- a/containments/homescreen2/package/contents/ui/launcher/LauncherGrid.qml +++ b/containments/homescreen2/package/contents/ui/launcher/LauncherGrid.qml @@ -27,127 +27,68 @@ import org.kde.kquickcontrolsaddons 2.0 import org.kde.plasma.private.containmentlayoutmanager 1.0 as ContainmentLayoutManager -Controls.Control { +LauncherContainer { id: root - property alias flow: applicationsFlow - - readonly property bool dragging: applicationsFlow.dragData + readonly property bool dragging: root.flow.dragData property bool reorderingApps: false - property int availableCellHeight: units.iconSizes.huge + reservedSpaceForLabel - readonly property int reservedSpaceForLabel: metrics.height - - readonly property int cellWidth: applicationsFlow.width / Math.floor(applicationsFlow.width / ((availableCellHeight - reservedSpaceForLabel) + units.smallSpacing*4)) + readonly property int cellWidth: root.flow.width / Math.floor(root.flow.width / ((availableCellHeight - reservedSpaceForLabel) + units.smallSpacing*4)) readonly property int cellHeight: availableCellHeight - topPadding property ContainmentLayoutManager.AppletsLayout appletsLayout property FavoriteStrip favoriteStrip - signal externalDragStarted - signal dragPositionChanged(point pos) - function forceLayout() { - applicationsFlow.forceLayout(); - } - - function showSpacerBefore(item) { - spacer.parent = applicationsFlow - plasmoid.nativeInterface.orderItems(spacer, item); - } - - function hideSpacer() { - spacer.parent = flowParent; - } - - implicitHeight: applicationsFlow.implicitHeight + frame.margins.top + frame.margins.bottom - - leftPadding: frame.margins.left - topPadding: frame.margins.top - rightPadding: frame.margins.right - bottomPadding: frame.margins.bottom - - background: PlasmaCore.FrameSvgItem { - id: frame - imagePath: "widgets/background" - anchors.fill: parent - } - - contentItem: Item { - id: flowParent - //NOTE: TextMetrics can't handle multi line - Controls.Label { - id: metrics - text: "M\nM" - visible: false - } - - Item { - id: spacer - width: units.gridUnit * 4 - height: width - visible:parent == applicationsFlow - } - Flow { - id: applicationsFlow - anchors.fill: parent - - spacing: 0 - - property var dragData - property int startContentYDrag - property bool viewHasBeenDragged - - - NumberAnimation { - id: scrollAnim - target: applicationsFlow - properties: "contentY" - duration: units.longDuration - easing.type: Easing.InOutQuad - } - move: Transition { - NumberAnimation { - duration: units.longDuration - easing.type: Easing.InOutQuad - properties: "x,y" + Repeater { + model: plasmoid.nativeInterface.applicationListModel + delegate: Delegate { + id: delegate + width: root.cellWidth + height: root.cellHeight + container: { + if (model.ApplicationOnDesktopRole) { + return null; } + if (index < favoriteStrip.count) { + return favoriteStrip; + } + return root; } - - Repeater { - model: plasmoid.nativeInterface.applicationListModel - delegate: Delegate { - width: root.cellWidth - height: root.cellHeight - container: { - if (model.ApplicationOnDesktopRole) { - return null; - } - if (index < favoriteStrip.count) { - return favoriteStrip; - } - return root; - } - parent: { - if (model.ApplicationOnDesktopRole) { - return appletsLayout; - } - if (index < favoriteStrip.count) { - if (editMode) { - return favoriteStrip.contentItem; - } else { - return favoriteStrip.flow; - } - } - if (editMode) { - return flowParent; - } else { - return applicationsFlow; - } + parent: { + if (model.ApplicationOnDesktopRole) { + var pos = appletsLayout.mapFromItem(delegate, 0, 0); + x = pos.x; + y = pos.y; + return appletsLayout; + } + if (model.ApplicationFavoriteRole) { + if (editMode) { + var pos = favoriteStrip.contentItem.mapFromItem(delegate, 0, 0); + x = pos.x; + y = pos.y; + return favoriteStrip.contentItem; + } else { + var pos = favoriteStrip.flow.mapFromItem(delegate, 0, 0); + x = pos.x; + y = pos.y; + return favoriteStrip.flow; } } + if (editMode) { + var pos = flowParent.mapFromItem(delegate, 0, 0); + x = pos.x; + y = pos.y; + return flowParent; + } else { + var pos = root.flow.mapFromItem(delegate, 0, 0); + x = pos.x; + y = pos.y; + return root.flow; + } } } } } + diff --git a/containments/homescreen2/package/contents/ui/main.qml b/containments/homescreen2/package/contents/ui/main.qml index 10bb8643..395d4eb9 100644 --- a/containments/homescreen2/package/contents/ui/main.qml +++ b/containments/homescreen2/package/contents/ui/main.qml @@ -164,7 +164,7 @@ Text { Launcher.FavoriteStrip { id: favoriteStrip anchors.horizontalCenter: parent.horizontalCenter - width: Math.min(root.width, units.gridUnit * 30) + width: Math.min(root.width, implicitWidth) launcherGrid: launcher y: Math.max(0, root.height - height - mainFlickable.contentY) }