You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebindings/qtjava/designer/juic/common/main.xsl

569 lines
21 KiB

<?xml version="1.0" encoding="iso-8859-1"?>
<!--
** Author: Marco Ladermann (<marco.ladermann@gmx.de>)
** Date: Sat Feb 01 18:26:59 CET 2003 @768 /Internet Time/
**
** This software is free software. It is released under the terms of the
** GNU Lesser General Public Licence (LGPL)
** see http://www.gnu.org/copyleft/lesser.html
**
** These stylesheets are distributed in the hope that they will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-->
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:set="http://exslt.org/sets"
extension-element-prefixes="exsl set"
>
<xsl:import href="classes.xsl"/>
<xsl:import href="properties.xsl"/>
<xsl:output encoding="utf-8" indent="no" method="text"/>
<!--
<xsl:variable name="QtClasses" select="document('QtClasses.xml')"/>
-->
<!--
** Matching the root node call named templates to do all the work
** @param data opaque data for user purpose
-->
<xsl:template match="/" mode="main">
<xsl:param name="data"/>
<xsl:message>Java package : "<xsl:value-of select="$package"/>"</xsl:message>
<xsl:message>Abstract slots : "<xsl:value-of select="$abstract"/>"</xsl:message>
<xsl:message>Method main : "<xsl:value-of select="$main"/>"</xsl:message>
<xsl:message>Image directory : "<xsl:value-of select="$images"/>"</xsl:message>
<xsl:message>Output directory: "<xsl:value-of select="$outdir"/>"</xsl:message>
<xsl:message>OS type : "<xsl:value-of select="$os"/>"</xsl:message>
<xsl:message></xsl:message>
<xsl:if test="$abstract and $main">
<xsl:message>Class will be abstract without main method</xsl:message>
</xsl:if>
<xsl:call-template name="createFileHeader">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:call-template name="createClassPreamble">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:call-template name="createClassHeader">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:call-template name="createInstanceVariables">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:call-template name="createConstructors">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:call-template name="createSlots">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:call-template name="createMethods">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:call-template name="createMain">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:call-template name="createClassFooter">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!--
** Create the file header
** @param data opaque data for user purpose
-->
<xsl:template name="createFileHeader">
<xsl:param name="data"/>
<xsl:call-template name="putFileHeader">
<xsl:with-param name="comment" select="/UI/comment"/>
<xsl:with-param name="author" select="/UI/author"/>
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!--
** Finds all Qt classes to import and forwards a set of them to the
** template "putClassPreamble". The set of classes is given as a set
** of class-tagged names.
** @param data opaque data for user purpose
-->
<xsl:template name="createClassPreamble">
<xsl:param name="data"/>
<xsl:variable name="classes.tf">
<xsl:if test="not($abstract) and $main">
<xsl:choose>
<xsl:when test="$kde">
<class>KApplication</class>
<class>KCmdLineArgs</class>
</xsl:when>
<xsl:otherwise>
<class>TQApplication</class>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<class>TQWidget</class>
<xsl:apply-templates mode="classes"/>
</xsl:variable>
<xsl:variable name="classes.ns" select="exsl:node-set($classes.tf)"/>
<xsl:variable name="classes" select="set:distinct($classes.ns/class)"/>
<xsl:variable name="sortedClasses">
<xsl:for-each select="exsl:node-set($classes)">
<xsl:sort/>
<class><xsl:value-of select="."/></class>
</xsl:for-each>
</xsl:variable>
<xsl:call-template name="putClassPreamble">
<xsl:with-param name="classes" select="exsl:node-set($sortedClasses)"/>
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!--
** Create the class header
** @param data opaque data for user purpose
-->
<xsl:template name="createClassHeader">
<xsl:param name="data"/>
<xsl:call-template name="putClassHeader">
<xsl:with-param name="extends" select="/UI/widget/@class"/>
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!--
** Create the instance variables
** @param data opaque data for user purpose
-->
<xsl:template name="createInstanceVariables">
<xsl:param name="data"/>
<xsl:call-template name="putVariables">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:apply-templates mode="declareInstances" select="/UI">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!--
** Create the constructors
** @param data opaque data for user purpose
-->
<xsl:template name="createConstructors">
<xsl:param name="data"/>
<xsl:call-template name="putConstructors">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!--
** Create the slots
** @param data opaque data for user purpose
-->
<xsl:template name="createSlots">
<xsl:param name="data"/>
<xsl:for-each select="/UI/slots/slot | /UI/connections/slot">
<xsl:call-template name="putSlot">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!--
** Create the signals
** @param data opaque data for user purpose
-->
<xsl:template name="createSignals">
<xsl:param name="data"/>
<xsl:for-each select="/UI/signals/signal">
<xsl:call-template name="putSignal">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!--
** Create the methods
** @param data opaque data for user purpose
-->
<xsl:template name="createMethods">
<xsl:param name="data"/>
<xsl:call-template name="putMethods">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!--
** Create the main class
** @param data opaque data for user purpose
-->
<xsl:template name="createMain">
<xsl:param name="data"/>
<xsl:call-template name="putMain">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!--
** Create the class header, i.e. the class declaration and
** the declaration of the instance variables
** @param data opaque data for user purpose
-->
<xsl:template name="createClassFooter">
<xsl:param name="data"/>
<xsl:call-template name="putClassFooter">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!--
** Create the instance definitions
** @param data opaque data for user purpose
-->
<xsl:template name="createInstanceDefinitions">
<xsl:param name="data"/>
<xsl:apply-templates mode="defineInstances" select="/UI/widget">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!--
** Create the database definitions
** @param data opaque data for user purpose
-->
<xsl:template name="createDatabaseDefinitions">
<xsl:param name="data"/>
<xsl:for-each select="//widget[@class = 'TQDataBrowser']">
<xsl:call-template name="putDatabaseDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!--
** Create the action definitions
** @param data opaque data for user purpose
-->
<xsl:template name="createActionDefinitions">
<xsl:param name="data"/>
<xsl:apply-templates mode="defineActions" select="/UI/actions/*">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!--
** Create the toolbar definitions
** @param data opaque data for user purpose
-->
<xsl:template name="createToolbarDefinitions">
<xsl:param name="data"/>
<xsl:apply-templates mode="toolbar" select="/UI/toolbars/toolbar">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!--
** Create the menubar definitions
** @param data opaque data for user purpose
-->
<xsl:template name="createMenubarDefinitions">
<xsl:param name="data"/>
<xsl:apply-templates mode="menubar" select="/UI/menubar">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!--
** Create the connection definitions
** @param data opaque data for user purpose
-->
<xsl:template name="createConnectionDefinitions">
<xsl:param name="data"/>
<xsl:for-each select="/UI/connections/connection">
<xsl:call-template name="putConnectionDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!--
** Create the tabstops definitions
** @param data opaque data for user purpose
-->
<xsl:template name="createTabstopsDefinitions">
<xsl:param name="data"/>
<xsl:if test="/UI/tabstops">
<xsl:call-template name="putTabstops">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!--
** Declare instance variables for all children objects of the
** main widget, actions, menubars etc.
** @param data opaque data for user purpose
-->
<!-- Declare instances of all objects that are not TQLayoutWidgets -->
<xsl:template match="property[(@name = 'name') and not(../@class = 'TQLayoutWidget')]" mode="declareInstances" priority="1">
<xsl:param name="data"/>
<xsl:call-template name="putInstanceVariable"><!-- call user hook -->
<xsl:with-param name="class">
<xsl:apply-templates mode="toClass" select=".."/>
</xsl:with-param>
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!-- Declare instances of all objects that are TQLayoutWidgets not included in a hbox, vbox or grid -->
<xsl:template match="property[(@name = 'name') and (../@class = 'TQLayoutWidget') and (count(ancestor::hbox|ancestor::vbox|ancestor::grid)=0)]" mode="declareInstances">
<xsl:param name="data"/>
<xsl:message>Declare a TQLayoutWidget</xsl:message>
<xsl:call-template name="putInstanceVariable"><!-- call user hook -->
<xsl:with-param name="class">
<xsl:apply-templates mode="toClass" select=".."/>
</xsl:with-param>
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="menubar/item" mode="declareInstances">
<xsl:param name="data"/>
<xsl:call-template name="putInstanceVariable"><!-- call user hook -->
<xsl:with-param name="class">
<class>TQPopupMenu</class>
</xsl:with-param>
<xsl:with-param name="name" select="@name"/>
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!-- leave out the main widget -->
<xsl:template match="/UI/widget" mode="declareInstances" priority="1">
<xsl:param name="data"/>
<xsl:apply-templates mode="declareInstances" select="widget|grid|hbox|vbox">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!-- descent -->
<xsl:template match="widget|grid|hbox|vbox" mode="declareInstances">
<xsl:param name="data"/>
<xsl:apply-templates mode="declareInstances" select="*">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="text()|@*" mode="declareInstances"/>
<!--
**
** The following templates generate the definitions of the instance variables.
** They are called/applied in the "putConstructor" template
**
-->
<!-- Match the toplevel widget -->
<xsl:template match="/UI/widget" mode="defineInstances" priority="1">
<xsl:param name="data"/>
<xsl:call-template name="putTopLevelWindowDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:apply-templates mode="defineInstances">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!-- Match subsequent widgets -->
<xsl:template match="widget[@class = 'TQLayoutWidget']" mode="defineInstances" priority="1">
<xsl:param name="data"/>
<xsl:if test="count(ancestor::hbox|ancestor::vbox|ancestor::grid)=0">
<xsl:call-template name="putWidgetDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:if>
<xsl:apply-templates mode="defineInstances">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!-- Match subsequent widgets -->
<xsl:template match="widget[not(@class = 'TQLayoutWidget')]" mode="defineInstances">
<xsl:param name="data"/>
<xsl:call-template name="putWidgetDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:apply-templates mode="defineInstances">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!-- Match layout tags -->
<xsl:template match="grid|hbox|vbox" mode="defineInstances">
<xsl:param name="data"/>
<xsl:variable name="class">
<xsl:apply-templates mode="toClass" select="."/>
</xsl:variable>
<xsl:call-template name="putLayoutDefinition">
<xsl:with-param name="class" select="$class"/>
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:apply-templates mode="defineInstances">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
<xsl:for-each select="widget|spacer">
<xsl:call-template name="putLayoutContentDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!-- Match column tags -->
<xsl:template match="column" mode="defineInstances">
<xsl:param name="data"/>
<xsl:call-template name="putColumnDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!-- Match row tags -->
<xsl:template match="row" mode="defineInstances">
<xsl:param name="data"/>
<xsl:call-template name="putRowDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!-- Match item tags -->
<xsl:template match="item" mode="defineInstances">
<xsl:param name="data"/>
<xsl:variable name="containerClass">
<xsl:apply-templates mode="toClass" select=".."/>
</xsl:variable>
<xsl:call-template name="putItemDefinition">
<xsl:with-param name="class" select="$containerClass"/>
<xsl:with-param name="number" select="count(preceding-sibling::item)"/>
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<!-- Match spacer tags -->
<xsl:template match="spacer" mode="defineInstances">
<xsl:param name="data"/>
<xsl:call-template name="putSpacerDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<!-- <xsl:apply-templates mode="defineInstances">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
-->
</xsl:template>
<xsl:template match="property[not(@name = 'name')]" mode="defineInstances">
<xsl:param name="data"/>
<xsl:apply-templates mode="property">
<xsl:with-param name="name" select="@name"/>
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!-- Ignore everything else -->
<xsl:template match="text()|@*" mode="defineInstances"/>
<!-- ACTIONS -->
<xsl:template match="action" mode="defineActions">
<xsl:param name="data"/>
<xsl:call-template name="putActionDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:apply-templates select="*" mode="defineInstances">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="actiongroup" mode="defineActions">
<xsl:param name="data"/>
<xsl:call-template name="putActionGroupDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:apply-templates select="*" mode="defineActions">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<!-- Ignore everything else -->
<xsl:template match="*|text()|@*" mode="defineActions"/>
<!--
** Match menubar
-->
<xsl:template match="menubar" mode="menubar">
<xsl:param name="data"/>
<xsl:call-template name="putMenubarDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:apply-templates mode="menubar">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="item" mode="menubar">
<xsl:param name="data"/>
<xsl:call-template name="putMenubarItemDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:apply-templates mode="menubar">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="action" mode="menubar">
<xsl:param name="data"/>
<xsl:call-template name="putMenubarActionDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="separator" mode="menubar">
<xsl:param name="data"/>
<xsl:call-template name="putMenubarSeperatorDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="*|text()|@*" mode="menubar"/>
<!--
** Match Toolbar
-->
<xsl:template match="toolbar" mode="toolbar">
<xsl:param name="data"/>
<xsl:call-template name="putToolbarDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
<xsl:apply-templates mode="toolbar">
<xsl:with-param name="data" select="$data"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="action" mode="toolbar">
<xsl:param name="data"/>
<xsl:call-template name="putToolbarActionDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="separator" mode="toolbar">
<xsl:param name="data"/>
<xsl:call-template name="putToolbarSeperatorDefinition">
<xsl:with-param name="data" select="$data"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="*|text()|@*" mode="toolbar"/>
</xsl:stylesheet>