#!/bin/bash # # Copyright (C) 2013-2020 Mattia Basaglia # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 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 Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . SELFDIR=$(dirname $(readlink -se "${BASH_SOURCE[0]}")) function class_to_underscore() { echo "$1" | sed -r -e 's/([a-z])([A-Z])/\1_\L\2/g' -e 's/[A-Z]/\L\0/g' } function class_to_header() { echo "$(class_to_underscore "$1").hpp" } function header_to_source() { echo "$1" | sed -r -e 's/\.h(pp)?$/.cpp/i' } function read_arg() { varname=$1 prompt="$2" default="$3" [ "$default" ] && prompt="${prompt} [$default]" read -p "$prompt: " -i "$default" $varname [ -z "${!varname}" ] && eval "$varname=\"$default\"" } function header_to_guard() { echo "$1" | tr [:lower:] [:upper:] | tr /. _ } read_arg class "Class name" [ -z "$class" ] && exit 1 read_arg description "Description" read_arg header "Header" "$(class_to_header "$class")" read_arg plugin "Plugin Class" "${class}_Plugin" read_arg plugin_header "Plugin Header" "$(class_to_header "$plugin")" read_arg plugin_source "Plugin Source" "$(header_to_source "$plugin_header")" read_arg plugin_path "Plugin Path" "$SELFDIR" read_arg plugin_author "Author" "$(git config user.name)" read_arg plugin_copyright "Copyright" "2013-$(date +%Y) $plugin_author" echo "Summary:" echo " Class: $class" echo " Description: $description" echo " Header: $header" echo " Plugin Class: $plugin" echo " Plugin Header: $plugin_header" echo " Plugin Source: $plugin_source" echo " Plugin Path: $plugin_path" echo " Author: $plugin_author" echo " Copyright: $plugin_copyright" object_name="$(class_to_underscore $class)" cat >"$plugin_path/$plugin_source" <. * */ #include "$plugin_header" #include "QtColorWidgets/$header" QWidget* $plugin::createWidget(QWidget *parent) { color_widgets::$class *widget = new color_widgets::$class(parent); return widget; } QIcon $plugin::icon() const { return QIcon(); } QString $plugin::domXml() const { return "\n" " \n" " \n" "\n"; } bool $plugin::isContainer() const { return false; } $plugin::$plugin(QObject *parent) : QObject(parent), initialized(false) { } void $plugin::initialize(QDesignerFormEditorInterface *) { initialized = true; } bool $plugin::isInitialized() const { return initialized; } QString $plugin::name() const { return "color_widgets::$class"; } QString $plugin::group() const { return "Color Widgets"; } QString $plugin::toolTip() const { return "$description"; } QString $plugin::whatsThis() const { return toolTip(); } QString $plugin::includeFile() const { return "QtColorWidgets/$header"; } PLUGIN header_guard="COLOR_WIDGETS_$(header_to_guard "$plugin_header")" cat >"$plugin_path/$plugin_header" <. * */ #ifndef $header_guard #define $header_guard #include #include class $plugin : public QObject, public QDesignerCustomWidgetInterface { Q_OBJECT Q_INTERFACES(QDesignerCustomWidgetInterface) public: explicit $plugin(QObject *parent = nullptr); void initialize(QDesignerFormEditorInterface *core) Q_DECL_OVERRIDE; bool isInitialized() const Q_DECL_OVERRIDE; QWidget *createWidget(QWidget *parent) Q_DECL_OVERRIDE; QString name() const Q_DECL_OVERRIDE; QString group() const Q_DECL_OVERRIDE; QIcon icon() const Q_DECL_OVERRIDE; QString toolTip() const Q_DECL_OVERRIDE; QString whatsThis() const Q_DECL_OVERRIDE; bool isContainer() const Q_DECL_OVERRIDE; QString domXml() const Q_DECL_OVERRIDE; QString includeFile() const Q_DECL_OVERRIDE; private: bool initialized; }; #endif // $header_guard PLUGIN sed -i -r \ -e "\\~# add new sources above this line~i\\$plugin_source" \ -e "\\~# add new headers above this line~i\\$plugin_header" \ "$plugin_path/CMakeLists.txt" sed -i -r \ -e "\\~// add new plugin headers above this line~i#include \"$plugin_header\"" \ -e "\\~// add new plugins above this line~i\ widgets.push_back(new $plugin(this));" \ "$plugin_path/color_widget_plugin_collection.cpp"