diff --git a/file_templates/CMakeLists.txt b/file_templates/CMakeLists.txt --- a/file_templates/CMakeLists.txt +++ b/file_templates/CMakeLists.txt @@ -8,6 +8,7 @@ classes/c_gobject_private classes/c_gobject_properties classes/qt_shared + classes/qt_interface testing/cpp_cpputest testing/cpp_gtest diff --git a/file_templates/classes/qt_interface/interface.h b/file_templates/classes/qt_interface/interface.h new file mode 100644 --- /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/interface.cpp b/file_templates/classes/qt_interface/interface.cpp new file mode 100644 --- /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/options.kcfg b/file_templates/classes/qt_interface/options.kcfg new file mode 100644 --- /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 --- /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