Skip to content

Commit

Permalink
Adding a custom easing curve editor to declarative tools
Browse files Browse the repository at this point in the history
Change-Id: Ic8ef77792d74ec99b23d85cd8888e0190acc3e10
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Reviewed-by: Alessandro Portale <alessandro.portale@nokia.com>
  • Loading branch information
ThomasHartmannQt authored and Qt by Nokia committed Mar 13, 2012
1 parent c0f032d commit a920803
Show file tree
Hide file tree
Showing 14 changed files with 1,947 additions and 1 deletion.
177 changes: 177 additions & 0 deletions tools/easingcurveeditor/Button.qml
@@ -0,0 +1,177 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of the QtQml module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

import QtQuick 2.0

Item {
id: button

signal clicked

Rectangle {
id: normalBackground
radius: 4
anchors.fill: parent
smooth: true
gradient: Gradient {
GradientStop {
position: 0
color: "#afafaf"
}

GradientStop {
position: 0.460
color: "#808080"
}

GradientStop {
position: 1
color: "#adadad"
}
}
border.color: "#000000"
}


Rectangle {
id: hoveredBackground
x: 2
y: -8
radius: 4
opacity: 0
gradient: Gradient {
GradientStop {
position: 0
color: "#cacaca"
}

GradientStop {
position: 0.460
color: "#a2a2a2"
}

GradientStop {
position: 1
color: "#c8c8c8"
}
}
smooth: true
anchors.fill: parent
border.color: "#000000"
}


Rectangle {
id: pressedBackground
x: -8
y: 2
radius: 4
opacity: 0
gradient: Gradient {
GradientStop {
position: 0
color: "#8b8b8b"
}

GradientStop {
position: 0.470
color: "#626161"
}

GradientStop {
position: 1
color: "#8f8e8e"
}
}
smooth: true
anchors.fill: parent
border.color: "#000000"
}
states: [
State {
name: "hovered"

PropertyChanges {
target: normalBackground
opacity: 0
}

PropertyChanges {
target: hoveredBackground
opacity: 1
}
},
State {
name: "pressed"

PropertyChanges {
target: normalBackground
opacity: 0
}

PropertyChanges {
target: pressedBackground
opacity: 1
}
}
]

Text {
color: "#e8e8e8"
text: qsTr("Play")
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.bold: true
font.pixelSize: 20
}

MouseArea {
hoverEnabled: true
anchors.fill: parent
onEntered: button.state = "hovered"
onExited: button.state = ""
onClicked: {
button.state = "pressed"
button.clicked();
}
}
}
25 changes: 25 additions & 0 deletions tools/easingcurveeditor/easingcurveeditor.pro
@@ -0,0 +1,25 @@
TEMPLATE = app
DEPENDPATH += .
INCLUDEPATH += .

QT += declarative quick widgets
CONFIG -= app_bundle

# Input
SOURCES += main.cpp \
splineeditor.cpp \
mainwindow.cpp \
segmentproperties.cpp

RESOURCES = $$PWD/resources.qrc

HEADERS += \
splineeditor.h \
mainwindow.h \
ui_properties.h \
ui_pane.h \
segmentproperties.h

FORMS += \
properties.ui \
pane.ui
55 changes: 55 additions & 0 deletions tools/easingcurveeditor/main.cpp
@@ -0,0 +1,55 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of the tools applications of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

#include <QApplication>
#include <mainwindow.h>


int main(int argc, char ** argv)
{
QApplication app(argc, argv);

MainWindow mainWindow;
mainWindow.show();
mainWindow.showQuickView();

return app.exec();
}
136 changes: 136 additions & 0 deletions tools/easingcurveeditor/mainwindow.cpp
@@ -0,0 +1,136 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of the tools applications of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

#include "mainwindow.h"
#include "splineeditor.h"
#include <QtQuick/QQuickView>
#include <QtQuick>
#include <QtQml/QQmlContext>
#include <QEasingCurve>
#include <QHBoxLayout>
#include <QVBoxLayout>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
SplineEditor *splineEditor = new SplineEditor(this);

QWidget *mainWidget = new QWidget(this);

setCentralWidget(mainWidget);

QHBoxLayout *hboxLayout = new QHBoxLayout(mainWidget);
QVBoxLayout *vboxLayout = new QVBoxLayout();

mainWidget->setLayout(hboxLayout);
hboxLayout->addLayout(vboxLayout);

QWidget *propertyWidget = new QWidget(this);
ui_properties.setupUi(propertyWidget);

ui_properties.spinBox->setMinimum(50);
ui_properties.spinBox->setMaximum(10000);
ui_properties.spinBox->setValue(500);

hboxLayout->addWidget(propertyWidget);

m_placeholder = new QWidget(this);

m_placeholder->setFixedSize(quickView.size());

vboxLayout->addWidget(splineEditor);
vboxLayout->addWidget(m_placeholder);

ui_properties.plainTextEdit->setPlainText(splineEditor->generateCode());
connect(splineEditor, SIGNAL(easingCurveCodeChanged(QString)), ui_properties.plainTextEdit, SLOT(setPlainText(QString)));

quickView.rootContext()->setContextProperty(QLatin1String("spinBox"), ui_properties.spinBox);

foreach (const QString &name, splineEditor->presetNames())
ui_properties.comboBox->addItem(name);

connect(ui_properties.comboBox, SIGNAL(currentIndexChanged(QString)), splineEditor, SLOT(setPreset(QString)));

splineEditor->setPreset(ui_properties.comboBox->currentText());

QVBoxLayout *groupBoxLayout = new QVBoxLayout(ui_properties.groupBox);
groupBoxLayout->setMargin(0);
ui_properties.groupBox->setLayout(groupBoxLayout);

groupBoxLayout->addWidget(splineEditor->pointListWidget());
m_splineEditor = splineEditor;
connect(ui_properties.plainTextEdit, SIGNAL(textChanged()), this, SLOT(textEditTextChanged()));
initQml();
}

void MainWindow::showQuickView()
{
const int margin = 16;
quickView.move(pos() + QPoint(0, frameGeometry().height() + margin));

quickView.raise();
quickView.show();
}

void MainWindow::textEditTextChanged()
{
m_splineEditor->setEasingCurve(ui_properties.plainTextEdit->toPlainText().trimmed());
}

void MainWindow::moveEvent(QMoveEvent *event)
{
QMainWindow::moveEvent(event);
showQuickView();
}

void MainWindow::resizeEvent(QResizeEvent *event)
{
QMainWindow::resizeEvent(event);
showQuickView();
}

void MainWindow::initQml()
{
quickView.setWindowFlags(Qt::FramelessWindowHint);
quickView.rootContext()->setContextProperty(QLatin1String("editor"), m_splineEditor);
quickView.setSource(QUrl("qrc:/preview.qml"));
quickView.show();
}

0 comments on commit a920803

Please sign in to comment.