/* 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 . */ /** @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 } } }