Browse Source

Implement OutSideClick

cl-refactor
yann300 10 years ago
parent
commit
d182406015
  1. 38
      mix/InverseMouseArea.cpp
  2. 9
      mix/InverseMouseArea.h
  3. 42
      mix/qml/LogsPane.qml
  4. 38
      mix/qml/StatesComboBox.qml
  5. 11
      mix/qml/StatusPane.qml
  6. 3
      mix/qml/TransactionLog.qml

38
mix/InverseMouseArea.cpp

@ -30,30 +30,34 @@ using namespace dev::mix;
void InverseMouseArea::itemChange(ItemChange _c, const ItemChangeData& _v)
{
qDebug() << "itemCHange";
if (!this->m_active)
return;
Q_UNUSED(_v);
if (_c == ItemSceneChange)
{
if (_c == ItemSceneChange && window())
window()->installEventFilter(this);
//this->parentItem()->installEventFilter(this);
}
}
bool InverseMouseArea::eventFilter(QObject* _obj, QEvent* _ev)
{
qDebug() << _ev->type();
if (!this->m_active)
return false;
Q_UNUSED(_obj);
if (_ev->type() == QEvent::MouseButtonPress)
{
qDebug() << "mouse event";
if (!this->contains(static_cast<QMouseEvent*>(_ev)->pos()))
{
qDebug() << "click outside";
if (_ev->type() == QEvent::MouseButtonPress && !this->contains(static_cast<QMouseEvent*>(_ev)->pos()))
emit clickedOutside();
}
}
return false;
}
bool InverseMouseArea::contains(const QPoint& _point) const
{
if (!this->m_active)
return false;
QPointF global = this->parentItem()->mapToItem(0, QPointF(0, 0));
return QRectF(global.x(), global.y(), this->parentItem()->width(), this->parentItem()->height()).contains(_point);
}
void InverseMouseArea::setActive(bool _v)
{
m_active = _v;
if (m_active && window())
window()->installEventFilter(this);
}

9
mix/InverseMouseArea.h

@ -22,6 +22,7 @@
#pragma once
#include <QQuickWindow>
#include <QQuickItem>
namespace dev
@ -32,14 +33,20 @@ namespace mix
class InverseMouseArea: public QQuickItem
{
Q_OBJECT
Q_PROPERTY(bool active MEMBER m_active WRITE setActive)
public:
InverseMouseArea(QQuickItem* _parent = 0): QQuickItem(_parent) {}
~InverseMouseArea() { /*scene()->removeEventFilter(this);*/ }
~InverseMouseArea() { if (window()) { window()->removeEventFilter(this); } }
void setActive(bool _v);
protected:
void itemChange(ItemChange _c, const ItemChangeData& _v);
bool eventFilter(QObject* _obj, QEvent *_ev);
bool contains(const QPoint& _point) const;
private:
bool m_active;
signals:
void clickedOutside();

42
mix/qml/LogsPane.qml

@ -585,48 +585,6 @@ Rectangle
}
}
}
Rectangle
{
height: logStyle.generic.layout.headerButtonHeight
anchors.verticalCenter: parent.verticalCenter
color: "transparent"
width: 20
Button
{
id: hideButton
action: hideAction
anchors.fill: parent
anchors.verticalCenter: parent.verticalCenter
height: 25
style:
ButtonStyle {
background:
Rectangle {
height: logStyle.generic.layout.headerButtonHeight
implicitHeight: logStyle.generic.layout.headerButtonHeight
color: "transparent"
}
}
}
Image {
id: hideImage
source: "qrc:/qml/img/exit.png"
anchors.centerIn: parent
fillMode: Image.PreserveAspectFit
width: 20
height: 25
}
Action {
id: hideAction
tooltip: qsTr("Exit")
onTriggered: {
logsPane.parent.toggle();
}
}
}
}
}

38
mix/qml/StatesComboBox.qml

@ -24,13 +24,15 @@ import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.1
import QtGraphicalEffects 1.0
import org.ethereum.qml.InverseMouseArea 1.0
Rectangle {
id: statesComboBox
width: 200
height: 23
border.width: 2
border.color: "red"
Component.onCompleted: {
var top = dropDownList
while (top.parent) {
@ -62,6 +64,12 @@ Rectangle {
chosenItemText.text = statesComboBox.items.get(index).title
}
function hideDropDown()
{
if (statesComboBox.state === "dropDown")
statesComboBox.state = "";
}
signal comboClicked
property variant colorItem
@ -76,14 +84,13 @@ Rectangle {
{
id: boldFont
}
smooth: true
Rectangle {
id: chosenItem
width: parent.width
height: statesComboBox.height
color: statesComboBox.color
Text {
id: chosenItemText
anchors.left: parent.left
@ -97,7 +104,13 @@ Rectangle {
MouseArea {
anchors.fill: parent
onClicked: {
statesComboBox.state = statesComboBox.state === "dropDown" ? "" : "dropDown"
if (outsideClick.trigerred)
{
outsideClick.trigerred = false;
return;
}
if (statesCombo.state === "")
statesCombo.state = "dropDown";
}
}
}
@ -124,8 +137,21 @@ Rectangle {
anchors.topMargin: 23
color: statesComboBox.color
InverseMouseArea
{
property bool trigerred: false
id: outsideClick
anchors.fill: parent
active: false
onClickedOutside: {
trigerred = true;
statesCombo.hideDropDown()
}
}
ColumnLayout {
spacing: 2
TableView {
id: listView
height: 20
@ -256,5 +282,9 @@ Rectangle {
height: 20
implicitHeight: (statesComboBox.rowHeight * (statesComboBox.items.count))
}
PropertyChanges {
target: outsideClick
active: true
}
}
}

11
mix/qml/StatusPane.qml

@ -252,13 +252,9 @@ Rectangle {
{
id: outsideClick
anchors.fill: parent
}
Connections
{
target: outsideClick
active: false
onClickedOutside: {
toggle();
logsContainer.toggle();
}
}
@ -309,11 +305,14 @@ Rectangle {
State {
name: "opened";
PropertyChanges { target: logsContainer; height: 500; visible: true }
PropertyChanges { target: outsideClick; active: true }
},
State {
name: "closed";
PropertyChanges { target: logsContainer; height: 0; visible: false }
PropertyChanges { target: statusContainer; width: 600; height: 30 }
PropertyChanges { target: outsideClick; active: false }
}
]
transitions: Transition {

3
mix/qml/TransactionLog.qml

@ -4,6 +4,7 @@ import QtQuick.Controls.Styles 1.1
import QtQuick.Dialogs 1.1
import QtQuick.Layouts 1.1
import org.ethereum.qml.RecordLogEntry 1.0
import org.ethereum.qml.InverseMouseArea 1.0
Item {
property ListModel fullModel: ListModel{}
@ -60,7 +61,7 @@ Item {
target: projectModel.stateListModel
onStateRun: {
if (statesCombo.selectedIndex !== index)
statesCombo.setSelectedIndex( index );
statesCombo.setSelectedIndex(index)
}
}
}

Loading…
Cancel
Save