Warning, /office/klevernotes/src/contents/ui/dialogs/tableMakerDialog/TableMakerDialog.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-License-Identifier: GPL-2.0-or-later 0002 // SPDX-FileCopyrightText: 2023 Louis Schul <schul9louis@gmail.com> 0003 0004 import QtQuick 2.15 0005 import QtQuick.Layouts 1.15 0006 import QtQuick.Templates 2.15 0007 import QtQuick.Controls 2.15 as Controls 0008 0009 import org.kde.kirigami 2.19 as Kirigami 0010 import org.kde.kirigamiaddons.formcard 1.0 as FormCard 0011 0012 Kirigami.Dialog { 0013 id: scrollableDialog 0014 0015 property int rowCount: 1 0016 property int columnCount: 1 0017 property string alignment: optionsColumn.isExpended ? alignmentBox.currentValue : "left" 0018 property int hoveredRow: 0 0019 property int hoveredColumn: 0 0020 property bool isHovered: false 0021 0022 title: i18nc("@title:dialog, table => an html table", "Table creation") 0023 0024 width: Kirigami.Units.gridUnit * 15 0025 padding: 0 0026 0027 onRowCountChanged: if (rowCount !== rowSpin.value) { 0028 rowSpin.value = rowCount 0029 } 0030 onColumnCountChanged: if (columnCount !== columnSpin.value) { 0031 columnSpin.value = columnCount 0032 } 0033 0034 ColumnLayout { 0035 id: itemLayout 0036 0037 property int generalTiming: Kirigami.Units.longDuration 0038 0039 height: Kirigami.Units.gridUnit * 21 0040 spacing: 0 0041 0042 Controls.Label { 0043 text: i18nc("@label, display the final size of the table %1 is the number of row and %2 the number of column","Size: %1 x %2", rowCount, columnCount) 0044 0045 Layout.alignment: Qt.AlignTop 0046 Layout.preferredHeight: Kirigami.Units.gridUnit * 3 0047 Layout.leftMargin: Kirigami.Units.gridUnit 0048 Layout.rightMargin: Kirigami.Units.gridUnit 0049 } 0050 0051 GridLayout { 0052 id: mainHolder 0053 0054 rows: 10 0055 columns: 5 0056 rowSpacing: 0 0057 columnSpacing: 0 0058 0059 Layout.preferredHeight: Kirigami.Units.gridUnit * 15 0060 Layout.alignment: Qt.AlignTop || Qt.AlignHCenter 0061 Layout.margins: 0 0062 Layout.leftMargin: Kirigami.Units.largeSpacing * 3 0063 Layout.rightMargin: Kirigami.Units.largeSpacing * 3 0064 0065 states: State { 0066 name: "invisible" 0067 when: optionsColumn.isExpended 0068 0069 PropertyChanges { target: mainHolder; Layout.preferredHeight: 0 } 0070 PropertyChanges { target: mainHolder; opacity: 0 } 0071 } 0072 0073 Behavior on Layout.preferredHeight { 0074 NumberAnimation { duration: itemLayout.generalTiming } 0075 } 0076 Behavior on opacity { 0077 NumberAnimation { duration: itemLayout.generalTiming - 20 } 0078 } 0079 0080 Repeater { 0081 model: mainHolder.rows * mainHolder.columns 0082 0083 delegate: ItemDelegate { 0084 id: box 0085 0086 readonly property int visualColumn: (index % mainHolder.columns) + 1 0087 readonly property int visualRow: ((index - visualColumn + 1) / mainHolder.columns) + 1 0088 0089 property bool insideSelectedBound: visualRow <= scrollableDialog.rowCount && visualColumn <= scrollableDialog.columnCount 0090 0091 property bool insideHoveredBound: scrollableDialog.isHovered 0092 ? (visualRow <= scrollableDialog.hoveredRow && visualColumn <= scrollableDialog.hoveredColumn) 0093 : false 0094 0095 0096 Layout.fillWidth: true 0097 Layout.fillHeight: true 0098 0099 focusPolicy: Qt.StrongFocus 0100 hoverEnabled: true 0101 0102 background: Rectangle { 0103 color: { 0104 let colorOpacity = 0.7; 0105 let selectedColor = Kirigami.Theme.textColor 0106 0107 if (box.pressed || 0108 box.insideSelectedBound && box.insideHoveredBound || 0109 !scrollableDialog.isHovered && box.insideSelectedBound 0110 ) { 0111 selectedColor = Kirigami.Theme.highlightColor 0112 colorOpacity = 0.7; 0113 } else if (box.insideHoveredBound) { 0114 selectedColor = Kirigami.Theme.highlightColor 0115 colorOpacity = 0.5; 0116 } 0117 0118 return Qt.rgba(selectedColor.r, selectedColor.g, selectedColor.b, colorOpacity) 0119 } 0120 0121 border.width: 1 0122 border.color: Kirigami.Theme.backgroundColor 0123 0124 Behavior on color { 0125 ColorAnimation { duration: Kirigami.Units.shortDuration } 0126 } 0127 } 0128 0129 onHoveredChanged: { 0130 scrollableDialog.isHovered = hovered 0131 if (hovered) { 0132 scrollableDialog.hoveredRow = visualRow 0133 scrollableDialog.hoveredColumn = visualColumn 0134 } else { 0135 scrollableDialog.hoveredRow = 0 0136 scrollableDialog.hoveredColumn = 0 0137 } 0138 } 0139 onClicked: { 0140 scrollableDialog.rowCount = visualRow 0141 scrollableDialog.columnCount = visualColumn 0142 } 0143 } 0144 } 0145 } 0146 0147 Kirigami.Separator { 0148 Layout.fillWidth: true 0149 Layout.topMargin: Kirigami.Units.smallSpacing 0150 } 0151 0152 UpDownButtonDelegate { 0153 id: optionButton 0154 0155 text: i18nc("@label:button", "More options") 0156 arrowDirection: optionsColumn.isExpended ? Qt.DownArrow : Qt.UpArrow 0157 0158 Layout.fillWidth: true 0159 Layout.preferredHeight: Kirigami.Units.gridUnit * 3 0160 Layout.alignment: optionsColumn.isExpended ? Qt.AlignTop : Qt.AlignBottom 0161 Layout.bottomMargin: optionsColumn.isExpended ? 0 : -Kirigami.Units.smallSpacing 0162 0163 0164 onClicked: { 0165 optionsColumn.isExpended = !optionsColumn.isExpended 0166 0167 if (scrollableDialog.rowCount > mainHolder.rows) scrollableDialog.rowCount = mainHolder.rows 0168 if (scrollableDialog.columnCount > mainHolder.columns) scrollableDialog.columnCount = mainHolder.columns 0169 } 0170 } 0171 0172 Kirigami.Separator { 0173 Layout.fillWidth: true 0174 Layout.bottomMargin: Kirigami.Units.smallSpacing 0175 visible: optionsColumn.isExpended 0176 } 0177 0178 Item { 0179 id: optionsColumn 0180 0181 property bool isExpended: false 0182 0183 Layout.fillWidth: true 0184 Layout.preferredHeight: 0 0185 Layout.alignment: Qt.AlignBottom 0186 opacity: 0 0187 0188 states: State { 0189 name: "visible" 0190 when: optionsColumn.isExpended 0191 PropertyChanges { target: optionsColumn; Layout.preferredHeight: Kirigami.Units.gridUnit * 15 } 0192 PropertyChanges { target: optionsColumn; opacity: 1 } 0193 } 0194 0195 Behavior on Layout.preferredHeight { 0196 NumberAnimation { duration: itemLayout.generalTiming } 0197 } 0198 Behavior on opacity { 0199 NumberAnimation { duration: itemLayout.generalTiming - 20} 0200 } 0201 0202 ColumnLayout { 0203 anchors.fill: parent 0204 spacing: Kirigami.Units.smallSpacing 0205 0206 FormCard.FormSpinBoxDelegate { 0207 id: rowSpin 0208 0209 label: i18nc("@label:spinbox, name, 'a row'", "Row") 0210 from: 1 0211 0212 Layout.fillWidth: true 0213 Layout.preferredHeight: parent.height / 3 0214 0215 onValueChanged: if (scrollableDialog.rowCount !== value) scrollableDialog.rowCount = value 0216 } 0217 0218 FormCard.FormSpinBoxDelegate { 0219 id: columnSpin 0220 0221 label: i18nc("@label:spinbox, name, 'a column'", "Column") 0222 from: 1 0223 0224 Layout.fillWidth: true 0225 Layout.preferredHeight: parent.height / 3 0226 0227 onValueChanged: if (scrollableDialog.columnCount !== value) scrollableDialog.columnCount = value 0228 } 0229 0230 FormCard.FormComboBoxDelegate { 0231 id: alignmentBox 0232 0233 text: i18nc("@label:combobox", "Alignment :") 0234 0235 textRole: "text" 0236 valueRole: "value" 0237 model: [ 0238 { text: i18nc("@entry:combobox, alignment name", "Left"), value: "left" }, 0239 { text: i18nc("@entry:combobox, alignment name", "Center"), value: "center" }, 0240 { text: i18nc("@entry:combobox, alignment name", "Right"), value: "right" } 0241 ] 0242 currentIndex: 0 0243 0244 Layout.fillWidth: true 0245 Layout.preferredHeight: parent.height / 3 0246 } 0247 } 0248 } 0249 } 0250 0251 standardButtons: Kirigami.Dialog.Ok | Kirigami.Dialog.Cancel 0252 0253 onClosed: { 0254 rowCount = 1 0255 columnCount = 1 0256 optionsColumn.isExpended = false 0257 } 0258 }