You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
3.1 KiB

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.0
import QtQuick.Controls.Styles 1.1
ColumnLayout {
id: root
property string title
property variant listModel;
property bool collapsible;
property bool collapsed;
property bool enableSelection: false;
property real storedHeight: 0;
property Component itemDelegate
property Component componentDelegate
property alias item: loader.item
signal rowActivated(int index)
spacing: 0
function collapse()
{
storedHeight = childrenRect.height;
storageContainer.collapse();
}
function show()
{
storageContainer.expand();
}
Component.onCompleted:
{
if (storageContainer.parent.parent.height === 25)
storageContainer.collapse();
else
storageContainer.expand();
}
RowLayout {
height: 25
id: header
Image {
source: "qrc:/qml/img/opentriangleindicator.png"
width: 15
height: 15
sourceSize.width: 15
sourceSize.height: 15
id: storageImgArrow
}
Text {
anchors.left: storageImgArrow.right
color: "#8b8b8b"
text: title
id: storageListTitle
}
MouseArea
{
enabled: collapsible
anchors.fill: parent
onClicked: {
if (collapsible)
{
if (collapsed)
{
storageContainer.expand();
storageContainer.parent.parent.height = storedHeight;
}
else
{
storedHeight = root.childrenRect.height;
storageContainer.collapse();
}
}
}
}
}
Rectangle
{
id: storageContainer
border.width: 3
border.color: "#deddd9"
Layout.fillWidth: true
Layout.fillHeight: true
function collapse() {
storageImgArrow.source = "qrc:/qml/img/closedtriangleindicator.png";
if (storageContainer.parent.parent.height > 25)
storageContainer.parent.parent.height = 25;
collapsed = true;
}
function expand() {
storageImgArrow.source = "qrc:/qml/img/opentriangleindicator.png";
collapsed = false;
}
Loader
{
id: loader
anchors.top: parent.top
anchors.left: parent.left
anchors.topMargin: 3
anchors.leftMargin: 3
width: parent.width - 3
height: parent.height - 6
onHeightChanged: {
if (height <= 0 && collapsible) {
if (storedHeight <= 0)
storedHeight = 200;
storageContainer.collapse();
}
else if (height > 0 && collapsed) {
storageContainer.expand();
}
}
sourceComponent: componentDelegate ? componentDelegate : table
}
Component
{
id: table
TableView
{
clip: true;
alternatingRowColors: false
anchors.fill: parent
model: listModel
selectionMode: enableSelection ? SelectionMode.SingleSelection : SelectionMode.NoSelection
headerDelegate: null
itemDelegate: root.itemDelegate
onActivated: rowActivated(row);
Keys.onPressed: {
if ((event.modifiers & Qt.ControlModifier) && event.key === Qt.Key_C && currentRow >=0 && currentRow < listModel.length) {
var str = "";
for (var i = 0; i < listModel.length; i++)
str += listModel[i] + "\n";
clipboard.text = str;
}
}
TableViewColumn {
role: "modelData"
width: parent.width
}
}
}
}
}