first prototype of icons in desktop

This commit is contained in:
Marco Martin 2019-07-30 13:39:07 +02:00
parent 2f0bc852ba
commit 71948fd9f3
4 changed files with 130 additions and 85 deletions

View file

@ -182,6 +182,8 @@ QVariant ApplicationListModel::data(const QModelIndex &index, int role) const
return m_applicationList.at(index.row()).entryPath; return m_applicationList.at(index.row()).entryPath;
case ApplicationOriginalRowRole: case ApplicationOriginalRowRole:
return index.row(); return index.row();
case ApplicationOnDesktopRole:
return m_applicationList.at(index.row()).desktop;
default: default:
return QVariant(); return QVariant();
@ -221,7 +223,7 @@ void ApplicationListModel::setFavoriteItem(int row, bool favorite)
} }
data.favorite = favorite; data.favorite = favorite;
qWarning()<<m_applicationList[row].favorite;
emit dataChanged(index(row, 0), index(row, 0)); emit dataChanged(index(row, 0), index(row, 0));
} }
@ -237,6 +239,7 @@ void ApplicationListModel::setDesktopItem(int row, bool desktop)
} }
data.desktop = desktop; data.desktop = desktop;
qWarning()<<m_applicationList[row].desktop;
emit dataChanged(index(row, 0), index(row, 0)); emit dataChanged(index(row, 0), index(row, 0));
} }

View file

