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.
240 lines
8.0 KiB
240 lines
8.0 KiB
/*
|
|
This file is part of cpp-ethereum.
|
|
|
|
cpp-ethereum is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
cpp-ethereum is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
/** @file StatesComboBox.qml
|
|
* @author Ali Mashatan ali@ethdev.com
|
|
* @date 2015
|
|
* Ethereum IDE client.
|
|
*/
|
|
|
|
import QtQuick 2.0
|
|
import QtQuick.Controls 1.0
|
|
import QtQuick.Layouts 1.1
|
|
import QtGraphicalEffects 1.0
|
|
|
|
Rectangle {
|
|
id:statesComboBox
|
|
|
|
width:200;
|
|
height: 20;
|
|
|
|
Component.onCompleted:
|
|
{
|
|
var top = dropDownList;
|
|
while (top.parent)
|
|
{
|
|
top = top.parent
|
|
if (top.objectName == "debugPanel")
|
|
break;
|
|
}
|
|
var coordinates = dropDownList.mapToItem(top, 0, 0)
|
|
//the order is important
|
|
dropDownShowdowList.parent = top;
|
|
dropDownList.parent = top;
|
|
|
|
dropDownShowdowList.x = coordinates.x
|
|
dropDownShowdowList.y = coordinates.y
|
|
|
|
dropDownList.x = coordinates.x
|
|
dropDownList.y = coordinates.y
|
|
}
|
|
|
|
signal selectItem(real item);
|
|
signal editItem(real item);
|
|
signal selectCreate();
|
|
property variant rowHeight:25;
|
|
property variant items;
|
|
readonly property alias selectedItem: chosenItemText.text;
|
|
readonly property alias selectedIndex: listView.currentRow;
|
|
function setSelectedIndex(index)
|
|
{
|
|
listView.currentRow = index;
|
|
chosenItemText.text = statesComboBox.items.get(0).title;
|
|
}
|
|
|
|
signal comboClicked;
|
|
|
|
property variant colorItem;
|
|
property variant colorSelect;
|
|
|
|
smooth:true;
|
|
Rectangle {
|
|
id:chosenItem
|
|
width:parent.width;
|
|
height:statesComboBox.height;
|
|
color: statesComboBox.color;
|
|
smooth:true;
|
|
Text {
|
|
id:chosenItemText
|
|
anchors.top: parent.top;
|
|
anchors.left: parent.left;
|
|
anchors.margins: 2;
|
|
color: statesComboBox.colorItem;
|
|
text:""
|
|
smooth:true
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent;
|
|
onClicked: {
|
|
statesComboBox.state = statesComboBox.state==="dropDown"?"":"dropDown"
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id:dropDownShowdowList
|
|
width:statesComboBox.width;
|
|
opacity: 0.3
|
|
height:0;
|
|
clip:true;
|
|
radius:4;
|
|
anchors.top: chosenItem.top;
|
|
anchors.margins: 2;
|
|
color: "gray"
|
|
}
|
|
//ToDo: We need scrollbar for items
|
|
Rectangle {
|
|
id:dropDownList
|
|
width:statesComboBox.width;
|
|
height:0;
|
|
clip:true;
|
|
radius:4;
|
|
anchors.top: chosenItem.top;
|
|
anchors.margins: 2;
|
|
color: statesComboBox.color
|
|
|
|
|
|
ColumnLayout{
|
|
spacing: 2
|
|
TableView {
|
|
id:listView
|
|
height:20;
|
|
implicitHeight: 0
|
|
width:statesComboBox.width;
|
|
model: statesComboBox.items
|
|
horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff;
|
|
currentRow: -1
|
|
headerVisible: false;
|
|
backgroundVisible: false
|
|
alternatingRowColors : false;
|
|
frameVisible: false
|
|
|
|
TableViewColumn {
|
|
role: "title"
|
|
title: ""
|
|
width: statesComboBox.width;
|
|
delegate: mainItemDelegate
|
|
}
|
|
rowDelegate: Rectangle {
|
|
width:statesComboBox.width;
|
|
height: statesComboBox.rowHeight;
|
|
}
|
|
Component {
|
|
id: mainItemDelegate
|
|
Rectangle {
|
|
id: itemDelegate
|
|
width:statesComboBox.width;
|
|
height: statesComboBox.height;
|
|
Text {
|
|
id: textItemid
|
|
text: styleData.value
|
|
color: statesComboBox.colorItem;
|
|
anchors.top: parent.top;
|
|
anchors.left: parent.left;
|
|
anchors.margins: 5;
|
|
|
|
}
|
|
Image {
|
|
id: imageItemid
|
|
height:20
|
|
width:20;
|
|
anchors.right:parent.right
|
|
anchors.top: parent.top;
|
|
anchors.margins: 5;
|
|
visible: false;
|
|
fillMode: Image.PreserveAspectFit
|
|
source: "img/edit_combox.png"
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent;
|
|
hoverEnabled : true
|
|
|
|
onEntered: {
|
|
imageItemid.visible = true;
|
|
textItemid.color = statesComboBox.colorSelect;
|
|
}
|
|
onExited: {
|
|
imageItemid.visible = false;
|
|
textItemid.color = statesComboBox.colorItem;
|
|
}
|
|
onClicked: {
|
|
if (mouseX > imageItemid.x && mouseX < imageItemid.x+ imageItemid.width
|
|
&& mouseY > imageItemid.y && mouseY < imageItemid.y+ imageItemid.height)
|
|
statesComboBox.editItem(styleData.row);
|
|
else {
|
|
statesComboBox.state = ""
|
|
var prevSelection = chosenItemText.text
|
|
chosenItemText.text = styleData.value
|
|
listView.currentRow = styleData.row;
|
|
statesComboBox.selectItem(styleData.row);
|
|
}
|
|
}
|
|
}
|
|
}//Item
|
|
}//Component
|
|
}//Table View
|
|
|
|
RowLayout{
|
|
Rectangle{
|
|
width: 1
|
|
}
|
|
Text{
|
|
id:createStateText
|
|
width:statesComboBox.width;
|
|
height: statesComboBox.height;
|
|
font.bold: true
|
|
text:"Create State ..."
|
|
MouseArea
|
|
{
|
|
anchors.fill: parent;
|
|
hoverEnabled : true
|
|
|
|
onEntered: {
|
|
createStateText.color = statesComboBox.colorSelect;
|
|
}
|
|
onExited: {
|
|
createStateText.color = statesComboBox.colorItem;
|
|
}
|
|
onClicked: {
|
|
statesComboBox.state = ""
|
|
statesComboBox.selectCreate();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
states: State {
|
|
name: "dropDown";
|
|
PropertyChanges { target: dropDownList; height:(statesComboBox.rowHeight*(statesComboBox.items.count+1)) }
|
|
PropertyChanges { target: dropDownShowdowList; width:statesComboBox.width+3; height:(statesComboBox.rowHeight*(statesComboBox.items.count+1))+3 }
|
|
PropertyChanges { target:listView; height:20; implicitHeight: (statesComboBox.rowHeight*(statesComboBox.items.count)) }
|
|
}
|
|
|
|
}
|
|
|