Ali Mashatan
10 years ago
4 changed files with 206 additions and 2 deletions
@ -0,0 +1,185 @@ |
|||||
|
/* |
||||
|
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; |
||||
|
property alias selectedItem: chosenItemText.text; |
||||
|
property alias selectedIndex: listView.currentRow; |
||||
|
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 { |
||||
|
anchors.top: parent.top; |
||||
|
anchors.left: parent.left; |
||||
|
anchors.margins: 2; |
||||
|
color: statesComboBox.colorItem; |
||||
|
id:chosenItemText |
||||
|
text:statesComboBox.items.get(0).title; |
||||
|
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: 0 |
||||
|
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 = modelData |
||||
|
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 } |
||||
|
} |
||||
|
|
||||
|
transitions: Transition { |
||||
|
NumberAnimation { target: dropDownList; properties: "height"; easing.type: Easing.OutExpo; duration: 1000 } |
||||
|
} |
||||
|
} |
After Width: | Height: | Size: 406 B |
Loading…
Reference in new issue