@ -43,6 +43,8 @@ ContainmentLayoutManager.ItemContainer {
opacity: dragging ? 0.4 : 1 opacity: dragging ? 0.4 : 1
editModeCondition: model.ApplicationOnDesktopRole ? ContainmentLayoutManager.ItemContainer.AfterPressAndHold: ContainmentLayoutManager.ItemContainer.Manual
onDraggingChanged: { onDraggingChanged: {
if (dragging) { if (dragging) {
var pos = dragDelegate.parent.mapFromItem(delegate, 0, 0); var pos = dragDelegate.parent.mapFromItem(delegate, 0, 0);
@ -71,10 +73,17 @@ ContainmentLayoutManager.ItemContainer {
} }
onPressAndHold: { onPressAndHold: {
if (model.ApplicationOnDesktopRole) {
mouse.accepted = false
return
}
delegate.dragging = true; delegate.dragging = true;
} }
onReleased: delegate.dragging = false; onReleased: {
delegate.dragging = false;
}
onCanceled: delegate.dragging = false; onCanceled: delegate.dragging = false;
@ -85,12 +94,20 @@ ContainmentLayoutManager.ItemContainer {
var newRow = 0; var newRow = 0;
// Put it in the favorites strip
if (favoriteStrip.contains(favoriteStrip.mapFromItem(dragDelegate, dragDelegate.width/2, dragDelegate.height/2))) { if (favoriteStrip.contains(favoriteStrip.mapFromItem(dragDelegate, dragDelegate.width/2, dragDelegate.height/2))) {
newRow = Math.floor((dragDelegate.x + dragDelegate.width/2) / dragDelegate.width); newRow = Math.floor((dragDelegate.x + dragDelegate.width/2) / dragDelegate.width);
// Put it on desktop
} else if (appletsLayout.contains(appletsLayout.mapFromItem(dragDelegate, dragDelegate.width/2, dragDelegate.height/2))) {
plasmoid.nativeInterface.applicationListModel.setDesktopItem(index, true);
return;
// Put it in the general view
} else { } else {
newRow = Math.round(applicationsFlow.width / dragDelegate.width) * Math.floor((dragDelegate.y + dragDelegate.height/2) / dragDelegate.height) + Math.floor((dragDelegate.x + dragDelegate.width/2) / dragDelegate.width) + favoriteStrip.count; newRow = Math.round(applicationsFlow.width / dragDelegate.width) * Math.floor((dragDelegate.y + dragDelegate.height/2) / dragDelegate.height) + Math.floor((dragDelegate.x + dragDelegate.width/2) / dragDelegate.width) + favoriteStrip.count;
} }
plasmoid.nativeInterface.applicationListModel.setDesktopItem(index, false);
plasmoid.nativeInterface.applicationListModel.moveItem(modelData.index, newRow); plasmoid.nativeInterface.applicationListModel.moveItem(modelData.index, newRow);
} }

View file

@ -25,6 +25,7 @@ import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.kquickcontrolsaddons 2.0 import org.kde.kquickcontrolsaddons 2.0
import org.kde.plasma.private.containmentlayoutmanager 1.0 as ContainmentLayoutManager
Controls.Control { Controls.Control {
id: root id: root
@ -39,6 +40,7 @@ Controls.Control {
readonly property int cellWidth: applicationsFlow.width / Math.floor(applicationsFlow.width / ((availableCellHeight - reservedSpaceForLabel) + units.smallSpacing*4)) readonly property int cellWidth: applicationsFlow.width / Math.floor(applicationsFlow.width / ((availableCellHeight - reservedSpaceForLabel) + units.smallSpacing*4))
readonly property int cellHeight: availableCellHeight - topPadding readonly property int cellHeight: availableCellHeight - topPadding
property ContainmentLayoutManager.AppletsLayout appletsLayout
property FavoriteStrip favoriteStrip property FavoriteStrip favoriteStrip
signal externalDragStarted signal externalDragStarted
@ -110,7 +112,15 @@ Controls.Control {
width: root.cellWidth width: root.cellWidth
height: root.cellHeight height: root.cellHeight
dragDelegate: dragDelegateItem dragDelegate: dragDelegateItem
parent: index < favoriteStrip.count ? favoriteStrip.contentItem : applicationsFlow parent: {
if (model.ApplicationOnDesktopRole) {
return appletsLayout;
}
if (index < favoriteStrip.count) {
return favoriteStrip.contentItem;
}
return applicationsFlow;
}
} }
} }
} }

View file

@ -46,26 +46,27 @@ Text {
target: plasmoid target: plasmoid
onEditModeChanged: { onEditModeChanged: {
appletsLayout.editMode = plasmoid.editMode appletsLayout.editMode = plasmoid.editMode
if (plasmoid.editMode) {
menuRepeater.freeLayout();
} else {
menuRepeater.relayout();
}
} }
} }
Flickable { Flickable {
id: mainFlickable id: mainFlickable
anchors.fill: parent anchors {
fill: parent
// bottomMargin: favoriteStrip.height
}
bottomMargin: favoriteStrip.height bottomMargin: favoriteStrip.height
contentWidth: width contentWidth: width
contentHeight: appletsLayout.height contentHeight: flickableContents.height
interactive: !plasmoid.editMode interactive: !plasmoid.editMode
DragDrop.DropArea { ColumnLayout {
id: flickableContents
width: parent.width width: parent.width
height: mainFlickable.height + launcher.height DragDrop.DropArea {
Layout.fillWidth: true
Layout.preferredHeight: mainFlickable.height //TODO: multiple widgets pages
onDragEnter: { onDragEnter: {
event.accept(event.proposedAction); event.accept(event.proposedAction);
@ -92,12 +93,30 @@ Text {
appletsLayout.hidePlaceHolder(); appletsLayout.hidePlaceHolder();
} }
PlasmaCore.Svg {
id: arrowsSvg
imagePath: "widgets/arrows"
colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
}
PlasmaCore.SvgItem {
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
bottomMargin: favoriteStrip.height
}
z: 2
svg: arrowsSvg
elementId: "up-arrow"
width: units.iconSizes.large
height: width
}
ContainmentLayoutManager.AppletsLayout { ContainmentLayoutManager.AppletsLayout {
id: appletsLayout id: appletsLayout
anchors.fill: parent anchors.fill: parent
configKey: width > height ? "ItemGeometries" : "ItemGeometriesVertical" configKey: width > height ? "ItemGeometriesHorizontal" : "ItemGeometriesVertical"
containment: plasmoid containment: plasmoid
editModeCondition: plasmoid.immutable editModeCondition: plasmoid.immutable
? ContainmentLayoutManager.AppletsLayout.Manual ? ContainmentLayoutManager.AppletsLayout.Manual
@ -131,27 +150,23 @@ Text {
} }
placeHolder: ContainmentLayoutManager.PlaceHolder {} placeHolder: ContainmentLayoutManager.PlaceHolder {}
}
}
Launcher.LauncherGrid { Launcher.LauncherGrid {
id: launcher id: launcher
Layout.fillWidth: true
favoriteStrip: favoriteStrip favoriteStrip: favoriteStrip
anchors { appletsLayout: appletsLayout
left: parent.left
right: parent.right
bottom: parent.bottom
}
}
} }
} }
} }
Launcher.FavoriteStrip { Launcher.FavoriteStrip {
id: favoriteStrip id: favoriteStrip
anchors.horizontalCenter: parent.horizontalCenter
width: Math.min(root.width, units.gridUnit * 30)
launcherGrid: launcher launcherGrid: launcher
anchors { y: Math.max(0, root.height - height - mainFlickable.contentY)
left: parent.left
right: parent.right
bottom: parent.bottom
}
} }
} }