plasmoid: Add filter for directory list
Filtering is enabled just by starting to type
This commit is contained in:
parent
20eae7fb2c
commit
42369824f5
|
@ -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 !== ""
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue