diff --git a/file_templates/CMakeLists.txt b/file_templates/CMakeLists.txt index 0a1507a6e8..c0af43a3e8 100644 --- a/file_templates/CMakeLists.txt +++ b/file_templates/CMakeLists.txt @@ -1,33 +1,34 @@ set(filetemplate_DIRS classes/cpp_basic classes/private_pointer classes/qt_widget classes/qobject classes/python_basic classes/c_gobject classes/c_gobject_private classes/c_gobject_properties classes/qt_shared + classes/qt_interface testing/cpp_cpputest testing/cpp_gtest testing/cpp_qtestlib testing/cpp_qtestlib_kdevelop testing/python_pyunit testing/php_phpunit other/cmake_module ) kdevplatform_add_file_templates(${filetemplate_DIRS}) install ( FILES common/method_declaration_cpp.txt common/method_definition_cpp.txt common/license_header_cpp.txt common/class_declaration_cpp.txt common/cpp_header.h common/cpp_header_onlyfunctions.h common/cpp_implementation.cpp DESTINATION ${DATA_INSTALL_DIR}/kdevcodegen/templates ) diff --git a/file_templates/classes/qt_interface/interface.cpp b/file_templates/classes/qt_interface/interface.cpp new file mode 100644 index 0000000000..ead754e21b --- /dev/null +++ b/file_templates/classes/qt_interface/interface.cpp @@ -0,0 +1,59 @@ +{% extends "cpp_implementation.cpp" %} +{% load kdev_filters %} + +{% block extra_definitons %} + +{% for method in private_functions %} +{% with method.arguments as arguments %} +{# skipping any defined destructor #} +{% if not method.isDestructor %} + +{% include "method_definition_cpp.txt" %} +{ + {% if method.type %} + return {{ method.default_return_value }}; + {% endif %} +} + +{% endif %} +{% endwith %} +{% endfor %} + +{% endblock extra_definitons %} + +{% block function_definitions %} + +{# doing our own destructor #} +{{ name }}::~{{ name }}() = default; + +{% for method in public_functions %} +{% with method.arguments as arguments %} +{# skipping any defined destructor #} +{% if not method.isDestructor %} + +{% include "method_definition_cpp.txt" %} +{ + {% if method.type %}return {{ method.default_return_value }}; + {% endif %} +} + +{% endif %} +{% endwith %} +{% endfor %} + +{% for method in protected_functions %} +{% with method.arguments as arguments %} +{# skipping any defined destructor #} +{% if not method.isDestructor %} + +{% include "method_definition_cpp.txt" %} +{ + {% if method.type %}return {{ method.default_return_value }}; + {% endif %} +} + +{% endif %} +{% endwith %} +{% endfor %} + +{% endblock function_definitions %} diff --git a/file_templates/classes/qt_interface/interface.h b/file_templates/classes/qt_interface/interface.h new file mode 100644 index 0000000000..117bc12c4f --- /dev/null +++ b/file_templates/classes/qt_interface/interface.h @@ -0,0 +1,58 @@ +{% extends "cpp_header.h" %} +{% load kdev_filters %} + +{% block includes %} +{{ block.super }} +{% if not base_classes %} +#include +{% endif %} +{% endblock %} + +{% block class_body %} +public: +{# doing our own destructor, to ensure there is one #} +{% if not base_classes %} + virtual ~{{ name }}(); +{% else %}{# Assumption: subclassing only other interfaces #} + ~{{ name }}() override; +{% endif %} + + {% for method in public_functions %} + {# skipping any defined destructor #} + {% if not method.isDestructor %} + {% include "method_declaration_cpp.txt" %} + {% endif %} + {% endfor %} + +{% for property in members %} + + virtual {{ property.type }} {{ property.name }}() const = 0; + virtual void set{{ property.name|upper_first }}({{ property.type|arg_type }} {{ property.name }}) = 0; + +{% endfor %} +{% if protected_functions %} + +protected: + {% for method in protected_functions %} + {# skipping any defined destructor #} + {% if not method.isDestructor %} + {% include "method_declaration_cpp.txt" %} + {% endif %} + {% endfor %} +{% endif %} +{% if private_functions %} + +private: + {% for method in private_functions %} + {# skipping any defined destructor #} + {% if not method.isDestructor %} + {% include "method_declaration.txt" %} + {% endif %} + {% endfor %} +{% endif %} +{% endblock class_body %} + +{% block outside_namespace %} +{{ block.super }} +Q_DECLARE_INTERFACE({% if namespaces %}{{ namespaces|join:"::" }}::{% endif %}{{ name }}, "{{ interfaceid }}") +{% endblock %} diff --git a/file_templates/classes/qt_interface/options.kcfg b/file_templates/classes/qt_interface/options.kcfg new file mode 100644 index 0000000000..800aa59da9 --- /dev/null +++ b/file_templates/classes/qt_interface/options.kcfg @@ -0,0 +1,13 @@ + + + + + + + {{ name }} + + + diff --git a/file_templates/classes/qt_interface/qt_interface.desktop b/file_templates/classes/qt_interface/qt_interface.desktop new file mode 100644 index 0000000000..cbc0cc81a6 --- /dev/null +++ b/file_templates/classes/qt_interface/qt_interface.desktop @@ -0,0 +1,18 @@ +[General] +Name=QObject interface class +Comment=QObject interface class with properties +Category=C++/Qt +Language=C++ +Type=Class +Files=Header,Implementation +OptionsFile=options.kcfg + +[Header] +Name=Public Header +File=interface.h +OutputFile={{ name }}.h + +[Implementation] +Name=Implementation +File=interface.cpp +OutputFile={{ name }}.cpp