From 0827ca77fe1a178c88bf51c81d45fa8e041eaf22 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sat, 23 Apr 2016 14:33:34 +0200 Subject: [PATCH] Add python bindings Use the new facilities in ECM to generate them from KItemModels headers. --- autotests/CMakeLists.txt | 7 +++++++ autotests/pythontest.py | 33 +++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 23 +++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100755 autotests/pythontest.py diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index 2a4429c..fe4d7c4 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -34,3 +34,10 @@ ecm_add_test(kselectionproxymodel_smoketest.cpp ${proxyModelSmokeTestSources} LINK_LIBRARIES KF5::ItemModels Qt5::Test Qt5::Widgets proxymodeltestsuite ) +if (PythonModuleGeneration_FOUND AND EXISTS ${CMAKE_BINARY_DIR}/prefix/lib/python2.7/dist-packages) + add_test(NAME Py2${name} COMMAND python2 ${pythontest} ${CMAKE_BINARY_DIR}/prefix/lib/python2.7/dist-packages) +endif() + +if (PythonModuleGeneration_FOUND AND EXISTS ${CMAKE_BINARY_DIR}/prefix/lib/python3.5/dist-packages) + add_test(NAME Py3${name} COMMAND python3 ${pythontest} ${CMAKE_BINARY_DIR}/prefix/lib/python3.5/dist-packages) +endif() diff --git a/autotests/pythontest.py b/autotests/pythontest.py new file mode 100755 index 0000000..b98ec95 --- /dev/null +++ b/autotests/pythontest.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python +#-*- coding: utf-8 -*- + +import sys + +sys.path.append(sys.argv[1]) + +from PyQt5 import QtCore +from PyQt5 import QtWidgets + +from PyKF5 import KItemModels + +def main(): + app = QtWidgets.QApplication(sys.argv) + + stringListModel = QtCore.QStringListModel(["Monday", "Tuesday", "Wednesday", + "Thursday", "Friday", "Saturday", "Sunday"]); + + selectionModel = QtCore.QItemSelectionModel() + selectionModel.setModel(stringListModel) + + selectionProxy = KItemModels.KSelectionProxyModel() + selectionProxy.setSelectionModel(selectionModel) + selectionProxy.setSourceModel(stringListModel) + + assert(selectionProxy.rowCount() == 0) + + selectionModel.select(stringListModel.index(0, 0), QtCore.QItemSelectionModel.Select) + + assert(selectionProxy.rowCount() == 1) + +if __name__ == '__main__': + main() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f8d76db..17e61e3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -41,6 +41,29 @@ ecm_generate_headers(KItemModels_HEADERS REQUIRED_HEADERS KItemModels_HEADERS ) +find_package(PythonModuleGeneration) + +if (PythonModuleGeneration_FOUND) + ecm_generate_python_binding( + TARGET KF5::ItemModels + PYTHONNAMESPACE PyKF5 + MODULENAME KItemModels + SIP_DEPENDS + QtCore/QtCoremod.sip + HEADERS + kbreadcrumbselectionmodel.h + kconcatenaterowsproxymodel.h + kcheckableproxymodel.h + kextracolumnsproxymodel.h + klinkitemselectionmodel.h + krearrangecolumnsproxymodel.h + krecursivefilterproxymodel.h + kdescendantsproxymodel.h + kmodelindexproxymapper.h + kselectionproxymodel.h + ) +endif() + install(TARGETS KF5ItemModels EXPORT KF5ItemModelsTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES