From cde1151099d6138aec23ac1c880d6ed13d1aba33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Alvarez?= Date: Thu, 10 Feb 2011 14:41:47 -0300 Subject: [PATCH] Merged scratch/mart/plasma-components into subtree plasma/declarativeimports. --- .../plasmacomponents/BusyWidget.qml | 65 +++++++++++ .../plasmacomponents/FlashingLabel.qml | 76 +++++++++++++ declarativeimports/plasmacomponents/Frame.qml | 47 ++++++++ .../plasmacomponents/IconWidget.qml | 97 ++++++++++++++++ .../plasmacomponents/PushButton.qml | 95 ++++++++++++++++ .../plasmacomponents/ScrollBar.qml | 107 ++++++++++++++++++ .../plasmacomponents/ToolButton.qml | 79 +++++++++++++ declarativeimports/plasmacomponents/qmldir | 7 ++ .../qtextracomponents/CMakeLists.txt | 26 +++++ .../qtextracomponents/qiconitem.cpp | 82 ++++++++++++++ .../qtextracomponents/qiconitem.h | 49 ++++++++ .../qtextracomponents/qimageitem.cpp | 94 +++++++++++++++ .../qtextracomponents/qimageitem.h | 58 ++++++++++ declarativeimports/qtextracomponents/qmldir | 3 + .../qtextracomponents/qpixmapitem.cpp | 94 +++++++++++++++ .../qtextracomponents/qpixmapitem.h | 58 ++++++++++ .../qtextracomponentsplugin.cpp | 41 +++++++ .../qtextracomponentsplugin.h | 38 +++++++ declarativeimports/test/CMakeLists.txt | 29 +++++ declarativeimports/test/gallery.qml | 79 +++++++++++++ declarativeimports/test/test.cpp | 55 +++++++++ declarativeimports/test/testobject_p.h | 49 ++++++++ 22 files changed, 1328 insertions(+) create mode 100644 declarativeimports/plasmacomponents/BusyWidget.qml create mode 100644 declarativeimports/plasmacomponents/FlashingLabel.qml create mode 100644 declarativeimports/plasmacomponents/Frame.qml create mode 100644 declarativeimports/plasmacomponents/IconWidget.qml create mode 100644 declarativeimports/plasmacomponents/PushButton.qml create mode 100644 declarativeimports/plasmacomponents/ScrollBar.qml create mode 100644 declarativeimports/plasmacomponents/ToolButton.qml create mode 100644 declarativeimports/plasmacomponents/qmldir create mode 100644 declarativeimports/qtextracomponents/CMakeLists.txt create mode 100644 declarativeimports/qtextracomponents/qiconitem.cpp create mode 100644 declarativeimports/qtextracomponents/qiconitem.h create mode 100644 declarativeimports/qtextracomponents/qimageitem.cpp create mode 100644 declarativeimports/qtextracomponents/qimageitem.h create mode 100644 declarativeimports/qtextracomponents/qmldir create mode 100644 declarativeimports/qtextracomponents/qpixmapitem.cpp create mode 100644 declarativeimports/qtextracomponents/qpixmapitem.h create mode 100644 declarativeimports/qtextracomponents/qtextracomponentsplugin.cpp create mode 100644 declarativeimports/qtextracomponents/qtextracomponentsplugin.h create mode 100644 declarativeimports/test/CMakeLists.txt create mode 100644 declarativeimports/test/gallery.qml create mode 100644 declarativeimports/test/test.cpp create mode 100644 declarativeimports/test/testobject_p.h diff --git a/declarativeimports/plasmacomponents/BusyWidget.qml b/declarativeimports/plasmacomponents/BusyWidget.qml new file mode 100644 index 000000000..3e076dba9 --- /dev/null +++ b/declarativeimports/plasmacomponents/BusyWidget.qml @@ -0,0 +1,65 @@ +/* +* Copyright (C) 2010 by Artur Duque de Souza +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU Library General Public License as +* published by the Free Software Foundation; either version 2, or +* (at your option) any later version. +* +* This program 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 Library General Public +* License along with this program; if not, write to the +* Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import Qt 4.7 +import org.kde.plasma.core 0.1 as PlasmaCore + +Item { + id: root + width: 100; height: 100 + + property bool running: true + property string label: "" + + PlasmaCore.Theme { + id: theme + } + + PlasmaCore.SvgItem { + id: widget + width: root.width + height: root.height + anchors.horizontalCenter: root.horizontalCenter + smooth: true + svg: PlasmaCore.Svg { imagePath: ("widgets/busywidget") } + + RotationAnimation on rotation { + from: 0 + to: 360 + target: widget + duration: 1500 + running: root.running + loops: Animation.Infinite + } + + // if you need to do anything while repainting + // do it inside this slot + function update() { + } + } + + Text { + id: label + text: root.label + color: theme.textColor + anchors.verticalCenter: root.verticalCenter + anchors.horizontalCenter: root.horizontalCenter + } + +} diff --git a/declarativeimports/plasmacomponents/FlashingLabel.qml b/declarativeimports/plasmacomponents/FlashingLabel.qml new file mode 100644 index 000000000..47e7f4446 --- /dev/null +++ b/declarativeimports/plasmacomponents/FlashingLabel.qml @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2010 by Anselmo Lacerda Silveira de Melo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import Qt 4.7 +import org.kde.plasma.core 0.1 as PlasmaCore + +Item { + id: root + width: 200 + height: 100 + + //API + property bool autohide: false + //### get font from theme when available + //### deal with QFont stuff in a proper way + property string font: "Arial" + property string color: theme.textColor + property int duration: 3000 + + /*### actually the FlashingLabel in C++ doesn't have + this as part of its API, either text or pixmap is + set only when flash is called.*/ + property string text: "" + + //### + PlasmaCore.Theme { + id: theme + } + + Text { + id: label + text: root.text + color: root.color + font.family: root.font + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + anchors.verticalCenter: root.verticalCenter + anchors.horizontalCenter: root.horizontalCenter + } + + PropertyAnimation { + id: fade + target: label; + property: "opacity"; + duration: root.duration; + to: 0 + } + + function flash(text, duration, alignment) { + if (text) + root.text = text + if (duration) + root.duration = duration + if (alignment) + label.horizontalAlignment = alignment + fade.start() + } + + //###TODO: flash pixmap +} diff --git a/declarativeimports/plasmacomponents/Frame.qml b/declarativeimports/plasmacomponents/Frame.qml new file mode 100644 index 000000000..c33558115 --- /dev/null +++ b/declarativeimports/plasmacomponents/Frame.qml @@ -0,0 +1,47 @@ +/* + * Copyright 2010 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +import Qt 4.7 +import org.kde.plasma.core 0.1 as PlasmaCore + +PlasmaCore.FrameSvgItem { + id : background + imagePath: "widgets/frame" + prefix: "plain" + + width: childrenRect.width + height: childrenRect.height + + property alias padding: paddingRectangle; + signal clicked; + + Item { + id: paddingRectangle + anchors.fill: parent + anchors.leftMargin: background.margins.left + anchors.topMargin: background.margins.top + anchors.rightMargin: background.margins.right + anchors.bottomMargin: background.margins.bottom + } + + MouseArea { + id: itemMouse + anchors.fill: background + onClicked: background.clicked() + } +} diff --git a/declarativeimports/plasmacomponents/IconWidget.qml b/declarativeimports/plasmacomponents/IconWidget.qml new file mode 100644 index 000000000..ca26ad1de --- /dev/null +++ b/declarativeimports/plasmacomponents/IconWidget.qml @@ -0,0 +1,97 @@ +/* +* Copyright (C) 2010 by Artur Duque de Souza +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU Library General Public License as +* published by the Free Software Foundation; either version 2, or +* (at your option) any later version. +* +* This program 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 Library General Public +* License along with this program; if not, write to the +* Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import Qt 4.7 +import org.kde.plasma.core 0.1 as PlasmaCore + +Item { + id: root + width: 100; height: 100 + + property string text: "" + property string infoText: "" + + property string svg: "" + property string icon: "" + + property bool drawBackground: true + property int numDisplayLines: 1 + //property QColor textBackgroundColor: "" + + signal pressed(bool down) + signal clicked() + signal doubleClicked() + signal activated() + signal changed() + + PlasmaCore.Theme { + id: theme + } + + PlasmaCore.FrameSvgItem { + id: background + visible: root.drawBackground + anchors.fill: root + + imagePath: "widgets/viewitem" + prefix: mainMouseArea.pressed == true ? "selected" : "hover" + } + + + PlasmaCore.SvgItem { + id: svg + visible: root.svg != "" + width: root.width - label.height + height: root.height - label.height + anchors.horizontalCenter: root.horizontalCenter + svg: PlasmaCore.Svg { imagePath: root.svg } + + // if you need to do anything while repainting + // do it inside this slot + function update() { + } + } + + Image { + id: icon + visible: root.icon != "" + width: root.width - label.height + height: root.height - label.height + } + + Text { + id: label + text: root.text + color: theme.textColor + anchors.top: icon.bottom + anchors.horizontalCenter: root.horizontalCenter + } + + MouseArea { + id: mainMouseArea + hoverEnabled: true + anchors.fill: parent + + onEntered: { + } + + onExited: { + } + } +} diff --git a/declarativeimports/plasmacomponents/PushButton.qml b/declarativeimports/plasmacomponents/PushButton.qml new file mode 100644 index 000000000..2452faf4a --- /dev/null +++ b/declarativeimports/plasmacomponents/PushButton.qml @@ -0,0 +1,95 @@ +/* +* Copyright (C) 2010 by Marco Martin +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU Library General Public License as +* published by the Free Software Foundation; either version 2, or +* (at your option) any later version. +* +* This program 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 Library General Public +* License along with this program; if not, write to the +* Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import Qt 4.7 +import org.kde.plasma.core 0.1 as PlasmaCore + +Item { + width: 50 + height:20 + + property string text + signal clicked + + id: button + PlasmaCore.FrameSvgItem { + id: hover + anchors.fill: parent + opacity: 0 + anchors.leftMargin: -margins.left + anchors.topMargin: -margins.top + anchors.rightMargin: -margins.right + anchors.bottomMargin: -margins.bottom + imagePath: "widgets/button" + prefix: "hover" + Behavior on opacity { + PropertyAnimation { duration: 250 } + } + } + PlasmaCore.FrameSvgItem { + id: shadow + anchors.fill: parent + anchors.leftMargin: -margins.left + anchors.topMargin: -margins.top + anchors.rightMargin: -margins.right + anchors.bottomMargin: -margins.bottom + imagePath: "widgets/button" + prefix: "shadow" + Behavior on opacity { + PropertyAnimation { duration: 250 } + } + } + + PlasmaCore.FrameSvgItem { + id: surface + anchors.fill: parent + imagePath: "widgets/button" + prefix: "normal" + } + + Text { + text: button.text + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + + onPressed: { + surface.prefix = "pressed" + } + onReleased: { + surface.prefix = "normal" + button.clicked() + } + onEntered: { + shadow.opacity = 0 + hover.opacity = 1 + } + onExited: { + shadow.opacity = 1 + hover.opacity = 0 + } + } + +} + diff --git a/declarativeimports/plasmacomponents/ScrollBar.qml b/declarativeimports/plasmacomponents/ScrollBar.qml new file mode 100644 index 000000000..16084d8b4 --- /dev/null +++ b/declarativeimports/plasmacomponents/ScrollBar.qml @@ -0,0 +1,107 @@ +/* +* Copyright (C) 2010 by Marco Martin +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU Library General Public License as +* published by the Free Software Foundation; either version 2, or +* (at your option) any later version. +* +* This program 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 Library General Public +* License along with this program; if not, write to the +* Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import Qt 4.7 +import org.kde.plasma.core 0.1 as PlasmaCore + + +PlasmaCore.FrameSvgItem { + id: scrollBar + width: orientation==Qt.Horizontal?200:22 + height: orientation==Qt.Horizontal?22:200 + + property int minimum: 0 + property int maximum: 100 + property int value: 0 + property string orientation: Qt.Horizontal + + onValueChanged: { + if (drag.state != "dragging") { + if (orientation == Qt.Horizontal) { + drag.x = (value/(maximum-minimum))*(scrollBar.width - drag.width) + } else { + drag.y = (value/(maximum-minimum))*(scrollBar.height - drag.height) + } + } + } + + imagePath: "widgets/scrollbar" + prefix: orientation==Qt.Horizontal?"background-horizontal":"background-vertical" + + PlasmaCore.FrameSvgItem { + id: drag + anchors.top: orientation==Qt.Horizontal?parent.top:null + anchors.bottom: orientation==Qt.Horizontal?parent.bottom:null + anchors.left: orientation==Qt.Horizontal?null:parent.left + anchors.right: orientation==Qt.Horizontal?null:parent.right + state: "normal" + width: (orientation == Qt.Horizontal)?Math.max(12, (parent.width*1/(scrollBar.maximum-scrollBar.minimum))):0 + height: (orientation != Qt.Horizontal)?Math.max(12, (parent.height*1/(scrollBar.maximum-scrollBar.minimum))):0 + x: 0 + y: 0 + onXChanged: { + if (orientation == Qt.Horizontal && state == "dragging") { + value = (maximum - minimum)*(x/(scrollBar.width-width)) + } + } + onYChanged: { + if (orientation != Qt.Horizontal && state == "dragging") { + value = (maximum - minimum)*(x/(scrollBar.height-height)) + } + } + + Behavior on x { + NumberAnimation { + duration: 200 + } + } + Behavior on y { + NumberAnimation { + duration: 200 + } + } + + imagePath: "widgets/scrollbar" + prefix: "slider" + MouseArea { + anchors.fill: parent + hoverEnabled: true + + drag.target: parent; + drag.axis: orientation == Qt.Horizontal?"XAxis":"YAxis" + drag.minimumX: 0; + drag.maximumX: scrollBar.width-drag.width; + drag.minimumY: 0; + drag.maximumY: scrollBar.height-drag.height; + + onEntered: drag.prefix = "mouseover-slider" + onExited: drag.prefix = "slider" + onPressed: { + drag.prefix = "sunken-slider" + drag.state = "dragging" + } + onReleased: { + containsMouse?drag.prefix = "mouseover-slider":drag.prefix = "slider" + drag.state = "normal" + } + } + } +} + + diff --git a/declarativeimports/plasmacomponents/ToolButton.qml b/declarativeimports/plasmacomponents/ToolButton.qml new file mode 100644 index 000000000..86e51ec8c --- /dev/null +++ b/declarativeimports/plasmacomponents/ToolButton.qml @@ -0,0 +1,79 @@ +/* +* Copyright (C) 2010 by Marco Martin +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU Library General Public License as +* published by the Free Software Foundation; either version 2, or +* (at your option) any later version. +* +* This program 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 Library General Public +* License along with this program; if not, write to the +* Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import Qt 4.7 +import org.kde.plasma.core 0.1 as PlasmaCore + +Item { + width: 50 + height:20 + + property string text + property bool down: false + signal clicked + + id: button + + PlasmaCore.FrameSvgItem { + id: surface + anchors.fill: parent + imagePath: "widgets/button" + prefix: down?"pressed":"normal" + opacity: down?1:0 + Behavior on opacity { + PropertyAnimation { duration: 250 } + } + } + + Text { + text: button.text + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + + onPressed: { + if (!down) { + surface.prefix = "pressed" + } + } + onReleased: { + if (!down) { + surface.prefix = "normal" + } + button.clicked() + } + onEntered: { + if (!down) { + surface.opacity = 1 + } + } + onExited: { + if (!down) { + surface.opacity = 0 + } + } + } + +} + diff --git a/declarativeimports/plasmacomponents/qmldir b/declarativeimports/plasmacomponents/qmldir new file mode 100644 index 000000000..f2d175092 --- /dev/null +++ b/declarativeimports/plasmacomponents/qmldir @@ -0,0 +1,7 @@ +BusyWidget 0.1 BusyWidget.qml +FlashingLabel 0.1 FlashingLabel.qml +Frame 0.1 Frame.qml +IconWidget 0.1 IconWidget.qml +PushButton 0.1 PushButton.qml +ScrollBar 0.1 ScrollBar.qml +ToolButton 0.1 ToolButton.qml diff --git a/declarativeimports/qtextracomponents/CMakeLists.txt b/declarativeimports/qtextracomponents/CMakeLists.txt new file mode 100644 index 000000000..3264ae8e2 --- /dev/null +++ b/declarativeimports/qtextracomponents/CMakeLists.txt @@ -0,0 +1,26 @@ +project(qtextracomponents) + +include(KDE4Defaults) + +set(qtextracomponents_SRCS + qtextracomponentsplugin.cpp + qpixmapitem.cpp + qimageitem.cpp + qiconitem.cpp + ) + +INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${KDE4_INCLUDES} +) + +qt4_automoc(${qtextracomponents_SRCS}) + + +add_library(qtextracomponentsplugin SHARED ${qtextracomponents_SRCS}) +target_link_libraries(qtextracomponentsplugin ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY}) + +install(TARGETS qtextracomponentsplugin DESTINATION ${IMPORTS_INSTALL_DIR}/org/kde/qtextracomponents) + +install(FILES qmldir DESTINATION ${IMPORTS_INSTALL_DIR}/org/kde/qtextracomponents) diff --git a/declarativeimports/qtextracomponents/qiconitem.cpp b/declarativeimports/qtextracomponents/qiconitem.cpp new file mode 100644 index 000000000..e54c49b33 --- /dev/null +++ b/declarativeimports/qtextracomponents/qiconitem.cpp @@ -0,0 +1,82 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qiconitem.h" + +#include + + +QIconItem::QIconItem(QDeclarativeItem *parent) + : QDeclarativeItem(parent), + m_smooth(false) +{ + setFlag(QGraphicsItem::ItemHasNoContents, false); +} + + +QIconItem::~QIconItem() +{ +} + +void QIconItem::setIcon(const QIcon &icon) +{ + m_icon = icon; + update(); +} + +QIcon QIconItem::icon() const +{ + return m_icon; +} + +void QIconItem::setSmooth(const bool smooth) +{ + if (smooth == m_smooth) { + return; + } + m_smooth = smooth; + update(); +} + +bool QIconItem::smooth() const +{ + return m_smooth; +} + +void QIconItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + Q_UNUSED(option); + Q_UNUSED(widget); + + if (m_icon.isNull()) { + return; + } + //do without painter save, faster and the support can be compiled out + const bool wasAntiAlias = painter->testRenderHint(QPainter::Antialiasing); + const bool wasSmoothTransform = painter->testRenderHint(QPainter::SmoothPixmapTransform); + painter->setRenderHint(QPainter::Antialiasing, m_smooth); + painter->setRenderHint(QPainter::SmoothPixmapTransform, m_smooth); + + m_icon.paint(painter, boundingRect().toRect()); + painter->setRenderHint(QPainter::Antialiasing, wasAntiAlias); + painter->setRenderHint(QPainter::SmoothPixmapTransform, wasSmoothTransform); +} + + +#include "qiconitem.moc" diff --git a/declarativeimports/qtextracomponents/qiconitem.h b/declarativeimports/qtextracomponents/qiconitem.h new file mode 100644 index 000000000..9972a98fe --- /dev/null +++ b/declarativeimports/qtextracomponents/qiconitem.h @@ -0,0 +1,49 @@ +/*************************************************************************** + * Copyright 2011 Marco Martin * + * * + * This program 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 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * + ***************************************************************************/ +#ifndef QICONITEM_H +#define QICONITEM_H + +#include +#include + +class QIconItem : public QDeclarativeItem +{ + Q_OBJECT + + Q_PROPERTY(QIcon icon READ icon WRITE setIcon) + Q_PROPERTY(bool smooth READ smooth WRITE setSmooth) + +public: + QIconItem(QDeclarativeItem *parent=0); + ~QIconItem(); + + void setIcon(const QIcon &icon); + QIcon icon() const; + + void setSmooth(const bool smooth); + bool smooth() const; + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +private: + QIcon m_icon; + bool m_smooth; +}; + +#endif diff --git a/declarativeimports/qtextracomponents/qimageitem.cpp b/declarativeimports/qtextracomponents/qimageitem.cpp new file mode 100644 index 000000000..086449d19 --- /dev/null +++ b/declarativeimports/qtextracomponents/qimageitem.cpp @@ -0,0 +1,94 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qimageitem.h" + +#include + + +QImageItem::QImageItem(QDeclarativeItem *parent) + : QDeclarativeItem(parent), + m_smooth(false) +{ + setFlag(QGraphicsItem::ItemHasNoContents, false); +} + + +QImageItem::~QImageItem() +{ +} + +void QImageItem::setImage(const QImage &image) +{ + m_image = image; + update(); + emit nativeWidthChanged(); + emit nativeHeightChanged(); +} + +QImage QImageItem::image() const +{ + return m_image; +} + +void QImageItem::setSmooth(const bool smooth) +{ + if (smooth == m_smooth) { + return; + } + m_smooth = smooth; + update(); +} + +bool QImageItem::smooth() const +{ + return m_smooth; +} + +int QImageItem::nativeWidth() const +{ + return m_image.size().width(); +} + +int QImageItem::nativeHeight() const +{ + return m_image.size().height(); +} + +void QImageItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + Q_UNUSED(option); + Q_UNUSED(widget); + + if (m_image.isNull()) { + return; + } + //do without painter save, faster and the support can be compiled out + const bool wasAntiAlias = painter->testRenderHint(QPainter::Antialiasing); + const bool wasSmoothTransform = painter->testRenderHint(QPainter::SmoothPixmapTransform); + painter->setRenderHint(QPainter::Antialiasing, m_smooth); + painter->setRenderHint(QPainter::SmoothPixmapTransform, m_smooth); + + painter->drawImage(boundingRect(), m_image, m_image.rect()); + painter->setRenderHint(QPainter::Antialiasing, wasAntiAlias); + painter->setRenderHint(QPainter::SmoothPixmapTransform, wasSmoothTransform); +} + + +#include "qimageitem.moc" diff --git a/declarativeimports/qtextracomponents/qimageitem.h b/declarativeimports/qtextracomponents/qimageitem.h new file mode 100644 index 000000000..a4365b5dc --- /dev/null +++ b/declarativeimports/qtextracomponents/qimageitem.h @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright 2011 Marco Martin * + * * + * This program 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 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * + ***************************************************************************/ +#ifndef QIMAGEITEM_H +#define QIMAGEITEM_H + +#include +#include + +class QImageItem : public QDeclarativeItem +{ + Q_OBJECT + + Q_PROPERTY(QImage image READ image WRITE setImage) + Q_PROPERTY(bool smooth READ smooth WRITE setSmooth) + Q_PROPERTY(int nativeWidth READ nativeWidth NOTIFY nativeWidthChanged) + Q_PROPERTY(int nativeHeight READ nativeHeight NOTIFY nativeHeightChanged) + +public: + QImageItem(QDeclarativeItem *parent=0); + ~QImageItem(); + + void setImage(const QImage &image); + QImage image() const; + + void setSmooth(const bool smooth); + bool smooth() const; + + int nativeWidth() const; + int nativeHeight() const; + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +Q_SIGNALS: + void nativeWidthChanged(); + void nativeHeightChanged(); + +private: + QImage m_image; + bool m_smooth; +}; + +#endif diff --git a/declarativeimports/qtextracomponents/qmldir b/declarativeimports/qtextracomponents/qmldir new file mode 100644 index 000000000..b2452e3fc --- /dev/null +++ b/declarativeimports/qtextracomponents/qmldir @@ -0,0 +1,3 @@ +plugin qtextracomponentsplugin + + diff --git a/declarativeimports/qtextracomponents/qpixmapitem.cpp b/declarativeimports/qtextracomponents/qpixmapitem.cpp new file mode 100644 index 000000000..3c09efec1 --- /dev/null +++ b/declarativeimports/qtextracomponents/qpixmapitem.cpp @@ -0,0 +1,94 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qpixmapitem.h" + +#include + + +QPixmapItem::QPixmapItem(QDeclarativeItem *parent) + : QDeclarativeItem(parent), + m_smooth(false) +{ + setFlag(QGraphicsItem::ItemHasNoContents, false); +} + + +QPixmapItem::~QPixmapItem() +{ +} + +void QPixmapItem::setPixmap(const QPixmap &pixmap) +{ + m_pixmap = pixmap; + update(); + emit nativeWidthChanged(); + emit nativeHeightChanged(); +} + +QPixmap QPixmapItem::pixmap() const +{ + return m_pixmap; +} + +void QPixmapItem::setSmooth(const bool smooth) +{ + if (smooth == m_smooth) { + return; + } + m_smooth = smooth; + update(); +} + +bool QPixmapItem::smooth() const +{ + return m_smooth; +} + +int QPixmapItem::nativeWidth() const +{ + return m_pixmap.size().width(); +} + +int QPixmapItem::nativeHeight() const +{ + return m_pixmap.size().height(); +} + +void QPixmapItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + Q_UNUSED(option); + Q_UNUSED(widget); + + if (m_pixmap.isNull()) { + return; + } + //do without painter save, faster and the support can be compiled out + const bool wasAntiAlias = painter->testRenderHint(QPainter::Antialiasing); + const bool wasSmoothTransform = painter->testRenderHint(QPainter::SmoothPixmapTransform); + painter->setRenderHint(QPainter::Antialiasing, m_smooth); + painter->setRenderHint(QPainter::SmoothPixmapTransform, m_smooth); + + painter->drawPixmap(boundingRect(), m_pixmap, m_pixmap.rect()); + painter->setRenderHint(QPainter::Antialiasing, wasAntiAlias); + painter->setRenderHint(QPainter::SmoothPixmapTransform, wasSmoothTransform); +} + + +#include "qpixmapitem.moc" diff --git a/declarativeimports/qtextracomponents/qpixmapitem.h b/declarativeimports/qtextracomponents/qpixmapitem.h new file mode 100644 index 000000000..af2cc9ef0 --- /dev/null +++ b/declarativeimports/qtextracomponents/qpixmapitem.h @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright 2011 Marco Martin * + * * + * This program 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 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * + ***************************************************************************/ +#ifndef QPIXMAPITEM_H +#define QPIXMAPITEM_H + +#include +#include + +class QPixmapItem : public QDeclarativeItem +{ + Q_OBJECT + + Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap) + Q_PROPERTY(bool smooth READ smooth WRITE setSmooth) + Q_PROPERTY(int nativeWidth READ nativeWidth NOTIFY nativeWidthChanged) + Q_PROPERTY(int nativeHeight READ nativeHeight NOTIFY nativeHeightChanged) + +public: + QPixmapItem(QDeclarativeItem *parent=0); + ~QPixmapItem(); + + void setPixmap(const QPixmap &pixmap); + QPixmap pixmap() const; + + void setSmooth(const bool smooth); + bool smooth() const; + + int nativeWidth() const; + int nativeHeight() const; + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +Q_SIGNALS: + void nativeWidthChanged(); + void nativeHeightChanged(); + +private: + QPixmap m_pixmap; + bool m_smooth; +}; + +#endif diff --git a/declarativeimports/qtextracomponents/qtextracomponentsplugin.cpp b/declarativeimports/qtextracomponents/qtextracomponentsplugin.cpp new file mode 100644 index 000000000..7d6b61f82 --- /dev/null +++ b/declarativeimports/qtextracomponents/qtextracomponentsplugin.cpp @@ -0,0 +1,41 @@ +/* + * Copyright 2009 by Alan Alpert + * Copyright 2010 by Ménard Alexis + * Copyright 2010 by Marco Martin + + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qtextracomponentsplugin.h" + +#include + +#include "qpixmapitem.h" +#include "qimageitem.h" +#include "qiconitem.h" + +void QtExtraComponentsPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(uri == QLatin1String("org.kde.qtextracomponents")); + + qmlRegisterType(uri, 0, 1, "QPixmapItem"); + qmlRegisterType(uri, 0, 1, "QImageItem"); + qmlRegisterType(uri, 0, 1, "QIconItem"); +} + + +#include "qtextracomponentsplugin.moc" + diff --git a/declarativeimports/qtextracomponents/qtextracomponentsplugin.h b/declarativeimports/qtextracomponents/qtextracomponentsplugin.h new file mode 100644 index 000000000..8b1353ce7 --- /dev/null +++ b/declarativeimports/qtextracomponents/qtextracomponentsplugin.h @@ -0,0 +1,38 @@ +/* + * Copyright 2009 by Alan Alpert + * Copyright 2010 by Ménard Alexis + * Copyright 2011 by Marco Martin + + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef QTEXTRACOMPONENTSPLUGIN_H +#define QTEXTRACOMPONENTSPLUGIN_H + +#include + + +class QtExtraComponentsPlugin : public QDeclarativeExtensionPlugin +{ + Q_OBJECT + +public: + void registerTypes(const char *uri); +}; + +Q_EXPORT_PLUGIN2(qtextracomponentsplugin, QtExtraComponentsPlugin); + +#endif diff --git a/declarativeimports/test/CMakeLists.txt b/declarativeimports/test/CMakeLists.txt new file mode 100644 index 000000000..7925e2d59 --- /dev/null +++ b/declarativeimports/test/CMakeLists.txt @@ -0,0 +1,29 @@ +project(components_test) + +find_package(KDE4 REQUIRED) + +include(KDE4Defaults) + +add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) + +include_directories( + ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${KDE4_INCLUDES} + ) + + +set(components_test_TEST_SRCS + test.cpp) + +kde4_add_executable(components_test ${components_test_TEST_SRCS}) + +target_link_libraries(components_test kdeclarative ${KDE4_KDECORE_LIBS} ${QT_QTDECLARATIVE_LIBRARY}) + +## install + + +install(TARGETS components_test EXPORT kdelibsLibraryTargets ${INSTALL_TARGETS_DEFAULT_ARGS}) + + +install(FILES "gallery.qml" DESTINATION ${CMAKE_BINARY_DIR}/widgets/components) \ No newline at end of file diff --git a/declarativeimports/test/gallery.qml b/declarativeimports/test/gallery.qml new file mode 100644 index 000000000..19b524b53 --- /dev/null +++ b/declarativeimports/test/gallery.qml @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2010 by Anselmo Lacerda Silveira de Melo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import Qt 4.7 +import org.kde.plasma.components 0.1 as PlasmaComponents +import org.kde.plasma.core 0.1 as PlasmaCore +import org.kde.qtextracomponents 0.1 as QtExtraComponents + +Rectangle { + id: test + width: 400 + height: 500 + color: "tomato" + + Column { + x: 10 + anchors.fill: parent + spacing: 5 + + PlasmaComponents.FlashingLabel { + id: label + font: "Times" + } + + Row { + id: busyRow + + Repeater { + model: 8 + PlasmaComponents.BusyWidget { + width: 50 + height: 50 + } + } + } + + PlasmaComponents.PushButton { + text: "Ok" + onClicked: {print("Clicked!"); scrollBar.value=35} + } + PlasmaComponents.ScrollBar { + id: scrollBar + } + PlasmaComponents.ScrollBar { + id: scrollBarV + orientation: Qt.Vertical + } + QtExtraComponents.QPixmapItem { + width:200 + height:100 + id: pixmapTest + } + } + + PlasmaCore.Svg { + id: svgTest + imagePath: "widgets/clock" + } + Component.onCompleted: { + label.flash("I am a FlashingLabel!!!"); + pixmapTest.pixmap = svgTest.pixmap(); + } +} diff --git a/declarativeimports/test/test.cpp b/declarativeimports/test/test.cpp new file mode 100644 index 000000000..792f4144a --- /dev/null +++ b/declarativeimports/test/test.cpp @@ -0,0 +1,55 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +#include + + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QDeclarativeView view; + QDeclarativeContext *context = view.rootContext(); + context->setContextProperty("backgroundColor", + QColor(Qt::yellow)); + + KDeclarative kdeclarative; + kdeclarative.setDeclarativeEngine(view.engine()); + kdeclarative.initialize(); + //binds things like kconfig and icons + kdeclarative.setupBindings(); + + //If all gone well, the QScriptEngine has been extracted + QScriptEngine *scriptEngine = kdeclarative.scriptEngine(); + Q_ASSERT(scriptEngine); + + QScriptValue global = scriptEngine->globalObject(); + + view.setSource(QUrl::fromLocalFile("gallery.qml")); + view.show(); + + return app.exec(); +} + +#include "testobject_p.moc" diff --git a/declarativeimports/test/testobject_p.h b/declarativeimports/test/testobject_p.h new file mode 100644 index 000000000..005e10584 --- /dev/null +++ b/declarativeimports/test/testobject_p.h @@ -0,0 +1,49 @@ +/* + * Copyright 2011 Marco Martin + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program 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 Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef TESTOBJECT_P_H +#define TESTOBJECT_P_H + +#include + +class TestObject : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString prop READ prop WRITE setProp NOTIFY propChanged) + +public: + void setProp(const QString &prop) + { + m_prop = prop; + emit propChanged(); + } + + QString prop() const + { + return m_prop; + } + +Q_SIGNALS: + void propChanged(); + +private: + QString m_prop; +}; + +#endif