Gav Wood
10 years ago
27 changed files with 455 additions and 124 deletions
@ -0,0 +1,243 @@ |
|||
import QtQuick 2.0 |
|||
import QtQuick.Window 2.0 |
|||
import QtQuick.Layouts 1.0 |
|||
import QtQuick.Controls 1.0 |
|||
import QtQuick.Controls.Styles 1.3 |
|||
import "." |
|||
|
|||
|
|||
ColumnLayout { |
|||
id: wrapperItem |
|||
signal documentSelected(string doc, string groupName) |
|||
property alias model: filesList.model |
|||
property string sectionName; |
|||
property variant selManager; |
|||
Layout.fillWidth: true |
|||
Layout.minimumHeight: hiddenHeightTopLevel() |
|||
height: hiddenHeightTopLevel() |
|||
Layout.maximumHeight: hiddenHeightTopLevel() |
|||
spacing: 0 |
|||
|
|||
function hiddenHeightTopLevel() |
|||
{ |
|||
return section.state === "hidden" ? Style.documentsList.height : Style.documentsList.fileNameHeight * model.count + Style.documentsList.height; |
|||
} |
|||
|
|||
function hiddenHeightRepeater() |
|||
{ |
|||
return section.state === "hidden" ? 0 : Style.documentsList.fileNameHeight * wrapperItem.model.count; |
|||
} |
|||
|
|||
function hiddenHeightElement() |
|||
{ |
|||
return section.state === "hidden" ? 0 : Style.documentsList.fileNameHeight; |
|||
} |
|||
|
|||
function getDocumentIndex(documentId) |
|||
{ |
|||
for (var i = 0; i < model.count; i++) |
|||
if (model.get(i).documentId === documentId) |
|||
return i; |
|||
return -1; |
|||
} |
|||
|
|||
function removeDocument(documentId) |
|||
{ |
|||
var i = getDocumentIndex(documentId); |
|||
if (i !== -1) |
|||
model.remove(i); |
|||
} |
|||
|
|||
FontLoader |
|||
{ |
|||
id: fileNameFont |
|||
source: "qrc:/qml/fonts/SourceSansPro-Regular.ttf" |
|||
} |
|||
|
|||
RowLayout |
|||
{ |
|||
anchors.top: parent.top |
|||
id: rowCol |
|||
width: parent.width |
|||
height: Style.documentsList.height |
|||
|
|||
Image { |
|||
source: "qrc:/qml/img/opentriangleindicator_filesproject.png" |
|||
width: 15 |
|||
sourceSize.width: 15 |
|||
id: imgArrow |
|||
anchors.right: section.left |
|||
anchors.rightMargin: 5 |
|||
anchors.top: parent.top |
|||
anchors.topMargin: 8 |
|||
} |
|||
|
|||
Text |
|||
{ |
|||
id: section |
|||
text: sectionName |
|||
anchors.left: parent.left |
|||
anchors.leftMargin: Style.general.leftMargin |
|||
color: Style.documentsList.sectionColor |
|||
font.family: fileNameFont.name |
|||
font.pointSize: Style.documentsList.fontSize |
|||
font.weight: Font.Bold |
|||
font.letterSpacing: 1 |
|||
states: [ |
|||
State { |
|||
name: "hidden" |
|||
PropertyChanges { target: filesList; visible: false; } |
|||
PropertyChanges { target: rowCol; Layout.minimumHeight: Style.documentsList.height; Layout.maximumHeight: Style.documentsList.height; height: Style.documentsList.height; } |
|||
PropertyChanges { target: imgArrow; source: "qrc:/qml/img/closedtriangleindicator_filesproject.png" } |
|||
} |
|||
] |
|||
} |
|||
|
|||
MouseArea { |
|||
id: titleMouseArea |
|||
anchors.fill: parent |
|||
hoverEnabled: true |
|||
z: 2 |
|||
onClicked: { |
|||
if (section.state === "hidden") |
|||
section.state = ""; |
|||
else |
|||
section.state = "hidden"; |
|||
} |
|||
} |
|||
} |
|||
|
|||
ColumnLayout { |
|||
height: wrapperItem.hiddenHeightRepeater() |
|||
Layout.minimumHeight: wrapperItem.hiddenHeightRepeater() |
|||
Layout.preferredHeight: wrapperItem.hiddenHeightRepeater() |
|||
Layout.maximumHeight: wrapperItem.hiddenHeightRepeater() |
|||
width: parent.width |
|||
visible: section.state !== "hidden" |
|||
spacing: 0 |
|||
Repeater |
|||
{ |
|||
id: filesList |
|||
visible: section.state !== "hidden" |
|||
Rectangle |
|||
{ |
|||
visible: section.state !== "hidden" |
|||
id: rootItem |
|||
Layout.fillWidth: true |
|||
Layout.minimumHeight: wrapperItem.hiddenHeightElement() |
|||
Layout.preferredHeight: wrapperItem.hiddenHeightElement() |
|||
Layout.maximumHeight: wrapperItem.hiddenHeightElement() |
|||
height: wrapperItem.hiddenHeightElement() |
|||
color: isSelected ? Style.documentsList.highlightColor : Style.documentsList.background |
|||
property bool isSelected |
|||
property bool renameMode |
|||
Text { |
|||
id: nameText |
|||
height: parent.height |
|||
visible: !renameMode |
|||
color: rootItem.isSelected ? Style.documentsList.selectedColor : Style.documentsList.color |
|||
text: name; |
|||
font.family: fileNameFont.name |
|||
font.pointSize: Style.documentsList.fontSize |
|||
anchors.verticalCenter: parent.verticalCenter |
|||
verticalAlignment: Text.AlignVCenter |
|||
anchors.left: parent.left |
|||
anchors.leftMargin: Style.general.leftMargin + 2 |
|||
width: parent.width |
|||
Connections |
|||
{ |
|||
target: selManager |
|||
onSelected: { |
|||
if (groupName != sectionName) |
|||
rootItem.isSelected = false; |
|||
else if (doc === documentId) |
|||
rootItem.isSelected = true; |
|||
else |
|||
rootItem.isSelected = false; |
|||
} |
|||
} |
|||
} |
|||
|
|||
TextInput { |
|||
id: textInput |
|||
text: nameText.text |
|||
visible: renameMode |
|||
anchors.verticalCenter: parent.verticalCenter |
|||
anchors.left: parent.left |
|||
anchors.leftMargin: Style.general.leftMargin |
|||
MouseArea { |
|||
id: textMouseArea |
|||
anchors.fill: parent |
|||
hoverEnabled: true |
|||
z: 2 |
|||
onClicked: { |
|||
textInput.forceActiveFocus(); |
|||
} |
|||
} |
|||
|
|||
onVisibleChanged: { |
|||
if (visible) { |
|||
selectAll(); |
|||
forceActiveFocus(); |
|||
} |
|||
} |
|||
|
|||
onAccepted: close(true); |
|||
onCursorVisibleChanged: { |
|||
if (!cursorVisible) |
|||
close(false); |
|||
} |
|||
onFocusChanged: { |
|||
if (!focus) |
|||
close(false); |
|||
} |
|||
function close(accept) { |
|||
rootItem.renameMode = false; |
|||
if (accept) |
|||
{ |
|||
var i = getDocumentIndex(documentId); |
|||
projectModel.renameDocument(documentId, textInput.text); |
|||
wrapperItem.model.set(i, projectModel.getDocument(documentId)); |
|||
} |
|||
} |
|||
} |
|||
|
|||
MouseArea { |
|||
id: mouseArea |
|||
z: 1 |
|||
hoverEnabled: false |
|||
anchors.fill: parent |
|||
acceptedButtons: Qt.LeftButton | Qt.RightButton |
|||
onClicked:{ |
|||
if (mouse.button === Qt.RightButton && !isContract) |
|||
contextMenu.popup(); |
|||
else if (mouse.button === Qt.LeftButton) |
|||
{ |
|||
rootItem.isSelected = true; |
|||
projectModel.openDocument(documentId); |
|||
documentSelected(documentId, groupName); |
|||
} |
|||
} |
|||
} |
|||
|
|||
Menu { |
|||
id: contextMenu |
|||
MenuItem { |
|||
text: qsTr("Rename") |
|||
onTriggered: { |
|||
rootItem.renameMode = true; |
|||
} |
|||
} |
|||
MenuItem { |
|||
text: qsTr("Delete") |
|||
onTriggered: { |
|||
projectModel.removeDocument(documentId); |
|||
wrapperItem.removeDocument(documentId); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
@ -0,0 +1,29 @@ |
|||
pragma Singleton |
|||
import QtQuick 2.0 |
|||
|
|||
/* |
|||
* Project Files |
|||
*/ |
|||
QtObject { |
|||
property QtObject general: QtObject { |
|||
property int leftMargin: 45 |
|||
} |
|||
|
|||
property QtObject title: QtObject { |
|||
property string color: "#808080" |
|||
property string background: "#f0f0f0" |
|||
property int height: 70 |
|||
property int pointSize: 18 |
|||
} |
|||
|
|||
property QtObject documentsList: QtObject { |
|||
property string background: "#f7f7f7" |
|||
property string color: "#4d4d4d" |
|||
property string sectionColor: "#808080" |
|||
property string selectedColor: "white" |
|||
property string highlightColor: "#4a90e2" |
|||
property int height: 32 |
|||
property int fileNameHeight: 45 |
|||
property int fontSize: 15 |
|||
} |
|||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 244 B |
After Width: | Height: | Size: 228 B |
After Width: | Height: | Size: 286 B |
@ -0,0 +1 @@ |
|||
singleton Style 1.0 Style.qml |
Loading…
Reference in new issue