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.

189 lines
6.1 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
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)
dropDownList.parent = top;
dropDownList.x = coordinates.x
dropDownList.y = coordinates.y
}
signal selectItem(real item);
signal editItem(real item);
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:dropDownList
width:statesComboBox.width;
height:0;
clip:true;
radius:4;
anchors.top: chosenItem.bottom;
anchors.margins: 2;
color: statesComboBox.color
TableView {
id:listView
height:500;
width:statesComboBox.width;
model: statesComboBox.items
currentRow: -1
headerVisible: false;
backgroundVisible: false
alternatingRowColors : false;
frameVisible: false
TableViewColumn {
role: "title"
title: ""
width: statesComboBox.width;
delegate: mainItemDelegate
//elideMode: Text.ElideNone
}
Component {
id: mainItemDelegate
Item{
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;
}
Rectangle
{
id: spaceItemid
anchors.top: textItemid.top;
anchors.left: textItemid.right
width: parent.width - textItemid.width - imageItemid.width - textItemid.anchors.margins- textItemid.anchors.margins
}
Image {
id: imageItemid
height:20
width:20;
visible: false;
fillMode: Image.PreserveAspectFit
source: "img/edit_combox.png"
anchors.top: spaceItemid.top;
anchors.left: spaceItemid.right;
}
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
if(chosenItemText.text != prevSelection)
statesComboBox.comboClicked();
listView.currentRow = styleData.row;
statesComboBox.selectItem(styleData.row);
}
}
}
}//Item
}//Component
}
}
states: State {
name: "dropDown";
PropertyChanges { target: dropDownList; height:20*statesComboBox.items.count }
}
}