diff --git a/declarativeimports/CMakeLists.txt b/declarativeimports/CMakeLists.txt index 5774a12b2..d5158488d 100644 --- a/declarativeimports/CMakeLists.txt +++ b/declarativeimports/CMakeLists.txt @@ -3,4 +3,5 @@ add_subdirectory(draganddrop) add_subdirectory(graphicslayouts) add_subdirectory(graphicswidgets) add_subdirectory(qtextracomponents) -add_subdirectory(plasmacomponents) \ No newline at end of file +add_subdirectory(plasmacomponents) +add_subdirectory(plasmaextracomponents) diff --git a/declarativeimports/plasmaextracomponents/CMakeLists.txt b/declarativeimports/plasmaextracomponents/CMakeLists.txt new file mode 100644 index 000000000..f0f46e25f --- /dev/null +++ b/declarativeimports/plasmaextracomponents/CMakeLists.txt @@ -0,0 +1,44 @@ +project(plasmaextracomponents) + +find_package(KActivities REQUIRED) + +#include(KDE4Defaults) + +set(plasmaextracomponents_SRCS + appbackgroundprovider.cpp + resourceinstance.cpp + plasmaextracomponentsplugin.cpp + ) + +INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${KDE4_INCLUDES} +) + +qt4_automoc(${plasmaextracomponents_SRCS}) + + +add_library(plasmaextracomponentsplugin SHARED ${plasmaextracomponents_SRCS}) +target_link_libraries(plasmaextracomponentsplugin ${QT_QTCORE_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY} ${QT_QTGUI_LIBRARY} ${KDE4_PLASMA_LIBS} ${KACTIVITIES_LIBRARY} ) + +#target_link_libraries(plasmaextracomponentsplugin ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTSCRIPT_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY} ${KDE4_KDECORE_LIBRARY} ${KDE4_PLASMA_LIBS} ${KACTIVITIES_LIBRARY}) + + +install(TARGETS plasmaextracomponentsplugin DESTINATION ${IMPORTS_INSTALL_DIR}/org/kde/plasma/extras) + +install(DIRECTORY qml/ DESTINATION ${IMPORTS_INSTALL_DIR}/org/kde/plasma/extras) + + +# The platform specific stuff, overwrites a copy of the desktop one +# it does install some files on top of the old ones, has to be done +# file by file since if some component from the generic set is more +# recent than the specifc ones, it wouldn't be overwritten + +install(TARGETS plasmaextracomponentsplugin DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/extras) + +install(FILES qml/App.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/extras) +install(FILES qml/Title.qml DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/extras) + +#install platform overrides +install(DIRECTORY platformcomponents/touch/ DESTINATION ${PLUGIN_INSTALL_DIR}/platformimports/touch/org/kde/plasma/extras) diff --git a/declarativeimports/plasmaextracomponents/TODO b/declarativeimports/plasmaextracomponents/TODO new file mode 100644 index 000000000..f937a1d49 --- /dev/null +++ b/declarativeimports/plasmaextracomponents/TODO @@ -0,0 +1,11 @@ +TODO: + +o imageprovider from mobilecomponents +o resourceinstance from mobilecomponents +o remove mobilecomponents' resourceinstance +o port appbackgrounds +o porting ResourceInstance +- subtitle for Title (take from active-settings) +- Heading { level: 1 } new Component +- App.qml + diff --git a/declarativeimports/plasmaextracomponents/appbackgroundprovider.cpp b/declarativeimports/plasmaextracomponents/appbackgroundprovider.cpp new file mode 100644 index 000000000..edf8e1d28 --- /dev/null +++ b/declarativeimports/plasmaextracomponents/appbackgroundprovider.cpp @@ -0,0 +1,41 @@ +/* + Copyright 2011 Marco Martin + + This library 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 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "appbackgroundprovider_p.h" + +#include +#include +#include + +#include + +#include + +AppBackgroundProvider::AppBackgroundProvider() + : QDeclarativeImageProvider(QDeclarativeImageProvider::Image) +{ +} + +QImage AppBackgroundProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize) +{ + QString search = QLatin1Literal("desktoptheme/") % Plasma::Theme::defaultTheme()->themeName() % QLatin1Literal("/appbackgrounds/") % id % ".png"; + search = KStandardDirs::locate("data", search); + return QImage(search); +} + diff --git a/declarativeimports/plasmaextracomponents/appbackgroundprovider_p.h b/declarativeimports/plasmaextracomponents/appbackgroundprovider_p.h new file mode 100644 index 000000000..fd50a5ae2 --- /dev/null +++ b/declarativeimports/plasmaextracomponents/appbackgroundprovider_p.h @@ -0,0 +1,34 @@ +/* + Copyright 2011 Marco Martin + + This library 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 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef APPBACKGROUND_PROVIDER_H +#define APPBACKGROUND_PROVIDER_H + +#include + + +class AppBackgroundProvider : public QDeclarativeImageProvider +{ + +public: + AppBackgroundProvider(); + virtual QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize); +}; + +#endif diff --git a/declarativeimports/plasmaextracomponents/plasmaextracomponentsplugin.cpp b/declarativeimports/plasmaextracomponents/plasmaextracomponentsplugin.cpp new file mode 100644 index 000000000..fe54051ce --- /dev/null +++ b/declarativeimports/plasmaextracomponents/plasmaextracomponentsplugin.cpp @@ -0,0 +1,57 @@ +/* + * Copyright 2012 by Sebastian Kügler + + * 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 "plasmaextracomponentsplugin.h" + +#include "appbackgroundprovider_p.h" +#include "resourceinstance.h" + +#include +#include + + +// #include +// #include + +void PlasmaExtraComponentsPlugin::initializeEngine(QDeclarativeEngine *engine, const char *uri) +{ + Q_ASSERT(uri == QLatin1String("org.kde.plasma.extras")); + engine->addImageProvider(QLatin1String("appbackgrounds"), new AppBackgroundProvider); +} + +void PlasmaExtraComponentsPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(uri == QLatin1String("org.kde.plasma.extras")); + /* + // Enable when adding touch-specific components + QString componentsPlatform = getenv("KDE_PLASMA_COMPONENTS_PLATFORM"); + if (componentsPlatform.isEmpty()) { + KConfigGroup cg(KSharedConfig::openConfig("kdeclarativerc"), "Components-platform"); + componentsPlatform = cg.readEntry("name", "desktop"); + } + */ + // Register additional types here... + qmlRegisterType(uri, 0, 1, "ResourceInstance"); + + +} + + +#include "plasmaextracomponentsplugin.moc" + diff --git a/declarativeimports/plasmaextracomponents/plasmaextracomponentsplugin.h b/declarativeimports/plasmaextracomponents/plasmaextracomponentsplugin.h new file mode 100644 index 000000000..8834ede0b --- /dev/null +++ b/declarativeimports/plasmaextracomponents/plasmaextracomponentsplugin.h @@ -0,0 +1,39 @@ +/* + * Copyright 2011 by Marco Martin + * Copyright 2012 by Sebastian Kügler + * + * 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 PLASMAEXTRACOMPONENTSPLUGIN_H +#define PLASMAEXTRACOMPONENTSPLUGIN_H + +#include + +class QDeclarativeEngine; + +class PlasmaExtraComponentsPlugin : public QDeclarativeExtensionPlugin +{ + Q_OBJECT + +public: + void initializeEngine(QDeclarativeEngine *engine, const char *uri); + void registerTypes(const char *uri); +}; + +Q_EXPORT_PLUGIN2(plasmaexracomponentsplugin, PlasmaExtraComponentsPlugin); + +#endif diff --git a/declarativeimports/plasmaextracomponents/qml/App.qml b/declarativeimports/plasmaextracomponents/qml/App.qml new file mode 100644 index 000000000..cce119ec0 --- /dev/null +++ b/declarativeimports/plasmaextracomponents/qml/App.qml @@ -0,0 +1,102 @@ +/* +* Copyright 2012 by Sebastian Kügler +* +* 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 Library 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. +*/ + +/**Documented API +Inherits: + Item + +Imports: + QtQuick 1.1 + org.kde.plasma.extras + +Description: + This is a container for Apps. Navigation and Content area layout can + vary depending on the available size. + +Properties: + Item navigation: Navigation or Context Area. + Item content: The "main view" + +Methods: + + +Signals: + +**/ + +import QtQuick 1.1 +import org.kde.plasma.core 0.1 as PlasmaCore +import org.kde.plasma.components 0.1 as PlasmaComponents +//import org.kde.plasma.extras 0.1 as PlasmaExtras + +Item { + id: app + property alias navigation: navigationItem.children + property alias content: contentItem.children + property int space: 12 + property int navigationWidth: 340 + property int contentWidth: app.width - navigationWidth + anchors.fill: parent + + PlasmaCore.Theme { id: theme } + + Image { + id: contentBackground + anchors { left: navigationBackground.right; right: parent.right; top: parent.top; bottom: parent.bottom; } + source: "image://appbackgrounds/standard" + fillMode: Image.Tile + asynchronous: true + width: childrenRect.width + Item { + id: contentItem + width: app.width - navigationWidth - space*2 + height: app.height + anchors { left: parent.left; leftMargin: space; rightMargin: space; top: parent.top; bottom: parent.bottom; right: parent.right; } + } + + } + Image { + id: navigationBackground + anchors { left: parent.left; top: parent.top; bottom: parent.bottom; } + source: "image://appbackgrounds/contextarea" + fillMode: Image.Tile + asynchronous: true + clip: true + width: navigationWidth + space + Item { + id: navigationItem + anchors.fill: parent + } + } + Image { + source: "image://appbackgrounds/shadow-right" + fillMode: Image.Tile + anchors { + left: navigationBackground.right + top: parent.top + bottom: parent.bottom + leftMargin: -1 + } + } + + onNavigationWidthChanged: { + navigationBackground.width = navigationWidth; + navigationItem.width = navigationWidth; + } +} diff --git a/declarativeimports/plasmaextracomponents/qml/Heading.qml b/declarativeimports/plasmaextracomponents/qml/Heading.qml new file mode 100644 index 000000000..ed165b350 --- /dev/null +++ b/declarativeimports/plasmaextracomponents/qml/Heading.qml @@ -0,0 +1,72 @@ +/* +* Copyright 2012 by Sebastian Kügler +* +* 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 Library 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. +*/ + +/**Documented API +Inherits: + Label + +Imports: + QtQuick 1.1 + org.kde.plasma.extras + +Description: + This is a title label which uses the plasma theme. + The characteristics of the text will be automatically set + according to the plasma theme. Use this components for titles + in your UI, for example page or section titles. + +Properties: + string text: + The most important property is "text", which applies to the text property of Label + For the other ones see Plasma Component's Label or QML primitive Text element + int level: + The level determines how big the section header is display, values between 1 (big) + and 5 (small) are accepted + +Methods: + See Plasma Component's Label and primitive QML Text element + +Signals: + See Plasma Component's Label and primitive QML Text element +**/ + +import QtQuick 1.1 +import org.kde.plasma.components 0.1 + +Label { + id: heading + property int level: 1 + property int step: 2 + + anchors.topMargin: 8 + font.pointSize: headerPointSize(level) + + function headerPointSize(l) { + var n = theme.defaultFont.pointSize; + var s; + if (l > 4) { + s = n + } else if (l < 2) { + s = n + (5*step) + } else { + s = n + ((5-level)*2) + } + return s; + } +} diff --git a/declarativeimports/plasmaextracomponents/qml/Title.qml b/declarativeimports/plasmaextracomponents/qml/Title.qml new file mode 100644 index 000000000..f74c70985 --- /dev/null +++ b/declarativeimports/plasmaextracomponents/qml/Title.qml @@ -0,0 +1,53 @@ +/* +* Copyright 2012 by Sebastian Kügler +* +* 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 Library 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. +*/ + +/**Documented API +Inherits: + Label + +Imports: + QtQuick 1.1 + org.kde.plasma.components + +Description: + This is a title label which uses the plasma theme. + The characteristics of the text will be automatically set + according to the plasma theme. Use this components for titles + in your UI, for example page or section titles. + +Properties: + string text: + The most important property is "text", which applies to the text property of Label + For the other ones see Plasma Component's Label or QML primitive Text element + +Methods: + See Plasma Component's Label and primitive QML Text element + +Signals: + See Plasma Component's Label and primitive QML Text element +**/ + +import QtQuick 1.1 +import org.kde.plasma.components 0.1 + +Label { + id: root + + font.pointSize: theme.defaultFont.pointSize*2 +} diff --git a/declarativeimports/plasmaextracomponents/qml/qmldir b/declarativeimports/plasmaextracomponents/qml/qmldir new file mode 100644 index 000000000..db159b0f7 --- /dev/null +++ b/declarativeimports/plasmaextracomponents/qml/qmldir @@ -0,0 +1,5 @@ +plugin plasmaextracomponentsplugin + +App 0.1 App.qml +Title 0.1 Title.qml +Heading 0.1 Heading.qml diff --git a/declarativeimports/plasmaextracomponents/resourceinstance.cpp b/declarativeimports/plasmaextracomponents/resourceinstance.cpp new file mode 100644 index 000000000..e7e4230aa --- /dev/null +++ b/declarativeimports/plasmaextracomponents/resourceinstance.cpp @@ -0,0 +1,171 @@ +/*************************************************************************** + * 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 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 Library 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 "resourceinstance.h" + +#include +#include +#include +#include + +#include +#include + + +ResourceInstance::ResourceInstance(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ + m_syncTimer = new QTimer(this); + m_syncTimer->setSingleShot(true); + connect(m_syncTimer, SIGNAL(timeout()), this, SLOT(syncWid())); +} + +ResourceInstance::~ResourceInstance() +{ + +} + +QGraphicsView *ResourceInstance::view() const +{ + // It's assumed that we won't be visible on more than one view here. + // Anything that actually needs view() should only really care about + // one of them anyway though. + if (!scene()) { + return 0; + } + + QGraphicsView *found = 0; + QGraphicsView *possibleFind = 0; + //kDebug() << "looking through" << scene()->views().count() << "views"; + foreach (QGraphicsView *view, scene()->views()) { + //kDebug() << " checking" << view << view->sceneRect() + // << "against" << sceneBoundingRect() << scenePos(); + if (view->sceneRect().intersects(sceneBoundingRect()) || + view->sceneRect().contains(scenePos())) { + //kDebug() << " found something!" << view->isActiveWindow(); + if (view->isActiveWindow()) { + found = view; + } else { + possibleFind = view; + } + } + } + + return found ? found : possibleFind; +} + +void ResourceInstance::syncWid() +{ + QGraphicsView *v = view(); + if (!v) { + return; + } + + WId wid = v->topLevelWidget()->effectiveWinId(); + if (!m_resourceInstance || m_resourceInstance->winId() != wid) { + delete m_resourceInstance; + + kDebug() << "Creating a new instance of the resource" << m_uri << "window id" << wid; + m_resourceInstance = new KActivities::ResourceInstance(wid, m_uri, m_mimetype, m_title); + } else { + + if (m_uri.scheme().startsWith("http") && !m_uri.hasQuery() && m_uri.path().endsWith('/')) { + const QString & oldPath = m_uri.path(); + m_uri.setPath(oldPath.left(oldPath.length() - 1)); + + kDebug() << "Old and new path" << oldPath << m_uri; + + } else { + m_resourceInstance->setUri(m_uri); + } + + kDebug() << "Setting" << m_uri << m_mimetype << "to window" << wid; + + m_resourceInstance->setMimetype(m_mimetype); + m_resourceInstance->setTitle(m_title); + } +} + +QUrl ResourceInstance::uri() const +{ + return m_uri; +} + +void ResourceInstance::setUri(const QUrl &uri) +{ + if (m_uri == uri) { + return; + } + + m_uri = uri; + m_syncTimer->start(100); +} + +QString ResourceInstance::mimetype() const +{ + return m_mimetype; +} + +void ResourceInstance::setMimetype(const QString &mimetype) +{ + if (m_mimetype == mimetype) { + return; + } + m_mimetype = mimetype; + m_syncTimer->start(100); +} + +QString ResourceInstance::title() const +{ + return m_title; +} + +void ResourceInstance::setTitle(const QString &title) +{ + if (m_title == title) { + return; + } + m_title = title; + m_syncTimer->start(100); +} + +void ResourceInstance::notifyModified() +{ + //ensure the resource instance exists + syncWid(); + m_resourceInstance->notifyModified(); +} + +void ResourceInstance::notifyFocusedIn() +{ + //ensure the resource instance exists + syncWid(); + m_resourceInstance->notifyFocusedIn(); +} + + +void ResourceInstance::notifyFocusedOut() +{ + //ensure the resource instance exists + syncWid(); + m_resourceInstance->notifyFocusedOut(); +} + +#include "resourceinstance.moc" + diff --git a/declarativeimports/plasmaextracomponents/resourceinstance.h b/declarativeimports/plasmaextracomponents/resourceinstance.h new file mode 100644 index 000000000..9f69efb5f --- /dev/null +++ b/declarativeimports/plasmaextracomponents/resourceinstance.h @@ -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 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 Library 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 RESOURCEINSTANCE_H +#define RESOURCEINSTANCE_H + +#include +#include + +namespace KActivities { + class ResourceInstance; +} + +class QTimer; +class QGraphicsView; + +class ResourceInstance : public QDeclarativeItem +{ + Q_OBJECT + + Q_PROPERTY(QUrl uri READ uri WRITE setUri NOTIFY uriChanged) + Q_PROPERTY(QString mimetype READ mimetype WRITE setMimetype NOTIFY mimetypeChanged) + Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) + //Q_PROPERTY(OpenReason openReason READ openReason) + +public: + ResourceInstance(QDeclarativeItem *parent = 0); + ~ResourceInstance(); + + QUrl uri() const; + void setUri(const QUrl &uri); + + QString mimetype() const; + void setMimetype(const QString &mimetype); + + QString title() const; + void setTitle(const QString &title); + +protected: + QGraphicsView *view() const; + +protected Q_SLOTS: + void syncWid(); + +Q_SIGNALS: + void uriChanged(); + void mimetypeChanged(); + void titleChanged(); + +public Q_SLOTS: + /** + * Call this method to notify the system that you modified + * (the contents of) the resource + */ + void notifyModified(); + + /** + * Call this method to notify the system that the resource + * has the focus in your application + * @note You only need to call this in MDI applications + */ + void notifyFocusedIn(); + + /** + * Call this method to notify the system that the resource + * lost the focus in your application + * @note You only need to call this in MDI applications + */ + void notifyFocusedOut(); + +private: + KActivities::ResourceInstance *m_resourceInstance; + QUrl m_uri; + QString m_mimetype; + QString m_title; + QTimer *m_syncTimer; +}; + +#endif diff --git a/declarativeimports/plasmaextracomponents/tests/AppTest.qml b/declarativeimports/plasmaextracomponents/tests/AppTest.qml new file mode 100644 index 000000000..81cb9f40b --- /dev/null +++ b/declarativeimports/plasmaextracomponents/tests/AppTest.qml @@ -0,0 +1,139 @@ +// -*- coding: iso-8859-1 -*- +/* + * Copyright 2011 Sebastian Kügler + * + * 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 Library 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 QtQuick 1.1 +import org.kde.plasma.core 0.1 as PlasmaCore +import org.kde.plasma.components 0.1 as PlasmaComponents +import org.kde.plasma.extras 0.1 as PlasmaExtras + +PlasmaExtras.App { + id: app + width: 800 + height: 600 + + property string formFactor: "tablet" + + navigation: navigationItem + content: contentItem + + Item { + id: navigationItem + width: navigationWidth + space + height: parent.height +// PlasmaExtras.Title { +// text: "Navigation is zoo" +// elide: Text.ElideMiddle +// anchors { top: parent.top; left: parent.left; right: parent.right; } +// } + Column { + id: navigationColumn + anchors.fill: navigationItem + width: navigationWidth + PlasmaExtras.Title { + width: navigationColumn.width + visible: widthCheck.checked + text: "Navigation Pane." + elide: Text.ElideRight + //anchors { top: parent.top; left: parent.left; topMargin: 48; } + } + } + PlasmaComponents.CheckBox { + id: widthCheck + text: checked ? "Make big" : " " + //width: navigationWidth + checked: navigationWidth > 200 + anchors { left: parent.left; leftMargin: space; bottomMargin: space; bottom: parent.bottom; } + onCheckedChanged: { + var w = !checked ? 48 : 340; + //print(" new: " + w); + navigationWidth = w; + } + //width: contentItem.width + } + //Rectangle { color: "blue"; opacity: 0.3; anchors.fill: parent; } + } + + Item { + id: contentItem + width: app.width - navigationWidth - space*2 + //anchors.rightMargin: space*2 + + Column { + width: contentItem.width + id: contentColumn + anchors.fill: contentItem + spacing: 8 + PlasmaExtras.Title { + text: "Content Section" + elide: Text.ElideMiddle + //anchors { top: parent.top; left: parent.left; topMargin: 48; } + } + PlasmaExtras.Heading { + text: "Heading " + level + level: 1 + } + PlasmaComponents.Label { + width: contentColumn.width + wrapMode: Text.WordWrap + text: "Lorem Ipsum is slechts een proeftekst uit het drukkerij- en zetterijwezen. Lorem Ipsum is de standaard proeftekst in deze bedrijfstak sinds de 16e eeuw, toen een onbekende drukker een zethaak met letters nam en ze door elkaar husselde om een font-catalogus te maken. Het heeft niet alleen vijf eeuwen overleefd maar is ook, vrijwel onveranderd, overgenomen in elektronische letterzetting. Het is in de jaren '60 populair geworden met de introductie van Letraset vellen met Lorem Ipsum passages en meer recentelijk door desktop publishing software zoals Aldus PageMaker die versies van Lorem Ipsum bevatten." + } + PlasmaExtras.Heading { + text: "Heading " + level + level: 2 + } + PlasmaExtras.Heading { + text: "Heading " + level + level: 3 + } + PlasmaComponents.Label { + wrapMode: Text.WordWrap + width: contentColumn.width + text: "Lorem Ipsum is slechts een proeftekst uit het drukkerij- en zetterijwezen. Lorem Ipsum is de standaard proeftekst in deze bedrijfstak sinds de 16e eeuw, toen een onbekende drukker een zethaak met letters nam en ze door elkaar husselde om een font-catalogus te maken. Het heeft niet alleen vijf eeuwen overleefd maar is ook, vrijwel onveranderd, overgenomen in elektronische letterzetting. Het is in de jaren '60 populair geworden met de introductie van Letraset vellen met Lorem Ipsum passages en meer recentelijk door desktop publishing software zoals Aldus PageMaker die versies van Lorem Ipsum bevatten." + } + PlasmaExtras.Heading { + text: "Heading " + level + level: 4 + } + PlasmaExtras.Heading { + text: "Heading " + level + level: 5 + } + PlasmaComponents.Label { + wrapMode: Text.WordWrap + width: contentColumn.width + text: "Lorem Ipsum is slechts een proeftekst uit het drukkerij- en zetterijwezen. Lorem Ipsum is de standaard proeftekst in deze bedrijfstak sinds de 16e eeuw, toen een onbekende drukker een zethaak met letters nam en ze door elkaar husselde om een font-catalogus te maken. Het heeft niet alleen vijf eeuwen overleefd maar is ook, vrijwel onveranderd, overgenomen in elektronische letterzetting. Het is in de jaren '60 populair geworden met de introductie van Letraset vellen met Lorem Ipsum passages en meer recentelijk door desktop publishing software zoals Aldus PageMaker die versies van Lorem Ipsum bevatten." + } + } + Rectangle { color: "green"; opacity: 0.8; anchors.fill: contentItem; } + } + + onWidthChanged: { + //return; + if (width < 340 + 200) { + //print("window changed: small " + width); + navigationWidth = 48; + } else { + //print("window changed: tablet " + width); + navigationWidth = 340; + } + widthCheck.checked = navigationWidth > 200; + } + +} diff --git a/declarativeimports/test/gallery/Sliders.qml b/declarativeimports/test/gallery/Sliders.qml index 88c3fa0bb..266792738 100644 --- a/declarativeimports/test/gallery/Sliders.qml +++ b/declarativeimports/test/gallery/Sliders.qml @@ -31,7 +31,6 @@ PlasmaComponents.Page { } PlasmaComponents.Slider { width: 140 - animated: true enabled: true } PlasmaComponents.TextField { @@ -80,7 +79,6 @@ PlasmaComponents.Page { minimumValue: 0 maximumValue: 255 stepSize: 10 - animated: true Keys.onTabPressed: blueSlider.forceActiveFocus() } @@ -112,7 +110,6 @@ PlasmaComponents.Page { id: horizontalSlider width: 140 height: 20 - animated: true enabled: false } @@ -123,7 +120,6 @@ PlasmaComponents.Page { width: 140 height: 20 inverted: true - animated: true enabled: true } @@ -140,7 +136,6 @@ PlasmaComponents.Page { maximumValue: 1000 stepSize: 50 inverted: true - animated: true } PlasmaComponents.Label { text: verticalSlider.value } }