Add NWidgetCard, fix some BarTab things
This commit is contained in:
parent
377ed4a627
commit
cbbfbcf671
2 changed files with 182 additions and 374 deletions
|
|
@ -162,386 +162,36 @@ ColumnLayout {
|
||||||
spacing: Style.marginM * scaling
|
spacing: Style.marginM * scaling
|
||||||
|
|
||||||
// Left Section
|
// Left Section
|
||||||
NCard {
|
NWidgetCard {
|
||||||
Layout.fillWidth: true
|
sectionName: "Left"
|
||||||
Layout.minimumHeight: {
|
widgetModel: Settings.data.bar.widgets.left
|
||||||
var widgetCount = Settings.data.bar.widgets.left.length
|
availableWidgets: availableWidgets
|
||||||
if (widgetCount === 0)
|
scrollView: scrollView
|
||||||
return 140 * scaling
|
onAddWidget: (widgetName, section) => addWidgetToSection(widgetName, section)
|
||||||
|
onRemoveWidget: (section, index) => removeWidgetFromSection(section, index)
|
||||||
var availableWidth = scrollView.availableWidth - (Style.marginM * scaling * 2) // Card margins
|
onReorderWidget: (section, fromIndex, toIndex) => reorderWidgetInSection(section, fromIndex, toIndex)
|
||||||
var avgWidgetWidth = 150 * scaling // Estimated widget width including spacing
|
|
||||||
var widgetsPerRow = Math.max(1, Math.floor(availableWidth / avgWidgetWidth))
|
|
||||||
var rows = Math.ceil(widgetCount / widgetsPerRow)
|
|
||||||
|
|
||||||
// Header (50) + spacing (20) + (rows * widget height) + (rows-1 * spacing) + bottom margin (20)
|
|
||||||
return (50 + 20 + (rows * 48) + ((rows - 1) * Style.marginS) + 20) * scaling
|
|
||||||
}
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.margins: Style.marginM * scaling
|
|
||||||
spacing: Style.marginM * scaling
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
NText {
|
|
||||||
text: "Left Section"
|
|
||||||
font.pointSize: Style.fontSizeL * scaling
|
|
||||||
font.weight: Style.fontWeightBold
|
|
||||||
color: Color.mOnSurface
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
NComboBox {
|
|
||||||
id: leftComboBox
|
|
||||||
width: 120 * scaling
|
|
||||||
model: availableWidgets
|
|
||||||
label: ""
|
|
||||||
description: ""
|
|
||||||
placeholder: "Add widget to left section"
|
|
||||||
onSelected: key => {
|
|
||||||
addWidgetToSection(key, "left")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Flow {
|
|
||||||
id: leftWidgetsFlow
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.minimumHeight: 65 * scaling
|
|
||||||
spacing: Style.marginS * scaling
|
|
||||||
flow: Flow.LeftToRight
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: Settings.data.bar.widgets.left
|
|
||||||
delegate: Rectangle {
|
|
||||||
width: widgetContent.implicitWidth + 16 * scaling
|
|
||||||
height: 48 * scaling
|
|
||||||
radius: Style.radiusS * scaling
|
|
||||||
color: Color.mPrimary
|
|
||||||
border.color: Color.mOutline
|
|
||||||
border.width: Math.max(1, Style.borderS * scaling)
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
id: widgetContent
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: Style.marginXS * scaling
|
|
||||||
|
|
||||||
NIconButton {
|
|
||||||
icon: "chevron_left"
|
|
||||||
size: 20 * scaling
|
|
||||||
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
|
||||||
colorFg: Color.mOnPrimary
|
|
||||||
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
|
||||||
colorFgHover: Color.mOnPrimary
|
|
||||||
enabled: index > 0
|
|
||||||
onClicked: {
|
|
||||||
if (index > 0) {
|
|
||||||
reorderWidgetInSection("left", index, index - 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NText {
|
|
||||||
text: modelData
|
|
||||||
font.pointSize: Style.fontSizeS * scaling
|
|
||||||
color: Color.mOnPrimary
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
NIconButton {
|
|
||||||
icon: "chevron_right"
|
|
||||||
size: 20 * scaling
|
|
||||||
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
|
||||||
colorFg: Color.mOnPrimary
|
|
||||||
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
|
||||||
colorFgHover: Color.mOnPrimary
|
|
||||||
enabled: index < Settings.data.bar.widgets.left.length - 1
|
|
||||||
onClicked: {
|
|
||||||
if (index < Settings.data.bar.widgets.left.length - 1) {
|
|
||||||
reorderWidgetInSection("left", index, index + 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NIconButton {
|
|
||||||
icon: "close"
|
|
||||||
size: 20 * scaling
|
|
||||||
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
|
||||||
colorFg: Color.mOnPrimary
|
|
||||||
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
|
||||||
colorFgHover: Color.mOnPrimary
|
|
||||||
onClicked: {
|
|
||||||
removeWidgetFromSection("left", index)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Center Section
|
// Center Section
|
||||||
NCard {
|
NWidgetCard {
|
||||||
Layout.fillWidth: true
|
sectionName: "Center"
|
||||||
Layout.minimumHeight: {
|
widgetModel: Settings.data.bar.widgets.center
|
||||||
var widgetCount = Settings.data.bar.widgets.center.length
|
availableWidgets: availableWidgets
|
||||||
if (widgetCount === 0)
|
scrollView: scrollView
|
||||||
return 140 * scaling
|
onAddWidget: (widgetName, section) => addWidgetToSection(widgetName, section)
|
||||||
|
onRemoveWidget: (section, index) => removeWidgetFromSection(section, index)
|
||||||
var availableWidth = scrollView.availableWidth - (Style.marginM * scaling * 2) // Card margins
|
onReorderWidget: (section, fromIndex, toIndex) => reorderWidgetInSection(section, fromIndex, toIndex)
|
||||||
var avgWidgetWidth = 150 * scaling // Estimated widget width including spacing
|
|
||||||
var widgetsPerRow = Math.max(1, Math.floor(availableWidth / avgWidgetWidth))
|
|
||||||
var rows = Math.ceil(widgetCount / widgetsPerRow)
|
|
||||||
|
|
||||||
// Header (50) + spacing (20) + (rows * widget height) + (rows-1 * spacing) + bottom margin (20)
|
|
||||||
return (50 + 20 + (rows * 48) + ((rows - 1) * Style.marginS) + 20) * scaling
|
|
||||||
}
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.margins: Style.marginM * scaling
|
|
||||||
spacing: Style.marginM * scaling
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
NText {
|
|
||||||
text: "Center Section"
|
|
||||||
font.pointSize: Style.fontSizeL * scaling
|
|
||||||
font.weight: Style.fontWeightBold
|
|
||||||
color: Color.mOnSurface
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
NComboBox {
|
|
||||||
id: centerComboBox
|
|
||||||
width: 120 * scaling
|
|
||||||
model: availableWidgets
|
|
||||||
label: ""
|
|
||||||
description: ""
|
|
||||||
placeholder: "Add widget to center section"
|
|
||||||
onSelected: key => {
|
|
||||||
addWidgetToSection(key, "center")
|
|
||||||
reset() // Reset selection
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Flow {
|
|
||||||
id: centerWidgetsFlow
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.minimumHeight: 65 * scaling
|
|
||||||
spacing: Style.marginS * scaling
|
|
||||||
flow: Flow.LeftToRight
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: Settings.data.bar.widgets.center
|
|
||||||
delegate: Rectangle {
|
|
||||||
width: widgetContent.implicitWidth + 16 * scaling
|
|
||||||
height: 48 * scaling
|
|
||||||
radius: Style.radiusS * scaling
|
|
||||||
color: Color.mPrimary
|
|
||||||
border.color: Color.mOutline
|
|
||||||
border.width: Math.max(1, Style.borderS * scaling)
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
id: widgetContent
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: Style.marginXS * scaling
|
|
||||||
|
|
||||||
NIconButton {
|
|
||||||
icon: "chevron_left"
|
|
||||||
size: 20 * scaling
|
|
||||||
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
|
||||||
colorFg: Color.mOnPrimary
|
|
||||||
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
|
||||||
colorFgHover: Color.mOnPrimary
|
|
||||||
enabled: index > 0
|
|
||||||
onClicked: {
|
|
||||||
if (index > 0) {
|
|
||||||
reorderWidgetInSection("center", index, index - 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NText {
|
|
||||||
text: modelData
|
|
||||||
font.pointSize: Style.fontSizeS * scaling
|
|
||||||
color: Color.mOnPrimary
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
NIconButton {
|
|
||||||
icon: "chevron_right"
|
|
||||||
size: 20 * scaling
|
|
||||||
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
|
||||||
colorFg: Color.mOnPrimary
|
|
||||||
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
|
||||||
colorFgHover: Color.mOnPrimary
|
|
||||||
enabled: index < Settings.data.bar.widgets.center.length - 1
|
|
||||||
onClicked: {
|
|
||||||
if (index < Settings.data.bar.widgets.center.length - 1) {
|
|
||||||
reorderWidgetInSection("center", index, index + 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NIconButton {
|
|
||||||
icon: "close"
|
|
||||||
size: 20 * scaling
|
|
||||||
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
|
||||||
colorFg: Color.mOnPrimary
|
|
||||||
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
|
||||||
colorFgHover: Color.mOnPrimary
|
|
||||||
onClicked: {
|
|
||||||
removeWidgetFromSection("center", index)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Right Section
|
// Right Section
|
||||||
NCard {
|
NWidgetCard {
|
||||||
Layout.fillWidth: true
|
sectionName: "Right"
|
||||||
Layout.minimumHeight: {
|
widgetModel: Settings.data.bar.widgets.right
|
||||||
var widgetCount = Settings.data.bar.widgets.right.length
|
availableWidgets: availableWidgets
|
||||||
if (widgetCount === 0)
|
scrollView: scrollView
|
||||||
return 140 * scaling
|
onAddWidget: (widgetName, section) => addWidgetToSection(widgetName, section)
|
||||||
|
onRemoveWidget: (section, index) => removeWidgetFromSection(section, index)
|
||||||
var availableWidth = scrollView.availableWidth - (Style.marginM * scaling * 2) // Card margins
|
onReorderWidget: (section, fromIndex, toIndex) => reorderWidgetInSection(section, fromIndex, toIndex)
|
||||||
var avgWidgetWidth = 150 * scaling // Estimated widget width including spacing
|
|
||||||
var widgetsPerRow = Math.max(1, Math.floor(availableWidth / avgWidgetWidth))
|
|
||||||
var rows = Math.ceil(widgetCount / widgetsPerRow)
|
|
||||||
|
|
||||||
// Header (50) + spacing (20) + (rows * widget height) + (rows-1 * spacing) + bottom margin (20)
|
|
||||||
return (50 + 20 + (rows * 48) + ((rows - 1) * Style.marginS) + 20) * scaling
|
|
||||||
}
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.margins: Style.marginM * scaling
|
|
||||||
spacing: Style.marginM * scaling
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
NText {
|
|
||||||
text: "Right Section"
|
|
||||||
font.pointSize: Style.fontSizeL * scaling
|
|
||||||
font.weight: Style.fontWeightBold
|
|
||||||
color: Color.mOnSurface
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
NComboBox {
|
|
||||||
id: rightComboBox
|
|
||||||
width: 120 * scaling
|
|
||||||
model: availableWidgets
|
|
||||||
label: ""
|
|
||||||
description: ""
|
|
||||||
placeholder: "Add widget to right section"
|
|
||||||
onSelected: key => {
|
|
||||||
addWidgetToSection(key, "right")
|
|
||||||
reset() // Reset selection
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Flow {
|
|
||||||
id: rightWidgetsFlow
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.minimumHeight: 65 * scaling
|
|
||||||
spacing: Style.marginS * scaling
|
|
||||||
flow: Flow.LeftToRight
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: Settings.data.bar.widgets.right
|
|
||||||
delegate: Rectangle {
|
|
||||||
width: widgetContent.implicitWidth + 16 * scaling
|
|
||||||
height: 48 * scaling
|
|
||||||
radius: Style.radiusS * scaling
|
|
||||||
color: Color.mPrimary
|
|
||||||
border.color: Color.mOutline
|
|
||||||
border.width: Math.max(1, Style.borderS * scaling)
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
id: widgetContent
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: Style.marginXS * scaling
|
|
||||||
|
|
||||||
NIconButton {
|
|
||||||
icon: "chevron_left"
|
|
||||||
size: 20 * scaling
|
|
||||||
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
|
||||||
colorFg: Color.mOnPrimary
|
|
||||||
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
|
||||||
colorFgHover: Color.mOnPrimary
|
|
||||||
enabled: index > 0
|
|
||||||
onClicked: {
|
|
||||||
if (index > 0) {
|
|
||||||
reorderWidgetInSection("right", index, index - 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NText {
|
|
||||||
text: modelData
|
|
||||||
font.pointSize: Style.fontSizeS * scaling
|
|
||||||
color: Color.mOnPrimary
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
NIconButton {
|
|
||||||
icon: "chevron_right"
|
|
||||||
size: 20 * scaling
|
|
||||||
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
|
||||||
colorFg: Color.mOnPrimary
|
|
||||||
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
|
||||||
colorFgHover: Color.mOnPrimary
|
|
||||||
enabled: index < Settings.data.bar.widgets.right.length - 1
|
|
||||||
onClicked: {
|
|
||||||
if (index < Settings.data.bar.widgets.right.length - 1) {
|
|
||||||
reorderWidgetInSection("right", index, index + 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NIconButton {
|
|
||||||
icon: "close"
|
|
||||||
size: 20 * scaling
|
|
||||||
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
|
||||||
colorFg: Color.mOnPrimary
|
|
||||||
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
|
||||||
colorFgHover: Color.mOnPrimary
|
|
||||||
onClicked: {
|
|
||||||
removeWidgetFromSection("right", index)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
158
Widgets/NWidgetCard.qml
Normal file
158
Widgets/NWidgetCard.qml
Normal file
|
|
@ -0,0 +1,158 @@
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import qs.Commons
|
||||||
|
import qs.Widgets
|
||||||
|
|
||||||
|
NCard {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property string sectionName: ""
|
||||||
|
property var widgetModel: []
|
||||||
|
property var availableWidgets: []
|
||||||
|
property var scrollView: null
|
||||||
|
|
||||||
|
signal addWidget(string widgetName, string section)
|
||||||
|
signal removeWidget(string section, int index)
|
||||||
|
signal reorderWidget(string section, int fromIndex, int toIndex)
|
||||||
|
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.minimumHeight: {
|
||||||
|
var widgetCount = widgetModel.length
|
||||||
|
if (widgetCount === 0)
|
||||||
|
return 140 * scaling
|
||||||
|
|
||||||
|
var availableWidth = scrollView ? scrollView.availableWidth - (Style.marginM * scaling * 2) : 400 * scaling
|
||||||
|
var avgWidgetWidth = 150 * scaling
|
||||||
|
var widgetsPerRow = Math.max(1, Math.floor(availableWidth / avgWidgetWidth))
|
||||||
|
var rows = Math.ceil(widgetCount / widgetsPerRow)
|
||||||
|
|
||||||
|
return (50 + 20 + (rows * 48) + ((rows - 1) * Style.marginS) + 20) * scaling
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: Style.marginM * scaling
|
||||||
|
spacing: Style.marginM * scaling
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
NText {
|
||||||
|
text: sectionName + " Section"
|
||||||
|
font.pointSize: Style.fontSizeL * scaling
|
||||||
|
font.weight: Style.fontWeightBold
|
||||||
|
color: Color.mOnSurface
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
|
||||||
|
NComboBox {
|
||||||
|
id: comboBox
|
||||||
|
width: 120 * scaling
|
||||||
|
model: availableWidgets
|
||||||
|
label: ""
|
||||||
|
description: ""
|
||||||
|
placeholder: "Add widget to " + sectionName.toLowerCase() + " section"
|
||||||
|
onSelected: key => {
|
||||||
|
comboBox.selectedKey = key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NIconButton {
|
||||||
|
icon: "add"
|
||||||
|
size: 24 * scaling
|
||||||
|
colorBg: Color.mPrimary
|
||||||
|
colorFg: Color.mOnPrimary
|
||||||
|
colorBgHover: Color.mPrimaryContainer
|
||||||
|
colorFgHover: Color.mOnPrimaryContainer
|
||||||
|
enabled: comboBox.selectedKey !== ""
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
onClicked: {
|
||||||
|
if (comboBox.selectedKey !== "") {
|
||||||
|
addWidget(comboBox.selectedKey, sectionName.toLowerCase())
|
||||||
|
comboBox.reset()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Flow {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.minimumHeight: 65 * scaling
|
||||||
|
spacing: Style.marginS * scaling
|
||||||
|
flow: Flow.LeftToRight
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: widgetModel
|
||||||
|
delegate: Rectangle {
|
||||||
|
width: widgetContent.implicitWidth + 16 * scaling
|
||||||
|
height: 48 * scaling
|
||||||
|
radius: Style.radiusS * scaling
|
||||||
|
color: Color.mPrimary
|
||||||
|
border.color: Color.mOutline
|
||||||
|
border.width: Math.max(1, Style.borderS * scaling)
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: widgetContent
|
||||||
|
anchors.centerIn: parent
|
||||||
|
spacing: Style.marginXS * scaling
|
||||||
|
|
||||||
|
NIconButton {
|
||||||
|
icon: "chevron_left"
|
||||||
|
size: 20 * scaling
|
||||||
|
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
||||||
|
colorFg: Color.mOnPrimary
|
||||||
|
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
||||||
|
colorFgHover: Color.mOnPrimary
|
||||||
|
enabled: index > 0
|
||||||
|
onClicked: {
|
||||||
|
if (index > 0) {
|
||||||
|
reorderWidget(sectionName.toLowerCase(), index, index - 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NText {
|
||||||
|
text: modelData
|
||||||
|
font.pointSize: Style.fontSizeS * scaling
|
||||||
|
color: Color.mOnPrimary
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
NIconButton {
|
||||||
|
icon: "chevron_right"
|
||||||
|
size: 20 * scaling
|
||||||
|
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
||||||
|
colorFg: Color.mOnPrimary
|
||||||
|
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
||||||
|
colorFgHover: Color.mOnPrimary
|
||||||
|
enabled: index < widgetModel.length - 1
|
||||||
|
onClicked: {
|
||||||
|
if (index < widgetModel.length - 1) {
|
||||||
|
reorderWidget(sectionName.toLowerCase(), index, index + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NIconButton {
|
||||||
|
icon: "close"
|
||||||
|
size: 20 * scaling
|
||||||
|
colorBg: Color.applyOpacity(Color.mOnPrimary, "20")
|
||||||
|
colorFg: Color.mOnPrimary
|
||||||
|
colorBgHover: Color.applyOpacity(Color.mOnPrimary, "40")
|
||||||
|
colorFgHover: Color.mOnPrimary
|
||||||
|
onClicked: {
|
||||||
|
removeWidget(sectionName.toLowerCase(), index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue