235 lines
6.4 KiB
QML
235 lines
6.4 KiB
QML
import QtQuick 2.14
|
|
import QtQuick.Controls 2.14
|
|
import QtQuick.Layouts 1.14
|
|
|
|
import Storybook 1.0
|
|
import Models 1.0
|
|
|
|
ListView {
|
|
id: root
|
|
|
|
spacing: 25
|
|
ScrollBar.vertical: ScrollBar { x: root.width }
|
|
|
|
delegate: ColumnLayout {
|
|
id: rootDelegate
|
|
|
|
readonly property var _model: model
|
|
|
|
width: ListView.view.width
|
|
|
|
Label {
|
|
Layout.fillWidth: true
|
|
text: "community id: " + model.id
|
|
font.weight: Font.Bold
|
|
}
|
|
|
|
TextField {
|
|
Layout.fillWidth: true
|
|
text: model.name
|
|
onTextChanged: model.name = text
|
|
}
|
|
|
|
TextField {
|
|
Layout.fillWidth: true
|
|
text: model.description
|
|
onTextChanged: model.description = text
|
|
}
|
|
|
|
Flow {
|
|
Layout.fillWidth: true
|
|
|
|
CheckBox {
|
|
text: "featured"
|
|
checked: model.featured
|
|
onToggled: model.featured = checked
|
|
}
|
|
CheckBox {
|
|
text: "available"
|
|
checked: model.available
|
|
onToggled: model.available = checked
|
|
}
|
|
CheckBox {
|
|
text: "loaded"
|
|
checked: model.loaded
|
|
onToggled: model.loaded = checked
|
|
}
|
|
}
|
|
|
|
ListView {
|
|
id: tagsSelector
|
|
|
|
Layout.fillWidth: true
|
|
implicitHeight: contentItem.childrenRect.height + ScrollBar.horizontal.height
|
|
|
|
clip: true
|
|
orientation: ListView.Horizontal
|
|
spacing: 4
|
|
|
|
model: ListModel {
|
|
id: communityTags
|
|
Component.onCompleted: {
|
|
const allTags = JSON.parse(ModelsData.communityTags)
|
|
const selectedTags = JSON.parse(rootDelegate._model.tags)
|
|
for (const key of Object.keys(allTags)) {
|
|
const selected = selectedTags.find(tag => tag.name === key) !== undefined
|
|
communityTags.append({ name: key, emoji: allTags[key], selected: selected });
|
|
}
|
|
}
|
|
}
|
|
|
|
delegate: Button {
|
|
text: model.name
|
|
checkable: true
|
|
checked: model.selected
|
|
|
|
onClicked: {
|
|
model.selected = !model.selected
|
|
|
|
const selectedTags = []
|
|
for (let i = 0; i < communityTags.count; ++i) {
|
|
const tag = communityTags.get(i)
|
|
if (tag.selected) selectedTags.push({ name: tag.name, emoji: tag.emoji })
|
|
}
|
|
|
|
rootDelegate._model.tags = JSON.stringify(selectedTags)
|
|
}
|
|
}
|
|
|
|
ScrollBar.horizontal: ScrollBar {}
|
|
}
|
|
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: 50
|
|
|
|
Rectangle {
|
|
border.color: 'gray'
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
Image {
|
|
anchors.fill: parent
|
|
anchors.margins: 1
|
|
fillMode: Image.PreserveAspectFit
|
|
source: model.icon
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: iconSelector.open()
|
|
|
|
ImageSelectPopup {
|
|
id: iconSelector
|
|
|
|
parent: root
|
|
anchors.centerIn: parent
|
|
width: parent.width * 0.8
|
|
height: parent.height * 0.8
|
|
|
|
model: IconModel {}
|
|
|
|
onSelected: {
|
|
rootDelegate._model.icon = icon
|
|
close()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
border.color: 'gray'
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
Image {
|
|
anchors.fill: parent
|
|
anchors.margins: 1
|
|
fillMode: Image.PreserveAspectFit
|
|
source: model.banner
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: bannerSelector.open()
|
|
|
|
ImageSelectPopup {
|
|
id: bannerSelector
|
|
|
|
parent: root
|
|
anchors.centerIn: parent
|
|
width: parent.width * 0.8
|
|
height: parent.height * 0.8
|
|
|
|
model: BannerModel {}
|
|
|
|
onSelected: {
|
|
rootDelegate._model.banner = icon
|
|
close()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
TextField {
|
|
Layout.fillWidth: true
|
|
maximumLength: 1024 * 1024 * 1024
|
|
text: model.icon
|
|
onTextChanged: model.icon = text
|
|
}
|
|
|
|
TextField {
|
|
Layout.fillWidth: true
|
|
maximumLength: 1024 * 1024 * 1024
|
|
text: model.banner
|
|
onTextChanged: model.banner = text
|
|
}
|
|
|
|
Row {
|
|
Label {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: "members:\t"
|
|
}
|
|
|
|
SpinBox {
|
|
editable: true
|
|
height: 30
|
|
from: 0; to: 10 * 1000 * 1000
|
|
value: model.members
|
|
onValueChanged: model.members = value
|
|
}
|
|
}
|
|
|
|
Row {
|
|
Label {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: "active:\t"
|
|
}
|
|
|
|
SpinBox {
|
|
editable: true
|
|
height: 30
|
|
from: 0; to: 10 * 1000 * 1000
|
|
value: model.activeMembers
|
|
onValueChanged: model.activeMembers = value
|
|
}
|
|
}
|
|
|
|
Row {
|
|
Label {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: "popularity:\t"
|
|
}
|
|
|
|
SpinBox {
|
|
editable: true
|
|
height: 30
|
|
from: 0; to: 10 * 1000 * 1000
|
|
value: model.popularity
|
|
onValueChanged: model.popularity = value
|
|
}
|
|
}
|
|
}
|
|
}
|