plasmoid: Add filter for directory list

Filtering is enabled just by starting to type
This commit is contained in:
Martchus 2017-10-01 17:54:11 +02:00
parent 20eae7fb2c
commit 42369824f5
2 changed files with 57 additions and 8 deletions

View File

@ -7,17 +7,25 @@ import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.extras 2.0 as PlasmaExtras
import martchus.syncthingplasmoid 0.6 as SyncthingPlasmoid
Item {
ColumnLayout {
property alias view: directoryView
property alias filter: filter
anchors.fill: parent
objectName: "DirectoriesPage"
PlasmaExtras.ScrollArea {
anchors.fill: parent
Layout.fillWidth: true
Layout.fillHeight: true
TopLevelView {
id: directoryView
model: plasmoid.nativeInterface.dirModel
model: PlasmaCore.SortFilterModel {
id: directoryFilterModel
sourceModel: plasmoid.nativeInterface.dirModel
filterRole: "name"
filterRegExp: filter.text
}
delegate: TopLevelItem {
id: item
@ -25,6 +33,8 @@ Item {
property alias rescanButton: rescanButton
property alias resumePauseButton: resumePauseButton
property alias openButton: openButton
property int sourceIndex: directoryFilterModel.mapRowToSource(
index)
ColumnLayout {
width: parent.width
@ -107,7 +117,7 @@ Item {
model: DelegateModel {
model: plasmoid.nativeInterface.dirModel
rootIndex: detailsView.model.modelIndex(index)
rootIndex: detailsView.model.modelIndex(sourceIndex)
delegate: DetailItem {
}
}
@ -116,4 +126,11 @@ Item {
}
}
}
PlasmaComponents.TextField {
id: filter
clearButtonShown: true
Layout.fillWidth: true
visible: text !== ""
}
}

View File

@ -119,8 +119,15 @@ ColumnLayout {
}
break
case Qt.Key_Escape:
// hide plasmoid
plasmoid.expanded = false
var filter = mainTabGroup.currentTab.item.filter
if (filter && filter.text !== "") {
// reset filter
filter.text = ""
event.accepted = true
} else {
// hide plasmoid
plasmoid.expanded = false
}
break
case Qt.Key_1:
// select directories tab
@ -138,7 +145,7 @@ ColumnLayout {
// rescan/resume/pause selected item
if ((currentItem = mainTabGroup.currentTab.item.view.currentItem)) {
switch (event.modifiers) {
case Qt.NoModifier:
case Qt.ControlModifier:
// rescan selected item if it has a rescan button
if (currentItem.rescanButton
&& currentItem.rescanButton.enabled) {
@ -151,22 +158,47 @@ ColumnLayout {
currentItem.resumePauseButton.clicked()
}
break
default:
sendKeyEventToFilter(event)
}
} else {
sendKeyEventToFilter(event)
}
break
case Qt.Key_O:
// open selected item in file browser if it has an open button
if ((currentItem = mainTabGroup.currentTab.item.view.currentItem)
if (event.modifiers === Qt.ControlModifier
&& (currentItem = mainTabGroup.currentTab.item.view.currentItem)
&& currentItem.openButton) {
currentItem.openButton.clicked()
} else {
sendKeyEventToFilter(event)
}
break
default:
sendKeyEventToFilter(event)
return
}
event.accepted = true
}
function sendKeyEventToFilter(event) {
var filter = mainTabGroup.currentTab.item.filter
if (!filter || event.text === "" || filter.activeFocus) {
return
}
if (event.key === Qt.Key_Backspace && filter.text === "") {
return
}
if (event.matches(StandardKey.Paste)) {
filter.paste()
} else {
filter.text = ""
filter.text += event.text
}
filter.forceActiveFocus()
}
// heading and right-corner buttons
RowLayout {
id: toolBar