diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cdb5b6b..e4bd215d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,10 +45,9 @@ install(DIRECTORY compositor/ PATTERN dummydata EXCLUDE) kpackage_install_package(phonebook org.kde.phone.phonebook genericqml) -install(FILES phonebook/metadata.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} RENAME org.kde.phone.dialer.desktop) +install(FILES phonebook/metadata.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} RENAME org.kde.phone.phonebook.desktop) add_subdirectory(bin) -add_subdirectory(qmlcomponents) #add_subdirectory(services) add_subdirectory(settingsmodules) add_subdirectory(applets) diff --git a/applets/quicksettings/CMakeLists.txt b/applets/quicksettings/CMakeLists.txt index ec79629e..e9f3d2e6 100644 --- a/applets/quicksettings/CMakeLists.txt +++ b/applets/quicksettings/CMakeLists.txt @@ -12,7 +12,7 @@ target_link_libraries(plasma_applet_quicksettings KF5::I18n) -install(TARGETS plasma_applet_quicksettings DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/plasmoids) +install(TARGETS plasma_applet_quicksettings DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/applets) #install(FILES plasma-quicksettings-default.desktop DESTINATION ${SERVICES_INSTALL_DIR}) plasma_install_package(package org.kde.phone.quicksettings) diff --git a/containments/CMakeLists.txt b/containments/CMakeLists.txt index 7f2eaffd..94638a61 100644 --- a/containments/CMakeLists.txt +++ b/containments/CMakeLists.txt @@ -1,3 +1,4 @@ -plasma_install_package(homescreen org.kde.phone.homescreen) plasma_install_package(panel org.kde.phone.panel) + +add_subdirectory(homescreen) diff --git a/containments/homescreen/CMakeLists.txt b/containments/homescreen/CMakeLists.txt new file mode 100644 index 00000000..dfd09aa2 --- /dev/null +++ b/containments/homescreen/CMakeLists.txt @@ -0,0 +1,22 @@ +set(homescreen_SRCS + homescreen.cpp + applicationlistmodel.cpp +) + +add_library(plasma_applet_phone_homescreen MODULE ${homescreen_SRCS}) + +kcoreaddons_desktop_to_json(plasma_applet_phone_homescreen package/metadata.desktop) + +target_link_libraries(plasma_applet_phone_homescreen + Qt5::Gui + KF5::Plasma + Qt5::Qml + KF5::I18n + KF5::Service + ) + + +install(TARGETS plasma_applet_phone_homescreen DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/applets) + +plasma_install_package(package org.kde.phone.homescreen) + diff --git a/containments/homescreen/Messages.sh b/containments/homescreen/Messages.sh new file mode 100755 index 00000000..c0782d94 --- /dev/null +++ b/containments/homescreen/Messages.sh @@ -0,0 +1,4 @@ +#! /usr/bin/env bash +$EXTRACTRC `find . -name \*.rc -o -name \*.ui -o -name \*.kcfg` >> rc.cpp +$XGETTEXT `find . -name \*.js -o -name \*.qml -o -name \*.cpp` -o $podir/plasma_applet_org.kde.phone.homescreen.pot +rm -f rc.cpp diff --git a/qmlcomponents/applicationlistmodel.cpp b/containments/homescreen/applicationlistmodel.cpp similarity index 100% rename from qmlcomponents/applicationlistmodel.cpp rename to containments/homescreen/applicationlistmodel.cpp diff --git a/qmlcomponents/applicationlistmodel.h b/containments/homescreen/applicationlistmodel.h similarity index 100% rename from qmlcomponents/applicationlistmodel.h rename to containments/homescreen/applicationlistmodel.h diff --git a/containments/homescreen/homescreen.cpp b/containments/homescreen/homescreen.cpp new file mode 100644 index 00000000..01eb27af --- /dev/null +++ b/containments/homescreen/homescreen.cpp @@ -0,0 +1,45 @@ +/*************************************************************************** + * Copyright (C) 2015 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 . * + ***************************************************************************/ + +#include "homescreen.h" +#include "applicationlistmodel.h" + +#include +#include + +HomeScreen::HomeScreen(QObject *parent, const QVariantList &args) + : Plasma::Containment(parent, args) +{ + qmlRegisterType(); + m_applicationListModel = new ApplicationListModel(this); + setHasConfigurationInterface(true); +} + +HomeScreen::~HomeScreen() +{ +} + +ApplicationListModel *HomeScreen::applicationListModel() +{ + return m_applicationListModel; +} + +K_EXPORT_PLASMA_APPLET_WITH_JSON(homescreen, HomeScreen, "metadata.json") + +#include "homescreen.moc" diff --git a/containments/homescreen/homescreen.h b/containments/homescreen/homescreen.h new file mode 100644 index 00000000..54cca947 --- /dev/null +++ b/containments/homescreen/homescreen.h @@ -0,0 +1,45 @@ +/*************************************************************************** + * Copyright (C) 2015 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 HOMESCREEN_H +#define HOMESCREEN_H + + +#include + +class ApplicationListModel; + +class HomeScreen : public Plasma::Containment +{ + Q_OBJECT + Q_PROPERTY(ApplicationListModel *applicationListModel READ applicationListModel CONSTANT) + +public: + HomeScreen( QObject *parent, const QVariantList &args ); + ~HomeScreen(); + + ApplicationListModel *applicationListModel(); + +private: + ApplicationListModel *m_applicationListModel; + +}; + +#endif diff --git a/containments/homescreen/contents/code/LayoutManager.js b/containments/homescreen/package/contents/code/LayoutManager.js similarity index 100% rename from containments/homescreen/contents/code/LayoutManager.js rename to containments/homescreen/package/contents/code/LayoutManager.js diff --git a/containments/homescreen/contents/config/main.xml b/containments/homescreen/package/contents/config/main.xml similarity index 100% rename from containments/homescreen/contents/config/main.xml rename to containments/homescreen/package/contents/config/main.xml diff --git a/containments/homescreen/contents/images/homescreenicons.svg b/containments/homescreen/package/contents/images/homescreenicons.svg similarity index 100% rename from containments/homescreen/contents/images/homescreenicons.svg rename to containments/homescreen/package/contents/images/homescreenicons.svg diff --git a/containments/homescreen/contents/ui/Clock.qml b/containments/homescreen/package/contents/ui/Clock.qml similarity index 100% rename from containments/homescreen/contents/ui/Clock.qml rename to containments/homescreen/package/contents/ui/Clock.qml diff --git a/containments/homescreen/contents/ui/HomeLauncher.qml b/containments/homescreen/package/contents/ui/HomeLauncher.qml similarity index 100% rename from containments/homescreen/contents/ui/HomeLauncher.qml rename to containments/homescreen/package/contents/ui/HomeLauncher.qml diff --git a/containments/homescreen/contents/ui/HomeLauncherSvg.qml b/containments/homescreen/package/contents/ui/HomeLauncherSvg.qml similarity index 100% rename from containments/homescreen/contents/ui/HomeLauncherSvg.qml rename to containments/homescreen/package/contents/ui/HomeLauncherSvg.qml diff --git a/containments/homescreen/contents/ui/SatelliteStripe.qml b/containments/homescreen/package/contents/ui/SatelliteStripe.qml similarity index 100% rename from containments/homescreen/contents/ui/SatelliteStripe.qml rename to containments/homescreen/package/contents/ui/SatelliteStripe.qml diff --git a/containments/homescreen/contents/ui/main.qml b/containments/homescreen/package/contents/ui/main.qml similarity index 96% rename from containments/homescreen/contents/ui/main.qml rename to containments/homescreen/package/contents/ui/main.qml index 8a34a15a..a7c942b3 100644 --- a/containments/homescreen/contents/ui/main.qml +++ b/containments/homescreen/package/contents/ui/main.qml @@ -23,7 +23,6 @@ import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.kquickcontrolsaddons 2.0 -import org.kde.satellite.components 0.1 as SatelliteComponents import "plasmapackage:/code/LayoutManager.js" as LayoutManager @@ -100,14 +99,14 @@ MouseEventListener { LayoutManager.restore(); applicationsView.contentY = -root.height; - appListModel.appOrder = plasmoid.configuration.AppOrder; - appListModel.loadApplications(); + plasmoid.nativeInterface.applicationListModel.appOrder = plasmoid.configuration.AppOrder; + plasmoid.nativeInterface.applicationListModel.loadApplications(); } - SatelliteComponents.ApplicationListModel { - id: appListModel + Connections { + target: plasmoid.nativeInterface.applicationListModel onAppOrderChanged: { - plasmoid.configuration.AppOrder = appListModel.appOrder; + plasmoid.configuration.AppOrder = plasmoid.nativeInterface.applicationListModel.appOrder; } } @@ -196,7 +195,7 @@ MouseEventListener { var newRow = (Math.round(applicationsView.width / applicationsView.cellWidth) * Math.floor(pos.y / applicationsView.cellHeight) + Math.floor(pos.x / applicationsView.cellWidth)); if (applicationsView.dragData.ApplicationOriginalRowRole != newRow) { - appListModel.moveItem(applicationsView.dragData.ApplicationOriginalRowRole, newRow); + plasmoid.nativeInterface.applicationListModel.moveItem(applicationsView.dragData.ApplicationOriginalRowRole, newRow); applicationsView.dragData.ApplicationOriginalRowRole = newRow; } @@ -254,7 +253,7 @@ MouseEventListener { return; } - appListModel.runApplication(item.modelData.ApplicationStorageIdRole) + plasmoid.nativeInterface.applicationListModel.runApplication(item.modelData.ApplicationStorageIdRole) } PlasmaCore.ColorScope { anchors.fill: parent @@ -353,7 +352,7 @@ MouseEventListener { cellWidth: root.buttonHeight cellHeight: cellWidth - model: appListModel + model: plasmoid.nativeInterface.applicationListModel snapMode: GridView.SnapToRow @@ -481,7 +480,7 @@ MouseEventListener { cellWidth: root.buttonHeight cellHeight: cellWidth - model: appListModel + model: plasmoid.nativeInterface.applicationListModel delegate: HomeLauncher {} move: Transition { diff --git a/containments/homescreen/metadata.desktop b/containments/homescreen/package/metadata.desktop similarity index 90% rename from containments/homescreen/metadata.desktop rename to containments/homescreen/package/metadata.desktop index 5dfc2c2d..46f32758 100644 --- a/containments/homescreen/metadata.desktop +++ b/containments/homescreen/package/metadata.desktop @@ -6,7 +6,7 @@ Type=Service X-KDE-ServiceTypes=Plasma/Applet,Plasma/Containment X-Plasma-API=declarativeappletscript -X-KDE-ParentApp= +X-KDE-Library=plasma_applet_phone_homescreen X-KDE-PluginInfo-Author=Marco Martin X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Email=mart@kde.org diff --git a/qmlcomponents/CMakeLists.txt b/qmlcomponents/CMakeLists.txt deleted file mode 100644 index 13b7937c..00000000 --- a/qmlcomponents/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -project(satellitecomponents) - -set(satellitecomponents_SRCS - satellitecomponentsplugin.cpp - applicationlistmodel.cpp - ) - -add_library(satellitecomponentsplugin SHARED ${satellitecomponents_SRCS}) -target_link_libraries(satellitecomponentsplugin - Qt5::Core - Qt5::Widgets - Qt5::Qml - Qt5::Quick - KF5::Service - KF5::Declarative - KF5::I18n) - -install(TARGETS satellitecomponentsplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/satellite/components) - - -install(FILES qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/satellite/components) - -add_subdirectory(modeltest) diff --git a/qmlcomponents/Messages.sh b/qmlcomponents/Messages.sh deleted file mode 100644 index 1e8a5bf4..00000000 --- a/qmlcomponents/Messages.sh +++ /dev/null @@ -1,4 +0,0 @@ -#! /usr/bin/env bash -$XGETTEXT `find . -name \*.qml` -L Java -o $podir/libsatellitecomponentsplugin.pot -rm -f rc.cpp - diff --git a/qmlcomponents/modeltest/CMakeLists.txt b/qmlcomponents/modeltest/CMakeLists.txt deleted file mode 100644 index 246eeef7..00000000 --- a/qmlcomponents/modeltest/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ - -set(applicationlistmodeltest_SRCS - main.cpp - modeltest.cpp - ../applicationlistmodel.cpp - ) - -add_executable(applicationlistmodeltest ${applicationlistmodeltest_SRCS}) -target_link_libraries(applicationlistmodeltest - Qt5::Core - Qt5::Test - Qt5::Widgets - KF5::Service - ) - diff --git a/qmlcomponents/modeltest/main.cpp b/qmlcomponents/modeltest/main.cpp deleted file mode 100644 index cfa3ef52..00000000 --- a/qmlcomponents/modeltest/main.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - - -#include "../applicationlistmodel.h" -#include "modeltest.h" - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - QWidget *widget = new QWidget; - QVBoxLayout *layout = new QVBoxLayout(widget); - - ApplicationListModel *applicationListModel = new ApplicationListModel(widget); - ModelTest *test = new ModelTest(applicationListModel, widget); - - QTreeView *view = new QTreeView(widget); - QPushButton *upButton = new QPushButton(widget); - upButton->setText("Move Up"); - QObject::connect(upButton, &QPushButton::clicked, [=](){ - QModelIndex idx = view->currentIndex(); - if (idx.row() > 0) { - applicationListModel->moveItem(idx.row(), idx.row()-1); - } - }); - QPushButton *downButton = new QPushButton(widget); - downButton->setText("Move Down"); - QObject::connect(downButton, &QPushButton::clicked, [=](){ - QModelIndex idx = view->currentIndex(); - if (idx.row() > 0) { - applicationListModel->moveItem(idx.row(), idx.row()+1); - } - }); - layout->addWidget(upButton); - layout->addWidget(downButton); - - view->setDragDropMode(QAbstractItemView::InternalMove); - view->setModel(applicationListModel); - applicationListModel->loadApplications(); - layout->addWidget(view); - - QAction *quit = new QAction(widget); - quit->setShortcut(Qt::CTRL + Qt::Key_Q); - QObject::connect(quit, SIGNAL(triggered()), &app, SLOT(quit())); - - widget->addAction(quit); - widget->show(); - return app.exec(); -} diff --git a/qmlcomponents/modeltest/modeltest.cpp b/qmlcomponents/modeltest/modeltest.cpp deleted file mode 100644 index ec66e401..00000000 --- a/qmlcomponents/modeltest/modeltest.cpp +++ /dev/null @@ -1,592 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL21$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "modeltest.h" - -#include -#include - -/*! - Connect to all of the models signals. Whenever anything happens recheck everything. -*/ -ModelTest::ModelTest ( QAbstractItemModel *_model, QObject *parent ) : QObject ( parent ), model ( _model ), fetchingMore ( false ) -{ - if (!model) - qFatal("%s: model must not be null", Q_FUNC_INFO); - - connect(model, SIGNAL(columnsAboutToBeInserted(QModelIndex,int,int)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(columnsInserted(QModelIndex,int,int)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(columnsRemoved(QModelIndex,int,int)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(layoutAboutToBeChanged()), this, SLOT(runAllTests()) ); - connect(model, SIGNAL(layoutChanged()), this, SLOT(runAllTests()) ); - connect(model, SIGNAL(modelReset()), this, SLOT(runAllTests()) ); - connect(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(runAllTests()) ); - connect(model, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)), - this, SLOT(runAllTests()) ); - - // Special checks for changes - connect(model, SIGNAL(layoutAboutToBeChanged()), - this, SLOT(layoutAboutToBeChanged()) ); - connect(model, SIGNAL(layoutChanged()), - this, SLOT(layoutChanged()) ); - - connect(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), - this, SLOT(rowsAboutToBeInserted(QModelIndex,int,int)) ); - connect(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), - this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int)) ); - connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(rowsInserted(QModelIndex,int,int)) ); - connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(rowsRemoved(QModelIndex,int,int)) ); - connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SLOT(dataChanged(QModelIndex,QModelIndex)) ); - connect(model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)), - this, SLOT(headerDataChanged(Qt::Orientation,int,int)) ); - - runAllTests(); -} - -void ModelTest::runAllTests() -{ - if ( fetchingMore ) - return; - nonDestructiveBasicTest(); - rowCount(); - columnCount(); - hasIndex(); - index(); - parent(); - data(); -} - -/*! - nonDestructiveBasicTest tries to call a number of the basic functions (not all) - to make sure the model doesn't outright segfault, testing the functions that makes sense. -*/ -void ModelTest::nonDestructiveBasicTest() -{ - QVERIFY( model->buddy ( QModelIndex() ) == QModelIndex() ); - model->canFetchMore ( QModelIndex() ); - QVERIFY( model->columnCount ( QModelIndex() ) >= 0 ); - QVERIFY( model->data ( QModelIndex() ) == QVariant() ); - fetchingMore = true; - model->fetchMore ( QModelIndex() ); - fetchingMore = false; - Qt::ItemFlags flags = model->flags ( QModelIndex() ); - QVERIFY( flags == Qt::ItemIsDropEnabled || flags == 0 ); - model->hasChildren ( QModelIndex() ); - model->hasIndex ( 0, 0 ); - model->headerData ( 0, Qt::Horizontal ); - model->index ( 0, 0 ); - model->itemData ( QModelIndex() ); - QVariant cache; - model->match ( QModelIndex(), -1, cache ); - model->mimeTypes(); - QVERIFY( model->parent ( QModelIndex() ) == QModelIndex() ); - QVERIFY( model->rowCount() >= 0 ); - QVariant variant; - model->setData ( QModelIndex(), variant, -1 ); - model->setHeaderData ( -1, Qt::Horizontal, QVariant() ); - model->setHeaderData ( 999999, Qt::Horizontal, QVariant() ); - QMap roles; - model->sibling ( 0, 0, QModelIndex() ); - model->span ( QModelIndex() ); - model->supportedDropActions(); -} - -/*! - Tests model's implementation of QAbstractItemModel::rowCount() and hasChildren() - - Models that are dynamically populated are not as fully tested here. - */ -void ModelTest::rowCount() -{ -// qDebug() << "rc"; - // check top row - QModelIndex topIndex = model->index ( 0, 0, QModelIndex() ); - int rows = model->rowCount ( topIndex ); - QVERIFY( rows >= 0 ); - if ( rows > 0 ) - QVERIFY( model->hasChildren ( topIndex ) ); - - QModelIndex secondLevelIndex = model->index ( 0, 0, topIndex ); - if ( secondLevelIndex.isValid() ) { // not the top level - // check a row count where parent is valid - rows = model->rowCount ( secondLevelIndex ); - QVERIFY( rows >= 0 ); - if ( rows > 0 ) - QVERIFY( model->hasChildren ( secondLevelIndex ) ); - } - - // The models rowCount() is tested more extensively in checkChildren(), - // but this catches the big mistakes -} - -/*! - Tests model's implementation of QAbstractItemModel::columnCount() and hasChildren() - */ -void ModelTest::columnCount() -{ - // check top row - QModelIndex topIndex = model->index ( 0, 0, QModelIndex() ); - QVERIFY( model->columnCount ( topIndex ) >= 0 ); - - // check a column count where parent is valid - QModelIndex childIndex = model->index ( 0, 0, topIndex ); - if ( childIndex.isValid() ) - QVERIFY( model->columnCount ( childIndex ) >= 0 ); - - // columnCount() is tested more extensively in checkChildren(), - // but this catches the big mistakes -} - -/*! - Tests model's implementation of QAbstractItemModel::hasIndex() - */ -void ModelTest::hasIndex() -{ -// qDebug() << "hi"; - // Make sure that invalid values returns an invalid index - QVERIFY( !model->hasIndex ( -2, -2 ) ); - QVERIFY( !model->hasIndex ( -2, 0 ) ); - QVERIFY( !model->hasIndex ( 0, -2 ) ); - - int rows = model->rowCount(); - int columns = model->columnCount(); - - // check out of bounds - QVERIFY( !model->hasIndex ( rows, columns ) ); - QVERIFY( !model->hasIndex ( rows + 1, columns + 1 ) ); - - if ( rows > 0 ) - QVERIFY( model->hasIndex ( 0, 0 ) ); - - // hasIndex() is tested more extensively in checkChildren(), - // but this catches the big mistakes -} - -/*! - Tests model's implementation of QAbstractItemModel::index() - */ -void ModelTest::index() -{ -// qDebug() << "i"; - // Make sure that invalid values returns an invalid index - QVERIFY( model->index ( -2, -2 ) == QModelIndex() ); - QVERIFY( model->index ( -2, 0 ) == QModelIndex() ); - QVERIFY( model->index ( 0, -2 ) == QModelIndex() ); - - int rows = model->rowCount(); - int columns = model->columnCount(); - - if ( rows == 0 ) - return; - - // Catch off by one errors - QVERIFY( model->index ( rows, columns ) == QModelIndex() ); - QVERIFY( model->index ( 0, 0 ).isValid() ); - - // Make sure that the same index is *always* returned - QModelIndex a = model->index ( 0, 0 ); - QModelIndex b = model->index ( 0, 0 ); - QVERIFY( a == b ); - - // index() is tested more extensively in checkChildren(), - // but this catches the big mistakes -} - -/*! - Tests model's implementation of QAbstractItemModel::parent() - */ -void ModelTest::parent() -{ -// qDebug() << "p"; - // Make sure the model won't crash and will return an invalid QModelIndex - // when asked for the parent of an invalid index. - QVERIFY( model->parent ( QModelIndex() ) == QModelIndex() ); - - if ( model->rowCount() == 0 ) - return; - - // Column 0 | Column 1 | - // QModelIndex() | | - // \- topIndex | topIndex1 | - // \- childIndex | childIndex1 | - - // Common error test #1, make sure that a top level index has a parent - // that is a invalid QModelIndex. - QModelIndex topIndex = model->index ( 0, 0, QModelIndex() ); - QVERIFY( model->parent ( topIndex ) == QModelIndex() ); - - // Common error test #2, make sure that a second level index has a parent - // that is the first level index. - if ( model->rowCount ( topIndex ) > 0 ) { - QModelIndex childIndex = model->index ( 0, 0, topIndex ); - QVERIFY( model->parent ( childIndex ) == topIndex ); - } - - // Common error test #3, the second column should NOT have the same children - // as the first column in a row. - // Usually the second column shouldn't have children. - QModelIndex topIndex1 = model->index ( 0, 1, QModelIndex() ); - if ( model->rowCount ( topIndex1 ) > 0 ) { - QModelIndex childIndex = model->index ( 0, 0, topIndex ); - QModelIndex childIndex1 = model->index ( 0, 0, topIndex1 ); - QVERIFY( childIndex != childIndex1 ); - } - - // Full test, walk n levels deep through the model making sure that all - // parent's children correctly specify their parent. - checkChildren ( QModelIndex() ); -} - -/*! - Called from the parent() test. - - A model that returns an index of parent X should also return X when asking - for the parent of the index. - - This recursive function does pretty extensive testing on the whole model in an - effort to catch edge cases. - - This function assumes that rowCount(), columnCount() and index() already work. - If they have a bug it will point it out, but the above tests should have already - found the basic bugs because it is easier to figure out the problem in - those tests then this one. - */ -void ModelTest::checkChildren ( const QModelIndex &parent, int currentDepth ) -{ - // First just try walking back up the tree. - QModelIndex p = parent; - while ( p.isValid() ) - p = p.parent(); - - // For models that are dynamically populated - if ( model->canFetchMore ( parent ) ) { - fetchingMore = true; - model->fetchMore ( parent ); - fetchingMore = false; - } - - int rows = model->rowCount ( parent ); - int columns = model->columnCount ( parent ); - - if ( rows > 0 ) - QVERIFY( model->hasChildren ( parent ) ); - - // Some further testing against rows(), columns(), and hasChildren() - QVERIFY( rows >= 0 ); - QVERIFY( columns >= 0 ); - if ( rows > 0 ) - QVERIFY( model->hasChildren ( parent ) ); - - //qDebug() << "parent:" << model->data(parent).toString() << "rows:" << rows - // << "columns:" << columns << "parent column:" << parent.column(); - - const QModelIndex topLeftChild = model->index( 0, 0, parent ); - - QVERIFY( !model->hasIndex ( rows + 1, 0, parent ) ); - for ( int r = 0; r < rows; ++r ) { - if ( model->canFetchMore ( parent ) ) { - fetchingMore = true; - model->fetchMore ( parent ); - fetchingMore = false; - } - QVERIFY( !model->hasIndex ( r, columns + 1, parent ) ); - for ( int c = 0; c < columns; ++c ) { - QVERIFY( model->hasIndex ( r, c, parent ) ); - QModelIndex index = model->index ( r, c, parent ); - // rowCount() and columnCount() said that it existed... - QVERIFY( index.isValid() ); - - // index() should always return the same index when called twice in a row - QModelIndex modifiedIndex = model->index ( r, c, parent ); - QVERIFY( index == modifiedIndex ); - - // Make sure we get the same index if we request it twice in a row - QModelIndex a = model->index ( r, c, parent ); - QModelIndex b = model->index ( r, c, parent ); - QVERIFY( a == b ); - - { - const QModelIndex sibling = model->sibling( r, c, topLeftChild ); - QVERIFY( index == sibling ); - } - { - const QModelIndex sibling = topLeftChild.sibling( r, c ); - QVERIFY( index == sibling ); - } - - // Some basic checking on the index that is returned - QVERIFY( index.model() == model ); - QCOMPARE( index.row(), r ); - QCOMPARE( index.column(), c ); - // While you can technically return a QVariant usually this is a sign - // of a bug in data(). Disable if this really is ok in your model. -// QVERIFY( model->data ( index, Qt::DisplayRole ).isValid() ); - - // If the next test fails here is some somewhat useful debug you play with. - - if (model->parent(index) != parent) { - qDebug() << r << c << currentDepth << model->data(index).toString() - << model->data(parent).toString(); - qDebug() << index << parent << model->parent(index); -// And a view that you can even use to show the model. -// QTreeView view; -// view.setModel(model); -// view.show(); - } - - // Check that we can get back our real parent. - QCOMPARE( model->parent ( index ), parent ); - - // recursively go down the children - if ( model->hasChildren ( index ) && currentDepth < 10 ) { - //qDebug() << r << c << "has children" << model->rowCount(index); - checkChildren ( index, ++currentDepth ); - }/* else { if (currentDepth >= 10) qDebug() << "checked 10 deep"; };*/ - - // make sure that after testing the children that the index doesn't change. - QModelIndex newerIndex = model->index ( r, c, parent ); - QVERIFY( index == newerIndex ); - } - } -} - -/*! - Tests model's implementation of QAbstractItemModel::data() - */ -void ModelTest::data() -{ - // Invalid index should return an invalid qvariant - QVERIFY( !model->data ( QModelIndex() ).isValid() ); - - if ( model->rowCount() == 0 ) - return; - - // A valid index should have a valid QVariant data - QVERIFY( model->index ( 0, 0 ).isValid() ); - - // shouldn't be able to set data on an invalid index - QVERIFY( !model->setData ( QModelIndex(), QLatin1String ( "foo" ), Qt::DisplayRole ) ); - - // General Purpose roles that should return a QString - QVariant variant = model->data ( model->index ( 0, 0 ), Qt::ToolTipRole ); - if ( variant.isValid() ) { - QVERIFY( variant.canConvert() ); - } - variant = model->data ( model->index ( 0, 0 ), Qt::StatusTipRole ); - if ( variant.isValid() ) { - QVERIFY( variant.canConvert() ); - } - variant = model->data ( model->index ( 0, 0 ), Qt::WhatsThisRole ); - if ( variant.isValid() ) { - QVERIFY( variant.canConvert() ); - } - - // General Purpose roles that should return a QSize - variant = model->data ( model->index ( 0, 0 ), Qt::SizeHintRole ); - if ( variant.isValid() ) { - QVERIFY( variant.canConvert() ); - } - - // General Purpose roles that should return a QFont - QVariant fontVariant = model->data ( model->index ( 0, 0 ), Qt::FontRole ); - if ( fontVariant.isValid() ) { - QVERIFY( fontVariant.canConvert() ); - } - - // Check that the alignment is one we know about - QVariant textAlignmentVariant = model->data ( model->index ( 0, 0 ), Qt::TextAlignmentRole ); - if ( textAlignmentVariant.isValid() ) { - int alignment = textAlignmentVariant.toInt(); - QCOMPARE( alignment, ( alignment & ( Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask ) ) ); - } - - // General Purpose roles that should return a QColor - QVariant colorVariant = model->data ( model->index ( 0, 0 ), Qt::BackgroundColorRole ); - if ( colorVariant.isValid() ) { - QVERIFY( colorVariant.canConvert() ); - } - - colorVariant = model->data ( model->index ( 0, 0 ), Qt::TextColorRole ); - if ( colorVariant.isValid() ) { - QVERIFY( colorVariant.canConvert() ); - } - - // Check that the "check state" is one we know about. - QVariant checkStateVariant = model->data ( model->index ( 0, 0 ), Qt::CheckStateRole ); - if ( checkStateVariant.isValid() ) { - int state = checkStateVariant.toInt(); - QVERIFY( state == Qt::Unchecked || - state == Qt::PartiallyChecked || - state == Qt::Checked ); - } -} - -/*! - Store what is about to be inserted to make sure it actually happens - - \sa rowsInserted() - */ -void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, int /* end */) -{ -// Q_UNUSED(end); -// qDebug() << "rowsAboutToBeInserted" << "start=" << start << "end=" << end << "parent=" << model->data ( parent ).toString() -// << "current count of parent=" << model->rowCount ( parent ); // << "display of last=" << model->data( model->index(start-1, 0, parent) ); -// qDebug() << model->index(start-1, 0, parent) << model->data( model->index(start-1, 0, parent) ); - Changing c; - c.parent = parent; - c.oldSize = model->rowCount ( parent ); - c.last = model->data ( model->index ( start - 1, 0, parent ) ); - c.next = model->data ( model->index ( start, 0, parent ) ); - insert.push ( c ); -} - -/*! - Confirm that what was said was going to happen actually did - - \sa rowsAboutToBeInserted() - */ -void ModelTest::rowsInserted ( const QModelIndex & parent, int start, int end ) -{ - Changing c = insert.pop(); - QVERIFY( c.parent == parent ); -// qDebug() << "rowsInserted" << "start=" << start << "end=" << end << "oldsize=" << c.oldSize -// << "parent=" << model->data ( parent ).toString() << "current rowcount of parent=" << model->rowCount ( parent ); - -// for (int ii=start; ii <= end; ii++) -// { -// qDebug() << "itemWasInserted:" << ii << model->data ( model->index ( ii, 0, parent )); -// } -// qDebug(); - - QVERIFY( c.oldSize + ( end - start + 1 ) == model->rowCount ( parent ) ); - QVERIFY( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) ); - - if (c.next != model->data(model->index(end + 1, 0, c.parent))) { - qDebug() << start << end; - for (int i=0; i < model->rowCount(); ++i) - qDebug() << model->index(i, 0).data().toString(); - qDebug() << c.next << model->data(model->index(end + 1, 0, c.parent)); - } - - QVERIFY( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) ); -} - -void ModelTest::layoutAboutToBeChanged() -{ - for ( int i = 0; i < qBound ( 0, model->rowCount(), 100 ); ++i ) - changing.append ( QPersistentModelIndex ( model->index ( i, 0 ) ) ); -} - -void ModelTest::layoutChanged() -{ - for ( int i = 0; i < changing.count(); ++i ) { - QPersistentModelIndex p = changing[i]; - QVERIFY( p == model->index ( p.row(), p.column(), p.parent() ) ); - } - changing.clear(); -} - -/*! - Store what is about to be inserted to make sure it actually happens - - \sa rowsRemoved() - */ -void ModelTest::rowsAboutToBeRemoved ( const QModelIndex &parent, int start, int end ) -{ -qDebug() << "ratbr" << parent << start << end; - Changing c; - c.parent = parent; - c.oldSize = model->rowCount ( parent ); - c.last = model->data ( model->index ( start - 1, 0, parent ) ); - c.next = model->data ( model->index ( end + 1, 0, parent ) ); - remove.push ( c ); -} - -/*! - Confirm that what was said was going to happen actually did - - \sa rowsAboutToBeRemoved() - */ -void ModelTest::rowsRemoved ( const QModelIndex & parent, int start, int end ) -{ - qDebug() << "rr" << parent << start << end; - Changing c = remove.pop(); - QVERIFY( c.parent == parent ); - QVERIFY( c.oldSize - ( end - start + 1 ) == model->rowCount ( parent ) ); - QVERIFY( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) ); - QVERIFY( c.next == model->data ( model->index ( start, 0, c.parent ) ) ); -} - -void ModelTest::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) -{ - QVERIFY(topLeft.isValid()); - QVERIFY(bottomRight.isValid()); - QModelIndex commonParent = bottomRight.parent(); - QVERIFY(topLeft.parent() == commonParent); - QVERIFY(topLeft.row() <= bottomRight.row()); - QVERIFY(topLeft.column() <= bottomRight.column()); - int rowCount = model->rowCount(commonParent); - int columnCount = model->columnCount(commonParent); - QVERIFY(bottomRight.row() < rowCount); - QVERIFY(bottomRight.column() < columnCount); -} - -void ModelTest::headerDataChanged(Qt::Orientation orientation, int start, int end) -{ - QVERIFY(start >= 0); - QVERIFY(end >= 0); - QVERIFY(start <= end); - int itemCount = orientation == Qt::Vertical ? model->rowCount() : model->columnCount(); - QVERIFY(start < itemCount); - QVERIFY(end < itemCount); -} - diff --git a/qmlcomponents/modeltest/modeltest.h b/qmlcomponents/modeltest/modeltest.h deleted file mode 100644 index b3d23cfb..00000000 --- a/qmlcomponents/modeltest/modeltest.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL21$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#ifndef MODELTEST_H -#define MODELTEST_H - -#include -#include -#include - -class ModelTest : public QObject -{ - Q_OBJECT - -public: - ModelTest( QAbstractItemModel *model, QObject *parent = 0 ); - -private Q_SLOTS: - void nonDestructiveBasicTest(); - void rowCount(); - void columnCount(); - void hasIndex(); - void index(); - void parent(); - void data(); - -protected Q_SLOTS: - void runAllTests(); - void layoutAboutToBeChanged(); - void layoutChanged(); - void rowsAboutToBeInserted( const QModelIndex &parent, int start, int end ); - void rowsInserted( const QModelIndex & parent, int start, int end ); - void rowsAboutToBeRemoved( const QModelIndex &parent, int start, int end ); - void rowsRemoved( const QModelIndex & parent, int start, int end ); - void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); - void headerDataChanged(Qt::Orientation orientation, int start, int end); - -private: - void checkChildren( const QModelIndex &parent, int currentDepth = 0 ); - - QAbstractItemModel *model; - - struct Changing { - QModelIndex parent; - int oldSize; - QVariant last; - QVariant next; - }; - QStack insert; - QStack remove; - - bool fetchingMore; - - QList changing; -}; - -#endif diff --git a/qmlcomponents/qmldir b/qmlcomponents/qmldir deleted file mode 100644 index 0909bc86..00000000 --- a/qmlcomponents/qmldir +++ /dev/null @@ -1,2 +0,0 @@ -module org.kde.satellite.components -plugin satellitecomponentsplugin \ No newline at end of file diff --git a/qmlcomponents/satellitecomponentsplugin.cpp b/qmlcomponents/satellitecomponentsplugin.cpp deleted file mode 100644 index df97eab3..00000000 --- a/qmlcomponents/satellitecomponentsplugin.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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 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 "satellitecomponentsplugin.h" - -#include -#include -#include -#include -#include - -#include "applicationlistmodel.h" - -void SatelliteComponentsPlugin::initializeEngine(QQmlEngine *engine, const char *uri) -{ - QQmlExtensionPlugin::initializeEngine(engine, uri); - - if (!engine->rootContext()->contextObject()) { - KDeclarative::KDeclarative kdeclarative; - kdeclarative.setDeclarativeEngine(engine); - kdeclarative.setupBindings(); - } -} - -void SatelliteComponentsPlugin::registerTypes(const char *uri) -{ - Q_ASSERT(uri == QLatin1String("org.kde.satellite.components")); - - qmlRegisterType(uri, 0, 1, "ApplicationListModel"); -} - - -#include "satellitecomponentsplugin.moc" - diff --git a/qmlcomponents/satellitecomponentsplugin.h b/qmlcomponents/satellitecomponentsplugin.h deleted file mode 100644 index f2a5c86f..00000000 --- a/qmlcomponents/satellitecomponentsplugin.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 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 SATELLITECOMPONENTSPLUGIN_H -#define SATELLITECOMPONENTSPLUGIN_H - -#include -#include - -class SatelliteComponentsPlugin : public QQmlExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") - -public: - void initializeEngine(QQmlEngine *engine, const char *uri); - void registerTypes(const char *uri); - -}; - -#endif