Sync config from arch
- hypr/apps.lua - hypr/autostart.lua - hypr/envs.lua - hypr/hyprland.lua - hypr/hyprsunset.conf - hypr/input.lua - hypr/looknfeel.lua - hypr/omasettings.lua - hypr/xdph.conf - omarchy/branding/about.txt - omarchy/branding/screensaver.txt - omarchy/extensions/omarchy-menu.jsonc - omarchy/hooks/battery-low.d/play-warning-sound.sample - omarchy/hooks/font-set.d/show-font-notification.sample - omarchy/hooks/post-boot.d/weather.sample - omarchy/hooks/post-update.d/install-voxtype.hook - omarchy/hooks/post-update.d/setup-agent.hook - omarchy/hooks/post-update.d/setup-fingerprint.hook - omarchy/hooks/post-update.d/show-update-notification.sample - omarchy/hooks/pre-refresh-pacman.d/add-custom-repo.sample - omarchy/hooks/theme-set.d/show-theme-notification.sample - omarchy/shell.json - omarchy/shell.toml - omarchy/theme.name - omarchy/themes/azure-glow/README.md - omarchy/themes/azure-glow/alacritty.toml - omarchy/themes/azure-glow/btop.theme - omarchy/themes/azure-glow/hyprland.conf - omarchy/themes/azure-glow/hyprlock.conf - omarchy/themes/azure-glow/icons.theme - … 269 more
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import qs.Commons
|
||||
import qs.Ui
|
||||
|
||||
ColumnLayout {
|
||||
id: actions
|
||||
|
||||
required property var plugin
|
||||
required property bool pluginEnabled
|
||||
required property bool repoKnown
|
||||
required property string updateState
|
||||
required property bool updateRunning
|
||||
required property string updatingId
|
||||
required property color foreground
|
||||
required property string fontFamily
|
||||
|
||||
signal enabledChangeRequested(bool enabled)
|
||||
signal sourceRequested(string sourceKey)
|
||||
signal updateRequested(string sourceKey)
|
||||
signal menuRequested(var sourceItem, real x, real y)
|
||||
|
||||
readonly property bool showSourceRow: plugin.updatable && repoKnown
|
||||
readonly property int menuWidth: toggle.trackHeight
|
||||
readonly property int sourceWidth: toggle.implicitWidth + Style.space(6) + actions.menuWidth
|
||||
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
spacing: Style.space(4)
|
||||
|
||||
RowLayout {
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
spacing: Style.space(6)
|
||||
|
||||
// Active bar options cannot be disabled directly. Their reduced opacity
|
||||
// mirrors the native-toggle guard while still allowing disabled plugins
|
||||
// to be enabled from this row.
|
||||
Item {
|
||||
id: toggle
|
||||
|
||||
readonly property bool checked: actions.pluginEnabled
|
||||
readonly property bool canToggle: actions.plugin.canDisable || !checked
|
||||
readonly property int trackHeight: Math.max(22, Math.round(Style.spacing.controlHeight * 0.55))
|
||||
readonly property int trackWidth: Math.round(trackHeight * 1.9)
|
||||
readonly property int knobSize: Math.max(6, Math.round(trackHeight * 0.72))
|
||||
readonly property int inset: Math.max(1, Math.round((trackHeight - knobSize) / 2))
|
||||
|
||||
implicitWidth: trackWidth
|
||||
implicitHeight: trackHeight
|
||||
opacity: canToggle ? 1 : 0.4
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
Rectangle {
|
||||
width: toggle.trackWidth
|
||||
height: toggle.trackHeight
|
||||
radius: Style.cornerRadius > 0 ? height / 2 : 0
|
||||
color: toggle.checked
|
||||
? Color.accent
|
||||
: Style.normalFillFor(actions.foreground, Color.accent)
|
||||
Behavior on color { ColorAnimation { duration: 120 } }
|
||||
|
||||
Rectangle {
|
||||
width: toggle.knobSize
|
||||
height: toggle.knobSize
|
||||
radius: Style.cornerRadius > 0 ? height / 2 : 0
|
||||
x: toggle.checked ? toggle.trackWidth - width - toggle.inset : toggle.inset
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
color: toggle.checked ? Color.background : Qt.darker(actions.foreground, 1.25)
|
||||
Behavior on x { NumberAnimation { duration: 120; easing.type: Easing.OutCubic } }
|
||||
Behavior on color { ColorAnimation { duration: 120 } }
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: toggle.canToggle ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
onClicked: {
|
||||
if (!toggle.canToggle) return
|
||||
Qt.callLater(function() { actions.enabledChangeRequested(!toggle.checked) })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
id: menuButton
|
||||
|
||||
iconText: "\uf142"
|
||||
tooltipText: "More actions"
|
||||
visible: !actions.plugin.firstParty
|
||||
bordered: true
|
||||
borderSpec: menuButton.hot ? Border.none()
|
||||
: Border.controlSpec("normal", menuButton.foreground, Color.accent)
|
||||
foreground: actions.foreground
|
||||
accent: Color.accent
|
||||
fontFamily: actions.fontFamily
|
||||
fontSize: Style.font.bodySmall
|
||||
horizontalPadding: 0
|
||||
verticalPadding: Style.space(3)
|
||||
Layout.preferredWidth: actions.menuWidth
|
||||
Layout.minimumWidth: actions.menuWidth
|
||||
Layout.maximumWidth: actions.menuWidth
|
||||
Layout.preferredHeight: actions.menuWidth
|
||||
Layout.minimumHeight: actions.menuWidth
|
||||
Layout.maximumHeight: actions.menuWidth
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
onClicked: actions.menuRequested(menuButton, 0, menuButton.height)
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
visible: actions.showSourceRow
|
||||
Layout.preferredWidth: actions.sourceWidth
|
||||
Layout.minimumWidth: actions.sourceWidth
|
||||
Layout.maximumWidth: actions.sourceWidth
|
||||
Layout.alignment: Qt.AlignRight
|
||||
spacing: Style.space(6)
|
||||
|
||||
Button {
|
||||
id: sourceButton
|
||||
|
||||
visible: actions.plugin.updatable && actions.repoKnown
|
||||
tooltipText: "Open plugin repository"
|
||||
text: "SOURCE \uDB85\uDD94"
|
||||
bordered: true
|
||||
borderSpec: sourceButton.hot ? Border.none()
|
||||
: Border.controlSpec("normal", sourceButton.foreground, Color.accent)
|
||||
foreground: actions.foreground
|
||||
accent: Color.accent
|
||||
fontFamily: actions.fontFamily
|
||||
fontSize: Style.font.caption
|
||||
iconSize: Style.font.caption
|
||||
horizontalPadding: 0
|
||||
verticalPadding: Style.space(3)
|
||||
Layout.fillWidth: true
|
||||
onClicked: actions.sourceRequested(actions.plugin.sourceKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import qs.Commons
|
||||
import qs.Ui
|
||||
|
||||
Rectangle {
|
||||
id: menu
|
||||
|
||||
required property bool open
|
||||
required property var plugin
|
||||
required property bool pluginEnabled
|
||||
required property bool repoKnown
|
||||
required property string updateState
|
||||
required property bool updateRunning
|
||||
required property point requestedPosition
|
||||
required property color foreground
|
||||
required property string fontFamily
|
||||
required property color panelBackground
|
||||
property bool canMove: false
|
||||
property string currentSection: ""
|
||||
|
||||
signal closeRequested
|
||||
signal enabledChangeRequested(string pluginId, bool enabled)
|
||||
signal sourceRequested(string sourceKey)
|
||||
signal updateRequested(string sourceKey)
|
||||
signal removalRequested(string pluginId)
|
||||
signal moveRequested(string pluginId, string section)
|
||||
|
||||
visible: open
|
||||
color: "transparent"
|
||||
focus: true
|
||||
Keys.priority: Keys.BeforeItem
|
||||
Keys.onEscapePressed: menu.closeRequested()
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: menu.closeRequested()
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: card
|
||||
|
||||
x: Math.min(menu.requestedPosition.x, parent.width - width - Style.space(4))
|
||||
y: Math.min(menu.requestedPosition.y, parent.height - height - Style.space(4))
|
||||
width: actions.implicitWidth + Style.space(8)
|
||||
height: actions.implicitHeight + Style.space(8)
|
||||
color: menu.panelBackground
|
||||
radius: Style.cornerRadius
|
||||
border.color: Util.alpha(menu.foreground, 0.2)
|
||||
border.width: 1
|
||||
|
||||
ColumnLayout {
|
||||
id: actions
|
||||
|
||||
anchors.fill: parent
|
||||
anchors.margins: Style.space(4)
|
||||
spacing: Style.space(2)
|
||||
implicitWidth: Style.space(180)
|
||||
|
||||
Button {
|
||||
text: menu.pluginEnabled
|
||||
? (menu.plugin && menu.plugin.canDisable ? "Disable" : "Active bar")
|
||||
: "Enable"
|
||||
enabled: menu.plugin && (menu.plugin.canDisable || !menu.pluginEnabled)
|
||||
foreground: menu.foreground
|
||||
accent: Color.accent
|
||||
fontFamily: menu.fontFamily
|
||||
fontSize: Style.font.bodySmall
|
||||
horizontalPadding: Style.space(8)
|
||||
verticalPadding: Style.space(5)
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
onClicked: {
|
||||
menu.enabledChangeRequested(menu.plugin.id, !menu.pluginEnabled)
|
||||
menu.closeRequested()
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
visible: menu.plugin && menu.plugin.sourceKey !== "" && menu.repoKnown
|
||||
text: "Source"
|
||||
foreground: menu.foreground
|
||||
accent: Color.accent
|
||||
fontFamily: menu.fontFamily
|
||||
fontSize: Style.font.bodySmall
|
||||
horizontalPadding: Style.space(8)
|
||||
verticalPadding: Style.space(5)
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
onClicked: {
|
||||
menu.sourceRequested(menu.plugin.sourceKey)
|
||||
menu.closeRequested()
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
visible: menu.plugin && menu.plugin.updatable && menu.updateState === "UPDATE"
|
||||
text: menu.updateRunning ? "Updating…" : "Update"
|
||||
enabled: !menu.updateRunning
|
||||
foreground: menu.foreground
|
||||
accent: Color.accent
|
||||
fontFamily: menu.fontFamily
|
||||
fontSize: Style.font.bodySmall
|
||||
horizontalPadding: Style.space(8)
|
||||
verticalPadding: Style.space(5)
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
onClicked: {
|
||||
menu.updateRequested(menu.plugin.sourceKey)
|
||||
menu.closeRequested()
|
||||
}
|
||||
}
|
||||
|
||||
// Bar-widget placement. Only visible for widgets currently on the bar;
|
||||
// the widget's own section is marked and disabled so the menu shows
|
||||
// where the widget lives now.
|
||||
Repeater {
|
||||
model: menu.canMove ? ["left", "center", "right"] : []
|
||||
|
||||
Button {
|
||||
required property string modelData
|
||||
|
||||
readonly property bool isCurrent: menu.currentSection === modelData
|
||||
|
||||
visible: menu.canMove
|
||||
text: (isCurrent ? "● " : "") + "Move to " + modelData
|
||||
enabled: !isCurrent
|
||||
opacity: isCurrent ? 0.55 : 1.0
|
||||
foreground: menu.foreground
|
||||
accent: Color.accent
|
||||
fontFamily: menu.fontFamily
|
||||
fontSize: Style.font.bodySmall
|
||||
horizontalPadding: Style.space(8)
|
||||
verticalPadding: Style.space(5)
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
onClicked: {
|
||||
menu.moveRequested(menu.plugin.id, modelData)
|
||||
menu.closeRequested()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
visible: menu.plugin && !menu.plugin.firstParty
|
||||
text: "Remove"
|
||||
foreground: Color.urgent
|
||||
accent: Color.urgent
|
||||
fontFamily: menu.fontFamily
|
||||
fontSize: Style.font.bodySmall
|
||||
horizontalPadding: Style.space(8)
|
||||
verticalPadding: Style.space(5)
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
onClicked: {
|
||||
var pluginId = menu.plugin.id
|
||||
menu.closeRequested()
|
||||
menu.removalRequested(pluginId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,382 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import qs.Commons
|
||||
import qs.Ui
|
||||
import "../Presentation.js" as Presentation
|
||||
|
||||
Item {
|
||||
id: pluginRow
|
||||
|
||||
required property var modelData
|
||||
required property int index
|
||||
required property int rowCount
|
||||
required property var marketplaceEntry
|
||||
required property string localCommit
|
||||
required property string repoUrl
|
||||
required property bool repoKnown
|
||||
required property string updateState
|
||||
required property bool removeSelectMode
|
||||
required property bool selectedForRemoval
|
||||
required property bool removingPlugin
|
||||
required property bool pluginEnabled
|
||||
required property bool updateRunning
|
||||
required property string updatingId
|
||||
required property string icon
|
||||
required property var knownKinds
|
||||
required property color foreground
|
||||
required property string fontFamily
|
||||
|
||||
signal removalSelectionRequested(string pluginId)
|
||||
signal enabledChangeRequested(string pluginId, bool enabled)
|
||||
signal openUrlRequested(string url)
|
||||
signal sourceRequested(string sourceKey)
|
||||
signal updateRequested(string sourceKey)
|
||||
signal menuRequested(string pluginId, var sourceItem, real x, real y)
|
||||
|
||||
readonly property bool listed: marketplaceEntry !== null
|
||||
readonly property bool verified: listed && marketplaceEntry.verified === true
|
||||
readonly property bool updateUnverified: listed && !verified
|
||||
&& marketplaceEntry.snapshotStatus === "update-unverified"
|
||||
readonly property string authorUrl: modelData.firstParty ? "" : Presentation.authorUrl(repoUrl)
|
||||
readonly property string kindLabel: Presentation.kindLabel(modelData.kinds, knownKinds)
|
||||
|
||||
height: card.height + Style.space(9)
|
||||
|
||||
Rectangle {
|
||||
id: card
|
||||
|
||||
width: parent.width
|
||||
height: Math.max(Style.space(72), content.implicitHeight + Style.space(24))
|
||||
clip: true
|
||||
radius: Style.cornerRadius > 0 ? Style.cornerRadius : 4
|
||||
color: hover.hovered
|
||||
? Style.hoverFillFor(pluginRow.foreground, Color.accent)
|
||||
: "transparent"
|
||||
|
||||
RowLayout {
|
||||
id: content
|
||||
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: Style.space(10)
|
||||
anchors.topMargin: Style.space(10)
|
||||
anchors.rightMargin: Style.space(10)
|
||||
anchors.bottomMargin: Style.space(10)
|
||||
spacing: Style.space(10)
|
||||
|
||||
Button {
|
||||
visible: pluginRow.removeSelectMode
|
||||
text: pluginRow.selectedForRemoval ? "\uf14a" : "\uf0c8"
|
||||
tooltipText: "Select plugin for removal"
|
||||
enabled: !pluginRow.removingPlugin
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
foreground: pluginRow.foreground
|
||||
accent: Color.accent
|
||||
fontFamily: pluginRow.fontFamily
|
||||
fontSize: Style.font.bodySmall
|
||||
horizontalPadding: Style.space(6)
|
||||
verticalPadding: Style.space(3)
|
||||
onClicked: pluginRow.removalSelectionRequested(pluginRow.modelData.id)
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: Style.space(28)
|
||||
Layout.preferredHeight: Style.space(28)
|
||||
|
||||
Rectangle {
|
||||
x: 0
|
||||
y: 0
|
||||
width: Style.space(28)
|
||||
height: Style.space(28)
|
||||
radius: 6
|
||||
clip: true
|
||||
color: Presentation.iconColor(pluginRow.modelData.name)
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
width: parent.width - 4
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 1
|
||||
text: pluginRow.icon || pluginRow.modelData.name.trim().charAt(0).toUpperCase()
|
||||
textFormat: Text.PlainText
|
||||
color: "white"
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.bodySmall
|
||||
font.bold: true
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
visible: pluginRow.updateState === "UPDATE"
|
||||
x: -2
|
||||
y: -2
|
||||
width: 8
|
||||
height: 8
|
||||
radius: 4
|
||||
color: Color.accent
|
||||
border.color: pluginRow.foreground
|
||||
border.width: 1
|
||||
z: 1
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
// preferredWidth 0 + fillWidth: take leftover row space instead of the
|
||||
// description's single-line implicitWidth (otherwise Wrap/Elide never
|
||||
// bind and card.clip cuts mid-word with no ellipsis).
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 0
|
||||
Layout.minimumWidth: 0
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
spacing: Style.space(2)
|
||||
|
||||
Item {
|
||||
id: nameRow
|
||||
Layout.fillWidth: true
|
||||
implicitHeight: Math.max(nameLabel.implicitHeight,
|
||||
verificationBadge.visible ? verificationBadge.implicitHeight : 0,
|
||||
versionLabel.visible ? versionLabel.implicitHeight : 0)
|
||||
readonly property real spacing: Style.space(8)
|
||||
|
||||
Label {
|
||||
id: nameLabel
|
||||
text: pluginRow.modelData.name
|
||||
textFormat: Text.PlainText
|
||||
color: pluginRow.foreground
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.body
|
||||
font.bold: true
|
||||
// Keep short names adjacent to their metadata. Long names use
|
||||
// only the space left after the badge/version, then elide.
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: Math.min(implicitWidth, Math.max(0, nameRow.width
|
||||
- (verificationBadge.visible ? verificationBadge.implicitWidth + nameRow.spacing : 0)
|
||||
- (versionLabel.visible ? versionLabel.implicitWidth + nameRow.spacing : 0)))
|
||||
elide: Label.ElideRight
|
||||
|
||||
// Full name only when elided · matches author/ListingLinks ToolTip style.
|
||||
ToolTip.text: truncated ? text : ""
|
||||
ToolTip.visible: nameHover.hovered && truncated
|
||||
ToolTip.delay: 400
|
||||
|
||||
HoverHandler {
|
||||
id: nameHover
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: verificationBadge
|
||||
visible: pluginRow.listed
|
||||
anchors.left: nameLabel.right
|
||||
anchors.leftMargin: nameRow.spacing
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
radius: height / 2
|
||||
implicitWidth: badgeContent.implicitWidth + Style.space(10)
|
||||
implicitHeight: Style.space(16)
|
||||
color: pluginRow.updateUnverified
|
||||
? Qt.rgba(0.85, 0.65, 0.13, 0.18)
|
||||
: pluginRow.verified
|
||||
? Util.alpha(Color.accent, 0.18)
|
||||
: Qt.rgba(pluginRow.foreground.r, pluginRow.foreground.g, pluginRow.foreground.b, 0.08)
|
||||
|
||||
Row {
|
||||
id: badgeContent
|
||||
anchors.centerIn: parent
|
||||
spacing: Style.space(3)
|
||||
|
||||
Text {
|
||||
visible: pluginRow.verified && !pluginRow.updateUnverified
|
||||
text: "\uf058"
|
||||
textFormat: Text.PlainText
|
||||
color: Color.accent
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.caption - 1
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
visible: pluginRow.updateUnverified
|
||||
text: "\uf071"
|
||||
textFormat: Text.PlainText
|
||||
color: Qt.hsla(0.12, 0.75, 0.55, 1)
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.caption - 1
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
text: pluginRow.updateUnverified ? "Update Unverified" : pluginRow.verified ? "Verified" : "Unverified"
|
||||
textFormat: Text.PlainText
|
||||
color: pluginRow.updateUnverified ? Qt.hsla(0.12, 0.75, 0.55, 1)
|
||||
: pluginRow.verified ? Color.accent
|
||||
: Qt.darker(pluginRow.foreground, 2.0)
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.caption - 1
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
id: versionLabel
|
||||
visible: pluginRow.modelData.version !== "unknown"
|
||||
anchors.left: verificationBadge.visible ? verificationBadge.right : nameLabel.right
|
||||
anchors.leftMargin: nameRow.spacing
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: "v" + pluginRow.modelData.version
|
||||
textFormat: Text.PlainText
|
||||
color: Qt.darker(pluginRow.foreground, 2.0)
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.caption
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Label {
|
||||
id: descriptionLabel
|
||||
text: pluginRow.modelData.description !== "" ? pluginRow.modelData.description : "No description"
|
||||
textFormat: Text.PlainText
|
||||
color: Qt.darker(pluginRow.foreground, 1.6)
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.bodySmall
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: 0
|
||||
Layout.minimumWidth: 0
|
||||
wrapMode: Label.Wrap
|
||||
maximumLineCount: 2
|
||||
elide: Label.ElideRight
|
||||
|
||||
ToolTip.text: truncated ? text : ""
|
||||
ToolTip.visible: descriptionHover.hovered && truncated
|
||||
ToolTip.delay: 400
|
||||
|
||||
HoverHandler {
|
||||
id: descriptionHover
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
visible: pluginRow.modelData.author !== ""
|
||||
spacing: Style.space(6)
|
||||
Layout.fillWidth: true
|
||||
|
||||
Text {
|
||||
text: "by " + pluginRow.modelData.author + (pluginRow.authorUrl !== "" ? " ↗" : "")
|
||||
Layout.minimumWidth: 0
|
||||
elide: Text.ElideRight
|
||||
textFormat: Text.PlainText
|
||||
color: pluginRow.authorUrl !== "" ? Color.accent : Qt.darker(pluginRow.foreground, 2.0)
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.caption
|
||||
font.underline: authorHover.hovered && pluginRow.authorUrl !== ""
|
||||
|
||||
ToolTip.text: pluginRow.authorUrl !== "" ? pluginRow.authorUrl : ("by " + pluginRow.modelData.author)
|
||||
ToolTip.visible: authorHover.hovered
|
||||
ToolTip.delay: 400
|
||||
|
||||
HoverHandler {
|
||||
id: authorHover
|
||||
cursorShape: pluginRow.authorUrl !== "" ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
enabled: pluginRow.authorUrl !== ""
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: pluginRow.openUrlRequested(pluginRow.authorUrl)
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
visible: pluginRow.kindLabel !== ""
|
||||
text: "·"
|
||||
textFormat: Text.PlainText
|
||||
color: Qt.darker(pluginRow.foreground, 2.0)
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.caption
|
||||
}
|
||||
|
||||
Label {
|
||||
visible: pluginRow.kindLabel !== ""
|
||||
text: pluginRow.kindLabel
|
||||
textFormat: Text.PlainText
|
||||
color: Qt.darker(pluginRow.foreground, 2.0)
|
||||
font.family: pluginRow.fontFamily
|
||||
font.pixelSize: Style.font.caption
|
||||
elide: Label.ElideRight
|
||||
Layout.minimumWidth: 0
|
||||
Layout.alignment: Qt.AlignRight
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 1
|
||||
}
|
||||
}
|
||||
|
||||
ListingLinks {
|
||||
visible: pluginRow.listed
|
||||
pluginId: pluginRow.modelData.id
|
||||
entry: pluginRow.marketplaceEntry
|
||||
localCommit: pluginRow.localCommit
|
||||
repoUrl: pluginRow.repoUrl
|
||||
foreground: pluginRow.foreground
|
||||
fontFamily: pluginRow.fontFamily
|
||||
onOpenUrlRequested: function(url) { pluginRow.openUrlRequested(url) }
|
||||
}
|
||||
}
|
||||
|
||||
Actions {
|
||||
plugin: pluginRow.modelData
|
||||
pluginEnabled: pluginRow.pluginEnabled
|
||||
repoKnown: pluginRow.repoKnown
|
||||
updateState: pluginRow.updateState
|
||||
updateRunning: pluginRow.updateRunning
|
||||
updatingId: pluginRow.updatingId
|
||||
foreground: pluginRow.foreground
|
||||
fontFamily: pluginRow.fontFamily
|
||||
onEnabledChangeRequested: function(enabled) {
|
||||
pluginRow.enabledChangeRequested(pluginRow.modelData.id, enabled)
|
||||
}
|
||||
onSourceRequested: function(sourceKey) { pluginRow.sourceRequested(sourceKey) }
|
||||
onUpdateRequested: function(sourceKey) { pluginRow.updateRequested(sourceKey) }
|
||||
onMenuRequested: function(sourceItem, x, y) {
|
||||
pluginRow.menuRequested(pluginRow.modelData.id, sourceItem, x, y)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HoverHandler {
|
||||
id: hover
|
||||
}
|
||||
|
||||
TapHandler {
|
||||
id: contextTap
|
||||
acceptedButtons: Qt.RightButton
|
||||
onTapped: function(eventPoint) {
|
||||
pluginRow.menuRequested(
|
||||
pluginRow.modelData.id,
|
||||
card,
|
||||
eventPoint.position.x,
|
||||
eventPoint.position.y
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
visible: pluginRow.index < pluginRow.rowCount - 1
|
||||
anchors.top: card.bottom
|
||||
anchors.topMargin: Style.space(4)
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.leftMargin: Style.space(10)
|
||||
anchors.rightMargin: Style.space(10)
|
||||
height: 1
|
||||
color: Qt.rgba(pluginRow.foreground.r, pluginRow.foreground.g, pluginRow.foreground.b, 0.12)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user