149 lines
3.1 KiB
QML
149 lines
3.1 KiB
QML
pragma ComponentBehavior: Bound
|
|
|
|
import Quickshell
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import qs.Components
|
|
import qs.Helpers
|
|
import qs.Config
|
|
|
|
Item {
|
|
id: root
|
|
|
|
required property ShellScreen screen
|
|
required property PersistentProperties visibilities
|
|
|
|
implicitHeight: screen.height / 2
|
|
implicitWidth: 500
|
|
|
|
Component.onCompleted: {
|
|
if (!ClipHistory.entries.length > 0)
|
|
ClipHistory.refresh();
|
|
searchField.forceActiveFocus();
|
|
}
|
|
|
|
CustomClippingRect {
|
|
id: search
|
|
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
color: DynamicColors.tPalette.m3surfaceContainer
|
|
implicitHeight: 50
|
|
radius: Appearance.rounding.full
|
|
|
|
MaterialIcon {
|
|
id: searchIcon
|
|
|
|
anchors.left: parent.left
|
|
anchors.margins: Appearance.padding.large
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: "search"
|
|
}
|
|
|
|
CustomTextField {
|
|
id: searchField
|
|
|
|
anchors.bottom: parent.bottom
|
|
anchors.left: searchIcon.right
|
|
anchors.leftMargin: Appearance.spacing.small
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
color: DynamicColors.palette.m3onSurface
|
|
placeholderText: "Search clipboard history..."
|
|
}
|
|
}
|
|
|
|
CustomClippingRect {
|
|
id: entries
|
|
|
|
anchors.bottom: parent.bottom
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.top: search.bottom
|
|
anchors.topMargin: Appearance.spacing.normal
|
|
radius: Appearance.rounding.normal
|
|
|
|
ListView {
|
|
id: view
|
|
|
|
anchors.fill: parent
|
|
spacing: Appearance.spacing.normal
|
|
|
|
delegate: RowLayout {
|
|
id: clipItem
|
|
|
|
required property string modelData
|
|
|
|
height: 50
|
|
width: view.width
|
|
|
|
CustomClippingRect {
|
|
id: textRect
|
|
|
|
Layout.fillHeight: true
|
|
Layout.fillWidth: true
|
|
// Layout.preferredWidth: implicitWidth + (textLayer.pressed ? 18 : 0)
|
|
// implicitWidth: 250
|
|
radius: textLayer.pressed ? (Appearance.rounding.small / 2) : Appearance.rounding.small
|
|
|
|
Behavior on Layout.preferredWidth {
|
|
Anim {
|
|
type: Anim.FastEffects
|
|
}
|
|
}
|
|
Behavior on radius {
|
|
Anim {
|
|
type: Anim.FastEffects
|
|
}
|
|
}
|
|
|
|
CustomText {
|
|
id: text
|
|
|
|
anchors.left: parent.left
|
|
anchors.margins: Appearance.padding.normal
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
elide: Text.ElideRight
|
|
text: clipItem.modelData
|
|
}
|
|
|
|
StateLayer {
|
|
id: textLayer
|
|
|
|
onClicked: ClipHistory.copy(clipItem.modelData)
|
|
}
|
|
}
|
|
|
|
IconButton {
|
|
Layout.fillHeight: true
|
|
Layout.margins: Appearance.padding.smallest
|
|
Layout.preferredWidth: height
|
|
icon: "content_copy"
|
|
isToggle: false
|
|
// implicitWidth: 30
|
|
}
|
|
|
|
IconButton {
|
|
Layout.fillHeight: true
|
|
Layout.margins: Appearance.padding.smallest
|
|
Layout.preferredWidth: height
|
|
icon: "delete"
|
|
inactiveColor: Qt.alpha(DynamicColors.palette.m3error, 0.8)
|
|
inactiveOnColor: DynamicColors.palette.m3onError
|
|
isToggle: false
|
|
}
|
|
}
|
|
model: ScriptModel {
|
|
values: {
|
|
const entries = ClipHistory.entries;
|
|
const search = searchField.text;
|
|
var regex = new RegExp(search, "i");
|
|
|
|
return entries.filter(n => regex.test(n));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|