diff options
Diffstat (limited to 'qtjava/designer/juic/common/main.xsl')
-rw-r--r-- | qtjava/designer/juic/common/main.xsl | 568 |
1 files changed, 568 insertions, 0 deletions
diff --git a/qtjava/designer/juic/common/main.xsl b/qtjava/designer/juic/common/main.xsl new file mode 100644 index 00000000..fd18d274 --- /dev/null +++ b/qtjava/designer/juic/common/main.xsl @@ -0,0 +1,568 @@ +<?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>QApplication</class> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <class>QWidget</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 = 'QDataBrowser']"> + <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 QLayoutWidgets --> + <xsl:template match="property[(@name = 'name') and not(../@class = 'QLayoutWidget')]" 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 QLayoutWidgets not included in a hbox, vbox or grid --> + <xsl:template match="property[(@name = 'name') and (../@class = 'QLayoutWidget') and (count(ancestor::hbox|ancestor::vbox|ancestor::grid)=0)]" mode="declareInstances"> + <xsl:param name="data"/> + <xsl:message>Declare a QLayoutWidget</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>QPopupMenu</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 = 'QLayoutWidget']" 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 = 'QLayoutWidget')]" 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> + |