فهرست منبع

Got rid of legacy dir

Joeri Exelmans 4 سال پیش
والد
کامیت
0c6429f0fa
100فایلهای تغییر یافته به همراه0 افزوده شده و 10446 حذف شده
  1. 0 225
      legacy/doc/Makefile
  2. 0 11
      legacy/doc/_static/mystyle.css
  3. 0 5
      legacy/doc/_templates/layout.html
  4. 0 28
      legacy/doc/compiler.rst
  5. 0 340
      legacy/doc/conf.py
  6. 0 635
      legacy/doc/examples.rst
  7. 0 34
      legacy/doc/index.rst
  8. 0 25
      legacy/doc/installation.rst
  9. 0 6
      legacy/doc/internal_documentation.rst
  10. 0 443
      legacy/doc/language_features.rst
  11. 0 281
      legacy/doc/make.bat
  12. 0 75
      legacy/doc/runtime_platforms.rst
  13. 0 31
      legacy/doc/semantic_options.rst
  14. 0 101
      legacy/doc/sockets.rst
  15. 0 5
      legacy/doc/statecharts_core_int.rst
  16. 0 16
      legacy/examples/HTTP_client/Makefile
  17. 0 138
      legacy/examples/HTTP_client/classes/http_client.xml
  18. 0 58
      legacy/examples/HTTP_client/classes/prompt.xml
  19. 0 422
      legacy/examples/HTTP_client/client.py
  20. 0 19
      legacy/examples/HTTP_client/client.xml
  21. 0 1
      legacy/examples/HTTP_client/make.bat
  22. 0 4
      legacy/examples/HTTP_client/run.sh
  23. 0 8
      legacy/examples/HTTP_client/run_client.py
  24. 0 16
      legacy/examples/HTTP_server/Makefile
  25. 0 47
      legacy/examples/HTTP_server/classes/echo.xml
  26. 0 110
      legacy/examples/HTTP_server/classes/server.xml
  27. 0 157
      legacy/examples/HTTP_server/classes/socket.xml
  28. 0 1
      legacy/examples/HTTP_server/make.bat
  29. 0 8
      legacy/examples/HTTP_server/run_echo_server.py
  30. 0 600
      legacy/examples/HTTP_server/server.py
  31. 0 22
      legacy/examples/HTTP_server/server.xml
  32. 0 9
      legacy/examples/Makefile
  33. 0 9
      legacy/examples/bouncingballs/Makefile
  34. 0 21
      legacy/examples/bouncingballs/js/Makefile
  35. 0 10
      legacy/examples/bouncingballs/js/index.html
  36. 0 1
      legacy/examples/bouncingballs/js/make.bat
  37. 0 403
      legacy/examples/bouncingballs/js/sccd.xml
  38. 0 35
      legacy/examples/bouncingballs/python/Makefile
  39. 0 5
      legacy/examples/bouncingballs/python/__init__.py
  40. 0 3
      legacy/examples/bouncingballs/python/make.bat
  41. 0 18
      legacy/examples/bouncingballs/python/runner.py
  42. 0 19
      legacy/examples/bouncingballs/python/runner_multiwindow.py
  43. 0 70
      legacy/examples/bouncingballs/python/runner_no_ui.py
  44. 0 23
      legacy/examples/bouncingballs/python/runner_performance.py
  45. 0 14
      legacy/examples/bouncingballs/python/runner_performance_cpu_time.py
  46. 0 18
      legacy/examples/bouncingballs/python/runner_performance_threads.py
  47. 0 405
      legacy/examples/bouncingballs/python/sccd.xml
  48. 0 369
      legacy/examples/bouncingballs/python/sccd_multiwindow.xml
  49. 0 707
      legacy/examples/bouncingballs/python/sccd_no_ui.py
  50. 0 387
      legacy/examples/bouncingballs/python/sccd_no_ui.xml
  51. 0 425
      legacy/examples/bouncingballs/python/sccd_performance.xml
  52. 0 179
      legacy/examples/bouncingballs/python/sccd_performance_cpu_time.xml
  53. 0 146
      legacy/examples/bouncingballs/python/sccd_performance_threads.xml
  54. 0 210
      legacy/examples/bouncingballs/python/ui_classes.py
  55. 0 122
      legacy/examples/bouncingballs/python/widget.py
  56. 0 125
      legacy/examples/bouncingballs/python/widget_private_ports.py
  57. 0 11
      legacy/examples/external-input/python/runner.py
  58. 0 180
      legacy/examples/external-input/python/test.py
  59. 0 64
      legacy/examples/external-input/python/test.xml
  60. 0 15
      legacy/examples/my-tests/python/Parallel_Bug/runner.py
  61. 0 110
      legacy/examples/my-tests/python/Parallel_Bug/tester.py
  62. 0 33
      legacy/examples/my-tests/python/Parallel_Bug/tester.xml
  63. 0 14
      legacy/examples/my-tests/python/SCCD_broadcast/runner.py
  64. 0 107
      legacy/examples/my-tests/python/SCCD_broadcast/tester.py
  65. 0 31
      legacy/examples/my-tests/python/SCCD_broadcast/tester.xml
  66. 0 35
      legacy/examples/my-tests/python/Yentil/runner.py
  67. 0 336
      legacy/examples/my-tests/python/Yentil/sccd_widget.py
  68. 0 94
      legacy/examples/my-tests/python/Yentil/tester.py
  69. 0 25
      legacy/examples/my-tests/python/Yentil/tester.xml
  70. 0 139
      legacy/examples/my-tests/python/bugwithsourcechild.py
  71. 0 44
      legacy/examples/my-tests/python/bugwithsourcechild.xml
  72. 0 154
      legacy/examples/my-tests/python/create_and_start.py
  73. 0 44
      legacy/examples/my-tests/python/create_and_start.xml
  74. 0 162
      legacy/examples/my-tests/python/else_transition.py
  75. 0 51
      legacy/examples/my-tests/python/else_transition.xml
  76. 0 95
      legacy/examples/my-tests/python/eventloop_bug.py
  77. 0 17
      legacy/examples/my-tests/python/eventloop_bug.xml
  78. 0 115
      legacy/examples/my-tests/python/exit_parallel.py
  79. 0 32
      legacy/examples/my-tests/python/exit_parallel.xml
  80. 0 117
      legacy/examples/my-tests/python/multiple_afters_running_behind.py
  81. 0 25
      legacy/examples/my-tests/python/multiple_afters_running_behind.xml
  82. 0 160
      legacy/examples/my-tests/python/multiple_raises_parallel.py
  83. 0 51
      legacy/examples/my-tests/python/multiple_raises_parallel.xml
  84. 0 3
      legacy/examples/my-tests/python/runner.py
  85. 0 3
      legacy/examples/my-tests/python/runner_bugwithsourcechild.py
  86. 0 3
      legacy/examples/my-tests/python/runner_create_and_start.py
  87. 0 3
      legacy/examples/my-tests/python/runner_else_transition.py
  88. 0 28
      legacy/examples/my-tests/python/runner_eventloop_bug.py
  89. 0 3
      legacy/examples/my-tests/python/runner_exit_parallel.py
  90. 0 3
      legacy/examples/my-tests/python/runner_multiple_afters_running_behind.py
  91. 0 3
      legacy/examples/my-tests/python/runner_multiple_raises_parallel.py
  92. 0 183
      legacy/examples/my-tests/python/server.py
  93. 0 79
      legacy/examples/my-tests/python/server.xml
  94. 0 133
      legacy/examples/tanks/AIMap.py
  95. 0 17
      legacy/examples/tanks/AITank.py
  96. 0 50
      legacy/examples/tanks/Bullet.py
  97. 0 19
      legacy/examples/tanks/Level.py
  98. 0 17
      legacy/examples/tanks/Makefile
  99. 0 33
      legacy/examples/tanks/Obstacle.py
  100. 0 0
      legacy/examples/tanks/PlayerTank.py

+ 0 - 225
legacy/doc/Makefile

@@ -1,225 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help
-help:
-	@echo "Please use \`make <target>' where <target> is one of"
-	@echo "  html       to make standalone HTML files"
-	@echo "  dirhtml    to make HTML files named index.html in directories"
-	@echo "  singlehtml to make a single large HTML file"
-	@echo "  pickle     to make pickle files"
-	@echo "  json       to make JSON files"
-	@echo "  htmlhelp   to make HTML files and a HTML help project"
-	@echo "  qthelp     to make HTML files and a qthelp project"
-	@echo "  applehelp  to make an Apple Help Book"
-	@echo "  devhelp    to make HTML files and a Devhelp project"
-	@echo "  epub       to make an epub"
-	@echo "  epub3      to make an epub3"
-	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
-	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-	@echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
-	@echo "  text       to make text files"
-	@echo "  man        to make manual pages"
-	@echo "  texinfo    to make Texinfo files"
-	@echo "  info       to make Texinfo files and run them through makeinfo"
-	@echo "  gettext    to make PO message catalogs"
-	@echo "  changes    to make an overview of all changed/added/deprecated items"
-	@echo "  xml        to make Docutils-native XML files"
-	@echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
-	@echo "  linkcheck  to check all external links for integrity"
-	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
-	@echo "  coverage   to run coverage check of the documentation (if enabled)"
-	@echo "  dummy      to check syntax errors of document sources"
-
-.PHONY: clean
-clean:
-	rm -rf $(BUILDDIR)/*
-
-.PHONY: html
-html:
-	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-.PHONY: dirhtml
-dirhtml:
-	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-.PHONY: singlehtml
-singlehtml:
-	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-	@echo
-	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-.PHONY: pickle
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
-.PHONY: json
-json:
-	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-	@echo
-	@echo "Build finished; now you can process the JSON files."
-
-.PHONY: htmlhelp
-htmlhelp:
-	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-	@echo
-	@echo "Build finished; now you can run HTML Help Workshop with the" \
-	      ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-.PHONY: qthelp
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@echo
-	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
-	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SCCD.qhcp"
-	@echo "To view the help file:"
-	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SCCD.qhc"
-
-.PHONY: applehelp
-applehelp:
-	$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
-	@echo
-	@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
-	@echo "N.B. You won't be able to view it unless you put it in" \
-	      "~/Library/Documentation/Help or install it in your application" \
-	      "bundle."
-
-.PHONY: devhelp
-devhelp:
-	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
-	@echo
-	@echo "Build finished."
-	@echo "To view the help file:"
-	@echo "# mkdir -p $$HOME/.local/share/devhelp/SCCD"
-	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SCCD"
-	@echo "# devhelp"
-
-.PHONY: epub
-epub:
-	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-	@echo
-	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-.PHONY: epub3
-epub3:
-	$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
-	@echo
-	@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
-
-.PHONY: latex
-latex:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo
-	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-	@echo "Run \`make' in that directory to run these through (pdf)latex" \
-	      "(use \`make latexpdf' here to do that automatically)."
-
-.PHONY: latexpdf
-latexpdf:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through pdflatex..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-.PHONY: latexpdfja
-latexpdfja:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through platex and dvipdfmx..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-.PHONY: text
-text:
-	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
-	@echo
-	@echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-.PHONY: man
-man:
-	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-	@echo
-	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-.PHONY: texinfo
-texinfo:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo
-	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
-	@echo "Run \`make' in that directory to run these through makeinfo" \
-	      "(use \`make info' here to do that automatically)."
-
-.PHONY: info
-info:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo "Running Texinfo files through makeinfo..."
-	make -C $(BUILDDIR)/texinfo info
-	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-.PHONY: gettext
-gettext:
-	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
-	@echo
-	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-.PHONY: changes
-changes:
-	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-	@echo
-	@echo "The overview file is in $(BUILDDIR)/changes."
-
-.PHONY: linkcheck
-linkcheck:
-	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-	@echo
-	@echo "Link check complete; look for any errors in the above output " \
-	      "or in $(BUILDDIR)/linkcheck/output.txt."
-
-.PHONY: doctest
-doctest:
-	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-	@echo "Testing of doctests in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/doctest/output.txt."
-
-.PHONY: coverage
-coverage:
-	$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
-	@echo "Testing of coverage in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/coverage/python.txt."
-
-.PHONY: xml
-xml:
-	$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
-	@echo
-	@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
-
-.PHONY: pseudoxml
-pseudoxml:
-	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
-	@echo
-	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
-
-.PHONY: dummy
-dummy:
-	$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
-	@echo
-	@echo "Build finished. Dummy builder generates no files."

+ 0 - 11
legacy/doc/_static/mystyle.css

@@ -1,11 +0,0 @@
-table.table-with-borders td, table.table-with-borders th {
-    padding: 1px 8px 1px 5px;
-    border-top: 1px solid #aaa;
-    border-left: 1px solid #aaa;
-    border-right: 1px solid #aaa;
-    border-bottom: 1px solid #aaa;
-}
-
-table.table-with-borders td:blank {
-    background-color: grey;
-}

+ 0 - 5
legacy/doc/_templates/layout.html

@@ -1,5 +0,0 @@
-{# layout.html #}
-{# Import the theme's layout. #}
-{% extends "!layout.html" %}
-
-{% set css_files = css_files + ['_static/mystyle.css'] %}

+ 0 - 28
legacy/doc/compiler.rst

@@ -1,28 +0,0 @@
-Compiler
-========
-To compile a conforming SCCDXML file, the provided Python compiler can be used. The compiler can compile conforming SCCD models to two languages: Python and Javascript. Three platforms are supported, for more information see :ref:`runtime_platforms`.
-
-The compiler can be used from the command line as follows::
-
-    $python -m sccd.compiler.sccdc --help
-    usage: python -m sccd.compiler.sccdc [-h] [-o OUTPUT] [-v VERBOSE]
-                                         [-p PLATFORM] [-l LANGUAGE]
-                                         input
-
-    positional arguments:
-      input                 The path to the XML file to be compiled.
-
-    optional arguments:
-      -h, --help            show this help message and exit
-      -o OUTPUT, --output OUTPUT
-                            The path to the generated code. Defaults to the same
-                            name as the input file but with matching extension.
-      -v VERBOSE, --verbose VERBOSE
-                            2 = all output; 1 = only warnings and errors; 0 = only
-                            errors; -1 = no output. Defaults to 2.
-      -p PLATFORM, --platform PLATFORM
-                            Let the compiled code run on top of threads, gameloop
-                            or eventloop. The default is eventloop.
-      -l LANGUAGE, --language LANGUAGE
-                            Target language, either "javascript" or "python".
-                            Defaults to the latter.

+ 0 - 340
legacy/doc/conf.py

@@ -1,340 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# SCCD documentation build configuration file, created by
-# sphinx-quickstart on Tue Aug 16 10:17:10 2016.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#
-# import os
-# import sys
-# sys.path.insert(0, os.path.abspath('.'))
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
-    'sphinx.ext.autodoc',
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-#
-# source_suffix = ['.rst', '.md']
-source_suffix = '.rst'
-
-# The encoding of source files.
-#
-# source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = u'SCCD'
-copyright = u'2016, Simon Van Mierlo'
-author = u'Simon Van Mierlo'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = u'0.9'
-# The full version, including alpha/beta/rc tags.
-release = u'0.9'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#
-# today = ''
-#
-# Else, today_fmt is used as the format for a strftime call.
-#
-# today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This patterns also effect to html_static_path and html_extra_path
-exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-#
-# default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#
-# add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#
-# add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#
-# show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-# modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-# keep_warnings = False
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = False
-
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-#
-html_theme = 'classic'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#
-# html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-# html_theme_path = []
-
-# The name for this set of Sphinx documents.
-# "<project> v<release> documentation" by default.
-#
-# html_title = u'SCCD v0.9'
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#
-# html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#
-# html_logo = None
-
-# The name of an image file (relative to this directory) to use as a favicon of
-# the docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#
-# html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-#
-# html_extra_path = []
-
-# If not None, a 'Last updated on:' timestamp is inserted at every page
-# bottom, using the given strftime format.
-# The empty string is equivalent to '%b %d, %Y'.
-#
-# html_last_updated_fmt = None
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#
-# html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#
-# html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#
-# html_additional_pages = {}
-
-# If false, no module index is generated.
-#
-# html_domain_indices = True
-
-# If false, no index is generated.
-#
-# html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#
-# html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#
-# html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#
-# html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#
-# html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#
-# html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-# html_file_suffix = None
-
-# Language to be used for generating the HTML full-text search index.
-# Sphinx supports the following languages:
-#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
-#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh'
-#
-# html_search_language = 'en'
-
-# A dictionary with options for the search language support, empty by default.
-# 'ja' uses this config value.
-# 'zh' user can custom change `jieba` dictionary path.
-#
-# html_search_options = {'type': 'default'}
-
-# The name of a javascript file (relative to the configuration directory) that
-# implements a search results scorer. If empty, the default will be used.
-#
-# html_search_scorer = 'scorer.js'
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'SCCDdoc'
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
-     # The paper size ('letterpaper' or 'a4paper').
-     #
-     # 'papersize': 'letterpaper',
-
-     # The font size ('10pt', '11pt' or '12pt').
-     #
-     # 'pointsize': '10pt',
-
-     # Additional stuff for the LaTeX preamble.
-     #
-     # 'preamble': '',
-
-     # Latex figure (float) alignment
-     #
-     # 'figure_align': 'htbp',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-#  author, documentclass [howto, manual, or own class]).
-latex_documents = [
-    (master_doc, 'SCCD.tex', u'SCCD Documentation',
-     u'Simon Van Mierlo', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#
-# latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#
-# latex_use_parts = False
-
-# If true, show page references after internal links.
-#
-# latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#
-# latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-#
-# latex_appendices = []
-
-# It false, will not define \strong, \code, 	itleref, \crossref ... but only
-# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
-# packages.
-#
-# latex_keep_old_macro_names = True
-
-# If false, no module index is generated.
-#
-# latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
-    (master_doc, 'sccd', u'SCCD Documentation',
-     [author], 1)
-]
-
-# If true, show URL addresses after external links.
-#
-# man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-#  dir menu entry, description, category)
-texinfo_documents = [
-    (master_doc, 'SCCD', u'SCCD Documentation',
-     author, 'SCCD', 'One line description of project.',
-     'Miscellaneous'),
-]
-
-# Documents to append as an appendix to all manuals.
-#
-# texinfo_appendices = []
-
-# If false, no module index is generated.
-#
-# texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#
-# texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-#
-# texinfo_no_detailmenu = False

+ 0 - 635
legacy/doc/examples.rst

@@ -1,635 +0,0 @@
-Examples
-========
-
-Timer
------
-This example demonstrates the timed behavior of SCCD. It does not have dynamic structure.
-
-We model a clock which prints the current time every 0.05 seconds. Two clocks are printed: the current wall-clock time and the current simulated time. We expect both to (almost) be the same. The user can interrupt the clock by sending an "interrupt" event. The user can resume the clock by sending a "resume" event.
-
-Threads (Python)
-^^^^^^^^^^^^^^^^
-In this version, the model sends the current times to an output port, on which the user listens, to print out these times. *self.getSimulatedTime()* and *time()* return the current time in milliseconds, which we have to convert to seconds.
-
-The SCCD model::
-
-    <?xml version="1.0" ?>
-    <diagram author="Simon Van Mierlo" name="Timer (Threaded Version)">
-        <top>
-            from sccd.runtime.accurate_time import time
-        </top>
-        
-        <inport name="input" />        
-        <outport name="output" />
-
-        <class name="MainApp" default="true">
-            <scxml initial="running">
-                <state id="running">
-                    <transition target="." after="0.05">
-                        <raise event="time_update" port="output">
-                            <parameter expr="self.getSimulatedTime()" />
-                            <parameter expr="time()" />
-                        </raise>
-                    </transition>
-                    <transition target="../interrupted" event="interrupt" port="input">
-                        <raise event="time_update" port="output">
-                            <parameter expr="self.getSimulatedTime()" />
-                            <parameter expr="time()" />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="interrupted">
-                    <transition target="." event="interrupt" port="input">
-                        <raise event="time_update" port="output">
-                            <parameter expr="self.getSimulatedTime()" />
-                            <parameter expr="time()" />
-                        </raise>
-                    </transition>
-                    <transition target="../running" event="continue" port="input">
-                        <raise event="time_update" port="output">
-                            <parameter expr="self.getSimulatedTime()" />
-                            <parameter expr="time()" />
-                        </raise>
-                    </transition>
-                </state>
-            </scxml>
-        </class>
-    </diagram>
-    
-To compile, save this in a file called ``timer.xml`` and run ``python -m sccd.compiler.sccdc -p threads -l python timer.xml``
-
-Then, the following file will run the model::
-
-    import timer
-    from sccd.runtime.statecharts_core import Event
-    import threading
-
-    if __name__ == '__main__':
-        controller = timer.Controller()
-        
-        def raw_inputter():
-            while 1:
-                controller.addInput(Event(raw_input(), "input", []))
-        input_thread = threading.Thread(target=raw_inputter)
-        input_thread.daemon = True
-        input_thread.start()
-        
-        output_listener = controller.addOutputListener(["output"])
-        def outputter():
-            while 1:
-                event = output_listener.fetch(-1)
-                print "SIMTIME: %.2fs" % (event.getParameters()[0] / 1000.0)
-                print "ACTTIME: %.2fs" % (event.getParameters()[1] / 1000.0)
-        output_thread = threading.Thread(target=outputter)
-        output_thread.daemon = True
-        output_thread.start()
-        
-        controller.start()
-        
-The time will be printed to the console. The user can send events by typing the string "interrupt" or "continue" in the console.
-
-Eventloop (Python)
-^^^^^^^^^^^^^^^^^^
-The SCCD model::
-
-    <?xml version="1.0" ?>
-    <diagram author="Simon Van Mierlo" name="Timer (Eventloop Version)">
-        <top>
-            from sccd.runtime.libs.ui import ui
-            from sccd.runtime.accurate_time import time
-        </top>
-        
-        <inport name="ui" />
-
-        <class name="MainApp" default="true">
-            <method name="MainApp">
-                <body>
-                    <![CDATA[
-                    self.canvas = ui.append_canvas(ui.window,100,100,{'background':'#eee'})
-                    self.clock_text = self.canvas.element.create_text(25,25,{'text':'0.0'})
-                    self.actual_clock_text = self.canvas.element.create_text(25,50,{'text':'0.0'})
-                    interrupt_button = ui.append_button(ui.window, 'INTERRUPT');
-                    continue_button = ui.append_button(ui.window, 'CONTINUE');
-                    ui.bind_event(interrupt_button.element, ui.EVENTS.MOUSE_CLICK, self.controller, 'interrupt_clicked');
-                    ui.bind_event(continue_button.element, ui.EVENTS.MOUSE_CLICK, self.controller, 'continue_clicked');
-                    ]]>
-                </body>        
-            </method>
-            <method name="update_timers">
-                <body>
-                    self.canvas.element.itemconfigure(self.clock_text, text=str('%.2f' % (self.getSimulatedTime() / 1000.0)))
-                    self.canvas.element.itemconfigure(self.actual_clock_text, text='%.2f' % (time() / 1000.0))
-                </body>
-            </method>
-            <scxml initial="running">
-                <state id="running">
-                    <transition target="." after="0.05">
-                        <script>
-                            self.update_timers()
-                        </script>
-                    </transition>
-                    <transition target="../interrupted" event="interrupt_clicked" port="ui">
-                        <script>
-                            self.update_timers()
-                        </script>
-                    </transition>
-                </state>
-                <state id="interrupted">
-                    <transition target="." event="interrupt_clicked" port="ui">
-                        <script>
-                            self.update_timers()
-                        </script>
-                    </transition>
-                    <transition target="../running" event="continue_clicked" port="ui">
-                        <script>
-                            self.update_timers()
-                        </script>
-                    </transition>
-                </state>
-            </scxml>
-        </class>
-    </diagram>
-    
-To compile, save this in a file called ``timer.xml`` and run ``python -m sccd.compiler.sccdc -p eventloop -l python timer.xml``
-
-Then, the following file will run the model::
-
-    import Tkinter as tk
-    import timer
-    from sccd.runtime.libs.ui import ui
-    from sccd.runtime.statecharts_core import Event
-    from sccd.runtime.tkinter_eventloop import *
-
-    if __name__ == '__main__':
-        ui.window = tk.Tk()
-
-        controller = timer.Controller(TkEventLoop(ui.window))
-        controller.start()
-        ui.window.mainloop()
-        
-Eventloop (Javascript)
-^^^^^^^^^^^^^^^^^^^^^^
-The SCCD model::
-
-    <?xml version="1.0" ?>
-    <diagram author="Simon Van Mierlo" name="Timer">
-        <inport name="ui" />
-
-        <class name="MainApp" default="true">
-            <method name="MainApp">
-                <body>
-                    <![CDATA[
-                    this.canvas = ui.append_canvas(ui.window,400,150,{'background':'#eee'})
-                    this.clock_text = this.canvas.add_text(25,25,'0.0')
-                    this.actual_clock_text = this.canvas.add_text(25,50,'0.0')
-                    var interrupt_button = ui.append_button(ui.window, 'INTERRUPT');
-                    var continue_button = ui.append_button(ui.window, 'CONTINUE');
-                    ui.bind_event(interrupt_button.element, ui.EVENTS.MOUSE_CLICK, this.controller, 'interrupt_clicked');
-                    ui.bind_event(continue_button.element, ui.EVENTS.MOUSE_CLICK, this.controller, 'continue_clicked');
-                    ]]>
-                </body>
-            </method>
-            <method name="update_timers">
-                <body>
-                    this.clock_text.set_text((this.getSimulatedTime() / 1000).toFixed(2));
-                    this.actual_clock_text.set_text((this.getSimulatedTime() / 1000).toFixed(2));
-                </body>
-            </method>
-            <scxml initial="running">
-                <state id="running">
-                    <transition target="." after="0.05">
-                        <script>
-                            this.update_timers();
-                        </script>
-                    </transition>
-                    <transition target="../interrupted" event="interrupt_clicked" port="ui">
-                        <script>
-                            this.update_timers();
-                        </script>
-                    </transition>
-                </state>
-                <state id="interrupted">
-                    <transition target="." event="interrupt_clicked" port="ui">
-                        <script>
-                            this.update_timers();
-                        </script>
-                    </transition>
-                    <transition target="../running" event="continue_clicked" port="ui">
-                        <script>
-                            this.update_timers();
-                        </script>
-                    </transition>
-                </state>
-            </scxml>
-        </class>
-    </diagram>
-    
-To compile, save this in a file called ``timer.xml`` and run ``python -m sccd.compiler.sccdc -p eventloop -l javascript timer.xml``
-
-Then, the following file will run the model::
-
-    <div>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/HackTimer.js"></script>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/statecharts_core.js"></script>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/utils.js"></script>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/svg.js"></script>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/ui.js"></script>
-        <script src="timer.js"></script>
-        <script>
-            controller = new Timer.Controller(new JsEventLoop());
-            controller.start();
-        </script> 
-    </div>
-    
-Traffic Lights
---------------
-The traffic lights example demonstrates most functionality of SCCD. There are three lights (green, yellow, and red). The traffic light autonomously switches between them, but also listens for a police interrupt, which will flash the yellow light. When a second interrupt comes in, the light returns to its last configuration (using a history state).
-
-Python
-^^^^^^
-The SCCD model::
-
-    <?xml version="1.0" ?>
-    <diagram author="Raphael Mannadiar" name="Traffic_Light_Python_Version">
-        <top>
-            from sccd.runtime.libs.ui import ui
-        </top>
-        
-        <inport name="ui" />
-
-        <class name="MainApp" default="true">
-            <relationships>
-                <association name="trafficlight" class="TrafficLight" />
-            </relationships>
-            <method name="MainApp">
-                <body>
-                    <![CDATA[
-                    self.canvas   = ui.append_canvas(ui.window,100,310,{'background':'#eee'});
-                    police_button = ui.append_button(ui.window, 'Police interrupt');
-                    quit_button   = ui.append_button(ui.window, 'Quit');
-                    ui.bind_event(police_button.element, ui.EVENTS.MOUSE_CLICK, self.controller, 'police_interrupt_clicked');
-                    ui.bind_event(quit_button.element,      ui.EVENTS.MOUSE_CLICK, self.controller, 'quit_clicked');
-                    ]]>
-                </body>        
-            </method>
-            <scxml initial="initializing">
-                <state id="initializing">
-                    <transition target="../creating">
-                        <raise scope="cd" event="create_instance">
-                            <parameter expr='"trafficlight"' />
-                            <parameter expr='"TrafficLight"' />
-                            <parameter expr="self.canvas" />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="creating">
-                    <transition event="instance_created" target="../initialized">
-                        <parameter name="association_name" type="string"/>
-                        <raise scope="cd" event="start_instance">
-                            <parameter expr="association_name" />
-                        </raise>
-                        <raise scope="narrow" event="set_association_name" target="association_name">
-                            <parameter expr="association_name" />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="initialized">
-                </state>
-            </scxml>
-        </class>
-
-        <class name="TrafficLight">
-            <relationships>
-            </relationships>
-            <method name="TrafficLight">
-                <parameter name="canvas" />
-                <body>
-                    <![CDATA[
-                    size        = 100;
-                    offset      = size+5;
-                    self.RED    = 0;
-                    self.YELLOW = 1;
-                    self.GREEN  = 2;
-                    self.colors = ['#f00','#ff0','#0f0']
-                    self.lights = [
-                        canvas.add_rectangle(size/2, size/2, size, size, {'fill':'#000'}),
-                        canvas.add_rectangle(size/2, size/2+offset,     size, size, {'fill':'#000'}),
-                        canvas.add_rectangle(size/2, size/2+2*offset, size, size, {'fill':'#000'})];
-                    ]]>
-                </body>
-            </method>
-            <method name="clear">
-                <body>
-                    <![CDATA[
-                    self.lights[self.RED].set_color('#000');
-                    self.lights[self.YELLOW].set_color('#000');
-                    self.lights[self.GREEN].set_color('#000');
-                    ]]>
-                </body>
-            </method>
-            <method name="setGreen">
-                <body>
-                    <![CDATA[
-                    self.clear();
-                    self.lights[self.GREEN].set_color(self.colors[self.GREEN]);
-                    ]]>
-                </body>
-            </method>
-            <method name="setYellow">
-                <body>
-                    <![CDATA[
-                    self.clear();
-                    self.lights[self.YELLOW].set_color(self.colors[self.YELLOW]);
-                    ]]>
-                </body>
-            </method>
-            <method name="setRed">
-                <body>
-                    <![CDATA[
-                    self.clear();
-                    self.lights[self.RED].set_color(self.colors[self.RED]);
-                    ]]>
-                </body>
-            </method>
-            <scxml initial="on">
-                <state id="on" initial="normal">
-                    <state id="normal" initial="red">
-                        <state id="red">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    self.setRed();
-                                    ]]>
-                                </script>
-                            </onentry>
-                            <transition after='3' target='../green'/>
-                        </state>
-                        <state id="green">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    self.setGreen();
-                                    ]]>
-                                </script>
-                            </onentry>
-                            <transition after='2' target='../yellow'/>
-                        </state>
-                        <state id="yellow">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    self.setYellow();
-                                    ]]>
-                                </script>
-                            </onentry>
-                        <transition after='1' target='../red'/>
-                        </state>
-                        <transition event='police_interrupt_clicked' port='ui' target='../interrupted'/>
-                        <history id="history"/>
-                    </state>
-                    <state id="interrupted" initial="yellow">
-                        <state id="yellow">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    self.setYellow();
-                                    ]]>
-                                </script>
-                            </onentry>
-                            <transition after='.5' target='../black'/>
-                        </state>
-                        <state id="black">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    self.clear();
-                                    ]]>
-                                </script>
-                            </onentry>
-                            <transition after='.5' target='../yellow'/>
-                        </state>
-                        <transition event='police_interrupt_clicked' port='ui' target='../normal/history'/>
-                    </state>
-                    <transition event='quit_clicked' port='ui' target='../off'/>
-                </state>
-                <state id="off">
-                    <onentry>
-                        <script>
-                            <![CDATA[
-                            self.clear();
-                            ]]>
-                        </script>
-                    </onentry>
-                </state>
-            </scxml>
-        </class>
-    </diagram>
-    
-To compile, save this in a file called ``trafficlight.xml`` and run ``python -m sccd.compiler.sccdc -p eventloop -l python trafficlight.xml``
-
-Then, the following file will run the model::
-
-    import Tkinter as tk
-    import trafficlight
-    from sccd.runtime.libs.ui import ui
-    from sccd.runtime.statecharts_core import Event
-    from sccd.runtime.tkinter_eventloop import *
-
-    if __name__ == '__main__':
-        ui.window = tk.Tk()
-
-        controller = trafficlight.Controller(TkEventLoop(ui.window))
-        controller.start()
-        ui.window.mainloop()
-        
-Javascript
-^^^^^^^^^^
-The SCCD model::
-
-    <?xml version="1.0" ?>
-    <diagram author="Raphael Mannadiar" name="Traffic_Light_JavaScript_Version">
-        <inport name="ui" />
-
-        <class name="MainApp" default="true">
-            <relationships>
-                <association name="trafficlight" class="TrafficLight" />
-            </relationships>
-            <method name="MainApp">
-                <body>
-                    <![CDATA[
-                    this.canvas	= ui.append_canvas(ui.window,100,310,{'background':'#eee'});
-                    var police_button = ui.append_button(ui.window, 'Police interrupt');
-                    var quit_button	= ui.append_button(ui.window, 'Quit');
-                    ui.bind_event(police_button.element, ui.EVENTS.MOUSE_CLICK, this.controller, 'police_interrupt_clicked');
-                    ui.bind_event(quit_button.element, 	 ui.EVENTS.MOUSE_CLICK, this.controller, 'quit_clicked');
-                    ]]>
-                </body>		
-            </method>
-            <scxml initial="initializing">
-                <state id="initializing">
-                    <transition target="../creating">
-                        <raise scope="cd" event="create_instance">
-                            <parameter expr='"trafficlight"' />
-                            <parameter expr='"TrafficLight"' />
-                            <parameter expr="this.canvas" />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="creating">
-                    <transition event="instance_created" target="../initialized">
-                        <parameter name="association_name" type="string"/>
-                        <raise scope="cd" event="start_instance">
-                            <parameter expr="association_name" />
-                        </raise>
-                        <raise scope="narrow" event="set_association_name" target="association_name">
-                            <parameter expr="association_name" />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="initialized">
-                </state>
-            </scxml>
-        </class>
-
-        <class name="TrafficLight">
-            <relationships>
-            </relationships>
-            <method name="TrafficLight">
-                <parameter name="canvas" />
-                <body>
-                    <![CDATA[
-                    var size 	= 100;
-                    var offset 	= size+5;
-                    this.RED 	= 0;
-                    this.YELLOW = 1;
-                    this.GREEN 	= 2;
-                    this.colors	= ['#f00','#ff0','#0f0']
-                    this.lights = [canvas.add_rectangle(size/2, size/2, 		 	 size, size, {'fill':'#000'}),
-                                        canvas.add_rectangle(size/2, size/2+offset,	 size, size, {'fill':'#000'}),
-                                        canvas.add_rectangle(size/2, size/2+2*offset, size, size, {'fill':'#000'})];
-                    ]]>
-                </body>
-            </method>
-            <method name="clear">
-                <body>
-                    <![CDATA[
-                    this.lights[this.RED].set_color('#000');
-                    this.lights[this.YELLOW].set_color('#000');
-                    this.lights[this.GREEN].set_color('#000');
-                    ]]>
-                </body>
-            </method>
-            <method name="setGreen">
-                <body>
-                    <![CDATA[
-                    this.clear();
-                    this.lights[this.GREEN].set_color(this.colors[this.GREEN]);
-                    ]]>
-                </body>
-            </method>
-            <method name="setYellow">
-                <body>
-                    <![CDATA[
-                    this.clear();
-                    this.lights[this.YELLOW].set_color(this.colors[this.YELLOW]);
-                    ]]>
-                </body>
-            </method>
-            <method name="setRed">
-                <body>
-                    <![CDATA[
-                    this.clear();
-                    this.lights[this.RED].set_color(this.colors[this.RED]);
-                    ]]>
-                </body>
-            </method>
-            <scxml initial="on">
-                <state id="on" initial="normal">
-                    <state id="normal" initial="red">
-                        <state id="red">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    this.setRed();
-                                    ]]>
-                                </script>
-                            </onentry>
-                            <transition after='3' target='../green'/>
-                        </state>
-                        <state id="green">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    this.setGreen();
-                                    ]]>
-                                </script>
-                            </onentry>
-                            <transition after='2' target='../yellow'/>
-                        </state>
-                        <state id="yellow">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    this.setYellow();
-                                    ]]>
-                                </script>
-                            </onentry>
-                        <transition after='1' target='../red'/>
-                        </state>
-                        <transition event='police_interrupt_clicked' port='ui' target='../interrupted'/>
-                        <history id="history"/>
-                    </state>
-                    <state id="interrupted" initial="yellow">
-                        <state id="yellow">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    this.setYellow();
-                                    ]]>
-                                </script>
-                            </onentry>
-                            <transition after='.5' target='../black'/>
-                        </state>
-                        <state id="black">
-                            <onentry>
-                                <script>
-                                    <![CDATA[
-                                    this.clear();
-                                    ]]>
-                                </script>
-                            </onentry>
-                            <transition after='.5' target='../yellow'/>
-                        </state>
-                        <transition event='police_interrupt_clicked' port='ui' target='../normal/history'/>
-                    </state>
-                    <transition event='quit_clicked' port='ui' target='../off'/>
-                </state>
-                <state id="off">
-                    <onentry>
-                        <script>
-                            <![CDATA[
-                            this.clear();
-                            ]]>
-                        </script>
-                    </onentry>
-                </state>
-            </scxml>
-        </class>
-    </diagram>
-    
-To compile, save this in a file called ``trafficlight.xml`` and run ``python -m sccd.compiler.sccdc -p eventloop -l javascript trafficlight.xml``
-
-Then, the following file will run the model::
-
-    <div>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/HackTimer.js"></script>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/statecharts_core.js"></script>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/utils.js"></script>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/svg.js"></script>
-        <script src="https://msdl.uantwerpen.be/git/simon/SCCD/raw/v0.9/src/javascript_sccd_runtime/libs/ui.js"></script>
-        <script src="trafficlight.js"></script>
-        <script>
-        controller = new Traffic_Light_JavaScript_Version.Controller(new JsEventLoop());
-        controller.start();
-        </script> 
-    </div>

+ 0 - 34
legacy/doc/index.rst

@@ -1,34 +0,0 @@
-.. SCCD documentation master file, created by
-   sphinx-quickstart on Tue Aug 16 10:17:10 2016.
-   You can adapt this file completely to your liking, but it should at least
-   contain the root `toctree` directive.
-
-SCCD Documentation
-==================
-
-SCCD [SCCD]_ is a language that combines the Statecharts [Statecharts]_ language with Class Diagrams. It allows users to model complex, timed, autonomous, reactive, dynamic-structure systems.
-
-The concrete syntax of SCCD is an XML-format loosely based on the `W3C SCXML recommendation <https://www.w3.org/TR/scxml/>`_. A conforming model can be compiled to a number of programming languages, as well as a number of runtime platforms implemented in those languages. This maximizes the number of applications that can be modelled using SCCD, such as user interfaces, the artificial intelligence of game characters, controller software, and much more.
-
-This documentation serves as an introduction to the SCCD language, its compiler, and the different supported runtime platforms.
-
-Contents
---------
-
-.. toctree::
-   :maxdepth: 2
-
-    Installation <installation>
-    Language Features <language_features>
-    Compiler <compiler>
-    Runtime Platforms <runtime_platforms>
-    Examples <examples>
-    Semantic Options <semantic_options>
-    Socket Communication <sockets>
-    Internal Documentation <internal_documentation>
-    
-References
-----------
-    
-.. [SCCD] Simon Van Mierlo, Yentl Van Tendeloo, Bart Meyers, Joeri Exelmans, and Hans Vangheluwe. SCCD: SCXML extended with class diagrams. In *3rd Workshop on Engineering Interactive Systems with SCXML, part of EICS 2016*, 2016. [`LINK <http://www.scxmlworkshop.de/eics2016/submissions/SCCD%20SCXML%20Extended%20with%20Class%20Diagrams.pdf>`_]
-.. [Statecharts] David Harel. Statecharts: A visual formalism for complex systems. *Sci. Comput. Program. 8*, 3 (1987), 231–274. [`LINK <http://www.inf.ed.ac.uk/teaching/courses/seoc/2005_2006/resources/statecharts.pdf>`_]

+ 0 - 25
legacy/doc/installation.rst

@@ -1,25 +0,0 @@
-Installation
-============
-This section describes the necessary steps for installing SCCD.
-
-Download
---------
-The current version of SCCD is v0.9. You can download it using this link: https://msdl.uantwerpen.be/git/simon/SCCD/archive/v0.9.zip
-
-Unzip the contents of the archive to a folder of your choice.
-
-Dependencies
-------------
-SCCD depends on Python 2.7, which you can download from https://www.python.org/download/releases/2.7/
-
-SCCD Installation
---------------------
-Execute the following command inside the *src* folder::
-
-    python setup.py install --user
-    
-Afterwards, SCCD should be installed. This can easily be checked with the command::
-
-    python -c "import sccd"
-    
-If this returns without errors, SCCD is sucessfully installed.

+ 0 - 6
legacy/doc/internal_documentation.rst

@@ -1,6 +0,0 @@
-Internal Documentation
-======================
-
-.. toctree::
-
-    Statecharts Core <statecharts_core_int>

+ 0 - 443
legacy/doc/language_features.rst

@@ -1,443 +0,0 @@
-Language Features
-=================
-SCCD(XML)'s notation is loosely based on the `W3C SCXML recommendation <https://www.w3.org/TR/scxml/>`_. It adds concepts of Class Diagrams. In essence, an SCCD model consists of a number of classes that are related to each other through associations. Each class has a Statechart, defining its runtime behavior.
-
-One class is the default class. When the system is run, the runtime creates and starts one instance of that class. Instances can create, start, and delete instances of classes (if it's allowed by the constraints modelled on the class diagram). They can also create and delete instances of associations (*i.e.* links between instances). These links are used for one instance to communicate with (an)other instance(s).
-
-Top-Level Elements
-------------------
-
-.. _diagram:
-
-<diagram>
-^^^^^^^^^
-The top-level element of an SCCD model is a ``<diagram>``. It has two attributes:
-
-* *name* specifies the name of the diagram. For models compiled to Python, this is purely informative, while in Javascript this is the name of the namespace to which the compiled classes belong.
-* *author* specifies who authored the model
-
-Children:
-
-* ``[0..1]`` :ref:`description`
-* ``[0..1]`` :ref:`top`
-* ``[0..n]`` :ref:`inport_outport`
-* ``[1..n]`` :ref:`class`
-
-.. _description:
-
-<description>
-^^^^^^^^^^^^^
-.. note:: This is a child element of :ref:`diagram`.
-
-The ``<description>`` element contains a description of the diagram and optionally occurs once. It will be placed as a comment at the top of the compiled file.
-
-.. _top:
-
-<top>
-^^^^^
-.. note:: This is a child element of :ref:`diagram`.
-.. warning:: Python only!
-
-The ``<top>`` element can be used to import additional library modules to be used by the classes modelled in the diagram. It can optionally occur once.
-
-.. _inport_outport:
-
-<inport> and <outport>
-^^^^^^^^^^^^^^^^^^^^^^
-.. note:: This is a child element of :ref:`diagram` or :ref:`class`.
-
-An ``<inport>`` models a communication channel which can receive events from the outside world. An ``<outport>`` models a communication channel with which instances can send event to the outside world.
-
-Ports have one attribute: a *name*. This name can be referenced either in :ref:`transition` (for input ports) or :ref:`raise` (for output ports).
-
-In case the port is a child of a class, the port is local to that class. Each instance of the class will receive a private instance of the port, on which only they can receive events or can send events to.
-
-Class Diagram Concepts
-----------------------
-
-.. _class:
-
-<class>
-^^^^^^^
-Classes are the basic building block of an SCCD diagram. They model structure in the form of attributes and relations with other classes, and behavior in the form of methods (which can change the value of attributes) and a Statecharts model (which governs the runtime behavior of the class).
-
-A ``<class>`` element has three attributes:
-
-* *name*: the name of the class
-* *default*: true if this is the default class (of which one instance is created and started at the start of executing the compiled code)
-* *src*: the location of a separate XML file (relative to the location in which the main diagram is compiled), containing the definition of the class. If this attribute is set, the *name* attribute cannot be set, nor can the class element have any children.
-
-Children:
-
-* ``[0..1]`` :ref:`relationships`
-* ``[0..n]`` :ref:`attribute`
-* ``[0..1]`` :ref:`constructor`
-* ``[0..1]`` :ref:`destructor`
-* ``[0..n]`` :ref:`method`
-
-.. _relationships:
-
-<relationships>
-^^^^^^^^^^^^^^^
-.. note:: This is a child element of :ref:`class`.
-
-Models a number of relationships between its parent class and other classes of the diagram.
-
-Children:
-
-* ``[0..n]`` :ref:`association`
-* ``[0..n]`` :ref:`inheritance`
-
-.. _association:
-
-<association>
-^^^^^^^^^^^^^
-.. note:: This is a child element of :ref:`relationships`.
-
-An association relation can be insantiated in order to link two instances at runtime, and those instances to exchange messages over that link. An association has two attributes:
-
-* *name*: the name of the association
-* *class*: the name of the target class
-* *min*: the minimal cardinality of the association (defaults to 0)
-* *max*: the maximum cardinality of the association (defaults to infinity)
-
-.. _inheritance:
-
-<inheritance>
-^^^^^^^^^^^^^
-.. note:: This is a child element of :ref:`relationships`.
-
-An inhertiance relation allows one class to inherit all methods and attribute from another class. Behaviour (*i.e.*, the :ref:`scxml` element) of the parent is not inherited. An inheritance relation has four attributes:
-
-* *class*: the name of the target class
-* *priority*: allows to specify in which order classes need to be inherited (in case of multiple inheritance). Inheritance relations with higher priority are inherited from first.
-
-.. _attribute:
-
-<attribute>
-^^^^^^^^^^^
-.. note:: This is a child element of :ref:`class`.
-
-An :ref:`attribute` element has two attributes:
-
-* *name*: the name of the attribute
-* *type*: the type of the attribute
-
-.. _constructor:
-
-<constructor>
-^^^^^^^^^^^^^
-.. note:: This is a child element of :ref:`class`.
-
-The constructor is called when an object is instantiated. It is used to initialize the instance's attribute values.
-
-Children:
-
-* ``[0..n]`` :ref:`parameter`
-* ``[1..1]`` :ref:`body`
-
-.. _destructor:
-
-<destructor>
-^^^^^^^^^^^^
-.. note:: This is a child element of :ref:`class`.
-
-The destructor is called just before an object is deleted.
-
-Children:
-
-* ``[1..1]`` :ref:`body`
-
-.. _method:
-
-<method>
-^^^^^^^^
-.. note:: This is a child element of :ref:`class`.
-
-A method is a block of action code that can be called repeatedly in other code blocks that belong to the same class definition. It has two attributes:
-
-* *name*: the name of the method
-* *type*: the type of the return value (optional)
-
-Children:
-
-* ``[0..n]`` :ref:`parameter`
-* ``[1..1]`` :ref:`body` 
-
-.. _body:
-
-<body>
-^^^^^^
-.. note:: This is a child element of :ref:`method`, :ref:`constructor`, or :ref:`destructor`.
-
-A :ref:`body` element is a block of action code in a programming language (depending on the target language to which the model is compiled). It allows to call other functions and change the values of instance variables. If any parameters were defined as children of this element's parent, they can be referenced by name.
-
-Statechart Concepts
--------------------
-
-.. _scxml:
-
-<scxml>
-^^^^^^^
-.. note:: This is a child element of :ref:`class`.
-
-The top-level element containing the Statecharts definition of its parent class. It has one attribute:
-
-* *initial*: specifies the initial child state of the Statechart (optional). If omitted, the first child in document order is the initial state.
-* *big_step_maximality*: (optional). See :ref:`big_step_maximality`. Allowed values are "take_many" (default), "take_one".
-* *internal_event_lifeline*: (optional). See :ref:`internal_event_lifeline`. Allowed values are "queue" (default), "next_small_step", "next_combo_step".
-* *input_event_lifeline*: (optional). See :ref:`input_event_lifeline`. Allowed values are "first_combo_step" (default), "first_small_step", "whole".
-* *priority*: (optional). See :ref:`priority`. Allowed values are "source_parent" (default), "source_child".
-* *concurrency*: (optional). See :ref:`concurrency`. Allowed values are "single" (default), "many".
-
-Children:
-
-* ``[0..n]`` :ref:`state`.
-* ``[0..n]`` :ref:`parallel`.
-
-.. _state:
-
-<state>
-^^^^^^^
-.. note:: This is a child element of :ref:`scxml`, :ref:`state`, or :ref:`parallel`.
-
-A state is the basic building block of a Statechart. It represents a "mode" the system can be in. A state can be entered (which executes an optional block of executable content) and exited (which executes an optional block of executable content) using transitions (which execute an optional block of executable content). States can be hierarchical (*i.e.*, one state can contain other states). A state has two attributes:
-
-* *id*: the identifier of the state. Needs to be unique with respect to other state ids on the same level (*i.e.*, the parent state cannot have two children with identical ids).
-* *initial*: Specifies the initial child state, if this state is a composite state (optional). If omitted, the first child in document order is the initial state.
-
-Children:
-
-* ``[0..n]`` :ref:`transition`.
-* ``[0..n]`` :ref:`state`.
-* ``[0..n]`` :ref:`parallel`.
-* ``[0..n]`` :ref:`history`.
-* ``[0..1]`` :ref:`onentry`.
-* ``[0..1]`` :ref:`onexit`.
-
-.. _parallel:
-
-<parallel>
-^^^^^^^^^^
-.. note:: This is a child element of :ref:`scxml`, :ref:`state`, or :ref:`parallel`.
-
-A parallel state's children run, as the name reveals, in parallel. This means that each child of the parallel state is able to execute a transition *at the same time*. This is useful to naturally model concurrent behavior, such as animating elements on a canvas while also listening for user input. A paralle state has one attribute:
-
-* *id*: the identifier of the parallel state. Needs to be unique with respect to other state ids on the same level (*i.e.*, the parent state cannot have two children with identical ids).
-
-Children:
-
-* ``[0..n]`` :ref:`transition`.
-* ``[0..n]`` :ref:`state`. These children **must** be composite.
-* ``[0..n]`` :ref:`parallel`.
-* ``[0..n]`` :ref:`history`.
-* ``[0..1]`` :ref:`onentry`.
-* ``[0..1]`` :ref:`onexit`.
-
-.. warning:: A transition from a child state cannot exit the parallel region, as this breaks encapsulation and can interfere with the behavior of other children of the parallel state. Only transitions directly from the parallel state can exit the parallel region (which will automatically exit its children as well).
-
-.. _transition:
-
-<transition>
-^^^^^^^^^^^^
-.. note:: This is a child element of :ref:`scxml`, :ref:`state`, or :ref:`parallel`.
-
-A transition allows the system to change state (*i.e.*, go from one "mode" to the next). Transitions are *triggered* by an event or a timeout, or can be spontaneous. They can optionally specify a condition that additionally needs to evaluate to true. A transition can have five attributes:
-
-* *target*: the target state of the transition. See :ref:`state_referencing` for more details.
-* *after*: (optional) an amount of seconds that need to pass before this transition is triggered. Cannot occur together with *event*. Note that the timer starts counting when the parent state is entered. The timer is cancelled when the state is exited.
-* *event*: (optional) the name of the event that triggers this transitions. Cannot occur together with *after*.
-* *port*: (optional) specifies the name of the port on which the event that triggers this transition will arrive. Needs to occur together with *event*, and cannot occur together with *after*.
-* *cond*: (optional) a condition that evaluates to a boolean value. Can make use of instance variables, and names of parameters passed to the transition.
-
-Children:
-
-* ``[0..n]`` :ref:`parameter`
-* ``[0..n]`` :ref:`raise`
-* ``[0..n]`` :ref:`script`
-* ``[0..n]`` :ref:`log`
-
-The semantics of executing a transition are as follows:
-
-#. The exit set consists of the active descendants of the least-common ancestor state of the transition's source and target state. All states in the exit set are exited in order ("youngest" child first), executing their exit actions.
-#. All executable content of the transition is executed in document order.
-#. The enter set consists of the transition's target state, its children, and its ancestors that are not an ancestor of the source state. They are entered in order ("oldest" state first), executing their enter actions.
-
-.. _history:
-
-<history>
-^^^^^^^^^
-.. note:: This is a child element of :ref:`state`, or :ref:`parallel`.
-
-A history state keeps track of the current configuration when its parent state is exited. If a transition has the history state as a target, the configuration that was saved is restored. If no configuration was saved yet, the default state is entered instead. A history state has two attributes:
-
-* *id*: the identifier of the state. Needs to be unique with respect to other state ids on the same level (*i.e.*, the parent state cannot have two children with identical ids).
-* *type*: (optional) either "shallow" (default) or "deep". A shallow history state only saves the active states on its level (not the active children of those states). A deep history state saves the active states on its level, and all active states on lower levels.
-
-A history state cannot have children.
-
-.. _onentry:
-
-<onentry>
-^^^^^^^^^
-.. note:: This is a child element of :ref:`state`, or :ref:`parallel`.
-
-An entry action is executed when a state is entered. Executable content is executed in document order.
-
-Children:
-
-* ``[0..n]`` :ref:`raise`
-* ``[0..n]`` :ref:`script`
-* ``[0..n]`` :ref:`log`
-
-.. _onexit:
-
-<onexit>
-^^^^^^^^^
-.. note:: This is a child element of :ref:`state`, or :ref:`parallel`.
-
-An exit action is executed when a state is exited. Executable content is executed in document order.
-
-Children:
-
-* ``[0..n]`` :ref:`raise`
-* ``[0..n]`` :ref:`script`
-* ``[0..n]`` :ref:`log`
-
-.. _state_referencing:
-
-State Referencing
-^^^^^^^^^^^^^^^^^
-
-States need to be referenced when they are the target of a :ref:`transition` or appear in INSTATE :ref:`macros`. SCCD identifies states hierarchically and evaluates state references in the context of the state where the state reference occurs.
-
-* ``.`` is the state itself
-* ``<empty string>`` is the root (*i.e.*, the :ref:`scxml` element)
-* ``..`` goes up one level (to the parent state)
-* ``a`` is the child with id 'a'
-* ``a/b`` with *a* and *b* arbitrary state expressions evaluates state expression *b* in the context of the state found with state expression *a*.
-
-Examples:
-
-* ``../A`` will look for a state with id 'A' in the parent state
-* ``/A`` will look for a state with id 'A' in the root
-* ``A/B`` will look for a state with id 'B' in child with id 'A'
-
-
-Executable Content
-------------------
-
-Actions are executed when a :ref:`transition` is executed. There are three types of actions: event raises (which can in turn trigger other transitions), scripts (which can call functions and update instance variables) and log statements.
-
-.. _raise:
-
-<raise>
-^^^^^^^
-.. note:: This is a child element of :ref:`transition`, :ref:`onentry`, or ref:`onexit`.
-
-Raising an event allows to notify the outside world, the Statechart, or another instance. An event has a name, and optionally parameter values that are sent along with the event. As a result, a :ref:`transition` can be triggered elsewhere in the Statechart or in the receiving instance.
-
-A ref:`raise` element can have three attributes: *scope*, *port*, and *target*. They are used to explicitly define the scope of the raised event. Either the event is local to the Statechart, it is broadcast to all instances in the diagram, it is narrowcast to a specific instance, to the :ref:`object_manager`, or to an output port.
-
-The table bellow summarizes how the different scopes are specified.
-
-.. rst-class:: table-with-borders
-
-+-------------+-------+-----------+-------------+-----------------+-------------+
-| attr/scope  | local | broadcast | narrowcast  | object manager  | output      |
-+=============+=======+===========+=============+=================+=============+
-| *scope*     |\-\-\- | "broad"   | "narrow"    | "cd"            | "output"    |
-+-------------+-------+-----------+-------------+-----------------+-------------+
-| *port*      |\-\-\- |\-\-\-\-\- |\-\-\-\-\-\- |\-\-\-\-\-\-\-\- | port_name   |
-+-------------+-------+-----------+-------------+-----------------+-------------+
-| *target*    |\-\-\- |\-\-\-\-\- | link_name   |\-\-\-\-\-\-\-\- |\-\-\-\-\-\- |
-+-------------+-------+-----------+-------------+-----------------+-------------+
-
-A "link name" identifies a specific (set of) connected instance(s) of the instance that raised the event. For example, if class "A" and "B" are connected via an association "A_to_B", valid values for "link_name could be:
-
-* "'A_to_B'" to send to all instances of B with which the instance of A that raises the event is connected
-* "'A_to_B[idx]'" where *idx* is a valid link index, which is sent by the :ref:`object_manager` as a reply to a *create_instance* request.
-* "self.the_link_name" if this evaluates to a legal link name.
-
-.. _script:
-
-<script>
-^^^^^^^^
-.. note:: This is a child element of :ref:`transition`, :ref:`onentry`, or ref:`onexit`.
-
-A :ref:`script` element is similar to a :ref:`body` element: a block of action code in a programming language (depending on the target language to which the model is compiled). It allows to call other functions and change the values of instance variables. If any parameters were defined as children of this element's parent (in the case of a :ref:`transition`), they can be referenced by name.
-
-.. _log:
-
-<log>
-^^^^^
-.. note:: This is a child element of :ref:`transition`, :ref:`onentry`, or ref:`onexit`.
-
-Allows to log a string.
-
-.. _parameter:
-
-<parameter>
-^^^^^^^^^^^
-.. note:: This is a child element of :ref:`transition`, :ref:`raise`, :ref:`method`, or :ref:`constructor`.
-
-Depending on where the :ref:`parameter` element is placed, it is either a formal parameter, or an actual parameter value.
-
-In the case it is a child of a :ref:`transition`, :ref:`method`, or :ref:`constructor`, it is a formal parameter. It then has three attributes:
-
-* *name*: the name of the parameter
-* *type*: (optional) the type of the parameter
-* *default*: (optional) the default value of the parameter
-
-.. note:: Parameters are positional.
-
-In the case it is a child of a :ref:`raise`, it is an actual parameter value. It then has one attribute:
-
-* *expr*: an expression that evaluates to the actual parameter value.
-
-.. _macros:
-
-Macros
-------
-Two macros are defined that can be used in the *cond* attribute of :ref:`transition` and the *expr* attribute of :ref:`parameter`:
-
-* *INSTATE(state_reference)* returns true if the system is currently in the referenced state (see :ref:`state_referencing`).
-* *SELF* returns the current object. This is useful to write platform-independent expressions. 
-
-.. _object_manager:
-
-Object Manager
---------------
-
-The object manager is responsible for managing objects and links while the application is running. The instances can communicate with the object manager by raising events using the *cd* scope (see :ref:`raise`).
-
-The object manager accepts four events:
-
-* **create_instance**
-    * Parameters:
-        * *association_name*: an expression that evaluates to the name of the association that needs to be instantiated
-        * *class_name*: (optional) an expression that evaluates to the name of the class to instantiate. If omitted, the target class of the association is instantiated.
-        * *parameters*: (optional) the actual constructor parameter values
-    * Returns Event:
-        * **instance_created**\(*link_id*)
-* **start_instance**
-    * Parameters:
-        * *link_id*: the identifier of the link with which the instance to be started is connected to the requesting instance
-    * Returns Event:
-        * **instance_started**\(*link_id*)
-* **delete_instance**
-    * Parameters:
-        * *link_id*: the identifier of the link with which the instance to be deleted is connected to the requesting instance
-    * Returns Event:
-        * **instance_deleted**\(*link_id*)
-* **associate_instance**
-    * Parameters:
-        * *link_expression_dst*: an expression evaluating to a set of links, of which the targets need to be associated
-        * *link_expression_src*: an expression evaluating to an association, which needs to be instantiated to connect the source of the association to the targets that were evaluated in the expression above
-    * Returns Event:
-        * **instance_associated**\(*created_links*): the (relative) links which were created
-* **disassociate_instance**
-    * Parameters:
-        * *link_expression_dst*: an expression evaluating to a set of links (only direct children of the current instance!), of which the targets need to be disassociated from the current instance
-    * Returns Event:
-        * **instance_disassociated**\(*deleted_links*): the links which were deleted

+ 0 - 281
legacy/doc/make.bat

@@ -1,281 +0,0 @@
-@ECHO OFF
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
-	set SPHINXBUILD=sphinx-build
-)
-set BUILDDIR=_build
-set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
-set I18NSPHINXOPTS=%SPHINXOPTS% .
-if NOT "%PAPER%" == "" (
-	set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
-	set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
-)
-
-if "%1" == "" goto help
-
-if "%1" == "help" (
-	:help
-	echo.Please use `make ^<target^>` where ^<target^> is one of
-	echo.  html       to make standalone HTML files
-	echo.  dirhtml    to make HTML files named index.html in directories
-	echo.  singlehtml to make a single large HTML file
-	echo.  pickle     to make pickle files
-	echo.  json       to make JSON files
-	echo.  htmlhelp   to make HTML files and a HTML help project
-	echo.  qthelp     to make HTML files and a qthelp project
-	echo.  devhelp    to make HTML files and a Devhelp project
-	echo.  epub       to make an epub
-	echo.  epub3      to make an epub3
-	echo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter
-	echo.  text       to make text files
-	echo.  man        to make manual pages
-	echo.  texinfo    to make Texinfo files
-	echo.  gettext    to make PO message catalogs
-	echo.  changes    to make an overview over all changed/added/deprecated items
-	echo.  xml        to make Docutils-native XML files
-	echo.  pseudoxml  to make pseudoxml-XML files for display purposes
-	echo.  linkcheck  to check all external links for integrity
-	echo.  doctest    to run all doctests embedded in the documentation if enabled
-	echo.  coverage   to run coverage check of the documentation if enabled
-	echo.  dummy      to check syntax errors of document sources
-	goto end
-)
-
-if "%1" == "clean" (
-	for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
-	del /q /s %BUILDDIR%\*
-	goto end
-)
-
-
-REM Check if sphinx-build is available and fallback to Python version if any
-%SPHINXBUILD% 1>NUL 2>NUL
-if errorlevel 9009 goto sphinx_python
-goto sphinx_ok
-
-:sphinx_python
-
-set SPHINXBUILD=python -m sphinx.__init__
-%SPHINXBUILD% 2> nul
-if errorlevel 9009 (
-	echo.
-	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
-	echo.installed, then set the SPHINXBUILD environment variable to point
-	echo.to the full path of the 'sphinx-build' executable. Alternatively you
-	echo.may add the Sphinx directory to PATH.
-	echo.
-	echo.If you don't have Sphinx installed, grab it from
-	echo.http://sphinx-doc.org/
-	exit /b 1
-)
-
-:sphinx_ok
-
-
-if "%1" == "html" (
-	%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/html.
-	goto end
-)
-
-if "%1" == "dirhtml" (
-	%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
-	goto end
-)
-
-if "%1" == "singlehtml" (
-	%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
-	goto end
-)
-
-if "%1" == "pickle" (
-	%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can process the pickle files.
-	goto end
-)
-
-if "%1" == "json" (
-	%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can process the JSON files.
-	goto end
-)
-
-if "%1" == "htmlhelp" (
-	%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can run HTML Help Workshop with the ^
-.hhp project file in %BUILDDIR%/htmlhelp.
-	goto end
-)
-
-if "%1" == "qthelp" (
-	%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can run "qcollectiongenerator" with the ^
-.qhcp project file in %BUILDDIR%/qthelp, like this:
-	echo.^> qcollectiongenerator %BUILDDIR%\qthelp\SCCD.qhcp
-	echo.To view the help file:
-	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\SCCD.ghc
-	goto end
-)
-
-if "%1" == "devhelp" (
-	%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished.
-	goto end
-)
-
-if "%1" == "epub" (
-	%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The epub file is in %BUILDDIR%/epub.
-	goto end
-)
-
-if "%1" == "epub3" (
-	%SPHINXBUILD% -b epub3 %ALLSPHINXOPTS% %BUILDDIR%/epub3
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The epub3 file is in %BUILDDIR%/epub3.
-	goto end
-)
-
-if "%1" == "latex" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "latexpdf" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	cd %BUILDDIR%/latex
-	make all-pdf
-	cd %~dp0
-	echo.
-	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "latexpdfja" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	cd %BUILDDIR%/latex
-	make all-pdf-ja
-	cd %~dp0
-	echo.
-	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "text" (
-	%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The text files are in %BUILDDIR%/text.
-	goto end
-)
-
-if "%1" == "man" (
-	%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The manual pages are in %BUILDDIR%/man.
-	goto end
-)
-
-if "%1" == "texinfo" (
-	%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
-	goto end
-)
-
-if "%1" == "gettext" (
-	%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
-	goto end
-)
-
-if "%1" == "changes" (
-	%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.The overview file is in %BUILDDIR%/changes.
-	goto end
-)
-
-if "%1" == "linkcheck" (
-	%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Link check complete; look for any errors in the above output ^
-or in %BUILDDIR%/linkcheck/output.txt.
-	goto end
-)
-
-if "%1" == "doctest" (
-	%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Testing of doctests in the sources finished, look at the ^
-results in %BUILDDIR%/doctest/output.txt.
-	goto end
-)
-
-if "%1" == "coverage" (
-	%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Testing of coverage in the sources finished, look at the ^
-results in %BUILDDIR%/coverage/python.txt.
-	goto end
-)
-
-if "%1" == "xml" (
-	%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The XML files are in %BUILDDIR%/xml.
-	goto end
-)
-
-if "%1" == "pseudoxml" (
-	%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
-	goto end
-)
-
-if "%1" == "dummy" (
-	%SPHINXBUILD% -b dummy %ALLSPHINXOPTS% %BUILDDIR%/dummy
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. Dummy builder generates no files.
-	goto end
-)
-
-:end

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 75
legacy/doc/runtime_platforms.rst


+ 0 - 31
legacy/doc/semantic_options.rst

@@ -1,31 +0,0 @@
-Semantic Options
-================
-
-Please see [SemanticOptions]_ for more information on the several semantic options.
-
-.. _big_step_maximality:
-
-Big Step Maximality
--------------------
-
-.. _internal_event_lifeline:
-
-Internal Event Lifeline
------------------------
-
-.. _input_event_lifeline:
-
-Input Event Lifeline
---------------------
-
-.. _priority:
-
-Priority
---------
-
-.. _concurrency:
-
-Concurrency
------------
-
-.. [SemanticOptions] Esmaeilsabzali, S., Day, N. A., Atlee, J. M., and Niu, J. *Deconstructing the semantics of big-step modelling languages*. Requirements Engineering 15, 2 (2010), 235–265. [`LINK <https://cs.uwaterloo.ca/~sesmaeil/publications/2010/REJ10.pdf>`_] 

+ 0 - 101
legacy/doc/sockets.rst

@@ -1,101 +0,0 @@
-Socket Communication
-====================
-
-Sockets, for network communication, are an oftenly needed capability for many complex system.
-By default, however, Statecharts, and SCCD in particular, do not handle socket communication at all.
-Shifting all socket communication into action code is not an option either, as it is potentially a blocking operation.
-Additionally, the code wraps different socket implementations and socket configuration.
-
-This module will, after starting the translation service, translate all events on the *socket_in* and *socket_out* port to socket operations.
-Blocking then happens on another thread, while the statechart can continue its usual execution.
-When the socket operation returns, the result will be raised in the statechart as an event.
-
-Initialization
---------------
-
-To use the translation service, several steps should be followed:
-
-    1. Import sccd.sccd_runtime.socket2event as socket2event;
-    2. Write your model with a *socket_in* and *socket_out* port;
-    3. Before starting the controller, invoke *socket2event.boot_translation_service(controller)* with the controller as its first argument;
-    4. Now raise and catch events as specified here, to communicate with sockets.
-
-Input Events
-------------
-
-+-------------------+-----------------------------------+-------------------------------+
-| Event             | Parameters                        | Meaning                       |
-+===================+===================================+===============================+
-| accept_socket     | socket                            | socket.accept()               |
-+-------------------+-----------------------------------+-------------------------------+
-| recv_socket       | socket                            | socket.recv(2**16)            |
-+-------------------+-----------------------------------+-------------------------------+
-| connect_socket    | socket, address                   | socket.connect(address)       |
-+-------------------+-----------------------------------+-------------------------------+
-| create_socket     |                                   | new Socket()                  |
-+-------------------+-----------------------------------+-------------------------------+
-| close_socket      | socket                            | socket.close()                |
-+-------------------+-----------------------------------+-------------------------------+
-| send_socket       | socket, data                      | socket.send(data)             |
-+-------------------+-----------------------------------+-------------------------------+
-| bind_socket       | socket, address                   | socket.bind(address)          |
-+-------------------+-----------------------------------+-------------------------------+
-| listen_socket     | socket                            | socket.listen()               |
-+-------------------+-----------------------------------+-------------------------------+
-| stop              | socket                            | stops translator service      |
-+-------------------+-----------------------------------+-------------------------------+
-
-Output Events
--------------
-
-+-----------------------+-----------------------------------+-------------------------------+
-| Event                 | Arguments                         | Response to                   |
-+=======================+===================================+===============================+
-| received_socket       | socket, data                      | recv_socket                   |
-+-----------------------+-----------------------------------+-------------------------------+
-| sent_socket           | socket, bytes                     | send_socket                   |
-+-----------------------+-----------------------------------+-------------------------------+
-| accepted_socket       | socket, connection                | accept_socket                 |
-+-----------------------+-----------------------------------+-------------------------------+
-| connected_socket      | socket                            | connect_socket                |
-+-----------------------+-----------------------------------+-------------------------------+
-| closed_socket         | socket                            | close_socket                  |
-+-----------------------+-----------------------------------+-------------------------------+
-| bound_socket          | socket                            | bind_socket                   |
-+-----------------------+-----------------------------------+-------------------------------+
-| listened_socket       | socket                            | listen_socket                 |
-+-----------------------+-----------------------------------+-------------------------------+
-| error_socket          | socket, error                     | Socket error occurs           |
-+-----------------------+-----------------------------------+-------------------------------+
-| unknown_error_socket  | socket, error                     | Python error occurs           |
-+-----------------------+-----------------------------------+-------------------------------+
-
-HTTP client/server
-------------------
-
-Using this library, an HTTP echo client and server are implemented.
-The server echoes all data received from the client.
-The client connects to the server and sends some data.
-These are included in the examples directory
-
-Compile the server using::
-
-   python python_sccd_compiler/sccdc.py -p threads server.xml
-
-and the client using::
-
-   python python_sccd_compiler/sccdc.py -p threads client.xml
-
-Afterwards, you can run the server as::
-
-   python run_server.py
-
-which will start up a simple HTTP echo server on port 8080
-(configurable in constructor).
-Then you can start up several clients using::
-
-   python run_client.py
-
-The client will send out a counter to the server and print out the
-reply. The server is able to connect to multiple clients simultaneously,
-so can handle multiple open connections without getting confused.

+ 0 - 5
legacy/doc/statecharts_core_int.rst

@@ -1,5 +0,0 @@
-Statecharts Core
-================
-
-.. automodule:: sccd.runtime.statecharts_core
-    :members:

+ 0 - 16
legacy/examples/HTTP_client/Makefile

@@ -1,16 +0,0 @@
-.PHONY: all clean
-
-SCCDC = python -m sccd.compiler.sccdc
-FLAGS = -l python -p threads
-
-SOURCE = client.xml
-TARGET = client.py
-
-all: $(TARGET)
-
-clean:
-	find . -type f -name '$(TARGET)*' -delete
-
-$(TARGET): $(SOURCE)
-	$(SCCDC) $(FLAGS) -o $@ $<
-

+ 0 - 138
legacy/examples/HTTP_client/classes/http_client.xml

@@ -1,138 +0,0 @@
-<class name="HTTPClient">
-    <relationships>
-        <association name="parent" class="Prompt" min="1" max="1"/>
-    </relationships>
-    <constructor>
-        <parameter name="hostname"/>
-        <parameter name="port"/>
-        <body>
-            <![CDATA[
-            self.socket = None
-            self.destination = (hostname, port)
-            self.received_data = ""
-            self.send_data = ""
-            self.queue = []
-            self.destinations = []
-            ]]>
-        </body>
-    </constructor>
-    <scxml initial="init">
-        <state id="init">
-            <onentry>
-                <raise scope="output" event="create_socket" output="socket_out"/>
-            </onentry>
-            <transition port="socket_in" event="created_socket" target="../connecting">
-                <parameter name="socket"/>
-                <script>
-                    self.socket = socket
-                </script>
-            </transition>
-        </state>
-        <state id="connecting">
-            <onentry>
-                <raise scope="output" event="connect_socket" output="socket_out">
-                    <parameter expr="self.socket"/>
-                    <parameter expr="self.destination"/>
-                </raise>
-            </onentry>
-            <transition port="socket_in" event="connected_socket" cond="self.socket == socket" target="../connected">
-                <parameter name="socket"/>
-                <raise scope="broad" event="http_client_ready"/>
-            </transition>
-        </state>
-                
-        <parallel id="connected">
-            <state id="listening" initial="listen">
-                <state id="listen">
-                    <onentry>
-                        <raise scope="output" port="socket_out" event="recv_socket">
-                            <parameter expr="self.socket"/>
-                        </raise>
-                    </onentry>
-                    <transition event="received_socket" port="socket_in" cond="(self.socket == socket) and (len(data) > 0)" target=".">
-                        <parameter name="socket"/>
-                        <parameter name="data"/>
-                        <script>
-                            self.received_data += data
-                        </script>
-                    </transition>
-                    <transition event="received_socket" port="socket_in" cond="(self.socket == socket) and (len(data) == 0)" target="../close">
-                        <parameter name="socket"/>
-                        <parameter name="data"/>
-                    </transition>
-                </state>
-                <state id="close">
-                </state>
-            </state>
-
-            <state id="sending" initial="waiting_for_data">
-                <state id="waiting_for_data">
-                    <transition cond="len(self.send_data) > 0" target="../transferring">
-                        <raise scope="output" port="socket_out" event="send_socket">
-                            <parameter expr="self.socket"/>
-                            <parameter expr="self.send_data"/>
-                        </raise>
-                    </transition>
-                </state>
-                <state id="transferring">
-                    <transition event="sent_socket" port="socket_in" cond="self.socket == socket" target="../waiting_for_data">
-                        <parameter name="socket"/>
-                        <parameter name="sent_bytes"/>
-                        <script>
-                            self.send_data = self.send_data[sent_bytes:]
-                        </script>
-                    </transition>
-                </state>
-            </state>
-
-            <state id="queueing">
-                <state id="queueing">
-                    <onentry>
-                    </onentry>
-                    <transition event="HTTP_input" target=".">
-                        <parameter name="data"/>
-                        <parameter name="destination"/>
-                        <script>
-                            self.send_data += "POST / HTTP/1.0\r\n"
-                            self.send_data += "Content-Length: %i\r\n" % len(str(data))
-                            self.send_data += "\r\n"
-                            self.send_data += data
-                            self.destinations.append(destination)
-                        </script>
-                    </transition>
-                </state>
-            </state>
-
-            <state id="parsing" initial="wait_for_header">
-                <state id="wait_for_header">
-                    <transition cond="'\r\n\r\n' in self.received_data" target="../wait_for_payload">
-                        <script>
-                            header, self.received_data = self.received_data.split("\r\n\r\n", 1)
-                            header = header.lower()
-                            if "content-length" in header:
-                                _, after = header.split("content-length:", 1)
-                                after, _ = after.split("\r\n", 1)
-                                after = after.strip()
-                                self.length = int(after)
-                            else:
-                                self.length = float('inf')
-                        </script>
-                    </transition>
-                </state>
-                <state id="wait_for_payload">
-                    <transition cond="len(self.received_data) >= self.length" target="../wait_for_header">
-                        <script>
-                            data = self.received_data[:self.length]
-                            self.received_data = self.received_data[self.length:]
-                            #params = dict([p.split('=') for p in data.split('&amp;')])
-                            #data = {k: urllib.unquote_plus(v) for k, v in params.iteritems()}
-                        </script>
-                        <raise event="HTTP_output" scope="narrow" target="self.destinations.pop(0)">
-                            <parameter expr="data"/>
-                        </raise>
-                    </transition>
-                </state>
-            </state>
-        </parallel>
-    </scxml>
-</class>

+ 0 - 58
legacy/examples/HTTP_client/classes/prompt.xml

@@ -1,58 +0,0 @@
-<class name="Prompt">
-    <relationships>
-        <association name="to_server" class="HTTPClient" min="1" max="1"/>
-    </relationships>
-    <constructor>
-        <body>
-            self.counter = 0
-        </body>
-    </constructor>
-    <scxml initial="init">
-        <state id="init">
-            <onentry>
-                <raise scope="cd" event="create_instance">
-                    <parameter expr="'to_server'"/>
-                    <parameter expr="'HTTPClient'"/>
-                    <parameter expr="'127.0.0.1'"/>
-                    <parameter expr="8080"/>
-                </raise>
-            </onentry>
-            <transition event="instance_created" target="../initializing">
-                <parameter name="instancename"/>
-                <raise scope="cd" event="start_instance">
-                    <parameter expr="instancename"/>
-                </raise>
-            </transition>
-        </state>
-
-        <state id="initializing">
-            <!-- This is only there because otherwise the thread might stop; this seems like a bug in the runtime though -->
-            <transition after="1.0" target="."/>
-            <transition event="http_client_ready" target="../send_request"/>
-        </state>
-
-        <state id="send_request">
-            <transition after="1" target="../wait_reply">
-                <raise event="HTTP_input" scope="narrow" target="'to_server'">
-                    <parameter expr="str(self.counter)"/>
-                    <parameter expr="'parent'"/>
-                </raise>
-                <script>
-                    print("Sending request: %s" % self.counter)
-                    self.counter += 1
-                </script>
-            </transition>
-        </state>
-
-        <state id="wait_reply">
-            <!-- This is only there because otherwise the thread might stop; this seems like a bug in the runtime though -->
-            <transition after="1.0" target="."/>
-            <transition event="HTTP_output" target="../send_request">
-                <parameter name="data"/>
-                <script>
-                    print("Got response: %s" % data)
-                </script>
-            </transition>
-        </state>
-    </scxml>
-</class>

+ 0 - 422
legacy/examples/HTTP_client/client.py

@@ -1,422 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Wed Aug 17 13:32:50 2016
-
-Model author: Yentl Van Tendeloo
-Model name:   HTTP client
-Model description:
-HTTP client in SCCD
-"""
-
-from sccd.runtime.statecharts_core import *
-import time
-import os
-import urllib
-import sys
-import json
-
-# package "HTTP client"
-
-class Prompt(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Prompt.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        self.counter = 0
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /init
-        self.states["/init"] = State(1, self)
-        self.states["/init"].setEnter(self._init_enter)
-        
-        # state /initializing
-        self.states["/initializing"] = State(2, self)
-        self.states["/initializing"].setEnter(self._initializing_enter)
-        self.states["/initializing"].setExit(self._initializing_exit)
-        
-        # state /send_request
-        self.states["/send_request"] = State(3, self)
-        self.states["/send_request"].setEnter(self._send_request_enter)
-        self.states["/send_request"].setExit(self._send_request_exit)
-        
-        # state /wait_reply
-        self.states["/wait_reply"] = State(4, self)
-        self.states["/wait_reply"].setEnter(self._wait_reply_enter)
-        self.states["/wait_reply"].setExit(self._wait_reply_exit)
-        
-        # add children
-        self.states[""].addChild(self.states["/init"])
-        self.states[""].addChild(self.states["/initializing"])
-        self.states[""].addChild(self.states["/send_request"])
-        self.states[""].addChild(self.states["/wait_reply"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/init"]
-        
-        # transition /init
-        _init_0 = Transition(self, self.states["/init"], [self.states["/initializing"]])
-        _init_0.setAction(self._init_0_exec)
-        _init_0.setTrigger(Event("instance_created", None))
-        self.states["/init"].addTransition(_init_0)
-        
-        # transition /initializing
-        _initializing_0 = Transition(self, self.states["/initializing"], [self.states["/initializing"]])
-        _initializing_0.setTrigger(Event("_0after"))
-        self.states["/initializing"].addTransition(_initializing_0)
-        _initializing_1 = Transition(self, self.states["/initializing"], [self.states["/send_request"]])
-        _initializing_1.setTrigger(Event("http_client_ready", None))
-        self.states["/initializing"].addTransition(_initializing_1)
-        
-        # transition /send_request
-        _send_request_0 = Transition(self, self.states["/send_request"], [self.states["/wait_reply"]])
-        _send_request_0.setAction(self._send_request_0_exec)
-        _send_request_0.setTrigger(Event("_1after"))
-        self.states["/send_request"].addTransition(_send_request_0)
-        
-        # transition /wait_reply
-        _wait_reply_0 = Transition(self, self.states["/wait_reply"], [self.states["/wait_reply"]])
-        _wait_reply_0.setTrigger(Event("_2after"))
-        self.states["/wait_reply"].addTransition(_wait_reply_0)
-        _wait_reply_1 = Transition(self, self.states["/wait_reply"], [self.states["/send_request"]])
-        _wait_reply_1.setAction(self._wait_reply_1_exec)
-        _wait_reply_1.setTrigger(Event("HTTP_output", None))
-        self.states["/wait_reply"].addTransition(_wait_reply_1)
-    
-    def _init_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'to_server', 'HTTPClient', '127.0.0.1', 8080]))
-    
-    def _initializing_enter(self):
-        self.addTimer(0, 1.0)
-    
-    def _initializing_exit(self):
-        self.removeTimer(0)
-    
-    def _send_request_enter(self):
-        self.addTimer(1, 1)
-    
-    def _send_request_exit(self):
-        self.removeTimer(1)
-    
-    def _wait_reply_enter(self):
-        self.addTimer(2, 1.0)
-    
-    def _wait_reply_exit(self):
-        self.removeTimer(2)
-    
-    def _init_0_exec(self, parameters):
-        instancename = parameters[0]
-        self.big_step.outputEventOM(Event("start_instance", None, [self, instancename]))
-    
-    def _send_request_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'to_server', Event("HTTP_input", None, [str(self.counter), 'parent'])]))
-        print("Sending request: %s" % self.counter)
-        self.counter += 1
-    
-    def _wait_reply_1_exec(self, parameters):
-        data = parameters[0]
-        print("Got response: %s" % data)
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/init"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class HTTPClient(RuntimeClassBase):
-    def __init__(self, controller, hostname, port):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        HTTPClient.user_defined_constructor(self, hostname, port)
-    
-    def user_defined_constructor(self, hostname, port):
-        self.socket = None
-        self.destination = (hostname, port)
-        self.received_data = ""
-        self.send_data = ""
-        self.queue = []
-        self.destinations = []
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /init
-        self.states["/init"] = State(1, self)
-        self.states["/init"].setEnter(self._init_enter)
-        
-        # state /connecting
-        self.states["/connecting"] = State(2, self)
-        self.states["/connecting"].setEnter(self._connecting_enter)
-        
-        # state /connected
-        self.states["/connected"] = ParallelState(3, self)
-        
-        # state /connected/listening
-        self.states["/connected/listening"] = State(4, self)
-        
-        # state /connected/listening/listen
-        self.states["/connected/listening/listen"] = State(5, self)
-        self.states["/connected/listening/listen"].setEnter(self._connected_listening_listen_enter)
-        
-        # state /connected/listening/close
-        self.states["/connected/listening/close"] = State(6, self)
-        
-        # state /connected/sending
-        self.states["/connected/sending"] = State(7, self)
-        
-        # state /connected/sending/waiting_for_data
-        self.states["/connected/sending/waiting_for_data"] = State(8, self)
-        
-        # state /connected/sending/transferring
-        self.states["/connected/sending/transferring"] = State(9, self)
-        
-        # state /connected/queueing
-        self.states["/connected/queueing"] = State(10, self)
-        
-        # state /connected/queueing/queueing
-        self.states["/connected/queueing/queueing"] = State(11, self)
-        self.states["/connected/queueing/queueing"].setEnter(self._connected_queueing_queueing_enter)
-        
-        # state /connected/parsing
-        self.states["/connected/parsing"] = State(12, self)
-        
-        # state /connected/parsing/wait_for_header
-        self.states["/connected/parsing/wait_for_header"] = State(13, self)
-        
-        # state /connected/parsing/wait_for_payload
-        self.states["/connected/parsing/wait_for_payload"] = State(14, self)
-        
-        # add children
-        self.states[""].addChild(self.states["/init"])
-        self.states[""].addChild(self.states["/connecting"])
-        self.states[""].addChild(self.states["/connected"])
-        self.states["/connected"].addChild(self.states["/connected/listening"])
-        self.states["/connected"].addChild(self.states["/connected/sending"])
-        self.states["/connected"].addChild(self.states["/connected/queueing"])
-        self.states["/connected"].addChild(self.states["/connected/parsing"])
-        self.states["/connected/listening"].addChild(self.states["/connected/listening/listen"])
-        self.states["/connected/listening"].addChild(self.states["/connected/listening/close"])
-        self.states["/connected/sending"].addChild(self.states["/connected/sending/waiting_for_data"])
-        self.states["/connected/sending"].addChild(self.states["/connected/sending/transferring"])
-        self.states["/connected/queueing"].addChild(self.states["/connected/queueing/queueing"])
-        self.states["/connected/parsing"].addChild(self.states["/connected/parsing/wait_for_header"])
-        self.states["/connected/parsing"].addChild(self.states["/connected/parsing/wait_for_payload"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/init"]
-        self.states["/connected/listening"].default_state = self.states["/connected/listening/listen"]
-        self.states["/connected/sending"].default_state = self.states["/connected/sending/waiting_for_data"]
-        self.states["/connected/queueing"].default_state = self.states["/connected/queueing/queueing"]
-        self.states["/connected/parsing"].default_state = self.states["/connected/parsing/wait_for_header"]
-        
-        # transition /init
-        _init_0 = Transition(self, self.states["/init"], [self.states["/connecting"]])
-        _init_0.setAction(self._init_0_exec)
-        _init_0.setTrigger(Event("created_socket", "socket_in"))
-        self.states["/init"].addTransition(_init_0)
-        
-        # transition /connecting
-        _connecting_0 = Transition(self, self.states["/connecting"], [self.states["/connected"]])
-        _connecting_0.setAction(self._connecting_0_exec)
-        _connecting_0.setTrigger(Event("connected_socket", "socket_in"))
-        _connecting_0.setGuard(self._connecting_0_guard)
-        self.states["/connecting"].addTransition(_connecting_0)
-        
-        # transition /connected/listening/listen
-        _connected_listening_listen_0 = Transition(self, self.states["/connected/listening/listen"], [self.states["/connected/listening/listen"]])
-        _connected_listening_listen_0.setAction(self._connected_listening_listen_0_exec)
-        _connected_listening_listen_0.setTrigger(Event("received_socket", "socket_in"))
-        _connected_listening_listen_0.setGuard(self._connected_listening_listen_0_guard)
-        self.states["/connected/listening/listen"].addTransition(_connected_listening_listen_0)
-        _connected_listening_listen_1 = Transition(self, self.states["/connected/listening/listen"], [self.states["/connected/listening/close"]])
-        _connected_listening_listen_1.setTrigger(Event("received_socket", "socket_in"))
-        _connected_listening_listen_1.setGuard(self._connected_listening_listen_1_guard)
-        self.states["/connected/listening/listen"].addTransition(_connected_listening_listen_1)
-        
-        # transition /connected/sending/waiting_for_data
-        _connected_sending_waiting_for_data_0 = Transition(self, self.states["/connected/sending/waiting_for_data"], [self.states["/connected/sending/transferring"]])
-        _connected_sending_waiting_for_data_0.setAction(self._connected_sending_waiting_for_data_0_exec)
-        _connected_sending_waiting_for_data_0.setTrigger(None)
-        _connected_sending_waiting_for_data_0.setGuard(self._connected_sending_waiting_for_data_0_guard)
-        self.states["/connected/sending/waiting_for_data"].addTransition(_connected_sending_waiting_for_data_0)
-        
-        # transition /connected/sending/transferring
-        _connected_sending_transferring_0 = Transition(self, self.states["/connected/sending/transferring"], [self.states["/connected/sending/waiting_for_data"]])
-        _connected_sending_transferring_0.setAction(self._connected_sending_transferring_0_exec)
-        _connected_sending_transferring_0.setTrigger(Event("sent_socket", "socket_in"))
-        _connected_sending_transferring_0.setGuard(self._connected_sending_transferring_0_guard)
-        self.states["/connected/sending/transferring"].addTransition(_connected_sending_transferring_0)
-        
-        # transition /connected/queueing/queueing
-        _connected_queueing_queueing_0 = Transition(self, self.states["/connected/queueing/queueing"], [self.states["/connected/queueing/queueing"]])
-        _connected_queueing_queueing_0.setAction(self._connected_queueing_queueing_0_exec)
-        _connected_queueing_queueing_0.setTrigger(Event("HTTP_input", None))
-        self.states["/connected/queueing/queueing"].addTransition(_connected_queueing_queueing_0)
-        
-        # transition /connected/parsing/wait_for_header
-        _connected_parsing_wait_for_header_0 = Transition(self, self.states["/connected/parsing/wait_for_header"], [self.states["/connected/parsing/wait_for_payload"]])
-        _connected_parsing_wait_for_header_0.setAction(self._connected_parsing_wait_for_header_0_exec)
-        _connected_parsing_wait_for_header_0.setTrigger(None)
-        _connected_parsing_wait_for_header_0.setGuard(self._connected_parsing_wait_for_header_0_guard)
-        self.states["/connected/parsing/wait_for_header"].addTransition(_connected_parsing_wait_for_header_0)
-        
-        # transition /connected/parsing/wait_for_payload
-        _connected_parsing_wait_for_payload_0 = Transition(self, self.states["/connected/parsing/wait_for_payload"], [self.states["/connected/parsing/wait_for_header"]])
-        _connected_parsing_wait_for_payload_0.setAction(self._connected_parsing_wait_for_payload_0_exec)
-        _connected_parsing_wait_for_payload_0.setTrigger(None)
-        _connected_parsing_wait_for_payload_0.setGuard(self._connected_parsing_wait_for_payload_0_guard)
-        self.states["/connected/parsing/wait_for_payload"].addTransition(_connected_parsing_wait_for_payload_0)
-    
-    def _init_enter(self):
-        self.big_step.outputEvent(Event("create_socket", "", []))
-    
-    def _connecting_enter(self):
-        self.big_step.outputEvent(Event("connect_socket", "", [self.socket, self.destination]))
-    
-    def _connected_listening_listen_enter(self):
-        self.big_step.outputEvent(Event("recv_socket", "socket_out", [self.socket]))
-    
-    def _connected_queueing_queueing_enter(self):
-        pass
-    
-    def _init_0_exec(self, parameters):
-        socket = parameters[0]
-        self.socket = socket
-    
-    def _connecting_0_exec(self, parameters):
-        socket = parameters[0]
-        self.big_step.outputEventOM(Event("broad_cast", None, [Event("http_client_ready", None, [])]))
-    
-    def _connecting_0_guard(self, parameters):
-        socket = parameters[0]
-        return self.socket == socket
-    
-    def _connected_listening_listen_0_exec(self, parameters):
-        socket = parameters[0]
-        data = parameters[1]
-        self.received_data += data
-    
-    def _connected_listening_listen_0_guard(self, parameters):
-        socket = parameters[0]
-        data = parameters[1]
-        return (self.socket == socket) and (len(data) > 0)
-    
-    def _connected_listening_listen_1_guard(self, parameters):
-        socket = parameters[0]
-        data = parameters[1]
-        return (self.socket == socket) and (len(data) == 0)
-    
-    def _connected_sending_waiting_for_data_0_exec(self, parameters):
-        self.big_step.outputEvent(Event("send_socket", "socket_out", [self.socket, self.send_data]))
-    
-    def _connected_sending_waiting_for_data_0_guard(self, parameters):
-        return len(self.send_data) > 0
-    
-    def _connected_sending_transferring_0_exec(self, parameters):
-        socket = parameters[0]
-        sent_bytes = parameters[1]
-        self.send_data = self.send_data[sent_bytes:]
-    
-    def _connected_sending_transferring_0_guard(self, parameters):
-        socket = parameters[0]
-        sent_bytes = parameters[1]
-        return self.socket == socket
-    
-    def _connected_queueing_queueing_0_exec(self, parameters):
-        data = parameters[0]
-        destination = parameters[1]
-        self.send_data += "POST / HTTP/1.0\r\n"
-        self.send_data += "Content-Length: %i\r\n" % len(str(data))
-        self.send_data += "\r\n"
-        self.send_data += data
-        self.destinations.append(destination)
-    
-    def _connected_parsing_wait_for_header_0_exec(self, parameters):
-        header, self.received_data = self.received_data.split("\r\n\r\n", 1)
-        header = header.lower()
-        if "content-length" in header:
-            _, after = header.split("content-length:", 1)
-            after, _ = after.split("\r\n", 1)
-            after = after.strip()
-            self.length = int(after)
-        else:
-            self.length = float('inf')
-    
-    def _connected_parsing_wait_for_header_0_guard(self, parameters):
-        return '\r\n\r\n' in self.received_data
-    
-    def _connected_parsing_wait_for_payload_0_exec(self, parameters):
-        data = self.received_data[:self.length]
-        self.received_data = self.received_data[self.length:]
-        #params = dict([p.split('=') for p in data.split('&')])
-        #data = {k: urllib.unquote_plus(v) for k, v in params.iteritems()}
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.destinations.pop(0), Event("HTTP_output", None, [data])]))
-    
-    def _connected_parsing_wait_for_payload_0_guard(self, parameters):
-        return len(self.received_data) >= self.length
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/init"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "Prompt":
-            instance = Prompt(self.controller)
-            instance.associations = {}
-            instance.associations["to_server"] = Association("HTTPClient", 1, 1)
-        elif class_name == "HTTPClient":
-            instance = HTTPClient(self.controller, construct_params[0], construct_params[1])
-            instance.associations = {}
-            instance.associations["parent"] = Association("Prompt", 1, 1)
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.addInputPort("socket_in")
-        self.addOutputPort("socket_out")
-        self.object_manager.createInstance("Prompt", [])

+ 0 - 19
legacy/examples/HTTP_client/client.xml

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram author="Yentl Van Tendeloo" name="HTTP client">
-    <description>
-        HTTP client in SCCD
-    </description>
-    <top>
-        import time
-        import os
-        import urllib
-        import sys
-        import json
-    </top>
-
-    <inport name="socket_in"/>
-    <outport name="socket_out"/>
-
-    <class src="classes/prompt.xml" default="true"/>
-    <class src="classes/http_client.xml"/>
-</diagram>

+ 0 - 1
legacy/examples/HTTP_client/make.bat

@@ -1 +0,0 @@
-python -m sccd.compiler.sccdc -p threads -l python client.xml

+ 0 - 4
legacy/examples/HTTP_client/run.sh

@@ -1,4 +0,0 @@
-#!/bin/bash
-set -e
-./compile.sh
-python run_mvk_server.py $1

+ 0 - 8
legacy/examples/HTTP_client/run_client.py

@@ -1,8 +0,0 @@
-import sys
-
-import client
-from sccd.runtime import socket2event
-
-controller = client.Controller(sys.argv[1:])
-socket2event.boot_translation_service(controller)
-controller.start()

+ 0 - 16
legacy/examples/HTTP_server/Makefile

@@ -1,16 +0,0 @@
-.PHONY: all clean
-
-SCCDC = python -m sccd.compiler.sccdc
-FLAGS = -l python -p threads
-
-SOURCE = server.xml
-TARGET = server.py
-
-all: $(TARGET)
-
-clean:
-	find . -type f -name '$(TARGET)*' -delete
-
-$(TARGET): $(SOURCE)
-	$(SCCDC) $(FLAGS) -o $@ $<
-

+ 0 - 47
legacy/examples/HTTP_server/classes/echo.xml

@@ -1,47 +0,0 @@
-<class name="Echo">
-    <relationships>
-        <association name="to_server" class="Server" min="1" max="1"/>
-    </relationships>
-    <constructor>
-        <parameter name="params"/>
-        <body>
-            <![CDATA[
-            self.source = None
-            ]]>
-        </body>
-    </constructor>
-
-    <scxml initial="init_server">
-        <state id="init_server">
-            <onentry>
-                <raise scope="cd" event="create_instance">
-                    <parameter expr="'to_server'"/>
-                    <parameter expr="'Server'"/>
-                    <parameter expr="''"/>
-                    <parameter expr="8080"/>
-                </raise>
-            </onentry>
-            <transition event="instance_created" target="../wait_for_requests">
-                <parameter name="instancename"/>
-                <raise scope="cd" event="start_instance">
-                    <parameter expr="instancename"/>
-                </raise>
-            </transition>
-        </state>
-
-        <state id="wait_for_requests">
-            <state id="wait">
-                <transition event="HTTP_output" target=".">
-                    <parameter name="source"/>
-                    <parameter name="data"/>
-                    <script>
-                        print("Got input: " + str(data))
-                    </script>
-                    <raise event="HTTP_input" scope="narrow" target="'to_server/%s' % source">
-                        <parameter expr="data"/>
-                    </raise>
-                </transition>
-            </state>
-        </state>
-    </scxml>
-</class>

+ 0 - 110
legacy/examples/HTTP_server/classes/server.xml

@@ -1,110 +0,0 @@
-<class name="Server">
-    <relationships>
-        <association name="sockets" class="Socket"/>
-        <association name="parent" class="Echo" min="1" max="1"/>
-    </relationships>
-    <constructor>
-        <parameter name="address"/>
-        <parameter name="port"/>
-        <body>
-            <![CDATA[
-            self.socket = None
-            self.address = address
-            self.port = port
-            ]]>
-        </body>
-    </constructor>
-
-    <scxml initial="main">
-        <parallel id="main">
-            <state id="forward">
-                <state id="forward">
-                    <transition event="HTTP_output" target=".">
-                        <parameter name="association_name"/>
-                        <parameter name="data"/>
-                        <script>
-                            print("Forward")
-                        </script>
-                        <raise event="HTTP_output" scope="narrow" target="'parent'">
-                            <parameter expr="association_name"/>
-                            <parameter expr="data"/>
-                        </raise>
-                    </transition>
-                </state>
-            </state>
-
-            <state id="server" initial="init">
-                <state id="init">
-                    <onentry>
-                        <raise scope="output" event="create_socket" port="socket_out"/>
-                    </onentry>
-                    <transition port="socket_in" event="created_socket" target="../binding">
-                        <parameter name="socket"/>
-                        <script>
-                            self.socket = socket
-                        </script>
-                    </transition>
-                </state>
-                <state id="binding">
-                    <onentry>
-                        <raise scope="output" event="bind_socket" port="socket_out">
-                            <parameter expr="self.socket"/>
-                            <parameter expr="(self.address, self.port)"/>
-                        </raise>
-                    </onentry>
-                    <transition port="socket_in" event="bound_socket" cond="self.socket == socket" target="../listening">
-                        <parameter name="socket"/>
-                    </transition>
-                </state>
-                <state id="listening">
-                    <onentry>
-                        <raise scope="output" event="listen_socket" port="socket_out">
-                            <parameter expr="self.socket"/>
-                        </raise>
-                    </onentry>
-                    <transition port="socket_in" event="listened_socket" cond="self.socket == socket" target="../accepting">
-                        <parameter name="socket"/>
-                        <raise scope="output" port="socket_out" event="accept_socket">
-                            <parameter expr="self.socket"/>
-                        </raise>
-                    </transition>
-                </state>
-                <state id="accepting">
-                    <transition port="socket_in" event="accepted_socket" target=".">
-                        <parameter name="socket"/>
-                        <parameter name="connected_socket"/>
-                        <raise scope="cd" event="create_instance">
-                            <parameter expr="'sockets'" />
-                            <parameter expr="'Socket'" />
-                            <parameter expr="connected_socket" />
-                        </raise>
-                        <raise scope="output" port="socket_out" event="accept_socket">
-                            <parameter expr="self.socket"/>
-                        </raise>
-                    </transition>
-                    <transition event="instance_created" target=".">
-                        <parameter name="instancename"/>
-                        <raise scope="cd" event="start_instance">
-                            <parameter expr="instancename" />
-                        </raise>
-                        <raise scope="narrow" event="set_association_name" target="instancename">
-                            <parameter expr="instancename"/>
-                        </raise>
-                    </transition>
-                    <transition after="1.0" target="."/>
-                </state>
-            </state>
-
-            <state id="close_socket">
-                <state id="close">
-                    <transition event="close_socket" target=".">
-                        <parameter name="association_name"/>
-                        <raise scope="cd" event="delete_instance">
-                            <parameter expr="association_name"/>
-                        </raise>
-                    </transition>
-                </state>
-            </state>
-        </parallel>
-    </scxml>
-</class>

+ 0 - 157
legacy/examples/HTTP_server/classes/socket.xml

@@ -1,157 +0,0 @@
-<class name="Socket">
-    <relationships>
-        <association name="parent" class="Server" min="1" max="1"/>
-    </relationships>
-
-    <constructor>
-        <parameter name="my_socket"/>
-        <body>
-            <![CDATA[
-            self.socket = my_socket
-            self.received_data = ""
-            self.send_data = ""
-            self.closed = False
-            self.association_name = None
-            ]]>
-        </body>
-    </constructor>
-    <scxml initial="init">
-        <state id="init">
-            <transition event="set_association_name" target="../connected">
-                <parameter name="association_name"/>
-                <script>
-                    self.association_name = association_name
-                </script>
-            </transition>
-        </state>
-        <parallel id="connected">
-            <state id="listening" initial="listen">
-                <state id="listen">
-                    <onentry>
-                        <raise scope="output" port="socket_out" event="recv_socket">
-                            <parameter expr="self.socket"/>
-                        </raise>
-                    </onentry>
-                    <transition event="received_socket" port="socket_in" cond="(self.socket == socket) and (len(data) > 0)" target=".">
-                        <parameter name="socket"/>
-                        <parameter name="data"/>
-                        <script>
-                            self.received_data += data
-                        </script>
-                        <raise event="received_data"/>
-                    </transition>
-                    <transition event="received_socket" port="socket_in" cond="(self.socket == socket) and (len(data) == 0)" target="../closed">
-                        <parameter name="socket"/>
-                        <parameter name="data"/>
-                        <raise event="received_data"/>
-                    </transition>
-                </state>
-                <state id="closed">
-                    <onentry>
-                        <script>
-                            self.closed = True
-                        </script>
-                    </onentry>
-                </state>
-            </state>
-
-            <state id="sending" initial="waiting_for_data">
-                <state id="waiting_for_data">
-                    <transition cond="len(self.send_data) > 0" target="../transferring">
-                        <raise scope="output" port="socket_out" event="send_socket">
-                            <parameter expr="self.socket"/>
-                            <parameter expr="self.send_data"/>
-                        </raise>
-                    </transition>
-                </state>
-                <state id="transferring">
-                    <transition event="sent_socket" port="socket_in" cond="self.socket == socket" target="../waiting_for_data">
-                        <parameter name="socket"/>
-                        <parameter name="sent_bytes"/>
-                        <script>
-                            self.send_data = self.send_data[sent_bytes:]
-                        </script>
-                    </transition>
-                </state>
-            </state>
-
-            <state id="queueing">
-                <state id="queueing">
-                    <transition event="HTTP_input" target=".">
-                        <parameter name="data"/>
-                        <script>
-                            #post_data = "&amp;".join(["%s=%s" % (urllib.quote(k), urllib.quote(v)) for k, v in data.iteritems()])
-                            #post_data = "&amp;".join(["%s=%s" % (k, v) for k, v in data.iteritems()])
-                            post_data = data
-                            self.send_data += "HTTP/1.0 200 OK\r\n"
-                            self.send_data += "Content-Length: %s\r\n" % len(post_data)
-                            self.send_data += "Content-Type: %s; charset=UTF-8\r\n" % "text/plain"
-                            self.send_data += "\r\n"
-                            self.send_data += str(post_data)
-                        </script>
-                    </transition>
-                </state>
-            </state>
-
-            <state id="parsing" initial="wait_for_header">
-                <state id="wait_for_header">
-                    <transition cond="'\r\n\r\n' in self.received_data and self.received_data.startswith('POST')" target="../wait_for_payload">
-                        <script>
-                            header, self.received_data = self.received_data.split("\r\n\r\n", 1)
-                            header = header.lower()
-                            if "content-length" in header:
-                                _, after = header.split("content-length:", 1)
-                                after = after.split("\r\n", 1)[0]
-                                after = after.strip()
-                                self.length = int(after)
-                            else:
-                                self.length = float('inf')
-                        </script>
-                    </transition>
-                    <transition cond="self.closed and len(self.received_data) == 0" target="../closing"/>
-                </state>
-                <state id="closing">
-                    <transition after="0.0" target=".">
-                        <raise event="close"/>
-                    </transition>
-                </state>
-                <state id="wait_for_payload">
-                    <transition cond="len(self.received_data) >= self.length or self.closed" target="../wait_for_header">
-                        <script>
-                            if self.length == float('inf'):
-                                data = self.received_data
-                                self.received_data = ""
-                            else:
-                                data = self.received_data[:self.length]
-                                self.received_data = self.received_data[self.length:]
-
-                            print("Got data: " + str(data))
-
-                            # We support POST data only, so everything is in the data
-                            #try:
-                            #    params = dict([p.split('=') for p in data.split('&amp;')])
-                            #    data = {k: urllib.unquote_plus(v) for k, v in params.iteritems()}
-                            #except:
-                            #    data = {}
-                        </script>
-                        <raise event="HTTP_output" scope="narrow" target="'parent'">
-                            <parameter expr="self.association_name"/>
-                            <parameter expr="data"/>
-                        </raise>
-                    </transition>
-                </state>
-            </state>
-            <transition event="close" target="../close"/>
-        </parallel>
-        <state id="close">
-            <onentry>
-                <raise port="socket_out" event="close_socket">
-                    <parameter expr="self.socket"/>
-                </raise>
-                <raise scope="narrow" target="'parent'" event="close_socket">
-                    <parameter expr="self.association_name"/>
-                </raise>
-            </onentry>
-        </state>
-    </scxml>
-</class>

+ 0 - 1
legacy/examples/HTTP_server/make.bat

@@ -1 +0,0 @@
-python -m sccd.compiler.sccdc -p threads -l python server.xml

+ 0 - 8
legacy/examples/HTTP_server/run_echo_server.py

@@ -1,8 +0,0 @@
-import sys
-
-import server
-from sccd.runtime import socket2event
-
-controller = server.Controller(sys.argv[1:])
-socket2event.boot_translation_service(controller)
-controller.start()

+ 0 - 600
legacy/examples/HTTP_server/server.py

@@ -1,600 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Wed Aug 17 13:32:50 2016
-
-Model author: Yentl Van Tendeloo
-Model name:   HTTP Server
-Model description:
-Example HTTP echo server.
-"""
-
-from sccd.runtime.statecharts_core import *
-import time
-import os
-import urllib
-import sys
-import json
-
-import sys
-
-# package "HTTP Server"
-
-class Echo(RuntimeClassBase):
-    def __init__(self, controller, params):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Echo.user_defined_constructor(self, params)
-    
-    def user_defined_constructor(self, params):
-        self.source = None
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /init_server
-        self.states["/init_server"] = State(1, self)
-        self.states["/init_server"].setEnter(self._init_server_enter)
-        
-        # state /wait_for_requests
-        self.states["/wait_for_requests"] = State(2, self)
-        
-        # state /wait_for_requests/wait
-        self.states["/wait_for_requests/wait"] = State(3, self)
-        
-        # add children
-        self.states[""].addChild(self.states["/init_server"])
-        self.states[""].addChild(self.states["/wait_for_requests"])
-        self.states["/wait_for_requests"].addChild(self.states["/wait_for_requests/wait"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/init_server"]
-        self.states["/wait_for_requests"].default_state = self.states["/wait_for_requests/wait"]
-        
-        # transition /init_server
-        _init_server_0 = Transition(self, self.states["/init_server"], [self.states["/wait_for_requests"]])
-        _init_server_0.setAction(self._init_server_0_exec)
-        _init_server_0.setTrigger(Event("instance_created", None))
-        self.states["/init_server"].addTransition(_init_server_0)
-        
-        # transition /wait_for_requests/wait
-        _wait_for_requests_wait_0 = Transition(self, self.states["/wait_for_requests/wait"], [self.states["/wait_for_requests/wait"]])
-        _wait_for_requests_wait_0.setAction(self._wait_for_requests_wait_0_exec)
-        _wait_for_requests_wait_0.setTrigger(Event("HTTP_output", None))
-        self.states["/wait_for_requests/wait"].addTransition(_wait_for_requests_wait_0)
-    
-    def _init_server_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'to_server', 'Server', '', 8080]))
-    
-    def _init_server_0_exec(self, parameters):
-        instancename = parameters[0]
-        self.big_step.outputEventOM(Event("start_instance", None, [self, instancename]))
-    
-    def _wait_for_requests_wait_0_exec(self, parameters):
-        source = parameters[0]
-        data = parameters[1]
-        print("Got input: " + str(data))
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'to_server/%s' % source, Event("HTTP_input", None, [data])]))
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/init_server"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class Server(RuntimeClassBase):
-    def __init__(self, controller, address, port):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Server.user_defined_constructor(self, address, port)
-    
-    def user_defined_constructor(self, address, port):
-        self.socket = None
-        self.address = address
-        self.port = port
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /main
-        self.states["/main"] = ParallelState(1, self)
-        
-        # state /main/forward
-        self.states["/main/forward"] = State(2, self)
-        
-        # state /main/forward/forward
-        self.states["/main/forward/forward"] = State(3, self)
-        
-        # state /main/server
-        self.states["/main/server"] = State(4, self)
-        
-        # state /main/server/init
-        self.states["/main/server/init"] = State(5, self)
-        self.states["/main/server/init"].setEnter(self._main_server_init_enter)
-        
-        # state /main/server/binding
-        self.states["/main/server/binding"] = State(6, self)
-        self.states["/main/server/binding"].setEnter(self._main_server_binding_enter)
-        
-        # state /main/server/listening
-        self.states["/main/server/listening"] = State(7, self)
-        self.states["/main/server/listening"].setEnter(self._main_server_listening_enter)
-        
-        # state /main/server/accepting
-        self.states["/main/server/accepting"] = State(8, self)
-        self.states["/main/server/accepting"].setEnter(self._main_server_accepting_enter)
-        self.states["/main/server/accepting"].setExit(self._main_server_accepting_exit)
-        
-        # state /main/close_socket
-        self.states["/main/close_socket"] = State(9, self)
-        
-        # state /main/close_socket/close
-        self.states["/main/close_socket/close"] = State(10, self)
-        
-        # add children
-        self.states[""].addChild(self.states["/main"])
-        self.states["/main"].addChild(self.states["/main/forward"])
-        self.states["/main"].addChild(self.states["/main/server"])
-        self.states["/main"].addChild(self.states["/main/close_socket"])
-        self.states["/main/forward"].addChild(self.states["/main/forward/forward"])
-        self.states["/main/server"].addChild(self.states["/main/server/init"])
-        self.states["/main/server"].addChild(self.states["/main/server/binding"])
-        self.states["/main/server"].addChild(self.states["/main/server/listening"])
-        self.states["/main/server"].addChild(self.states["/main/server/accepting"])
-        self.states["/main/close_socket"].addChild(self.states["/main/close_socket/close"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/main"]
-        self.states["/main/forward"].default_state = self.states["/main/forward/forward"]
-        self.states["/main/server"].default_state = self.states["/main/server/init"]
-        self.states["/main/close_socket"].default_state = self.states["/main/close_socket/close"]
-        
-        # transition /main/forward/forward
-        _main_forward_forward_0 = Transition(self, self.states["/main/forward/forward"], [self.states["/main/forward/forward"]])
-        _main_forward_forward_0.setAction(self._main_forward_forward_0_exec)
-        _main_forward_forward_0.setTrigger(Event("HTTP_output", None))
-        self.states["/main/forward/forward"].addTransition(_main_forward_forward_0)
-        
-        # transition /main/server/init
-        _main_server_init_0 = Transition(self, self.states["/main/server/init"], [self.states["/main/server/binding"]])
-        _main_server_init_0.setAction(self._main_server_init_0_exec)
-        _main_server_init_0.setTrigger(Event("created_socket", "socket_in"))
-        self.states["/main/server/init"].addTransition(_main_server_init_0)
-        
-        # transition /main/server/binding
-        _main_server_binding_0 = Transition(self, self.states["/main/server/binding"], [self.states["/main/server/listening"]])
-        _main_server_binding_0.setTrigger(Event("bound_socket", "socket_in"))
-        _main_server_binding_0.setGuard(self._main_server_binding_0_guard)
-        self.states["/main/server/binding"].addTransition(_main_server_binding_0)
-        
-        # transition /main/server/listening
-        _main_server_listening_0 = Transition(self, self.states["/main/server/listening"], [self.states["/main/server/accepting"]])
-        _main_server_listening_0.setAction(self._main_server_listening_0_exec)
-        _main_server_listening_0.setTrigger(Event("listened_socket", "socket_in"))
-        _main_server_listening_0.setGuard(self._main_server_listening_0_guard)
-        self.states["/main/server/listening"].addTransition(_main_server_listening_0)
-        
-        # transition /main/server/accepting
-        _main_server_accepting_0 = Transition(self, self.states["/main/server/accepting"], [self.states["/main/server/accepting"]])
-        _main_server_accepting_0.setAction(self._main_server_accepting_0_exec)
-        _main_server_accepting_0.setTrigger(Event("accepted_socket", "socket_in"))
-        self.states["/main/server/accepting"].addTransition(_main_server_accepting_0)
-        _main_server_accepting_1 = Transition(self, self.states["/main/server/accepting"], [self.states["/main/server/accepting"]])
-        _main_server_accepting_1.setAction(self._main_server_accepting_1_exec)
-        _main_server_accepting_1.setTrigger(Event("instance_created", None))
-        self.states["/main/server/accepting"].addTransition(_main_server_accepting_1)
-        _main_server_accepting_2 = Transition(self, self.states["/main/server/accepting"], [self.states["/main/server/accepting"]])
-        _main_server_accepting_2.setTrigger(Event("_0after"))
-        self.states["/main/server/accepting"].addTransition(_main_server_accepting_2)
-        
-        # transition /main/close_socket/close
-        _main_close_socket_close_0 = Transition(self, self.states["/main/close_socket/close"], [self.states["/main/close_socket/close"]])
-        _main_close_socket_close_0.setAction(self._main_close_socket_close_0_exec)
-        _main_close_socket_close_0.setTrigger(Event("close_socket", None))
-        self.states["/main/close_socket/close"].addTransition(_main_close_socket_close_0)
-    
-    def _main_server_init_enter(self):
-        self.big_step.outputEvent(Event("create_socket", "socket_out", []))
-    
-    def _main_server_binding_enter(self):
-        self.big_step.outputEvent(Event("bind_socket", "socket_out", [self.socket, (self.address, self.port)]))
-    
-    def _main_server_listening_enter(self):
-        self.big_step.outputEvent(Event("listen_socket", "socket_out", [self.socket]))
-    
-    def _main_server_accepting_enter(self):
-        self.addTimer(0, 1.0)
-    
-    def _main_server_accepting_exit(self):
-        self.removeTimer(0)
-    
-    def _main_forward_forward_0_exec(self, parameters):
-        association_name = parameters[0]
-        data = parameters[1]
-        print("Forward")
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("HTTP_output", None, [association_name, data])]))
-    
-    def _main_server_init_0_exec(self, parameters):
-        socket = parameters[0]
-        self.socket = socket
-    
-    def _main_server_binding_0_guard(self, parameters):
-        socket = parameters[0]
-        return self.socket == socket
-    
-    def _main_server_listening_0_exec(self, parameters):
-        socket = parameters[0]
-        self.big_step.outputEvent(Event("accept_socket", "socket_out", [self.socket]))
-    
-    def _main_server_listening_0_guard(self, parameters):
-        socket = parameters[0]
-        return self.socket == socket
-    
-    def _main_server_accepting_0_exec(self, parameters):
-        socket = parameters[0]
-        connected_socket = parameters[1]
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'sockets', 'Socket', connected_socket]))
-        self.big_step.outputEvent(Event("accept_socket", "socket_out", [self.socket]))
-    
-    def _main_server_accepting_1_exec(self, parameters):
-        instancename = parameters[0]
-        self.big_step.outputEventOM(Event("start_instance", None, [self, instancename]))
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, instancename, Event("set_association_name", None, [instancename])]))
-    
-    def _main_close_socket_close_0_exec(self, parameters):
-        association_name = parameters[0]
-        self.big_step.outputEventOM(Event("delete_instance", None, [self, association_name]))
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/main"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class Socket(RuntimeClassBase):
-    def __init__(self, controller, my_socket):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Socket.user_defined_constructor(self, my_socket)
-    
-    def user_defined_constructor(self, my_socket):
-        self.socket = my_socket
-        self.received_data = ""
-        self.send_data = ""
-        self.closed = False
-        self.association_name = None
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /init
-        self.states["/init"] = State(1, self)
-        
-        # state /connected
-        self.states["/connected"] = ParallelState(2, self)
-        
-        # state /connected/listening
-        self.states["/connected/listening"] = State(3, self)
-        
-        # state /connected/listening/listen
-        self.states["/connected/listening/listen"] = State(4, self)
-        self.states["/connected/listening/listen"].setEnter(self._connected_listening_listen_enter)
-        
-        # state /connected/listening/closed
-        self.states["/connected/listening/closed"] = State(5, self)
-        self.states["/connected/listening/closed"].setEnter(self._connected_listening_closed_enter)
-        
-        # state /connected/sending
-        self.states["/connected/sending"] = State(6, self)
-        
-        # state /connected/sending/waiting_for_data
-        self.states["/connected/sending/waiting_for_data"] = State(7, self)
-        
-        # state /connected/sending/transferring
-        self.states["/connected/sending/transferring"] = State(8, self)
-        
-        # state /connected/queueing
-        self.states["/connected/queueing"] = State(9, self)
-        
-        # state /connected/queueing/queueing
-        self.states["/connected/queueing/queueing"] = State(10, self)
-        
-        # state /connected/parsing
-        self.states["/connected/parsing"] = State(11, self)
-        
-        # state /connected/parsing/wait_for_header
-        self.states["/connected/parsing/wait_for_header"] = State(12, self)
-        
-        # state /connected/parsing/closing
-        self.states["/connected/parsing/closing"] = State(13, self)
-        self.states["/connected/parsing/closing"].setEnter(self._connected_parsing_closing_enter)
-        self.states["/connected/parsing/closing"].setExit(self._connected_parsing_closing_exit)
-        
-        # state /connected/parsing/wait_for_payload
-        self.states["/connected/parsing/wait_for_payload"] = State(14, self)
-        
-        # state /close
-        self.states["/close"] = State(15, self)
-        self.states["/close"].setEnter(self._close_enter)
-        
-        # add children
-        self.states[""].addChild(self.states["/init"])
-        self.states[""].addChild(self.states["/connected"])
-        self.states[""].addChild(self.states["/close"])
-        self.states["/connected"].addChild(self.states["/connected/listening"])
-        self.states["/connected"].addChild(self.states["/connected/sending"])
-        self.states["/connected"].addChild(self.states["/connected/queueing"])
-        self.states["/connected"].addChild(self.states["/connected/parsing"])
-        self.states["/connected/listening"].addChild(self.states["/connected/listening/listen"])
-        self.states["/connected/listening"].addChild(self.states["/connected/listening/closed"])
-        self.states["/connected/sending"].addChild(self.states["/connected/sending/waiting_for_data"])
-        self.states["/connected/sending"].addChild(self.states["/connected/sending/transferring"])
-        self.states["/connected/queueing"].addChild(self.states["/connected/queueing/queueing"])
-        self.states["/connected/parsing"].addChild(self.states["/connected/parsing/wait_for_header"])
-        self.states["/connected/parsing"].addChild(self.states["/connected/parsing/closing"])
-        self.states["/connected/parsing"].addChild(self.states["/connected/parsing/wait_for_payload"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/init"]
-        self.states["/connected/listening"].default_state = self.states["/connected/listening/listen"]
-        self.states["/connected/sending"].default_state = self.states["/connected/sending/waiting_for_data"]
-        self.states["/connected/queueing"].default_state = self.states["/connected/queueing/queueing"]
-        self.states["/connected/parsing"].default_state = self.states["/connected/parsing/wait_for_header"]
-        
-        # transition /init
-        _init_0 = Transition(self, self.states["/init"], [self.states["/connected"]])
-        _init_0.setAction(self._init_0_exec)
-        _init_0.setTrigger(Event("set_association_name", None))
-        self.states["/init"].addTransition(_init_0)
-        
-        # transition /connected/listening/listen
-        _connected_listening_listen_0 = Transition(self, self.states["/connected/listening/listen"], [self.states["/connected/listening/listen"]])
-        _connected_listening_listen_0.setAction(self._connected_listening_listen_0_exec)
-        _connected_listening_listen_0.setTrigger(Event("received_socket", "socket_in"))
-        _connected_listening_listen_0.setGuard(self._connected_listening_listen_0_guard)
-        self.states["/connected/listening/listen"].addTransition(_connected_listening_listen_0)
-        _connected_listening_listen_1 = Transition(self, self.states["/connected/listening/listen"], [self.states["/connected/listening/closed"]])
-        _connected_listening_listen_1.setAction(self._connected_listening_listen_1_exec)
-        _connected_listening_listen_1.setTrigger(Event("received_socket", "socket_in"))
-        _connected_listening_listen_1.setGuard(self._connected_listening_listen_1_guard)
-        self.states["/connected/listening/listen"].addTransition(_connected_listening_listen_1)
-        
-        # transition /connected/sending/waiting_for_data
-        _connected_sending_waiting_for_data_0 = Transition(self, self.states["/connected/sending/waiting_for_data"], [self.states["/connected/sending/transferring"]])
-        _connected_sending_waiting_for_data_0.setAction(self._connected_sending_waiting_for_data_0_exec)
-        _connected_sending_waiting_for_data_0.setTrigger(None)
-        _connected_sending_waiting_for_data_0.setGuard(self._connected_sending_waiting_for_data_0_guard)
-        self.states["/connected/sending/waiting_for_data"].addTransition(_connected_sending_waiting_for_data_0)
-        
-        # transition /connected/sending/transferring
-        _connected_sending_transferring_0 = Transition(self, self.states["/connected/sending/transferring"], [self.states["/connected/sending/waiting_for_data"]])
-        _connected_sending_transferring_0.setAction(self._connected_sending_transferring_0_exec)
-        _connected_sending_transferring_0.setTrigger(Event("sent_socket", "socket_in"))
-        _connected_sending_transferring_0.setGuard(self._connected_sending_transferring_0_guard)
-        self.states["/connected/sending/transferring"].addTransition(_connected_sending_transferring_0)
-        
-        # transition /connected/queueing/queueing
-        _connected_queueing_queueing_0 = Transition(self, self.states["/connected/queueing/queueing"], [self.states["/connected/queueing/queueing"]])
-        _connected_queueing_queueing_0.setAction(self._connected_queueing_queueing_0_exec)
-        _connected_queueing_queueing_0.setTrigger(Event("HTTP_input", None))
-        self.states["/connected/queueing/queueing"].addTransition(_connected_queueing_queueing_0)
-        
-        # transition /connected/parsing/wait_for_header
-        _connected_parsing_wait_for_header_0 = Transition(self, self.states["/connected/parsing/wait_for_header"], [self.states["/connected/parsing/wait_for_payload"]])
-        _connected_parsing_wait_for_header_0.setAction(self._connected_parsing_wait_for_header_0_exec)
-        _connected_parsing_wait_for_header_0.setTrigger(None)
-        _connected_parsing_wait_for_header_0.setGuard(self._connected_parsing_wait_for_header_0_guard)
-        self.states["/connected/parsing/wait_for_header"].addTransition(_connected_parsing_wait_for_header_0)
-        _connected_parsing_wait_for_header_1 = Transition(self, self.states["/connected/parsing/wait_for_header"], [self.states["/connected/parsing/closing"]])
-        _connected_parsing_wait_for_header_1.setTrigger(None)
-        _connected_parsing_wait_for_header_1.setGuard(self._connected_parsing_wait_for_header_1_guard)
-        self.states["/connected/parsing/wait_for_header"].addTransition(_connected_parsing_wait_for_header_1)
-        
-        # transition /connected/parsing/closing
-        _connected_parsing_closing_0 = Transition(self, self.states["/connected/parsing/closing"], [self.states["/connected/parsing/closing"]])
-        _connected_parsing_closing_0.setAction(self._connected_parsing_closing_0_exec)
-        _connected_parsing_closing_0.setTrigger(Event("_0after"))
-        self.states["/connected/parsing/closing"].addTransition(_connected_parsing_closing_0)
-        
-        # transition /connected/parsing/wait_for_payload
-        _connected_parsing_wait_for_payload_0 = Transition(self, self.states["/connected/parsing/wait_for_payload"], [self.states["/connected/parsing/wait_for_header"]])
-        _connected_parsing_wait_for_payload_0.setAction(self._connected_parsing_wait_for_payload_0_exec)
-        _connected_parsing_wait_for_payload_0.setTrigger(None)
-        _connected_parsing_wait_for_payload_0.setGuard(self._connected_parsing_wait_for_payload_0_guard)
-        self.states["/connected/parsing/wait_for_payload"].addTransition(_connected_parsing_wait_for_payload_0)
-        
-        # transition /connected
-        _connected_0 = Transition(self, self.states["/connected"], [self.states["/close"]])
-        _connected_0.setTrigger(Event("close", None))
-        self.states["/connected"].addTransition(_connected_0)
-    
-    def _connected_listening_listen_enter(self):
-        self.big_step.outputEvent(Event("recv_socket", "socket_out", [self.socket]))
-    
-    def _connected_listening_closed_enter(self):
-        self.closed = True
-    
-    def _connected_parsing_closing_enter(self):
-        self.addTimer(0, 0.0)
-    
-    def _connected_parsing_closing_exit(self):
-        self.removeTimer(0)
-    
-    def _close_enter(self):
-        self.big_step.outputEvent(Event("close_socket", "socket_out", [self.socket]))
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("close_socket", None, [self.association_name])]))
-    
-    def _init_0_exec(self, parameters):
-        association_name = parameters[0]
-        self.association_name = association_name
-    
-    def _connected_listening_listen_0_exec(self, parameters):
-        socket = parameters[0]
-        data = parameters[1]
-        self.received_data += data
-        self.raiseInternalEvent(Event("received_data", None, []))
-    
-    def _connected_listening_listen_0_guard(self, parameters):
-        socket = parameters[0]
-        data = parameters[1]
-        return (self.socket == socket) and (len(data) > 0)
-    
-    def _connected_listening_listen_1_exec(self, parameters):
-        socket = parameters[0]
-        data = parameters[1]
-        self.raiseInternalEvent(Event("received_data", None, []))
-    
-    def _connected_listening_listen_1_guard(self, parameters):
-        socket = parameters[0]
-        data = parameters[1]
-        return (self.socket == socket) and (len(data) == 0)
-    
-    def _connected_sending_waiting_for_data_0_exec(self, parameters):
-        self.big_step.outputEvent(Event("send_socket", "socket_out", [self.socket, self.send_data]))
-    
-    def _connected_sending_waiting_for_data_0_guard(self, parameters):
-        return len(self.send_data) > 0
-    
-    def _connected_sending_transferring_0_exec(self, parameters):
-        socket = parameters[0]
-        sent_bytes = parameters[1]
-        self.send_data = self.send_data[sent_bytes:]
-    
-    def _connected_sending_transferring_0_guard(self, parameters):
-        socket = parameters[0]
-        sent_bytes = parameters[1]
-        return self.socket == socket
-    
-    def _connected_queueing_queueing_0_exec(self, parameters):
-        data = parameters[0]
-        #post_data = "&".join(["%s=%s" % (urllib.quote(k), urllib.quote(v)) for k, v in data.iteritems()])
-        #post_data = "&".join(["%s=%s" % (k, v) for k, v in data.iteritems()])
-        post_data = data
-        self.send_data += "HTTP/1.0 200 OK\r\n"
-        self.send_data += "Content-Length: %s\r\n" % len(post_data)
-        self.send_data += "Content-Type: %s; charset=UTF-8\r\n" % "text/plain"
-        self.send_data += "\r\n"
-        self.send_data += str(post_data)
-    
-    def _connected_parsing_wait_for_header_0_exec(self, parameters):
-        header, self.received_data = self.received_data.split("\r\n\r\n", 1)
-        header = header.lower()
-        if "content-length" in header:
-            _, after = header.split("content-length:", 1)
-            after = after.split("\r\n", 1)[0]
-            after = after.strip()
-            self.length = int(after)
-        else:
-            self.length = float('inf')
-    
-    def _connected_parsing_wait_for_header_0_guard(self, parameters):
-        return '\r\n\r\n' in self.received_data and self.received_data.startswith('POST')
-    
-    def _connected_parsing_wait_for_header_1_guard(self, parameters):
-        return self.closed and len(self.received_data) == 0
-    
-    def _connected_parsing_closing_0_exec(self, parameters):
-        self.raiseInternalEvent(Event("close", None, []))
-    
-    def _connected_parsing_wait_for_payload_0_exec(self, parameters):
-        if self.length == float('inf'):
-            data = self.received_data
-            self.received_data = ""
-        else:
-            data = self.received_data[:self.length]
-            self.received_data = self.received_data[self.length:]
-        
-        print("Got data: " + str(data))
-        
-        # We support POST data only, so everything is in the data
-        #try:
-        #    params = dict([p.split('=') for p in data.split('&')])
-        #    data = {k: urllib.unquote_plus(v) for k, v in params.iteritems()}
-        #except:
-        #    data = {}
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("HTTP_output", None, [self.association_name, data])]))
-    
-    def _connected_parsing_wait_for_payload_0_guard(self, parameters):
-        return len(self.received_data) >= self.length or self.closed
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/init"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "Echo":
-            instance = Echo(self.controller, construct_params[0])
-            instance.associations = {}
-            instance.associations["to_server"] = Association("Server", 1, 1)
-        elif class_name == "Server":
-            instance = Server(self.controller, construct_params[0], construct_params[1])
-            instance.associations = {}
-            instance.associations["sockets"] = Association("Socket", 0, -1)
-            instance.associations["parent"] = Association("Echo", 1, 1)
-        elif class_name == "Socket":
-            instance = Socket(self.controller, construct_params[0])
-            instance.associations = {}
-            instance.associations["parent"] = Association("Server", 1, 1)
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, params, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.addInputPort("socket_in")
-        self.addOutputPort("socket_out")
-        self.object_manager.createInstance("Echo", [params])

+ 0 - 22
legacy/examples/HTTP_server/server.xml

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram author="Yentl Van Tendeloo" name="HTTP Server">
-    <description>
-        Example HTTP echo server.
-    </description>
-    <top>
-        import time
-        import os
-        import urllib
-        import sys
-        import json
-
-        import sys
-    </top>
-
-    <inport name="socket_in"/>
-    <outport name="socket_out"/>
-
-    <class src="classes/echo.xml" default="true"/>
-    <class src="classes/server.xml"/>
-    <class src="classes/socket.xml"/>
-</diagram>

+ 0 - 9
legacy/examples/Makefile

@@ -1,9 +0,0 @@
-.PHONY: all
-
-SUB_DIRS = $(shell ls .)
-
-all:
-	for D in $(SUB_DIRS); do $(MAKE) -C $$D $@ ; done
-
-clean:
-	for D in $(SUB_DIRS); do $(MAKE) -C $$D $@ ; done

+ 0 - 9
legacy/examples/bouncingballs/Makefile

@@ -1,9 +0,0 @@
-.PHONY: all
-
-SUB_DIRS = js python
-
-all:
-	for D in $(SUB_DIRS); do $(MAKE) -C $$D $@ ; done
-
-clean:
-	for D in $(SUB_DIRS); do $(MAKE) -C $$D $@ ; done

+ 0 - 21
legacy/examples/bouncingballs/js/Makefile

@@ -1,21 +0,0 @@
-.PHONY: all clean
-
-SCCDC = python -m sccd.compiler.sccdc
-FLAGS = -l javascript -p eventloop
-
-SOURCE = sccd.xml
-
-TARGET_DIR = target_js
-TARGET = $(TARGET_DIR)/target.js
-
-all: $(TARGET_DIR) $(TARGET)
-
-clean:
-	find $(TARGET_DIR) -type f -delete
-	-rmdir $(TARGET_DIR)
-
-$(TARGET): $(SOURCE)
-	$(SCCDC) $(FLAGS) -o $@ $<
-
-$(TARGET_DIR):
-	-mkdir $@

+ 0 - 10
legacy/examples/bouncingballs/js/index.html

@@ -1,10 +0,0 @@
-<script src="../../../src/javascript_sccd_runtime/libs/HackTimer.js"></script>
-<script src="../../../src/javascript_sccd_runtime/statecharts_core.js"></script>
-<script src="../../../src/javascript_sccd_runtime/libs/utils.js"></script>
-<script src="../../../src/javascript_sccd_runtime/libs/svg.js"></script>
-<script src="../../../src/javascript_sccd_runtime/libs/ui.js"></script>
-<script src="target_js/target.js"></script>
-<script>
-controller = new Bouncing_Balls_JavaScript_Version.Controller(new JsEventLoop());
-controller.start();
-</script> 

+ 0 - 1
legacy/examples/bouncingballs/js/make.bat

@@ -1 +0,0 @@
-..\..\..\python_sccd_compiler\sccdc.py -p eventloop -l javascript -o target_js\sccd.js sccd.xml

+ 0 - 403
legacy/examples/bouncingballs/js/sccd.xml

@@ -1,403 +0,0 @@
-<?xml version="1.1" ?>
-<diagram author="Joeri Exelmans+Raphael Mannadiar+Simon Van Mierlo" name="Bouncing_Balls_JavaScript_Version">
-	<description>
-		SVG canvas with bouncing balls in it.
-	</description>
-	<top>
-	</top>	
-	<inport name="ui" />
-	<class name="MainApp" default="true">
-		<relationships>
-			<association name="fields" class="Field" />
-		</relationships>
-		<constructor>
-			<body>
-				<![CDATA[
-				this.nr_of_fields = 0;
-				]]>
-			</body>
-		</constructor>
-		<scxml initial="running">
-			<state id="running" initial="root">
-				<parallel id="root">
-					<state id="main_behaviour" initial="initializing">
-						<state id="initializing">
-							<transition target="../running">
-								<raise event="create_field" />		
-							</transition>
-						</state>
-						<state id="running">
-							<transition target='.' event='button_pressed' cond='event_name == "create_new_field"'>
-								<parameter name="event_name" type="str" />
-								<raise event="create_field" />
-							</transition>
-						</state>
-					</state>
-					<state id="cd_behaviour" initial="waiting">
-						<state id="waiting">
-							<transition event="create_field" target="../creating">
-								<raise scope="cd" event="create_instance">
-									<parameter expr='"fields"' />
-								</raise>
-							</transition>
-							<transition event="delete_field" target='../check_nr_of_fields'>
-								<parameter name="association_name" type="str"/>
-								<raise scope="cd" event="delete_instance">
-									<parameter expr='association_name' />
-								</raise>
-								<script>
-									<![CDATA[
-									this.nr_of_fields -= 1
-									]]>
-								</script>
-							</transition>
-						</state>
-						<state id="creating">
-							<transition event="instance_created" target="../waiting">
-								<parameter name="association_name" type="string"/>
-								<raise scope="cd" event="start_instance">
-									<parameter expr="association_name" />
-								</raise>
-								<raise scope="narrow" event="set_association_name" target="association_name">
-									<parameter expr="association_name" />
-								</raise>
-								<script>
-									<![CDATA[
-									this.nr_of_fields += 1
-									]]>
-								</script>
-							</transition>
-						</state>
-						<state id="check_nr_of_fields">
-							<transition target="../stopped" cond="this.nr_of_fields == 0">
-                                <raise event="stop" />								
-							</transition>
-							<transition target="../waiting" cond="this.nr_of_fields != 0"/>
-						</state>
-                        <state id="stopped" />
-					</state>
-                    <transition target="../stopped" event="stop">
-                        <script>
-                            <![CDATA[
-                            //NOTE: ideally, this should be ui.close_window(ui.window). we can't do this though 
-                            //		  due to a security measure preventing scripts from closing pages they didn't
-                            //		  open themselves
-                            ui.println('refresh to play again');
-                            ]]>
-                        </script>
-                    </transition>
-				</parallel>
-				<state id="stopped" />
-			</state>
-		</scxml>
-	</class>
-
-	<class name="Field">
-		<attribute name="canvas" />
-		<attribute name="field_window" />
-        <inport name="field_ui"/>
-		<relationships>
-			<association name="balls" class="Ball" />
-			<association name="buttons" class="Button" />
-			<association name="parent" class="MainApp" min="1" max="1" />
-		</relationships>
-		<constructor>
-			<body>
-				<![CDATA[
-				this.field_window = ui.new_window(400,450);
-				this.canvas	= ui.append_canvas(this.field_window,400,400,{'background':'#eee'});
-				ui.bind_event(this.field_window, ui.EVENTS.WINDOW_CLOSE, this.controller, 'window_close', this.inports['field_ui']);
-				ui.bind_event(this.field_window, ui.EVENTS.KEY_PRESS, this.controller, 'key_press', this.inports['field_ui']);
-				ui.bind_event(this.canvas.element, ui.EVENTS.MOUSE_RIGHT_CLICK, this.controller, 'right_click', this.inports['field_ui']);
-				ui.bind_event(this.canvas.element, ui.EVENTS.MOUSE_MOVE, this.controller, 'mouse_move');
-				ui.bind_event(this.canvas.element, ui.EVENTS.MOUSE_RELEASE, this.controller, 'mouse_release');
-				]]>
-			</body>
-		</constructor>
-		<destructor>
-			<body>
-				<![CDATA[
-				ui.close_window(this.field_window);
-				]]>
-			</body>
-		</destructor>
-		<scxml initial="root">
-			<state id="root" initial="waiting">
-				<state id="waiting">
-					<transition event="set_association_name" target="../initializing">
-						<parameter name="association_name" type="str" />
-						<script>
-							<![CDATA[
-							this.association_name = association_name
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="initializing">
-					<transition target="../creating">
-						<raise scope="cd" event="create_instance">
-							<parameter expr='"buttons"' />
-							<parameter expr='"Button"' /><!-- if creation parameters are supplied, it is also required to give a class name -->
-							<parameter expr="this" />
-							<parameter expr="'create_new_field'" />
-							<parameter expr="'Spawn New Window'" />
-						</raise>
-					</transition>
-				</state>
-				<state id="creating">
-					<transition event='instance_created' target='../packing'>
-						<parameter name="association_name" type="string"/>
-						<raise scope="cd" event="start_instance">
-							<parameter expr="association_name" />
-						</raise>
-					</transition>
-				</state>
-				<state id="packing">
-					<transition event="button_created" target='../running'>
-					</transition>
-				</state>
-				<parallel id="running">
-					<transition	port="field_ui" event="window_close" target="../deleting">
-						<raise event="delete_instance" scope="cd">
-							<parameter expr='"buttons"' />
-						</raise>
-						<raise event="delete_instance" scope="cd">
-							<parameter expr='"balls"' />
-						</raise>
-					</transition>
-					<state id="main_behaviour" initial="running">
-						<state id="running">
-							<transition port="field_ui" event="right_click" target="../creating">
-								<parameter name="x" />
-								<parameter name="y" />
-								<parameter name="button" />
-								<raise scope="cd" event="create_instance">
-									<parameter expr='"balls"' />
-									<parameter expr='"Ball"' /><!-- if creation parameters are supplied, it is also required to give a class name -->
-									<parameter expr="this.canvas" />
-									<parameter expr="x" />
-									<parameter expr="y" />
-								</raise>
-							</transition>
-						</state>
-						<state id="creating">
-							<transition event="instance_created" target="../running">
-								<parameter name="association_name" type="string"/>
-								<raise scope="cd" event="start_instance">
-									<parameter expr="association_name" />
-								</raise>
-								<raise scope="narrow" event="set_association_name" target="association_name">
-									<parameter expr="association_name" />
-								</raise>
-							</transition>
-						</state>
-					</state>
-					<state id="deleting_behaviour" initial="running">
-						<state id="running">
-							<transition event="delete_ball" target='.'>
-								<parameter name="association_name" type="str"/>
-								<raise scope="cd" event="delete_instance">
-									<parameter expr='association_name' />
-								</raise>
-							</transition>
-						</state>
-					</state>
-					<state id="child_behaviour" initial="listening">
-						<state id="listening">
-							<transition event="button_pressed" target='.'>
-								<parameter name="event_name" type="str" />
-								<raise event="button_pressed" scope="narrow" target="'parent'">
-									<parameter expr='event_name' />
-								</raise>
-							</transition>
-						</state>
-					</state>
-                    <state id="deleting_balls_behaviour" initial="listening">
-                        <state id="listening">
-                            <transition port="field_ui" event="key_press" target="." cond="key == ui.KEYCODES.DELETE">
-                                <parameter name="key" />
-                                <raise event="delete_self" scope="narrow" target="'balls'" />
-                            </transition>
-                        </state>
-                    </state>
-				</parallel>
-				<state id="deleting">
-					<transition target="../deleted">
-						<raise event="delete_field" scope="narrow" target="'parent'">
-							<parameter expr='this.association_name' />
-						</raise>
-					</transition>
-				</state>
-				<state id="deleted" />
-			</state>
-		</scxml>
-	</class>
-	
-	<class name="Button">
-		<relationships>
-			<association name="parent" class="Field" min="1" max="1" />
-		</relationships>
-        <inport name="button_ui"/>
-		<constructor>
-			<parameter name="parent" type="Field" />
-			<parameter name="event_name" type="str" />
-			<parameter name="button_text" type="str" />
-			<body>
-				<![CDATA[
-				this.event_name = event_name;
-				var button = ui.append_button(parent.field_window, event_name);
-				ui.bind_event(button.element, ui.EVENTS.MOUSE_CLICK, this.controller, 'mouse_click', this.inports["button_ui"]);
-				]]>
-			</body>
-		</constructor>
-		<scxml initial="initializing">
-			<state id="initializing">
-				<transition target="../running">
-					<raise event="button_created" scope="narrow" target="'parent'">
-					</raise>
-				</transition>
-			</state>
-			<state id="running">
-				<transition port='button_ui' event="mouse_click" target='.' cond="button == ui.MOUSE_BUTTONS.LEFT">
-					<parameter name="x" />
-					<parameter name="y" />
-					<parameter name="button" />
-					<raise event="button_pressed" scope="narrow" target="'parent'">
-						<parameter expr="this.event_name" />
-					</raise>
-				</transition>
-			</state>
-		</scxml>
-	</class>
-	
-	<class name="Ball">
-		<atrribute name="element" />
-		<attribute name="canvas" />
-		<inport name="ball_ui" />
-		<relationships>
-			<association name="parent" class="Field" min="1" max="1" />
-		</relationships>
-		<constructor>
-			<parameter name="canvas" />
-			<parameter name="x" />
-			<parameter name="y" />
-			<body>
-				<![CDATA[
-				this.canvas 		= canvas;
-				this.r 				= 20.0;
-				this.vel 			= {'x': utils.random() * 3.0, 'y': utils.random() * 3.0};
-				this.mouse_pos		= {};
-				this.smooth 		= 0.4; // value between 0 and 1
-
-				var circle = this.canvas.add_circle(x, y, this.r, {'fill':'#000'});
-				ui.bind_event(circle, ui.EVENTS.MOUSE_PRESS, this.controller, 'mouse_press', this.inports["ball_ui"]);
-				this.element = circle;
-				]]>
-			</body>
-		</constructor>
-		<destructor>
-			<body>
-				<![CDATA[
-				this.canvas.remove_element(this.element);
-				]]>
-			</body>
-		</destructor>
-		<scxml initial="main_behaviour">
-			<state id="main_behaviour" initial="initializing">
-				<state id="initializing">
-					<transition event="set_association_name" target="../bouncing">
-						<parameter name="association_name" type="str" />
-						<script>
-							<![CDATA[
-							this.association_name = association_name;
-							]]>							
-						</script>
-					</transition>
-				</state>
-				<state id="bouncing">
-					<transition after="0.05" target=".">
-						<script>
-							<![CDATA[
-							var pos = this.element.get_position();	
-							if (pos.x-this.r <= 0 || pos.x+this.r >= this.canvas.width) 
-								this.vel.x = -this.vel.x;
-							if (pos.y-this.r <= 0 || pos.y+this.r >= this.canvas.height) 
-								this.vel.y = -this.vel.y;
-							this.element.move(this.vel.x, this.vel.y);
-							]]>							
-						</script>
-					</transition>
-					<transition port="ball_ui" event="mouse_press" target="../selected" cond="button == ui.MOUSE_BUTTONS.LEFT">
-						<parameter name="x" />
-						<parameter name="y" />
-						<parameter name="button" />
-						<script>
-							<![CDATA[
-							this.element.set_color("#ff0");
-							]]>							
-						</script>
-					</transition>
-				</state>
-				<state id="dragging">
-					<transition port="ui" event="mouse_move" target=".">
-						<parameter name="x" />
-						<parameter name="y" />
-						<parameter name="button" />
-						<script>
-							<![CDATA[
-							var dx = x - this.mouse_pos.x;
-							var dy = y - this.mouse_pos.y;
-
-							this.element.move(dx, dy);
-
-							// keep ball within boundaries
-							var pos = this.element.get_position();
-							if (pos.x-this.r <= 0) 
-								pos.x = this.r + 1;
-							else if (pos.x+this.r >= this.canvas.width) 
-								pos.x = this.canvas.width-this.r-1;
-							if (pos.y-this.r <= 0) 
-								pos.y = this.r + 1;
-							else if (pos.y+this.r >= this.canvas.height) 
-								pos.y = this.canvas.height-this.r-1;
-							this.element.set_position(pos.x, pos.y);
-							this.mouse_pos = {'x':x, 'y':y};
-							this.vel = {
-								'x': (1-this.smooth)*dx + this.smooth*this.vel.x,
-								'y': (1-this.smooth)*dy + this.smooth*this.vel.y
-							};
-							]]>
-						</script>
-					</transition>
-					<transition port="ui" event="mouse_release" target="../bouncing">
-						<parameter name="x" />
-						<parameter name="y" />
-						<script>
-							<![CDATA[
-							this.element.set_color("#f00");
-							]]>							
-						</script>
-					</transition>
-				</state>
-				<state id='selected'>
-					<transition port="ball_ui" event="mouse_press" target="../dragging" cond="button == ui.MOUSE_BUTTONS.LEFT">
-						<parameter name="x" />
-						<parameter name="y" />
-						<parameter name="button" />
-						<script>
-							<![CDATA[
-							this.mouse_pos = {'x':x, 'y':y};
-							]]>
-						</script>
-					</transition>
-                    <transition event="delete_self" target='../../deleted'>					
-                        <raise event="delete_ball" scope="narrow" target="'parent'">
-                            <parameter expr='this.association_name' />
-                        </raise>
-                    </transition>
-				</state>
-			</state>
-			<state id='deleted' />
-		</scxml>
-	</class>
-</diagram>

+ 0 - 35
legacy/examples/bouncingballs/python/Makefile

@@ -1,35 +0,0 @@
-.PHONY: all clean
-
-SCCDC = python -m sccd.compiler.sccdc
-FLAGS = -l python -p eventloop
-FLAGS_THREADS = -l python -p threads
-
-TARGET_DIR = target_py
-TARGETS = $(TARGET_DIR)/target.py $(TARGET_DIR)/multiwindow.py $(TARGET_DIR)/target_performance.py $(TARGET_DIR)/target_performance_threads.py $(TARGET_DIR)/target_performance_cpu_time.py
-
-
-all: $(TARGET_DIR) $(TARGETS)
-
-clean:
-	find $(TARGET_DIR) -type f -delete
-	-rmdir $(TARGET_DIR)
-
-$(TARGET_DIR)/target.py: sccd.xml
-	$(SCCDC) $(FLAGS) -o $@ $<
-
-$(TARGET_DIR)/multiwindow.py: sccd_multiwindow.xml
-	$(SCCDC) $(FLAGS) -o $@ $<
-
-$(TARGET_DIR)/target_performance.py: sccd_performance.xml
-	$(SCCDC) $(FLAGS) -o $@ $<
-
-$(TARGET_DIR)/target_performance_threads.py: sccd_performance_threads.xml
-	$(SCCDC) $(FLAGS_THREADS) -o $@ $<
-
-$(TARGET_DIR)/target_performance_cpu_time.py: sccd_performance_cpu_time.xml
-	$(SCCDC) $(FLAGS_THREADS) -o $@ $<
-
-$(TARGET_DIR):
-	-mkdir $@
-	touch $@/__init__.py
-

+ 0 - 5
legacy/examples/bouncingballs/python/__init__.py

@@ -1,5 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''

+ 0 - 3
legacy/examples/bouncingballs/python/make.bat

@@ -1,3 +0,0 @@
-python -m sccd.compiler.sccdc -p eventloop -l python -o target_py\target.py sccd.xml
-python -m sccd.compiler.sccdc -p eventloop -l python -o target_py\multiwindow.py sccd_multiwindow.xml
-python -m sccd.compiler.sccdc -p eventloop -l python sccd_no_ui.xml

+ 0 - 18
legacy/examples/bouncingballs/python/runner.py

@@ -1,18 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''
-
-import Tkinter as tk
-import target_py.target as target
-from sccd.runtime.libs.ui import ui
-from sccd.runtime.statecharts_core import Event
-from sccd.runtime.tkinter_eventloop import *
-
-if __name__ == '__main__':
-	ui.window = tk.Tk()
-	ui.window.withdraw()
-	controller = target.Controller(TkEventLoop(ui.window))
-	controller.start()
-	ui.window.mainloop()

+ 0 - 19
legacy/examples/bouncingballs/python/runner_multiwindow.py

@@ -1,19 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''
-
-import Tkinter as tk
-import target_py.multiwindow as target
-from sccd.runtime.statecharts_core import Event
-from sccd.runtime.tkinter_eventloop import *
-from widget import Widget
-
-if __name__ == '__main__':
-    window = tk.Tk()
-    window.withdraw()
-    controller = target.Controller(window, TkEventLoop(window))
-    Widget.controller = controller
-    controller.start()
-    window.mainloop()

+ 0 - 70
legacy/examples/bouncingballs/python/runner_no_ui.py

@@ -1,70 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''
-
-import threading
-
-import Tkinter as tk
-import sccd_no_ui as target
-from sccd.runtime.libs.ui import ui
-from sccd.runtime.statecharts_core import Event
-from sccd.runtime.tkinter_eventloop import *
-from ui_classes import *
-from widget_private_ports import Widget
-
-if __name__ == '__main__':
-    root = tk.Tk()
-    root.withdraw()
-
-#    def add_event(*args):
-#        print "okay adding %s" % args
-#
-#    root.bind("<<ADD_EVENT>>", add_event)
-#
-#    controller = target.Controller(TkEventLoop(root))
-#
-#    def raw_inputter():
-#        while 1:
-#            #controller.addInput(Event(raw_input(), "input", []))
-#            root.event_generate("<<ADD_EVENT>>")
-#    input_thread = threading.Thread(target=raw_inputter)
-#    input_thread.daemon = True
-#    input_thread.start()
-    
-#    output_listener = controller.addOutputListener(["ui_out"])
-#    def outputter():
-#        while 1:
-#            event = output_listener.fetch(-1)
-#            print event
-#    output_thread = threading.Thread(target=outputter)
-#    output_thread.daemon = True
-#    output_thread.start()
-
-    controller = target.Controller(TkEventLoop(root))
-    Widget.controller = controller
-
-    listener = controller.addOutputListener(controller.output_ports["ui_out"])
-    windows = {}
-    def check_output():
-        while True:
-            output_event = listener.fetch(0)
-            if not output_event is None:
-                if output_event.getName() == "create_new_window":
-                    assoc_name = output_event.getParameters()[0]
-                    sccd_object = output_event.getParameters()[1]
-                    windows[assoc_name] = WindowVis(sccd_object)
-                elif output_event.getName() == "delete_window":
-                    assoc_name = output_event.getParameters()[0]
-                    windows[assoc_name].destruct()
-                    del windows[assoc_name]
-                elif output_event.getName() == "stop_ui":
-                    root.quit()
-            else:
-                break
-        root.after(40, check_output) # hmm yeah so this delay is problematic: the visualization is created a bit AFTER the statechart object is, which means that the output listener is created too late, which means events are getting lost
-    root.after(40, check_output)
-
-    controller.start()
-    root.mainloop()

+ 0 - 23
legacy/examples/bouncingballs/python/runner_performance.py

@@ -1,23 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''
-
-import Tkinter as tk
-import target_py.target_performance as target
-from sccd.runtime.libs.ui import ui
-from sccd.runtime.statecharts_core import Event
-from sccd.runtime.tkinter_eventloop import *
-
-if __name__ == '__main__':
-    ui.window = tk.Tk()
-    ui.window.withdraw()
-    def callback(ctrl, behind_schedule):
-        if behind_schedule > 2000:
-            print len(ctrl.object_manager.instances)
-            ctrl.stop()
-            ui.window.destroy()
-    controller = target.Controller(TkEventLoop(ui.window), behind_schedule_callback=callback)
-    controller.start()
-    ui.window.mainloop()

+ 0 - 14
legacy/examples/bouncingballs/python/runner_performance_cpu_time.py

@@ -1,14 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''
-
-import target_py.target_performance_cpu_time as target
-import sys
-from sccd.runtime.statecharts_core import Event
-
-if __name__ == '__main__':
-	# fields_to_create, balls_to_create
-    controller = target.Controller(int(sys.argv[1]), int(sys.argv[2]))
-    controller.start()

+ 0 - 18
legacy/examples/bouncingballs/python/runner_performance_threads.py

@@ -1,18 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''
-
-import target_py.target_performance_threads as target
-import sys
-from sccd.runtime.statecharts_core import Event
-
-if __name__ == '__main__':
-    def callback(ctrl, behind_schedule):
-        if behind_schedule > 2000:
-            print len(ctrl.object_manager.instances)
-            ctrl.stop()
-            sys.exit()
-    controller = target.Controller(behind_schedule_callback=callback)
-    controller.start()

+ 0 - 405
legacy/examples/bouncingballs/python/sccd.xml

@@ -1,405 +0,0 @@
-<?xml version="1.1" ?>
-<diagram author="Simon Van Mierlo+Raphael Mannadiar" name="Bouncing_Balls_Python_Version">
-    <description>
-        Tkinter frame with bouncing balls in it.
-    </description>
-    <top>
-        from sccd.runtime.libs.ui import ui
-        from sccd.runtime.libs.utils import utils
-        import random
-    </top>
-    <inport name="ui"/>
-    <class name="MainApp" default="true">
-        <relationships>
-            <association name="fields" class="Field" />
-        </relationships>
-        <constructor>
-            <body>
-                <![CDATA[
-                self.nr_of_fields = 0
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="running">
-            <state id="running" initial="root">
-                <parallel id="root">
-                    <state id="main_behaviour" initial="initializing">
-                        <state id="initializing">
-                            <transition target="../running">
-                                <raise event="create_field" />        
-                            </transition>
-                        </state>
-                        <state id="running">
-                            <transition target='.' event='button_pressed' cond='event_name == "create_new_field"'>
-                                <parameter name="event_name" type="str" />
-                                <raise event="create_field" />
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="cd_behaviour" initial="waiting">
-                        <state id="waiting">
-                            <transition event="create_field" target="../creating">
-                                <raise scope="cd" event="create_instance">
-                                    <parameter expr='"fields"' />
-                                </raise>
-                            </transition>
-                            <transition event="delete_field" target='../check_nr_of_fields'>
-                                <parameter name="association_name" type="str"/>
-                                <raise scope="cd" event="delete_instance">
-                                    <parameter expr='association_name' />
-                                </raise>
-                                <script>
-                                    <![CDATA[
-                                    self.nr_of_fields -= 1
-                                    ]]>
-                                </script>
-                            </transition>
-                        </state>
-                        <state id="creating">
-                            <transition event="instance_created" target="../waiting">
-                                <parameter name="association_name" type="string"/>
-                                <raise scope="cd" event="start_instance">
-                                    <parameter expr="association_name" />
-                                </raise>
-                                <raise scope="narrow" event="set_association_name" target="association_name">
-                                    <parameter expr="association_name" />
-                                </raise>
-                                <script>
-                                    <![CDATA[
-                                    self.nr_of_fields += 1
-                                    ]]>
-                                </script>
-                            </transition>
-                        </state>
-                        <state id="check_nr_of_fields">
-                            <transition target="../stopped" cond="self.nr_of_fields == 0" after="0.05">
-                                <raise event="stop" />
-                            </transition>
-                            <transition target="../waiting" cond="self.nr_of_fields != 0"/>
-                        </state>
-                        <state id="stopped" />
-                    </state>
-                    <transition target="../stopped" event="stop">
-                        <script>
-                            <![CDATA[
-                            ui.close_window(ui.window)
-                            ]]>
-                        </script>
-                    </transition>
-                </parallel>
-                <state id="stopped" />
-            </state>
-        </scxml>
-    </class>
-
-    <class name="Field">
-        <attribute name="canvas" />
-        <attribute name="field_window" />
-        <inport name="field_ui"/>
-        <relationships>
-            <association name="balls" class="Ball" />
-            <association name="buttons" class="Button" />
-            <association name="parent" class="MainApp" min="1" max="1" />
-        </relationships>
-        <constructor>
-            <body>
-                <![CDATA[
-                self.field_window = ui.new_window(800,600,"BouncingBalls");
-                self.canvas = ui.append_canvas(self.field_window,800,600,{'background':'#eee'});
-                ui.bind_event(self.field_window, ui.EVENTS.WINDOW_CLOSE, self.controller, 'window_close', self.inports['field_ui']);
-                ui.bind_event(self.field_window, ui.EVENTS.KEY_PRESS, self.controller, 'key_press', self.inports['field_ui']);
-                ui.bind_event(self.canvas.element, ui.EVENTS.MOUSE_RIGHT_CLICK,    self.controller, 'right_click', self.inports['field_ui']);
-                ui.bind_event(self.canvas.element, ui.EVENTS.MOUSE_MOVE, self.controller, 'mouse_move', self.inports['field_ui']);
-                ui.bind_event(self.canvas.element, ui.EVENTS.MOUSE_RELEASE, self.controller, 'mouse_release', self.inports['field_ui']);
-                ]]>
-            </body>
-        </constructor>
-        <destructor>
-            <body>
-                <![CDATA[
-                ui.close_window(self.field_window);
-                ]]>
-            </body>
-        </destructor>
-        <scxml initial="root">
-            <state id="root" initial="waiting">
-                <state id="waiting">
-                    <transition event="set_association_name" target="../initializing">
-                        <parameter name="association_name" type="str" />
-                        <script>
-                            <![CDATA[
-                            self.association_name = association_name
-                            ]]>
-                        </script>
-                    </transition>
-                </state>
-                <state id="initializing">
-                    <transition target="../creating">
-                        <raise scope="cd" event="create_instance">
-                            <parameter expr='"buttons"' />
-                            <parameter expr='"Button"' />
-                            <parameter expr="self" />
-                            <parameter expr="'create_new_field'" />
-                            <parameter expr="'Spawn New Window'" />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="creating">
-                    <transition event='instance_created' target='../packing'>
-                        <parameter name="association_name" type="string"/>
-                        <raise scope="cd" event="start_instance">
-                            <parameter expr="association_name" />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="packing">
-                    <transition event="button_created" target='../running'>
-                    </transition>
-                </state>
-                <parallel id="running">
-                    <transition port="field_ui" event="window_close" target="../deleting">
-                        <raise event="delete_instance" scope="cd">
-                            <parameter expr='"buttons"' />
-                        </raise>
-                        <raise event="delete_instance" scope="cd">
-                            <parameter expr='"balls"' />
-                        </raise>
-                    </transition>
-                    <state id="main_behaviour" initial="running">
-                        <state id="running">
-                            <transition port="field_ui" event="right_click" target="../creating">
-                                <parameter name="x" />
-                                <parameter name="y" />
-                                <parameter name="button" />
-                                <raise scope="cd" event="create_instance">
-                                    <parameter expr='"balls"' />
-                                    <parameter expr='"Ball"' />
-                                    <parameter expr="self.canvas" />
-                                    <parameter expr="x" />
-                                    <parameter expr="y" />
-                                </raise>
-                            </transition>
-                        </state>
-                        <state id="creating">
-                            <transition event="instance_created" target="../running">
-                                <parameter name="association_name" type="string"/>
-                                <raise scope="cd" event="start_instance">
-                                    <parameter expr="association_name" />
-                                </raise>
-                                <raise scope="narrow" event="set_association_name" target="association_name">
-                                    <parameter expr="association_name" />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="deleting_behaviour" initial="running">
-                        <state id="running">
-                            <transition event="delete_ball" target='.'>
-                                <parameter name="association_name" type="str"/>
-                                <raise scope="cd" event="delete_instance">
-                                    <parameter expr='association_name' />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="child_behaviour" initial="listening">
-                        <state id="listening">
-                            <transition event="button_pressed" target='.'>
-                                <parameter name="event_name" type="str" />
-                                <raise event="button_pressed" scope="narrow" target="'parent'">
-                                    <parameter expr='event_name' />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="deleting_balls_behaviour" initial="listening">
-                        <state id="listening">
-                            <transition port="field_ui" event="key_press" target="." cond="key == ui.KEYCODES.DELETE">
-                                <parameter name="key" />
-                                <raise event="delete_self" scope="narrow" target="'balls'" />
-                            </transition>
-                        </state>
-                    </state>
-                </parallel>
-                <state id="deleting">
-                    <transition target="../deleted">
-                        <raise event="delete_field" scope="narrow" target="'parent'">
-                            <parameter expr='self.association_name' />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="deleted" />
-            </state>
-        </scxml>
-    </class>
-    
-    <class name="Button">
-        <relationships>
-            <association name="parent" class="Field" min="1" max="1" />
-        </relationships>
-        <inport name="button_ui"/>
-        <constructor>
-            <parameter name="parent" type="Field" />
-            <parameter name="event_name" type="str" />
-            <parameter name="button_text" type="str" />
-            <body>
-                <![CDATA[
-                self.event_name = event_name;
-                button = ui.append_button(parent.field_window, event_name);
-                ui.bind_event(button.element, ui.EVENTS.MOUSE_CLICK, self.controller, 'mouse_click', self.inports['button_ui']);
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="initializing">
-            <state id="initializing">
-                <transition target="../running">
-                    <raise event="button_created" scope="narrow" target="'parent'">
-                    </raise>
-                </transition>
-            </state>
-            <state id="running">
-                <transition port='button_ui' event="mouse_click" target='.' cond="button == ui.MOUSE_BUTTONS.LEFT">
-                    <parameter name="x" />
-                    <parameter name="y" />
-                    <parameter name="button" />
-                    <raise event="button_pressed" scope="narrow" target="'parent'">
-                        <parameter expr="self.event_name" />
-                    </raise>
-                </transition>
-            </state>
-        </scxml>
-    </class>
-    
-    <class name="Ball">
-        <atrribute name="element" />
-        <attribute name="canvas" />
-        <inport name="ball_ui" />
-        <relationships>
-            <association name="parent" class="Field" min="1" max="1" />
-        </relationships>
-        <constructor>
-            <parameter name="canvas" />
-            <parameter name="x" />
-            <parameter name="y" />
-            <body>
-                <![CDATA[
-                self.canvas = canvas;
-                self.r = 20.0;
-                self.vel = {'x': random.uniform(-5.0, 5.0), 'y': random.uniform(-5.0, 5.0)};
-                self.mouse_pos = {};
-                self.smooth = 0.4; # value between 0 and 1
-
-                circle = self.canvas.add_circle(x, y, self.r, {'fill':'#000'});
-                ui.bind_event(circle, ui.EVENTS.MOUSE_PRESS, self.controller, 'mouse_press', self.inports["ball_ui"]);
-                ui.bind_event(circle, ui.EVENTS.MOUSE_MOVE, self.controller, 'mouse_move', self.inports['ball_ui']);
-                ui.bind_event(circle, ui.EVENTS.MOUSE_RELEASE, self.controller, 'mouse_release', self.inports['ball_ui']);
-                self.element = circle;
-                ]]>
-            </body>
-        </constructor>
-        <destructor>
-            <body>
-                <![CDATA[
-                self.canvas.remove_element(self.element);
-                ]]>
-            </body>
-        </destructor>
-        <scxml initial="main_behaviour">
-            <state id="main_behaviour" initial="initializing">
-                <state id="initializing">
-                    <transition event="set_association_name" target="../bouncing">
-                        <parameter name="association_name" type="str" />
-                        <script>
-                            <![CDATA[
-                            self.association_name = association_name
-                            ]]>                            
-                        </script>
-                    </transition>
-                </state>
-                <state id="bouncing">
-                    <transition after="(20 - self.getSimulatedTime() % 20) / 1000.0" target=".">
-                        <script>
-                            <![CDATA[
-                            pos = self.element.get_position();    
-                            if pos.x-self.r <= 0 or pos.x+self.r >= self.canvas.get_width():
-                                self.vel['x'] = -self.vel['x'];
-                            if pos.y-self.r <= 0 or pos.y+self.r >= self.canvas.get_height():
-                                self.vel['y'] = -self.vel['y'];
-                            self.element.move(self.vel['x'], self.vel['y']);
-                            ]]>                            
-                        </script>
-                    </transition>
-                    <transition port="ball_ui" event="mouse_press" target="../selected" cond="button == ui.MOUSE_BUTTONS.LEFT">
-                        <parameter name="x" />
-                        <parameter name="y" />
-                        <parameter name="button" />
-                        <script>
-                            <![CDATA[
-                            self.element.set_color("#ff0");
-                            ]]>                            
-                        </script>
-                    </transition>
-                </state>
-                <state id="dragging">
-                    <transition port="ball_ui" event="mouse_move" target=".">
-                        <parameter name="x" />
-                        <parameter name="y" />
-                        <parameter name="button" />
-                        <script>
-                            <![CDATA[
-                            dx = x - self.mouse_pos['x'];
-                            dy = y - self.mouse_pos['y'];
-
-                            self.element.move(dx, dy);
-
-                            # keep ball within boundaries
-                            pos = self.element.get_position();
-                            if pos.x-self.r <= 0 :
-                                pos.x = self.r + 1;
-                            elif pos.x+self.r >= self.canvas.width :
-                                pos.x = self.canvas.width-self.r-1;
-                            if pos.y-self.r <= 0 :
-                                pos.y = self.r + 1;
-                            elif pos.y+self.r >= self.canvas.height :
-                                pos.y = self.canvas.height-self.r-1;
-                            self.element.set_position(pos.x, pos.y);
-                            self.mouse_pos = {'x':x, 'y':y};
-                            self.vel = {
-                                'x': (1-self.smooth)*dx + self.smooth*self.vel['x'],
-                                'y': (1-self.smooth)*dy + self.smooth*self.vel['y']
-                            };
-                            ]]>
-                        </script>
-                    </transition>
-                    <transition port="ball_ui" event="mouse_release" target="../bouncing">
-                        <parameter name="x" />
-                        <parameter name="y" />
-                        <script>
-                            <![CDATA[
-                            self.element.set_color("#f00");
-                            ]]>                            
-                        </script>
-                    </transition>
-                </state>
-                <state id='selected'>
-                    <transition port="ball_ui" event="mouse_press" target="../dragging" cond="button == ui.MOUSE_BUTTONS.LEFT">
-                        <parameter name="x" />
-                        <parameter name="y" />
-                        <parameter name="button" />
-                        <script>
-                            <![CDATA[
-                            self.mouse_pos = {'x':x, 'y':y};
-                            ]]>
-                        </script>
-                    </transition>
-                    <transition event="delete_self" target='../../deleted'>                    
-                        <raise event="delete_ball" scope="narrow" target="'parent'">
-                            <parameter expr='self.association_name' />
-                        </raise>
-                    </transition>
-                </state>
-            </state>
-            <state id='deleted' />
-        </scxml>
-    </class>
-</diagram>

+ 0 - 369
legacy/examples/bouncingballs/python/sccd_multiwindow.xml

@@ -1,369 +0,0 @@
-<?xml version="1.0" ?>
-<diagram author="Simon Van Mierlo" name="Bouncing Balls - Tkinter Version ">
-    <description>
-        Tkinter frame with bouncing balls in it.
-    </description>
-    <top>
-        import random
-        import Tkinter as tk
-        from widget import Widget
-    </top>
-    <inport name="input"/>
-    <class name="MainApp" default="true">
-        <relationships>
-            <association name="windows" class="Window" />
-        </relationships>
-        <constructor>
-            <parameter name="root"/>
-            <body>
-                self.nr_of_windows = 0
-                self.root = root
-            </body>
-        </constructor>
-        <scxml initial="main">
-            <parallel id="main">
-                <state id="main_behaviour" initial="initializing">
-                    <state id="initializing">
-                        <onentry>
-                            <raise event="create_window" scope="local" />
-                        </onentry>
-                        <transition target="../running" />
-                    </state>
-                    <state id="running">
-                        <transition event="window_created" target=".">
-                            <script>
-                                self.nr_of_windows += 1
-                            </script>
-                        </transition>
-                        <transition event="window_deleted" target="." cond="self.nr_of_windows > 1">
-                            <script>
-                                self.nr_of_windows -= 1
-                            </script>
-                        </transition>
-                        <transition event="window_deleted" target="." cond="self.nr_of_windows == 1">
-                            <raise event="stop" scope="local" />
-                        </transition>
-                    </state>
-                </state>
-                <state id="creating_behaviour" initial="waiting">
-                    <state id="waiting">
-                        <transition event="create_window" target="../creating">
-                            <raise event="create_instance" scope="cd">
-                                <parameter expr="'windows'" />
-                                <paremeter expr="'Window'" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="creating">
-                        <transition event="instance_created" target="../waiting">
-                            <parameter name="association_name" />
-                            <raise event="start_instance" scope="cd">
-                                <parameter expr="association_name" />
-                            </raise>
-                            <raise event="set_association_name" scope="narrow" target="association_name">
-                                <parameter expr="association_name" />
-                            </raise>
-                            <raise event="window_created" scope="local" />
-                        </transition>
-                    </state>
-                </state>
-                <state id="deleting_behaviour" initial="waiting">
-                    <state id="waiting">
-                        <transition event="delete_window" target="../deleting">
-                            <parameter name="association_name" />
-                            <raise event="delete_instance" scope="cd">
-                                <parameter expr="association_name" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="deleting">
-                        <transition event="instance_deleted" target="../waiting">
-                            <raise event="window_deleted" scope="local" />
-                        </transition>
-                    </state>
-                </state>
-                <transition event="stop" target="../stopped" />
-            </parallel>
-            <state id="stopped">
-                <onentry>
-                    <script>
-                        self.root.quit()
-                    </script>
-                </onentry>
-            </state>
-        </scxml>
-    </class>
-    <class name="Window">
-        <relationships>
-            <association name="parent" class="MainApp" min="1" max="1" />
-            <association name="buttons" class="Button" />
-            <association name="balls" class="Ball" />
-            <inheritance class="tk.Toplevel" priority="1" />
-            <inheritance class="Widget" priority="0" />
-        </relationships>
-        <constructor>
-            <super class="tk.Toplevel" />
-            <super class="Widget">
-                <parameter expr="True" />
-            </super>
-            <body>
-                <![CDATA[
-                self.title('BouncingBalls')
-                
-                CANVAS_SIZE_TUPLE = (0, 0, self.winfo_screenwidth() * 2, self.winfo_screenheight() * 2)
-                self.c = tk.Canvas(self, relief=tk.RIDGE, scrollregion=CANVAS_SIZE_TUPLE)
-                
-                self.set_bindable_and_tagorid(self.c)
-                ]]>
-            </body>
-        </constructor>
-        <destructor>
-            <body>
-                self.destroy()
-            </body>
-        </destructor>
-        <scxml initial="main">
-            <parallel id="main">
-                <state id="main_behaviour" initial="initializing">
-                    <state id="initializing">
-                        <transition event="set_association_name" target="../creating_button">
-                            <parameter name="association_name" />
-                            <script>
-                                self.association_name = association_name
-                            </script>
-                            <raise scope="cd" event="create_instance">
-                                <parameter expr="'buttons'" />
-                                <parameter expr="'Button'" />
-                                <parameter expr="self" />
-                                <parameter expr="'create_window'" />
-                                <parameter expr="'Create Window'" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="creating_button">
-                        <transition event="instance_created" target="../packing_button">
-                            <parameter name="association_name" type="string"/>
-                            <raise scope="cd" event="start_instance">
-                                <parameter expr="association_name" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="packing_button">
-                        <transition event="button_created" target="../running">
-                            <parameter name="button" type="Button"/>
-                            <script>
-                                button.pack(expand=False, fill=tk.X, side=tk.TOP)
-                                self.c.focus_force()
-                                self.c.pack(expand=True, fill=tk.BOTH)
-                            </script>
-                        </transition>
-                    </state>
-                    <state id="running">
-                        <transition event="window-close" port="input" target="." cond="tagorid == id(self)">
-                            <parameter name="tagorid" type="int" default="None" />
-                            <raise event="stop" scope="local" />
-                        </transition>
-                        <transition event="button_pressed" target="." cond="event_name == 'create_window'">
-                            <parameter name="event_name" type="string" />
-                            <raise event="create_window" scope="narrow" target="'parent'" />
-                        </transition>
-                        <transition event="right-click" port="input" target="../creating_ball" cond="tagorid == id(self)">
-                            <parameter name="tagorid" type="int" default="None" />
-                            <raise scope="cd" event="create_instance">
-                                <parameter expr='"balls"' />
-                                <parameter expr='"Ball"' />
-                                <parameter expr="self.c" />
-                                <parameter expr="self.last_x" />
-                                <parameter expr="self.last_y" />
-                            </raise>
-                        </transition>
-                        <transition event="delete_ball" target=".">
-                            <parameter name="association_name" type="string" />
-                            <raise event="delete_instance" scope="cd">
-                                <parameter expr="association_name" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="creating_ball">
-                        <transition event="instance_created" target="../running">
-                            <parameter name="association_name" type="string"/>
-                            <raise event="start_instance" scope="cd">
-                                <parameter expr="association_name" />
-                            </raise>
-                            <raise event="set_association_name" scope="narrow" target="association_name">
-                                <parameter expr="association_name" />
-                            </raise>
-                        </transition>
-                    </state>
-                </state>
-                <transition event="stop" target="../stopped">
-                    <raise event="delete_instance" scope="cd">
-                        <parameter expr="'buttons'" />
-                    </raise>
-                    <raise event="delete_instance" scope="cd">
-                        <parameter expr="'balls'" />
-                    </raise>
-                </transition>
-            </parallel>
-            <state id="stopped">
-                <onentry>
-                    <raise event="delete_window" scope="narrow" target="'parent'">
-                        <parameter expr="self.association_name" />
-                    </raise>
-                </onentry>
-            </state>
-        </scxml>
-    </class>
-    <class name="Button">
-        <relationships>
-            <association name="parent" class="Field" min="1" max="1" />
-            <inheritance class="tk.Button" priority="1" />
-            <inheritance class="Widget" priority="0" />
-        </relationships>
-        <constructor>
-            <parameter name="parent" type="Field" />
-            <parameter name="event_name" type="str" />
-            <parameter name="button_text" type="str" />
-            <super class="tk.Button">
-                <parameter expr="parent" />
-                <parameter expr="**{'text': button_text}" />
-            </super>
-            <body>
-                self.event_name = event_name
-            </body>
-        </constructor>
-        <destructor>
-            <body>
-                self.destroy()
-            </body>
-        </destructor>
-        <scxml initial="initializing">
-            <state id="initializing">
-                <onentry>                
-                    <raise event="button_created" scope="narrow" target="'parent'">
-                        <parameter expr="self" />
-                    </raise>
-                </onentry>
-                <transition target="../running" />
-            </state>
-            <state id="running">
-                <transition event="left-click" port="input" target="." cond="tagorid == id(self)">
-                    <parameter name="tagorid" type="int" default="None" />
-                    <raise event="button_pressed" scope="narrow" target="'parent'">
-                        <parameter expr="self.event_name" />
-                    </raise>
-                </transition>
-            </state>
-        </scxml>
-    </class>
-    <class name="Ball">
-        <relationships>
-            <association name="parent" class="Window" min="1" max="1" />
-            <inheritance class="Widget" priority="0" />
-        </relationships>
-        <attribute name="canvas" />
-        <constructor>
-            <parameter name="canvas" />
-            <parameter name="x" />
-            <parameter name="y" />
-            <super class="Widget">
-                <parameter expr="True" />
-            </super>
-            <body>
-                self.canvas = canvas
-                self.r = 20.0;
-                self.vel = {'x': random.uniform(-5.0, 5.0), 'y': random.uniform(-5.0, 5.0)};
-                self.smooth = 0.4 # value between 0 and 1
-                self.id = self.canvas.create_oval(x, y, x + (self.r * 2), y + (self.r * 2), fill="black")
-                self.set_bindable_and_tagorid(self.canvas, self.id)
-            </body>
-        </constructor>
-        <destructor>
-            <body>
-                self.canvas.delete(self.id)
-            </body>
-        </destructor>
-        <scxml initial="initializing">
-            <state id="initializing">
-                <transition event="set_association_name" target="../bouncing">
-                    <parameter name="association_name" type="str" />
-                    <script>
-                        self.association_name = association_name
-                    </script>
-                </transition>
-            </state>
-            <state id="bouncing">
-                <transition after="(20 - self.getSimulatedTime() % 20) / 1000.0" target=".">
-                    <script>
-                    <![CDATA[
-                        pos = self.canvas.coords(self.id)
-                        x = self.canvas.canvasx(pos[0])
-                        y = self.canvas.canvasy(pos[1])
-                        if x <= 0 or x + (self.r * 2) >= self.canvas.canvasx(self.canvas.winfo_width()):
-                            self.vel['x'] = -self.vel['x']
-                        if y <= 0 or y + (self.r * 2) >= self.canvas.canvasy(self.canvas.winfo_height()):
-                            self.vel['y'] = -self.vel['y']
-                        self.canvas.move(self.id, self.vel['x'], self.vel['y']);
-                    ]]>                            
-                    </script>
-                </transition>
-                <transition port="input" event="left-click" target="../selected" cond="tagorid == id(self)">
-                    <parameter name="tagorid" type="int" default="None" />
-                    <script>
-                        self.canvas.itemconfig(self.id, fill="yellow")
-                    </script>
-                </transition>
-            </state>
-            <state id="dragging">
-                <transition port="input" event="motion" target=".">
-                    <parameter name="tagorid" type="int" default="None" />
-                    <script>
-                    <![CDATA[
-                        coords = self.canvas.coords(self.id)
-                        dx = self.canvas.canvasx(self.last_x) - self.canvas.canvasx(coords[0])
-                        dy = self.canvas.canvasx(self.last_y) - self.canvas.canvasy(coords[1])
-
-                        self.canvas.move(self.id, dx, dy);
-
-                        # keep ball within boundaries
-                        coords = self.canvas.coords(self.id)
-                        x = self.canvas.canvasx(coords[0])
-                        y = self.canvas.canvasy(coords[1])
-                        if x - self.r <= 0:
-                            x = 1;
-                        elif x + self.r >= self.canvas.winfo_width():
-                            x = self.canvas.winfo_width() - (2 * self.r) - 1
-                        if y - self.r <= 0:
-                            y = 1
-                        elif y + self.r >= self.canvas.winfo_height():
-                            y = self.canvas.winfo_height() - (2 * self.r) - 1;
-                        self.canvas.coords(self.id, x, y, x + (self.r * 2), y + (self.r * 2));
-                        self.vel = {
-                            'x': (1 - self.smooth) * dx + self.smooth * self.vel['x'],
-                            'y': (1 - self.smooth) * dy + self.smooth * self.vel['y']
-                        }
-                    ]]>
-                    </script>
-                </transition>
-                <transition port="input" event="left-release" target="../bouncing">
-                    <parameter name="tagorid" type="int" default="None" />
-                    <script>
-                        self.canvas.itemconfig(self.id, fill="red")
-                    </script>
-                </transition>
-            </state>
-            <state id="selected">
-                <transition port="input" event="left-click" target="../dragging" cond="tagorid == id(self)">
-                    <parameter name="tagorid" type="int" default="None" />
-                </transition>
-                <transition port="input" event="delete" target="../deleted">
-                    <parameter name="tagorid" type="int" default="None" />
-                    <raise event="delete_ball" scope="narrow" target="'parent'">
-                        <parameter expr="self.association_name" />
-                    </raise>
-                </transition>
-            </state>
-            <state id="deleted" />
-        </scxml>
-    </class>
-</diagram>

+ 0 - 707
legacy/examples/bouncingballs/python/sccd_no_ui.py

@@ -1,707 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Model author: Simon Van Mierlo
-Model name:   Bouncing_Balls_Python_Version
-Model description:
-Bouncing Balls - no UI code.
-"""
-
-from sccd.runtime.statecharts_core import *
-from ui_classes import *
-
-# package "Bouncing_Balls_Python_Version"
-
-class MainApp(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        MainApp.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        self.nr_of_windows = 0
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /main
-        self.states["/main"] = ParallelState(1, "/main", self)
-        
-        # state /main/main_behaviour
-        self.states["/main/main_behaviour"] = State(2, "/main/main_behaviour", self)
-        
-        # state /main/main_behaviour/initializing
-        self.states["/main/main_behaviour/initializing"] = State(3, "/main/main_behaviour/initializing", self)
-        self.states["/main/main_behaviour/initializing"].setEnter(self._main_main_behaviour_initializing_enter)
-        
-        # state /main/main_behaviour/running
-        self.states["/main/main_behaviour/running"] = State(4, "/main/main_behaviour/running", self)
-        
-        # state /main/creating_behaviour
-        self.states["/main/creating_behaviour"] = State(5, "/main/creating_behaviour", self)
-        
-        # state /main/creating_behaviour/waiting
-        self.states["/main/creating_behaviour/waiting"] = State(6, "/main/creating_behaviour/waiting", self)
-        
-        # state /main/creating_behaviour/creating
-        self.states["/main/creating_behaviour/creating"] = State(7, "/main/creating_behaviour/creating", self)
-        
-        # state /main/deleting_behaviour
-        self.states["/main/deleting_behaviour"] = State(8, "/main/deleting_behaviour", self)
-        
-        # state /main/deleting_behaviour/waiting
-        self.states["/main/deleting_behaviour/waiting"] = State(9, "/main/deleting_behaviour/waiting", self)
-        
-        # state /main/deleting_behaviour/deleting
-        self.states["/main/deleting_behaviour/deleting"] = State(10, "/main/deleting_behaviour/deleting", self)
-        
-        # state /stopped
-        self.states["/stopped"] = State(11, "/stopped", self)
-        self.states["/stopped"].setEnter(self._stopped_enter)
-        
-        # add children
-        self.states[""].addChild(self.states["/main"])
-        self.states[""].addChild(self.states["/stopped"])
-        self.states["/main"].addChild(self.states["/main/main_behaviour"])
-        self.states["/main"].addChild(self.states["/main/creating_behaviour"])
-        self.states["/main"].addChild(self.states["/main/deleting_behaviour"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/initializing"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/running"])
-        self.states["/main/creating_behaviour"].addChild(self.states["/main/creating_behaviour/waiting"])
-        self.states["/main/creating_behaviour"].addChild(self.states["/main/creating_behaviour/creating"])
-        self.states["/main/deleting_behaviour"].addChild(self.states["/main/deleting_behaviour/waiting"])
-        self.states["/main/deleting_behaviour"].addChild(self.states["/main/deleting_behaviour/deleting"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/main"]
-        self.states["/main/main_behaviour"].default_state = self.states["/main/main_behaviour/initializing"]
-        self.states["/main/creating_behaviour"].default_state = self.states["/main/creating_behaviour/waiting"]
-        self.states["/main/deleting_behaviour"].default_state = self.states["/main/deleting_behaviour/waiting"]
-        
-        # transition /main/main_behaviour/initializing
-        _main_main_behaviour_initializing_0 = Transition(self, self.states["/main/main_behaviour/initializing"], [self.states["/main/main_behaviour/running"]])
-        _main_main_behaviour_initializing_0.setTrigger(None)
-        self.states["/main/main_behaviour/initializing"].addTransition(_main_main_behaviour_initializing_0)
-        
-        # transition /main/main_behaviour/running
-        _main_main_behaviour_running_0 = Transition(self, self.states["/main/main_behaviour/running"], [self.states["/main/main_behaviour/running"]])
-        _main_main_behaviour_running_0.setAction(self._main_main_behaviour_running_0_exec)
-        _main_main_behaviour_running_0.setTrigger(Event("window_created", None))
-        self.states["/main/main_behaviour/running"].addTransition(_main_main_behaviour_running_0)
-        _main_main_behaviour_running_1 = Transition(self, self.states["/main/main_behaviour/running"], [self.states["/main/main_behaviour/running"]])
-        _main_main_behaviour_running_1.setAction(self._main_main_behaviour_running_1_exec)
-        _main_main_behaviour_running_1.setTrigger(Event("window_deleted", None))
-        _main_main_behaviour_running_1.setGuard(self._main_main_behaviour_running_1_guard)
-        self.states["/main/main_behaviour/running"].addTransition(_main_main_behaviour_running_1)
-        _main_main_behaviour_running_2 = Transition(self, self.states["/main/main_behaviour/running"], [self.states["/main/main_behaviour/running"]])
-        _main_main_behaviour_running_2.setAction(self._main_main_behaviour_running_2_exec)
-        _main_main_behaviour_running_2.setTrigger(Event("window_deleted", None))
-        _main_main_behaviour_running_2.setGuard(self._main_main_behaviour_running_2_guard)
-        self.states["/main/main_behaviour/running"].addTransition(_main_main_behaviour_running_2)
-        
-        # transition /main/creating_behaviour/waiting
-        _main_creating_behaviour_waiting_0 = Transition(self, self.states["/main/creating_behaviour/waiting"], [self.states["/main/creating_behaviour/creating"]])
-        _main_creating_behaviour_waiting_0.setAction(self._main_creating_behaviour_waiting_0_exec)
-        _main_creating_behaviour_waiting_0.setTrigger(Event("create_window", None))
-        self.states["/main/creating_behaviour/waiting"].addTransition(_main_creating_behaviour_waiting_0)
-        
-        # transition /main/creating_behaviour/creating
-        _main_creating_behaviour_creating_0 = Transition(self, self.states["/main/creating_behaviour/creating"], [self.states["/main/creating_behaviour/waiting"]])
-        _main_creating_behaviour_creating_0.setAction(self._main_creating_behaviour_creating_0_exec)
-        _main_creating_behaviour_creating_0.setTrigger(Event("instance_created", None))
-        self.states["/main/creating_behaviour/creating"].addTransition(_main_creating_behaviour_creating_0)
-        
-        # transition /main/deleting_behaviour/waiting
-        _main_deleting_behaviour_waiting_0 = Transition(self, self.states["/main/deleting_behaviour/waiting"], [self.states["/main/deleting_behaviour/deleting"]])
-        _main_deleting_behaviour_waiting_0.setAction(self._main_deleting_behaviour_waiting_0_exec)
-        _main_deleting_behaviour_waiting_0.setTrigger(Event("delete_window", None))
-        self.states["/main/deleting_behaviour/waiting"].addTransition(_main_deleting_behaviour_waiting_0)
-        
-        # transition /main/deleting_behaviour/deleting
-        _main_deleting_behaviour_deleting_0 = Transition(self, self.states["/main/deleting_behaviour/deleting"], [self.states["/main/deleting_behaviour/waiting"]])
-        _main_deleting_behaviour_deleting_0.setAction(self._main_deleting_behaviour_deleting_0_exec)
-        _main_deleting_behaviour_deleting_0.setTrigger(Event("instance_deleted", None))
-        self.states["/main/deleting_behaviour/deleting"].addTransition(_main_deleting_behaviour_deleting_0)
-        
-        # transition /main
-        _main_0 = Transition(self, self.states["/main"], [self.states["/stopped"]])
-        _main_0.setTrigger(Event("stop", None))
-        self.states["/main"].addTransition(_main_0)
-    
-    def _main_main_behaviour_initializing_enter(self):
-        self.raiseInternalEvent(Event("create_window", None, []))
-    
-    def _stopped_enter(self):
-        self.big_step.outputEvent(Event("stop_ui", self.getOutPortName("ui_out"), []))
-    
-    def _main_main_behaviour_running_0_exec(self, parameters):
-        self.nr_of_windows += 1
-    
-    def _main_main_behaviour_running_1_exec(self, parameters):
-        self.nr_of_windows -= 1
-    
-    def _main_main_behaviour_running_1_guard(self, parameters):
-        return self.nr_of_windows > 1
-    
-    def _main_main_behaviour_running_2_exec(self, parameters):
-        self.raiseInternalEvent(Event("stop", None, []))
-    
-    def _main_main_behaviour_running_2_guard(self, parameters):
-        return self.nr_of_windows == 1
-    
-    def _main_creating_behaviour_waiting_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'windows', 'Window']))
-    
-    def _main_creating_behaviour_creating_0_exec(self, parameters):
-        association_name = parameters[0]
-        self.big_step.outputEvent(Event("create_new_window", self.getOutPortName("ui_out"), [association_name, self.getSingleChild(association_name)]))
-        self.big_step.outputEventOM(Event("start_instance", None, [self, association_name]))
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, association_name, Event("set_association_name", None, [association_name])]))
-        self.raiseInternalEvent(Event("window_created", None, []))
-    
-    def _main_deleting_behaviour_waiting_0_exec(self, parameters):
-        association_name = parameters[0]
-        self.big_step.outputEvent(Event("delete_window", self.getOutPortName("ui_out"), [association_name]))
-        self.big_step.outputEventOM(Event("delete_instance", None, [self, association_name]))
-    
-    def _main_deleting_behaviour_deleting_0_exec(self, parameters):
-        self.raiseInternalEvent(Event("window_deleted", None, []))
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/main"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class Window(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.inports["window_ui_in"] = controller.addInputPort("window_ui_in", self)
-        self.outports["window_ui_out"] = controller.addOutputPort("window_ui_out", self)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Window.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /main
-        self.states["/main"] = ParallelState(1, "/main", self)
-        
-        # state /main/main_behaviour
-        self.states["/main/main_behaviour"] = State(2, "/main/main_behaviour", self)
-        
-        # state /main/main_behaviour/initializing
-        self.states["/main/main_behaviour/initializing"] = State(3, "/main/main_behaviour/initializing", self)
-        
-        # state /main/main_behaviour/waiting_for_ui
-        self.states["/main/main_behaviour/waiting_for_ui"] = State(4, "/main/main_behaviour/waiting_for_ui", self)
-        
-        # state /main/main_behaviour/creating_button
-        self.states["/main/main_behaviour/creating_button"] = State(5, "/main/main_behaviour/creating_button", self)
-        
-        # state /main/main_behaviour/running
-        self.states["/main/main_behaviour/running"] = State(6, "/main/main_behaviour/running", self)
-        
-        # state /main/main_behaviour/creating_ball
-        self.states["/main/main_behaviour/creating_ball"] = State(7, "/main/main_behaviour/creating_ball", self)
-        
-        # state /main/size_change_listener
-        self.states["/main/size_change_listener"] = State(8, "/main/size_change_listener", self)
-        
-        # state /main/size_change_listener/listening
-        self.states["/main/size_change_listener/listening"] = State(9, "/main/size_change_listener/listening", self)
-        
-        # state /main/delete_listener
-        self.states["/main/delete_listener"] = State(10, "/main/delete_listener", self)
-        
-        # state /main/delete_listener/listening
-        self.states["/main/delete_listener/listening"] = State(11, "/main/delete_listener/listening", self)
-        
-        # state /stopped
-        self.states["/stopped"] = State(12, "/stopped", self)
-        self.states["/stopped"].setEnter(self._stopped_enter)
-        
-        # add children
-        self.states[""].addChild(self.states["/main"])
-        self.states[""].addChild(self.states["/stopped"])
-        self.states["/main"].addChild(self.states["/main/main_behaviour"])
-        self.states["/main"].addChild(self.states["/main/size_change_listener"])
-        self.states["/main"].addChild(self.states["/main/delete_listener"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/initializing"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/waiting_for_ui"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/creating_button"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/running"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/creating_ball"])
-        self.states["/main/size_change_listener"].addChild(self.states["/main/size_change_listener/listening"])
-        self.states["/main/delete_listener"].addChild(self.states["/main/delete_listener/listening"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/main"]
-        self.states["/main/main_behaviour"].default_state = self.states["/main/main_behaviour/initializing"]
-        self.states["/main/size_change_listener"].default_state = self.states["/main/size_change_listener/listening"]
-        self.states["/main/delete_listener"].default_state = self.states["/main/delete_listener/listening"]
-        
-        # transition /main/main_behaviour/initializing
-        _main_main_behaviour_initializing_0 = Transition(self, self.states["/main/main_behaviour/initializing"], [self.states["/main/main_behaviour/waiting_for_ui"]])
-        _main_main_behaviour_initializing_0.setAction(self._main_main_behaviour_initializing_0_exec)
-        _main_main_behaviour_initializing_0.setTrigger(Event("set_association_name", None))
-        self.states["/main/main_behaviour/initializing"].addTransition(_main_main_behaviour_initializing_0)
-        
-        # transition /main/main_behaviour/waiting_for_ui
-        _main_main_behaviour_waiting_for_ui_0 = Transition(self, self.states["/main/main_behaviour/waiting_for_ui"], [self.states["/main/main_behaviour/creating_button"]])
-        _main_main_behaviour_waiting_for_ui_0.setAction(self._main_main_behaviour_waiting_for_ui_0_exec)
-        _main_main_behaviour_waiting_for_ui_0.setTrigger(Event("ui_initialized", self.getInPortName("window_ui_in")))
-        self.states["/main/main_behaviour/waiting_for_ui"].addTransition(_main_main_behaviour_waiting_for_ui_0)
-        
-        # transition /main/main_behaviour/creating_button
-        _main_main_behaviour_creating_button_0 = Transition(self, self.states["/main/main_behaviour/creating_button"], [self.states["/main/main_behaviour/running"]])
-        _main_main_behaviour_creating_button_0.setAction(self._main_main_behaviour_creating_button_0_exec)
-        _main_main_behaviour_creating_button_0.setTrigger(Event("instance_created", None))
-        self.states["/main/main_behaviour/creating_button"].addTransition(_main_main_behaviour_creating_button_0)
-        
-        # transition /main/main_behaviour/running
-        _main_main_behaviour_running_0 = Transition(self, self.states["/main/main_behaviour/running"], [self.states["/main/main_behaviour/running"]])
-        _main_main_behaviour_running_0.setAction(self._main_main_behaviour_running_0_exec)
-        _main_main_behaviour_running_0.setTrigger(Event("button_pressed", None))
-        _main_main_behaviour_running_0.setGuard(self._main_main_behaviour_running_0_guard)
-        self.states["/main/main_behaviour/running"].addTransition(_main_main_behaviour_running_0)
-        _main_main_behaviour_running_1 = Transition(self, self.states["/main/main_behaviour/running"], [self.states["/main/main_behaviour/running"]])
-        _main_main_behaviour_running_1.setAction(self._main_main_behaviour_running_1_exec)
-        _main_main_behaviour_running_1.setTrigger(Event("close_window", self.getInPortName("window_ui_in")))
-        self.states["/main/main_behaviour/running"].addTransition(_main_main_behaviour_running_1)
-        _main_main_behaviour_running_2 = Transition(self, self.states["/main/main_behaviour/running"], [self.states["/main/main_behaviour/creating_ball"]])
-        _main_main_behaviour_running_2.setAction(self._main_main_behaviour_running_2_exec)
-        _main_main_behaviour_running_2.setTrigger(Event("create_ball", self.getInPortName("window_ui_in")))
-        self.states["/main/main_behaviour/running"].addTransition(_main_main_behaviour_running_2)
-        _main_main_behaviour_running_3 = Transition(self, self.states["/main/main_behaviour/running"], [self.states["/main/main_behaviour/running"]])
-        _main_main_behaviour_running_3.setAction(self._main_main_behaviour_running_3_exec)
-        _main_main_behaviour_running_3.setTrigger(Event("delete_ball", None))
-        self.states["/main/main_behaviour/running"].addTransition(_main_main_behaviour_running_3)
-        
-        # transition /main/main_behaviour/creating_ball
-        _main_main_behaviour_creating_ball_0 = Transition(self, self.states["/main/main_behaviour/creating_ball"], [self.states["/main/main_behaviour/running"]])
-        _main_main_behaviour_creating_ball_0.setAction(self._main_main_behaviour_creating_ball_0_exec)
-        _main_main_behaviour_creating_ball_0.setTrigger(Event("instance_created", None))
-        self.states["/main/main_behaviour/creating_ball"].addTransition(_main_main_behaviour_creating_ball_0)
-        
-        # transition /main/size_change_listener/listening
-        _main_size_change_listener_listening_0 = Transition(self, self.states["/main/size_change_listener/listening"], [self.states["/main/size_change_listener/listening"]])
-        _main_size_change_listener_listening_0.setAction(self._main_size_change_listener_listening_0_exec)
-        _main_size_change_listener_listening_0.setTrigger(Event("size_changed", self.getInPortName("window_ui_in")))
-        self.states["/main/size_change_listener/listening"].addTransition(_main_size_change_listener_listening_0)
-        
-        # transition /main/delete_listener/listening
-        _main_delete_listener_listening_0 = Transition(self, self.states["/main/delete_listener/listening"], [self.states["/main/delete_listener/listening"]])
-        _main_delete_listener_listening_0.setAction(self._main_delete_listener_listening_0_exec)
-        _main_delete_listener_listening_0.setTrigger(Event("delete", self.getInPortName("window_ui_in")))
-        self.states["/main/delete_listener/listening"].addTransition(_main_delete_listener_listening_0)
-        
-        # transition /main
-        _main_0 = Transition(self, self.states["/main"], [self.states["/stopped"]])
-        _main_0.setAction(self._main_0_exec)
-        _main_0.setTrigger(Event("stop", None))
-        self.states["/main"].addTransition(_main_0)
-    
-    def _stopped_enter(self):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("delete_window", None, [self.association_name])]))
-    
-    def _main_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("delete_instance", None, [self, 'buttons']))
-        self.big_step.outputEventOM(Event("delete_instance", None, [self, 'balls']))
-    
-    def _main_main_behaviour_initializing_0_exec(self, parameters):
-        association_name = parameters[0]
-        self.association_name = association_name
-    
-    def _main_main_behaviour_waiting_for_ui_0_exec(self, parameters):
-        width = parameters[0]
-        height = parameters[1]
-        self.width = width
-        self.height = height
-        self.big_step.outputEventOM(Event("create_instance", None, [self, "buttons", "Button", 'create_window']))
-    
-    def _main_main_behaviour_creating_button_0_exec(self, parameters):
-        association_name = parameters[0]
-        self.big_step.outputEvent(Event("create_new_button", self.getOutPortName("window_ui_out"), [association_name, self.getSingleChild(association_name)]))
-        self.big_step.outputEventOM(Event("start_instance", None, [self, association_name]))
-    
-    def _main_main_behaviour_running_0_exec(self, parameters):
-        event_name = parameters[0]
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("create_window", None, [])]))
-    
-    def _main_main_behaviour_running_0_guard(self, parameters):
-        event_name = parameters[0]
-        return event_name == 'create_window'
-    
-    def _main_main_behaviour_running_1_exec(self, parameters):
-        self.raiseInternalEvent(Event("stop", None, []))
-    
-    def _main_main_behaviour_running_2_exec(self, parameters):
-        x = parameters[0]
-        y = parameters[1]
-        self.big_step.outputEventOM(Event("create_instance", None, [self, "balls", "Ball", x, y, self.width, self.height]))
-    
-    def _main_main_behaviour_running_3_exec(self, parameters):
-        association_name = parameters[0]
-        self.big_step.outputEventOM(Event("delete_instance", None, [self, association_name]))
-        self.big_step.outputEvent(Event("delete_ball", self.getOutPortName("window_ui_out"), [association_name]))
-    
-    def _main_main_behaviour_creating_ball_0_exec(self, parameters):
-        association_name = parameters[0]
-        self.big_step.outputEvent(Event("create_new_ball", self.getOutPortName("window_ui_out"), [association_name, self.getSingleChild(association_name)]))
-        self.big_step.outputEventOM(Event("start_instance", None, [self, association_name]))
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, association_name, Event("set_association_name", None, [association_name])]))
-    
-    def _main_size_change_listener_listening_0_exec(self, parameters):
-        new_width = parameters[0]
-        new_height = parameters[1]
-        self.width = new_width
-        self.height = new_height
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'balls', Event("window_size_changed", None, [new_width, new_height])]))
-    
-    def _main_delete_listener_listening_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'balls', Event("delete", None, [])]))
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/main"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class Button(RuntimeClassBase):
-    def __init__(self, controller, event_name):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.inports["button_ui_in"] = controller.addInputPort("button_ui_in", self)
-        self.outports["button_ui_out"] = controller.addOutputPort("button_ui_out", self)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Button.user_defined_constructor(self, event_name)
-    
-    def user_defined_constructor(self, event_name):
-        self.event_name = event_name
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /waiting
-        self.states["/waiting"] = State(1, "/waiting", self)
-        
-        # state /running
-        self.states["/running"] = State(2, "/running", self)
-        
-        # add children
-        self.states[""].addChild(self.states["/waiting"])
-        self.states[""].addChild(self.states["/running"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/waiting"]
-        
-        # transition /waiting
-        _waiting_0 = Transition(self, self.states["/waiting"], [self.states["/running"]])
-        _waiting_0.setAction(self._waiting_0_exec)
-        _waiting_0.setTrigger(Event("ui_initialized", self.getInPortName("button_ui_in")))
-        self.states["/waiting"].addTransition(_waiting_0)
-        
-        # transition /running
-        _running_0 = Transition(self, self.states["/running"], [self.states["/running"]])
-        _running_0.setAction(self._running_0_exec)
-        _running_0.setTrigger(Event("clicked", self.getInPortName("button_ui_in")))
-        self.states["/running"].addTransition(_running_0)
-    
-    def _waiting_0_exec(self, parameters):
-        self.big_step.outputEvent(Event("set_text", self.getOutPortName("button_ui_out"), [self.event_name]))
-    
-    def _running_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("button_pressed", None, [self.event_name])]))
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/waiting"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class Ball(RuntimeClassBase):
-    def __init__(self, controller, x, y, window_width, window_height):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.inports["ball_ui_in"] = controller.addInputPort("ball_ui_in", self)
-        self.outports["ball_ui_out"] = controller.addOutputPort("ball_ui_out", self)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Ball.user_defined_constructor(self, x, y, window_width, window_height)
-    
-    def user_defined_constructor(self, x, y, window_width, window_height):
-        self.x = x
-        self.y = y
-        self.window_width = window_width
-        self.window_height = window_height
-        self.r = 20.0;
-        self.vel = {'x': random.uniform(-5.0, 5.0), 'y': random.uniform(-5.0, 5.0)};
-        self.smooth = 0.4 # value between 0 and 1
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /main
-        self.states["/main"] = ParallelState(1, "/main", self)
-        
-        # state /main/main_behaviour
-        self.states["/main/main_behaviour"] = State(2, "/main/main_behaviour", self)
-        
-        # state /main/main_behaviour/initializing
-        self.states["/main/main_behaviour/initializing"] = State(3, "/main/main_behaviour/initializing", self)
-        
-        # state /main/main_behaviour/waiting_for_ui
-        self.states["/main/main_behaviour/waiting_for_ui"] = State(4, "/main/main_behaviour/waiting_for_ui", self)
-        
-        # state /main/main_behaviour/bouncing
-        self.states["/main/main_behaviour/bouncing"] = State(5, "/main/main_behaviour/bouncing", self)
-        self.states["/main/main_behaviour/bouncing"].setEnter(self._main_main_behaviour_bouncing_enter)
-        self.states["/main/main_behaviour/bouncing"].setExit(self._main_main_behaviour_bouncing_exit)
-        
-        # state /main/main_behaviour/dragging
-        self.states["/main/main_behaviour/dragging"] = State(6, "/main/main_behaviour/dragging", self)
-        
-        # state /main/main_behaviour/selected
-        self.states["/main/main_behaviour/selected"] = State(7, "/main/main_behaviour/selected", self)
-        
-        # state /main/size_change_listener
-        self.states["/main/size_change_listener"] = State(8, "/main/size_change_listener", self)
-        
-        # state /main/size_change_listener/listening
-        self.states["/main/size_change_listener/listening"] = State(9, "/main/size_change_listener/listening", self)
-        
-        # state /deleted
-        self.states["/deleted"] = State(10, "/deleted", self)
-        
-        # add children
-        self.states[""].addChild(self.states["/main"])
-        self.states[""].addChild(self.states["/deleted"])
-        self.states["/main"].addChild(self.states["/main/main_behaviour"])
-        self.states["/main"].addChild(self.states["/main/size_change_listener"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/initializing"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/waiting_for_ui"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/bouncing"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/dragging"])
-        self.states["/main/main_behaviour"].addChild(self.states["/main/main_behaviour/selected"])
-        self.states["/main/size_change_listener"].addChild(self.states["/main/size_change_listener/listening"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/main"]
-        self.states["/main/main_behaviour"].default_state = self.states["/main/main_behaviour/initializing"]
-        self.states["/main/size_change_listener"].default_state = self.states["/main/size_change_listener/listening"]
-        
-        # transition /main/main_behaviour/initializing
-        _main_main_behaviour_initializing_0 = Transition(self, self.states["/main/main_behaviour/initializing"], [self.states["/main/main_behaviour/waiting_for_ui"]])
-        _main_main_behaviour_initializing_0.setAction(self._main_main_behaviour_initializing_0_exec)
-        _main_main_behaviour_initializing_0.setTrigger(Event("set_association_name", None))
-        self.states["/main/main_behaviour/initializing"].addTransition(_main_main_behaviour_initializing_0)
-        
-        # transition /main/main_behaviour/waiting_for_ui
-        _main_main_behaviour_waiting_for_ui_0 = Transition(self, self.states["/main/main_behaviour/waiting_for_ui"], [self.states["/main/main_behaviour/bouncing"]])
-        _main_main_behaviour_waiting_for_ui_0.setAction(self._main_main_behaviour_waiting_for_ui_0_exec)
-        _main_main_behaviour_waiting_for_ui_0.setTrigger(Event("ui_initialized", self.getInPortName("ball_ui_in")))
-        self.states["/main/main_behaviour/waiting_for_ui"].addTransition(_main_main_behaviour_waiting_for_ui_0)
-        
-        # transition /main/main_behaviour/bouncing
-        _main_main_behaviour_bouncing_0 = Transition(self, self.states["/main/main_behaviour/bouncing"], [self.states["/main/main_behaviour/bouncing"]])
-        _main_main_behaviour_bouncing_0.setAction(self._main_main_behaviour_bouncing_0_exec)
-        _main_main_behaviour_bouncing_0.setTrigger(Event("_0after"))
-        self.states["/main/main_behaviour/bouncing"].addTransition(_main_main_behaviour_bouncing_0)
-        _main_main_behaviour_bouncing_1 = Transition(self, self.states["/main/main_behaviour/bouncing"], [self.states["/main/main_behaviour/selected"]])
-        _main_main_behaviour_bouncing_1.setAction(self._main_main_behaviour_bouncing_1_exec)
-        _main_main_behaviour_bouncing_1.setTrigger(Event("select_ball", self.getInPortName("ball_ui_in")))
-        self.states["/main/main_behaviour/bouncing"].addTransition(_main_main_behaviour_bouncing_1)
-        
-        # transition /main/main_behaviour/dragging
-        _main_main_behaviour_dragging_0 = Transition(self, self.states["/main/main_behaviour/dragging"], [self.states["/main/main_behaviour/dragging"]])
-        _main_main_behaviour_dragging_0.setAction(self._main_main_behaviour_dragging_0_exec)
-        _main_main_behaviour_dragging_0.setTrigger(Event("motion", self.getInPortName("ball_ui_in")))
-        self.states["/main/main_behaviour/dragging"].addTransition(_main_main_behaviour_dragging_0)
-        _main_main_behaviour_dragging_1 = Transition(self, self.states["/main/main_behaviour/dragging"], [self.states["/main/main_behaviour/bouncing"]])
-        _main_main_behaviour_dragging_1.setAction(self._main_main_behaviour_dragging_1_exec)
-        _main_main_behaviour_dragging_1.setTrigger(Event("unselect_ball", self.getInPortName("ball_ui_in")))
-        self.states["/main/main_behaviour/dragging"].addTransition(_main_main_behaviour_dragging_1)
-        
-        # transition /main/main_behaviour/selected
-        _main_main_behaviour_selected_0 = Transition(self, self.states["/main/main_behaviour/selected"], [self.states["/main/main_behaviour/dragging"]])
-        _main_main_behaviour_selected_0.setTrigger(Event("select_ball", self.getInPortName("ball_ui_in")))
-        self.states["/main/main_behaviour/selected"].addTransition(_main_main_behaviour_selected_0)
-        _main_main_behaviour_selected_1 = Transition(self, self.states["/main/main_behaviour/selected"], [self.states["/main/main_behaviour/selected"]])
-        _main_main_behaviour_selected_1.setAction(self._main_main_behaviour_selected_1_exec)
-        _main_main_behaviour_selected_1.setTrigger(Event("delete", None))
-        self.states["/main/main_behaviour/selected"].addTransition(_main_main_behaviour_selected_1)
-        
-        # transition /main/size_change_listener/listening
-        _main_size_change_listener_listening_0 = Transition(self, self.states["/main/size_change_listener/listening"], [self.states["/main/size_change_listener/listening"]])
-        _main_size_change_listener_listening_0.setAction(self._main_size_change_listener_listening_0_exec)
-        _main_size_change_listener_listening_0.setTrigger(Event("window_size_changed", None))
-        self.states["/main/size_change_listener/listening"].addTransition(_main_size_change_listener_listening_0)
-        
-        # transition /main
-        _main_0 = Transition(self, self.states["/main"], [self.states["/deleted"]])
-        _main_0.setTrigger(Event("delete_local", None))
-        self.states["/main"].addTransition(_main_0)
-    
-    def _main_main_behaviour_bouncing_enter(self):
-        self.addTimer(0, (20 - self.getSimulatedTime() % 20) / 1000.0)
-    
-    def _main_main_behaviour_bouncing_exit(self):
-        self.removeTimer(0)
-    
-    def _main_main_behaviour_initializing_0_exec(self, parameters):
-        association_name = parameters[0]
-        self.association_name = association_name
-    
-    def _main_main_behaviour_waiting_for_ui_0_exec(self, parameters):
-        self.big_step.outputEvent(Event("set_initial_params", self.getOutPortName("ball_ui_out"), [self.x, self.y, self.r]))
-    
-    def _main_main_behaviour_bouncing_0_exec(self, parameters):
-        if self.x <= 0 or self.x + (self.r * 2) >= self.window_width:
-            self.vel['x'] = -self.vel['x']
-        if self.y <= 0 or self.y + (self.r * 2) >= self.window_height:
-            self.vel['y'] = -self.vel['y']
-        self.x += self.vel['x']
-        self.y += self.vel['y']
-        self.big_step.outputEvent(Event("change_position", self.getOutPortName("ball_ui_out"), [self.x, self.y]))
-    
-    def _main_main_behaviour_bouncing_1_exec(self, parameters):
-        self.big_step.outputEvent(Event("change_color", self.getOutPortName("ball_ui_out"), ['yellow']))
-    
-    def _main_main_behaviour_dragging_0_exec(self, parameters):
-        dx = parameters[0]
-        dy = parameters[1]
-        self.x += dx
-        self.y += dy
-        if self.x - self.r <= 0:
-            self.x = 1;
-        elif self.x + self.r >= self.window_width:
-            self.x = self.window_width - (2 * self.r) - 1
-        if self.y - self.r <= 0:
-            self.y = 1
-        elif self.y + self.r >= self.window_height:
-            self.y = self.window_height - (2 * self.r) - 1;
-        self.vel = {
-            'x': (1 - self.smooth) * dx + self.smooth * self.vel['x'],
-            'y': (1 - self.smooth) * dy + self.smooth * self.vel['y']
-        }
-        self.big_step.outputEvent(Event("change_position", self.getOutPortName("ball_ui_out"), [self.x, self.y]))
-    
-    def _main_main_behaviour_dragging_1_exec(self, parameters):
-        self.big_step.outputEvent(Event("change_color", self.getOutPortName("ball_ui_out"), ['red']))
-    
-    def _main_main_behaviour_selected_1_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent', Event("delete_ball", None, [self.association_name])]))
-        self.raiseInternalEvent(Event("delete_local", None, []))
-    
-    def _main_size_change_listener_listening_0_exec(self, parameters):
-        new_width = parameters[0]
-        new_height = parameters[1]
-        self.window_width = new_width
-        self.window_height = new_height
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/main"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "MainApp":
-            instance = MainApp(self.controller)
-            instance.associations = {}
-            instance.associations["windows"] = Association("Window", 0, -1)
-        elif class_name == "Window":
-            instance = Window(self.controller)
-            instance.associations = {}
-            instance.associations["balls"] = Association("Ball", 0, -1)
-            instance.associations["buttons"] = Association("Button", 0, -1)
-            instance.associations["parent"] = Association("MainApp", 1, 1)
-        elif class_name == "Button":
-            instance = Button(self.controller, construct_params[0])
-            instance.associations = {}
-            instance.associations["parent"] = Association("Field", 1, 1)
-        elif class_name == "Ball":
-            instance = Ball(self.controller, construct_params[0], construct_params[1], construct_params[2], construct_params[3])
-            instance.associations = {}
-            instance.associations["parent"] = Association("Window", 1, 1)
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(EventLoopControllerBase):
-    def __init__(self, event_loop_callbacks, finished_callback = None, behind_schedule_callback = None):
-        if finished_callback == None: finished_callback = None
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        EventLoopControllerBase.__init__(self, ObjectManager(self), event_loop_callbacks, finished_callback, behind_schedule_callback)
-        self.addInputPort("ui_in")
-        self.addOutputPort("ui_out")
-        self.object_manager.createInstance("MainApp", [])

+ 0 - 387
legacy/examples/bouncingballs/python/sccd_no_ui.xml

@@ -1,387 +0,0 @@
-<?xml version="1.1" ?>
-<diagram author="Simon Van Mierlo" name="Bouncing_Balls_Python_Version">
-    <description>
-        Bouncing Balls - no UI code.
-    </description>
-    <top>
-        from ui_classes import *
-    </top>
-    <inport name="ui_in"/>
-    <outport name="ui_out"/>
-    <class name="MainApp" default="true">
-        <relationships>
-            <association name="windows" class="Window" />
-        </relationships>
-        <constructor>
-            <body>
-                <![CDATA[
-                self.nr_of_windows = 0
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="main">
-            <parallel id="main">
-                <state id="main_behaviour" initial="initializing">
-                    <state id="initializing">
-                        <onentry>
-                            <raise event="create_window" scope="local" />
-                        </onentry>
-                        <transition target="../running" />
-                    </state>
-                    <state id="running">
-                        <transition event="window_created" target=".">
-                            <script>
-                                self.nr_of_windows += 1
-                            </script>
-                        </transition>
-                        <transition event="window_deleted" target="." cond="self.nr_of_windows > 1">
-                            <script>
-                                self.nr_of_windows -= 1
-                            </script>
-                        </transition>
-                        <transition event="window_deleted" target="." cond="self.nr_of_windows == 1">
-                            <raise event="stop" scope="local" />
-                        </transition>
-                    </state>
-                </state>
-                <state id="creating_behaviour" initial="waiting">
-                    <state id="waiting">
-                        <transition event="create_window" target="../creating">
-                            <raise event="create_instance" scope="cd">
-                                <parameter expr="'windows'" />
-                                <parameter expr="'Window'" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="creating">
-                        <transition event="instance_created" target="../waiting">
-                            <parameter name="association_name" />
-                            <raise event="create_new_window" port="ui_out">
-                                <parameter expr="association_name" />
-                                <parameter expr="self.getSingleChild(association_name)" />
-                            </raise>
-                            <raise event="start_instance" scope="cd">
-                                <parameter expr="association_name" />
-                            </raise>
-                            <raise event="set_association_name" scope="narrow" target="association_name">
-                                <parameter expr="association_name" />
-                            </raise>
-                            <raise event="window_created" scope="local" />
-                        </transition>
-                    </state>
-                </state>
-                <state id="deleting_behaviour" initial="waiting">
-                    <state id="waiting">
-                        <transition event="delete_window" target="../deleting">
-                            <parameter name="association_name" />
-                            <raise event="delete_window" port="ui_out">
-                                <parameter expr="association_name" />
-                            </raise>
-                            <raise event="delete_instance" scope="cd">
-                                <parameter expr="association_name" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="deleting">
-                        <transition event="instance_deleted" target="../waiting">
-                            <raise event="window_deleted" scope="local" />
-                        </transition>
-                    </state>
-                </state>
-                <transition event="stop" target="../stopped" />
-            </parallel>
-            <state id="stopped">
-                <onentry>
-                    <raise event="stop_ui" port="ui_out" />
-                </onentry>
-            </state>
-        </scxml>
-    </class>
-
-    <class name="Window">
-        <inport name="window_ui_in" />
-        <outport name="window_ui_out" />
-        <relationships>
-            <association name="balls" class="Ball" />
-            <association name="buttons" class="Button" />
-            <association name="parent" class="MainApp" min="1" max="1" />
-        </relationships>
-        <scxml initial="main">
-            <parallel id="main">
-                <state id="main_behaviour" initial="initializing">
-                    <state id="initializing">
-                        <transition event="set_association_name" target="../waiting_for_ui">
-                            <parameter name="association_name" />
-                            <script>
-                                self.association_name = association_name
-                            </script>
-                        </transition>
-                    </state>
-                    <state id="waiting_for_ui">
-                        <transition event="ui_initialized" target="../creating_button" port="window_ui_in">                      
-                            <parameter name="width" />
-                            <parameter name="height" />
-                            <script>
-                                self.width = width
-                                self.height = height
-                            </script>
-                            <raise scope="cd" event="create_instance">
-                                <parameter expr='"buttons"' />
-                                <parameter expr='"Button"' />
-                                <parameter expr="'create_window'" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="creating_button">
-                        <transition event="instance_created" target="../running">
-                            <parameter name="association_name" type="string"/>
-                            <raise event="create_new_button" port="window_ui_out">
-                                <parameter expr="association_name" />
-                                <parameter expr="self.getSingleChild(association_name)" />
-                            </raise>
-                            <raise scope="cd" event="start_instance">
-                                <parameter expr="association_name" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="running">
-                        <transition event="button_pressed" target="." cond="event_name == 'create_window'">
-                            <parameter name="event_name" type="string" />
-                            <raise event="create_window" scope="narrow" target="'parent'" />
-                        </transition>
-                        <transition event="close_window" port="window_ui_in" target=".">
-                            <raise event="stop" scope="local" />
-                        </transition>
-                        <transition event="create_ball" port="window_ui_in" target="../creating_ball">
-                            <parameter name="x" />
-                            <parameter name="y" />
-                            <raise scope="cd" event="create_instance">
-                                <parameter expr='"balls"' />
-                                <parameter expr='"Ball"' />
-                                <parameter expr="x" />
-                                <parameter expr="y" />
-                                <parameter expr="self.width" />
-                                <parameter expr="self.height" />
-                            </raise>
-                        </transition>
-                        <transition event="delete_ball" target=".">
-                            <parameter name="association_name" type="string" />
-                            <raise event="delete_instance" scope="cd">
-                                <parameter expr="association_name" />
-                            </raise>
-                            <raise event="delete_ball" port="window_ui_out">
-                                <parameter expr="association_name" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="creating_ball">
-                        <transition event="instance_created" target="../running">
-                            <parameter name="association_name" type="string"/>
-                            <raise event="create_new_ball" port="window_ui_out">
-                                <parameter expr="association_name" />
-                                <parameter expr="self.getSingleChild(association_name)" />
-                            </raise>
-                            <raise event="start_instance" scope="cd">
-                                <parameter expr="association_name" />
-                            </raise>
-                            <raise event="set_association_name" scope="narrow" target="association_name">
-                                <parameter expr="association_name" />
-                            </raise>
-                        </transition>
-                    </state>
-                </state>
-                <state id="size_change_listener" initial="listening">
-                    <state id="listening">
-                        <transition target="." event="size_changed" port="window_ui_in">
-                            <parameter name="new_width" />
-                            <parameter name="new_height" />
-                            <script>
-                                self.width = new_width
-                                self.height = new_height
-                            </script>
-                            <raise event="window_size_changed" scope="narrow" target="'balls'">
-                                <parameter expr="new_width" />
-                                <parameter expr="new_height" />
-                            </raise>
-                        </transition>
-                    </state>
-                </state>
-                <state id="delete_listener" initial="listening">
-                    <state id="listening">
-                        <transition event="delete" target="." port="window_ui_in">
-                            <raise event="delete" target="'balls'" />
-                        </transition>
-                    </state>
-                </state>
-                <transition event="stop" target="../stopped">
-                    <raise event="delete_instance" scope="cd">
-                        <parameter expr="'buttons'" />
-                    </raise>
-                    <raise event="delete_instance" scope="cd">
-                        <parameter expr="'balls'" />
-                    </raise>
-                </transition>
-            </parallel>
-            <state id="stopped">
-                <onentry>
-                    <raise event="delete_window" scope="narrow" target="'parent'">
-                        <parameter expr="self.association_name" />
-                    </raise>
-                </onentry>
-            </state>
-        </scxml>
-    </class>
-    <class name="Button">
-        <inport name="button_ui_in" />
-        <outport name="button_ui_out" />
-        <relationships>
-            <association name="parent" class="Field" min="1" max="1" />
-        </relationships>
-        <constructor>
-            <parameter name="event_name" type="str" />
-            <body>
-                self.event_name = event_name
-            </body>
-        </constructor>
-        <scxml initial="waiting">
-            <state id="waiting">
-                <transition event="ui_initialized" target="../running" port="button_ui_in">
-                    <raise event="set_text" port="button_ui_out">
-                        <parameter expr="self.event_name" />
-                    </raise>
-                </transition>
-            </state>
-            <state id="running">
-                <transition event="clicked" port="button_ui_in" target=".">
-                    <raise event="button_pressed" scope="narrow" target="'parent'">
-                        <parameter expr="self.event_name" />
-                    </raise>
-                </transition>
-            </state>
-        </scxml>
-    </class>
-    <class name="Ball">
-        <inport name="ball_ui_in" />
-        <outport name="ball_ui_out" />
-        <relationships>
-            <association name="parent" class="Window" min="1" max="1" />
-        </relationships>
-        <constructor>
-            <parameter name="x" />
-            <parameter name="y" />
-            <parameter name="window_width" />
-            <parameter name="window_height" />
-            <body>
-                self.x = x
-                self.y = y
-                self.window_width = window_width
-                self.window_height = window_height
-                self.r = 20.0;
-                self.vel = {'x': random.uniform(-5.0, 5.0), 'y': random.uniform(-5.0, 5.0)};
-                self.smooth = 0.4 # value between 0 and 1
-            </body>
-        </constructor>
-        <scxml initial="main">
-            <parallel id="main">
-                <state id="main_behaviour" initial="initializing">
-                    <state id="initializing">
-                        <transition event="set_association_name" target="../waiting_for_ui">
-                            <parameter name="association_name" type="str" />
-                            <script>
-                                self.association_name = association_name
-                            </script>
-                        </transition>
-                    </state>
-                    <state id="waiting_for_ui">
-                        <transition event="ui_initialized" target="../bouncing" port="ball_ui_in">                      
-                            <raise event="set_initial_params" port="ball_ui_out">
-                                <parameter expr="self.x" />
-                                <parameter expr="self.y" />
-                                <parameter expr="self.r" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="bouncing">
-                        <transition after="(20 - self.getSimulatedTime() % 20) / 1000.0" target=".">
-                            <script>
-                            <![CDATA[
-                                if self.x <= 0 or self.x + (self.r * 2) >= self.window_width:
-                                    self.vel['x'] = -self.vel['x']
-                                if self.y <= 0 or self.y + (self.r * 2) >= self.window_height:
-                                    self.vel['y'] = -self.vel['y']
-                                self.x += self.vel['x']
-                                self.y += self.vel['y']
-                            ]]>
-                            </script>
-                            <raise event="change_position" port="ball_ui_out">
-                                <parameter expr="self.x" />
-                                <parameter expr="self.y" />
-                            </raise>
-                        </transition>
-                        <transition port="ball_ui_in" event="select_ball" target="../selected">
-                            <raise event="change_color" port="ball_ui_out">
-                                <parameter expr="'yellow'" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="dragging">
-                        <transition port="ball_ui_in" event="motion" target=".">
-                            <parameter name="dx" />
-                            <parameter name="dy" />
-                            <script>
-                            <![CDATA[
-                                self.x += dx
-                                self.y += dy
-                                if self.x - self.r <= 0:
-                                    self.x = 1;
-                                elif self.x + self.r >= self.window_width:
-                                    self.x = self.window_width - (2 * self.r) - 1
-                                if self.y - self.r <= 0:
-                                    self.y = 1
-                                elif self.y + self.r >= self.window_height:
-                                    self.y = self.window_height - (2 * self.r) - 1;
-                                self.vel = {
-                                    'x': (1 - self.smooth) * dx + self.smooth * self.vel['x'],
-                                    'y': (1 - self.smooth) * dy + self.smooth * self.vel['y']
-                                }
-                            ]]>
-                            </script>
-                            <raise event="change_position" port="ball_ui_out">
-                                <parameter expr="self.x" />
-                                <parameter expr="self.y" />
-                            </raise>
-                        </transition>
-                        <transition port="ball_ui_in" event="unselect_ball" target="../bouncing">
-                            <raise event="change_color" port="ball_ui_out">
-                                <parameter expr="'red'" />
-                            </raise>
-                        </transition>
-                    </state>
-                    <state id="selected">
-                        <transition port="ball_ui_in" event="select_ball" target="../dragging" />
-                        <transition event="delete" target=".">
-                            <raise event="delete_ball" scope="narrow" target="'parent'">
-                                <parameter expr="self.association_name" />
-                            </raise>
-                            <raise event="delete_local" />
-                        </transition>
-                    </state>
-                </state>
-                <state id="size_change_listener" initial="listening">
-                    <state id="listening">
-                        <transition target="." event="window_size_changed">
-                            <parameter name="new_width" />
-                            <parameter name="new_height" />
-                            <script>
-                                self.window_width = new_width
-                                self.window_height = new_height
-                            </script>
-                        </transition>
-                    </state>
-                </state>
-                <transition target="../deleted" event="delete_local" />
-            </parallel>
-            <state id="deleted" />
-        </scxml>
-    </class>
-</diagram>

+ 0 - 425
legacy/examples/bouncingballs/python/sccd_performance.xml

@@ -1,425 +0,0 @@
-<?xml version="1.1" ?>
-<diagram author="Simon Van Mierlo+Raphael Mannadiar" name="Bouncing_Balls_Python_Version">
-    <description>
-        Tkinter frame with bouncing balls in it.
-    </description>
-    <top>
-        from sccd.runtime.libs.ui import ui
-        from sccd.runtime.libs.utils import utils
-        import random
-    </top>
-    <inport name="ui"/>
-    <class name="MainApp" default="true">
-        <relationships>
-            <association name="fields" class="Field" />
-        </relationships>
-        <constructor>
-            <body>
-                <![CDATA[
-                self.nr_of_fields = 0
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="running">
-            <state id="running" initial="root">
-                <parallel id="root">
-                    <state id="main_behaviour" initial="initializing">
-                        <state id="initializing">
-                            <transition target="../running">
-                                <raise event="create_field" />        
-                            </transition>
-                        </state>
-                        <state id="running">
-                            <transition target='.' event='button_pressed' cond='event_name == "create_new_field"'>
-                                <parameter name="event_name" type="str" />
-                                <raise event="create_field" />
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="cd_behaviour" initial="waiting">
-                        <state id="waiting">
-                            <transition event="create_field" target="../creating">
-                                <raise scope="cd" event="create_instance">
-                                    <parameter expr='"fields"' />
-                                </raise>
-                            </transition>
-                            <transition event="delete_field" target='../check_nr_of_fields'>
-                                <parameter name="association_name" type="str"/>
-                                <raise scope="cd" event="delete_instance">
-                                    <parameter expr='association_name' />
-                                </raise>
-                                <script>
-                                    <![CDATA[
-                                    self.nr_of_fields -= 1
-                                    ]]>
-                                </script>
-                            </transition>
-                        </state>
-                        <state id="creating">
-                            <transition event="instance_created" target="../waiting">
-                                <parameter name="association_name" type="string"/>
-                                <raise scope="cd" event="start_instance">
-                                    <parameter expr="association_name" />
-                                </raise>
-                                <raise scope="narrow" event="set_association_name" target="association_name">
-                                    <parameter expr="association_name" />
-                                </raise>
-                                <script>
-                                    <![CDATA[
-                                    self.nr_of_fields += 1
-                                    ]]>
-                                </script>
-                            </transition>
-                        </state>
-                        <state id="check_nr_of_fields">
-                            <transition target="../stopped" cond="self.nr_of_fields == 0" after="0.05">
-                                <raise event="stop" />
-                            </transition>
-                            <transition target="../waiting" cond="self.nr_of_fields != 0"/>
-                        </state>
-                        <state id="stopped" />
-                    </state>
-                    <state id="spawn_windows" initial="spawning">
-                        <state id="spawning">
-                            <transition target="." after="(1000 - self.getSimulatedTime() % 1000) / 1000.0" cond="self.nr_of_fields &lt; 10">
-                                <raise event="button_pressed">
-                                    <parameter expr="'create_new_field'" />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                    <transition target="../stopped" event="stop">
-                        <script>
-                            <![CDATA[
-                            ui.close_window(ui.window)
-                            ]]>
-                        </script>
-                    </transition>
-                </parallel>
-                <state id="stopped" />
-            </state>
-        </scxml>
-    </class>
-
-    <class name="Field">
-        <attribute name="canvas" />
-        <attribute name="field_window" />
-        <inport name="field_ui"/>
-        <relationships>
-            <association name="balls" class="Ball" />
-            <association name="buttons" class="Button" />
-            <association name="parent" class="MainApp" min="1" max="1" />
-        </relationships>
-        <constructor>
-            <body>
-                <![CDATA[
-                self.field_window = ui.new_window(400,450);
-                self.canvas = ui.append_canvas(self.field_window,400,400,{'background':'#eee'});
-                ui.bind_event(self.field_window, ui.EVENTS.WINDOW_CLOSE, self.controller, 'window_close', self.inports['field_ui']);
-                ui.bind_event(self.field_window, ui.EVENTS.KEY_PRESS, self.controller, 'key_press', self.inports['field_ui']);
-                ui.bind_event(self.canvas.element, ui.EVENTS.MOUSE_RIGHT_CLICK,    self.controller, 'right_click', self.inports['field_ui']);
-                ui.bind_event(self.canvas.element, ui.EVENTS.MOUSE_MOVE, self.controller, 'mouse_move', self.inports['field_ui']);
-                ui.bind_event(self.canvas.element, ui.EVENTS.MOUSE_RELEASE, self.controller, 'mouse_release', self.inports['field_ui']);
-                ]]>
-            </body>
-        </constructor>
-        <destructor>
-            <body>
-                <![CDATA[
-                ui.close_window(self.field_window);
-                ]]>
-            </body>
-        </destructor>
-        <scxml initial="root">
-            <state id="root" initial="waiting">
-                <state id="waiting">
-                    <transition event="set_association_name" target="../initializing">
-                        <parameter name="association_name" type="str" />
-                        <script>
-                            <![CDATA[
-                            self.association_name = association_name
-                            ]]>
-                        </script>
-                    </transition>
-                </state>
-                <state id="initializing">
-                    <transition target="../creating">
-                        <raise scope="cd" event="create_instance">
-                            <parameter expr='"buttons"' />
-                            <parameter expr='"Button"' />
-                            <parameter expr="self" />
-                            <parameter expr="'create_new_field'" />
-                            <parameter expr="'Spawn New Window'" />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="creating">
-                    <transition event='instance_created' target='../packing'>
-                        <parameter name="association_name" type="string"/>
-                        <raise scope="cd" event="start_instance">
-                            <parameter expr="association_name" />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="packing">
-                    <transition event="button_created" target='../running'>
-                    </transition>
-                </state>
-                <parallel id="running">
-                    <transition port="field_ui" event="window_close" target="../deleting">
-                        <raise event="delete_instance" scope="cd">
-                            <parameter expr='"buttons"' />
-                        </raise>
-                        <raise event="delete_instance" scope="cd">
-                            <parameter expr='"balls"' />
-                        </raise>
-                    </transition>
-                    <state id="main_behaviour" initial="running">
-                        <state id="running">
-                            <transition event="right_click" target="../creating">
-                                <parameter name="x" />
-                                <parameter name="y" />
-                                <parameter name="button" />
-                                <raise scope="cd" event="create_instance">
-                                    <parameter expr='"balls"' />
-                                    <parameter expr='"Ball"' />
-                                    <parameter expr="self.canvas" />
-                                    <parameter expr="x" />
-                                    <parameter expr="y" />
-                                </raise>
-                            </transition>
-                        </state>
-                        <state id="creating">
-                            <transition event="instance_created" target="../running">
-                                <parameter name="association_name" type="string"/>
-                                <raise scope="cd" event="start_instance">
-                                    <parameter expr="association_name" />
-                                </raise>
-                                <raise scope="narrow" event="set_association_name" target="association_name">
-                                    <parameter expr="association_name" />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="deleting_behaviour" initial="running">
-                        <state id="running">
-                            <transition event="delete_ball" target='.'>
-                                <parameter name="association_name" type="str"/>
-                                <raise scope="cd" event="delete_instance">
-                                    <parameter expr='association_name' />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="child_behaviour" initial="listening">
-                        <state id="listening">
-                            <transition event="button_pressed" target='.'>
-                                <parameter name="event_name" type="str" />
-                                <raise event="button_pressed" scope="narrow" target="'parent'">
-                                    <parameter expr='event_name' />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="deleting_balls_behaviour" initial="listening">
-                        <state id="listening">
-                            <transition port="field_ui" event="key_press" target="." cond="key == ui.KEYCODES.DELETE">
-                                <parameter name="key" />
-                                <raise event="delete_self" scope="narrow" target="'balls'" />
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="spawn_balls" initial="spawning">
-                        <state id="spawning">
-                            <transition target="." after="(50 - self.getSimulatedTime() % 50) / 1000.0">
-                                <raise event="right_click">
-                                    <parameter expr="150" />
-                                    <parameter expr="150" />
-                                    <parameter expr="None" />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                </parallel>
-                <state id="deleting">
-                    <transition target="../deleted">
-                        <raise event="delete_field" scope="narrow" target="'parent'">
-                            <parameter expr='self.association_name' />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="deleted" />
-            </state>
-        </scxml>
-    </class>
-    
-    <class name="Button">
-        <relationships>
-            <association name="parent" class="Field" min="1" max="1" />
-        </relationships>
-        <inport name="button_ui"/>
-        <constructor>
-            <parameter name="parent" type="Field" />
-            <parameter name="event_name" type="str" />
-            <parameter name="button_text" type="str" />
-            <body>
-                <![CDATA[
-                self.event_name = event_name;
-                button = ui.append_button(parent.field_window, event_name);
-                ui.bind_event(button.element, ui.EVENTS.MOUSE_CLICK, self.controller, 'mouse_click', self.inports['button_ui']);
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="initializing">
-            <state id="initializing">
-                <transition target="../running">
-                    <raise event="button_created" scope="narrow" target="'parent'">
-                    </raise>
-                </transition>
-            </state>
-            <state id="running">
-                <transition port='button_ui' event="mouse_click" target='.' cond="button == ui.MOUSE_BUTTONS.LEFT">
-                    <parameter name="x" />
-                    <parameter name="y" />
-                    <parameter name="button" />
-                    <raise event="button_pressed" scope="narrow" target="'parent'">
-                        <parameter expr="self.event_name" />
-                    </raise>
-                </transition>
-            </state>
-        </scxml>
-    </class>
-    
-    <class name="Ball">
-        <atrribute name="element" />
-        <attribute name="canvas" />
-        <inport name="ball_ui" />
-        <relationships>
-            <association name="parent" class="Field" min="1" max="1" />
-        </relationships>
-        <constructor>
-            <parameter name="canvas" />
-            <parameter name="x" />
-            <parameter name="y" />
-            <body>
-                <![CDATA[
-                self.canvas = canvas;
-                self.r = 20.0;
-                self.vel = {'x': random.uniform(-5.0, 5.0), 'y': random.uniform(-5.0, 5.0)};
-                self.mouse_pos = {};
-                self.smooth = 0.4; # value between 0 and 1
-
-                circle = self.canvas.add_circle(x, y, self.r, {'fill':'#000'});
-                ui.bind_event(circle, ui.EVENTS.MOUSE_PRESS, self.controller, 'mouse_press', self.inports["ball_ui"]);
-                ui.bind_event(circle, ui.EVENTS.MOUSE_MOVE, self.controller, 'mouse_move', self.inports['ball_ui']);
-                ui.bind_event(circle, ui.EVENTS.MOUSE_RELEASE, self.controller, 'mouse_release', self.inports['ball_ui']);
-                self.element = circle;
-                ]]>
-            </body>
-        </constructor>
-        <destructor>
-            <body>
-                <![CDATA[
-                self.canvas.remove_element(self.element);
-                ]]>
-            </body>
-        </destructor>
-        <scxml initial="main_behaviour">
-            <state id="main_behaviour" initial="initializing">
-                <state id="initializing">
-                    <transition event="set_association_name" target="../bouncing">
-                        <parameter name="association_name" type="str" />
-                        <script>
-                            <![CDATA[
-                            self.association_name = association_name
-                            ]]>                            
-                        </script>
-                    </transition>
-                </state>
-                <state id="bouncing">
-                    <transition after="(20 - self.getSimulatedTime() % 20) / 1000.0" target=".">
-                        <script>
-                            <![CDATA[
-                            pos = self.element.get_position();    
-                            if pos.x-self.r <= 0 or pos.x+self.r >= self.canvas.width :
-                                self.vel['x'] = -self.vel['x'];
-                            if pos.y-self.r <= 0 or pos.y+self.r >= self.canvas.height :
-                                self.vel['y'] = -self.vel['y'];
-                            self.element.move(self.vel['x'], self.vel['y']);
-                            ]]>                            
-                        </script>
-                    </transition>
-                    <transition port="ball_ui" event="mouse_press" target="../selected" cond="button == ui.MOUSE_BUTTONS.LEFT">
-                        <parameter name="x" />
-                        <parameter name="y" />
-                        <parameter name="button" />
-                        <script>
-                            <![CDATA[
-                            self.element.set_color("#ff0");
-                            ]]>                            
-                        </script>
-                    </transition>
-                </state>
-                <state id="dragging">
-                    <transition port="ball_ui" event="mouse_move" target=".">
-                        <parameter name="x" />
-                        <parameter name="y" />
-                        <parameter name="button" />
-                        <script>
-                            <![CDATA[
-                            dx = x - self.mouse_pos['x'];
-                            dy = y - self.mouse_pos['y'];
-
-                            self.element.move(dx, dy);
-
-                            # keep ball within boundaries
-                            pos = self.element.get_position();
-                            if pos.x-self.r <= 0 :
-                                pos.x = self.r + 1;
-                            elif pos.x+self.r >= self.canvas.width :
-                                pos.x = self.canvas.width-self.r-1;
-                            if pos.y-self.r <= 0 :
-                                pos.y = self.r + 1;
-                            elif pos.y+self.r >= self.canvas.height :
-                                pos.y = self.canvas.height-self.r-1;
-                            self.element.set_position(pos.x, pos.y);
-                            self.mouse_pos = {'x':x, 'y':y};
-                            self.vel = {
-                                'x': (1-self.smooth)*dx + self.smooth*self.vel['x'],
-                                'y': (1-self.smooth)*dy + self.smooth*self.vel['y']
-                            };
-                            ]]>
-                        </script>
-                    </transition>
-                    <transition port="ball_ui" event="mouse_release" target="../bouncing">
-                        <parameter name="x" />
-                        <parameter name="y" />
-                        <script>
-                            <![CDATA[
-                            self.element.set_color("#f00");
-                            ]]>                            
-                        </script>
-                    </transition>
-                </state>
-                <state id='selected'>
-                    <transition port="ball_ui" event="mouse_press" target="../dragging" cond="button == ui.MOUSE_BUTTONS.LEFT">
-                        <parameter name="x" />
-                        <parameter name="y" />
-                        <parameter name="button" />
-                        <script>
-                            <![CDATA[
-                            self.mouse_pos = {'x':x, 'y':y};
-                            ]]>
-                        </script>
-                    </transition>
-                    <transition event="delete_self" target='../../deleted'>                    
-                        <raise event="delete_ball" scope="narrow" target="'parent'">
-                            <parameter expr='self.association_name' />
-                        </raise>
-                    </transition>
-                </state>
-            </state>
-            <state id='deleted' />
-        </scxml>
-    </class>
-</diagram>

+ 0 - 179
legacy/examples/bouncingballs/python/sccd_performance_cpu_time.xml

@@ -1,179 +0,0 @@
-<?xml version="1.1" ?>
-<diagram author="Simon Van Mierlo+Raphael Mannadiar" name="Bouncing_Balls_Python_Version">
-    <description>
-        Tkinter frame with bouncing balls in it.
-    </description>
-    <top>
-        import random, sys, os
-    </top>
-    <class name="MainApp" default="true">
-        <relationships>
-            <association name="fields" class="Field" />
-        </relationships>
-        <constructor>
-            <parameter name="fields_to_create" />
-            <parameter name="balls_to_create" />
-            <body>
-                <![CDATA[
-                self.fields_to_create = fields_to_create
-                self.balls_to_create = balls_to_create
-                self.nr_of_fields = 0
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="running">
-            <state id="running" initial="root">
-                <parallel id="root">
-                    <state id="cd_behaviour" initial="waiting">
-                        <state id="waiting">
-                            <transition event="create_field" target="../creating">
-                                <raise scope="cd" event="create_instance">
-                                    <parameter expr='"fields"' />
-                                    <parameter expr='"Field"' />
-                                    <parameter expr="self.balls_to_create" />
-                                </raise>
-                            </transition>
-                        </state>
-                        <state id="creating">
-                            <transition event="instance_created" target="../waiting">
-                                <parameter name="association_name" type="string"/>
-                                <raise scope="cd" event="start_instance">
-                                    <parameter expr="association_name" />
-                                </raise>
-                                <script>
-                                    self.nr_of_fields += 1
-                                </script>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="spawn_windows" initial="spawning">
-                        <state id="spawning">
-                            <transition target="." after="0.1" cond="self.nr_of_fields &lt; self.fields_to_create">
-                                <raise event="create_field" />
-                            </transition>
-                            <transition target="../stopped_spawning" cond="self.nr_of_fields &gt;= self.fields_to_create" />
-                        </state>
-                        <state id="stopped_spawning" />
-                    </state>
-                    <state id="killer" initial="killing">
-                        <state id="killing">
-                            <transition after="5" target=".">
-                                <script>
-                                    print "cpu usage for %i fields with %i balls: %.5f" % (self.fields_to_create, self.balls_to_create, os.times()[0] / 5.0)
-                                    sys.exit()
-                                </script>
-                            </transition>
-                        </state>
-                    </state>
-                </parallel>
-                <state id="stopped" />
-            </state>
-        </scxml>
-    </class>
-
-    <class name="Field">
-        <relationships>
-            <association name="balls" class="Ball" />
-            <association name="parent" class="MainApp" min="1" max="1" />
-        </relationships>
-        <constructor>
-            <parameter name="balls_to_create" />
-            <body>
-                <![CDATA[
-                self.balls_to_create = balls_to_create
-                self.nr_of_balls = 0
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="root">
-            <state id="root" initial="running">
-                <parallel id="running">
-                    <state id="main_behaviour" initial="running">
-                        <state id="running">
-                            <transition event="spawn_ball" target="../creating">
-                                <parameter name="x" />
-                                <parameter name="y" />
-                                <raise scope="cd" event="create_instance">
-                                    <parameter expr='"balls"' />
-                                    <parameter expr='"Ball"' />
-                                    <parameter expr="x" />
-                                    <parameter expr="y" />
-                                </raise>
-                            </transition>
-                        </state>
-                        <state id="creating">
-                            <transition event="instance_created" target="../running">
-                                <parameter name="association_name" type="string"/>
-                                <raise scope="cd" event="start_instance">
-                                    <parameter expr="association_name" />
-                                </raise>
-                                <script>
-                                    self.nr_of_balls += 1
-                                </script>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="spawn_balls" initial="spawning">
-                        <state id="spawning">
-                            <transition target="." after="0" cond="self.nr_of_balls &lt; self.balls_to_create">
-                                <raise event="spawn_ball">
-                                    <parameter expr="150" />
-                                    <parameter expr="150" />
-                                </raise>
-                            </transition>
-                            <transition target="../stopped_spawning" cond="self.nr_of_balls &gt;= self.balls_to_create" />
-                        </state>
-                        <state id="stopped_spawning" />
-                    </state>
-                </parallel>
-                <state id="deleting">
-                    <transition target="../deleted">
-                        <raise event="delete_field" scope="narrow" target="'parent'">
-                            <parameter expr='self.association_name' />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="deleted" />
-            </state>
-        </scxml>
-    </class>
-    
-    <class name="Ball">
-        <relationships>
-            <association name="parent" class="Field" min="1" max="1" />
-        </relationships>
-        <constructor>
-            <parameter name="x" />
-            <parameter name="y" />
-            <body>
-                <![CDATA[
-                self.r = 20.0;
-                self.vel = {'x': random.uniform(-5.0, 5.0), 'y': random.uniform(-5.0, 5.0)};
-                self.mouse_pos = {};
-                self.smooth = 0.4; # value between 0 and 1
-                self.pos = {'x': x, 'y': y}
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="main_behaviour">
-            <state id="main_behaviour" initial="bouncing">
-                <state id="bouncing">
-                    <transition after="(20 - self.getSimulatedTime() % 20) / 1000.0" target=".">
-                        <script>
-                            <![CDATA[
-                            self.pos
-                            if self.pos['x'] - self.r <= 0 or self.pos['x'] + self.r >= 800 :
-                                self.vel['x'] = -self.vel['x'];
-                            if self.pos['y'] - self.r <= 0 or self.pos['y'] + self.r >= 600 :
-                                self.vel['y'] = -self.vel['y'];
-                            self.pos['x'] += self.vel['x']
-                            self.pos['y'] += self.vel['y']
-                            ]]>                            
-                        </script>
-                        <raise event="test" scope="narrow" target="'parent[0]'" />
-                    </transition>
-                </state>
-            </state>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 146
legacy/examples/bouncingballs/python/sccd_performance_threads.xml

@@ -1,146 +0,0 @@
-<?xml version="1.1" ?>
-<diagram author="Simon Van Mierlo+Raphael Mannadiar" name="Bouncing_Balls_Python_Version">
-    <description>
-        Tkinter frame with bouncing balls in it.
-    </description>
-    <top>
-        import random, sys
-    </top>
-    <class name="MainApp" default="true">
-        <relationships>
-            <association name="fields" class="Field" />
-        </relationships>
-        <constructor>
-            <body>
-                <![CDATA[
-                self.nr_of_fields = 0
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="running">
-            <state id="running" initial="root">
-                <parallel id="root">
-                    <state id="cd_behaviour" initial="waiting">
-                        <state id="waiting">
-                            <transition event="create_field" target="../creating">
-                                <raise scope="cd" event="create_instance">
-                                    <parameter expr='"fields"' />
-                                </raise>
-                            </transition>
-                        </state>
-                        <state id="creating">
-                            <transition event="instance_created" target="../waiting">
-                                <parameter name="association_name" type="string"/>
-                                <raise scope="cd" event="start_instance">
-                                    <parameter expr="association_name" />
-                                </raise>
-                                <script>
-                                    self.nr_of_fields += 1
-                                </script>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="spawn_windows" initial="spawning">
-                        <state id="spawning">
-                            <transition target="." after="(1000 - self.getSimulatedTime() % 1000) / 1000.0" cond="self.nr_of_fields &lt; 10">
-                                <raise event="create_field" />
-                            </transition>
-                        </state>
-                    </state>
-                </parallel>
-                <state id="stopped" />
-            </state>
-        </scxml>
-    </class>
-
-    <class name="Field">
-        <relationships>
-            <association name="balls" class="Ball" />
-            <association name="parent" class="MainApp" min="1" max="1" />
-        </relationships>
-        <scxml initial="root">
-            <state id="root" initial="running">
-                <parallel id="running">
-                    <state id="main_behaviour" initial="running">
-                        <state id="running">
-                            <transition event="spawn_ball" target="../creating">
-                                <parameter name="x" />
-                                <parameter name="y" />
-                                <raise scope="cd" event="create_instance">
-                                    <parameter expr='"balls"' />
-                                    <parameter expr='"Ball"' />
-                                    <parameter expr="x" />
-                                    <parameter expr="y" />
-                                </raise>
-                            </transition>
-                        </state>
-                        <state id="creating">
-                            <transition event="instance_created" target="../running">
-                                <parameter name="association_name" type="string"/>
-                                <raise scope="cd" event="start_instance">
-                                    <parameter expr="association_name" />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                    <state id="spawn_balls" initial="spawning">
-                        <state id="spawning">
-                            <transition target="." after="(50 - self.getSimulatedTime() % 50) / 1000.0">
-                                <raise event="spawn_ball">
-                                    <parameter expr="150" />
-                                    <parameter expr="150" />
-                                </raise>
-                            </transition>
-                        </state>
-                    </state>
-                </parallel>
-                <state id="deleting">
-                    <transition target="../deleted">
-                        <raise event="delete_field" scope="narrow" target="'parent'">
-                            <parameter expr='self.association_name' />
-                        </raise>
-                    </transition>
-                </state>
-                <state id="deleted" />
-            </state>
-        </scxml>
-    </class>
-    
-    <class name="Ball">
-        <relationships>
-            <association name="parent" class="Field" min="1" max="1" />
-        </relationships>
-        <constructor>
-            <parameter name="x" />
-            <parameter name="y" />
-            <body>
-                <![CDATA[
-                self.r = 20.0;
-                self.vel = {'x': random.uniform(-5.0, 5.0), 'y': random.uniform(-5.0, 5.0)};
-                self.mouse_pos = {};
-                self.smooth = 0.4; # value between 0 and 1
-                self.pos = {'x': x, 'y': y}
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="main_behaviour">
-            <state id="main_behaviour" initial="bouncing">
-                <state id="bouncing">
-                    <transition after="(20 - self.getSimulatedTime() % 20) / 1000.0" target=".">
-                        <script>
-                            <![CDATA[
-                            self.pos
-                            if self.pos['x'] - self.r <= 0 or self.pos['x'] + self.r >= 800 :
-                                self.vel['x'] = -self.vel['x'];
-                            if self.pos['y'] - self.r <= 0 or self.pos['y'] + self.r >= 600 :
-                                self.vel['y'] = -self.vel['y'];
-                            self.pos['x'] += self.vel['x']
-                            self.pos['y'] += self.vel['y']
-                            ]]>                            
-                        </script>
-                    </transition>
-                </state>
-            </state>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 210
legacy/examples/bouncingballs/python/ui_classes.py

@@ -1,210 +0,0 @@
-from widget_private_ports import Widget
-from sccd.runtime.statecharts_core import Event
-import Tkinter as tk
-import random
-
-class WindowVis(tk.Toplevel, Widget):
-    def __init__(self, sccd_object):
-        tk.Toplevel.__init__(self)
-        self.sccd_object = sccd_object
-        self.inport = self.sccd_object.inports["window_ui_in"]
-        self.outport = self.sccd_object.outports["window_ui_out"]
-        Widget.__init__(self, True, self.inport, self.outport)
-
-        self.buttons = {}
-        self.balls = {}
-
-        self.title('BouncingBalls')
-        self.c = tk.Canvas(self, relief=tk.RIDGE)
-        self.repack()
-        self.set_bindable_and_tagorid(self.c)
-        self.c.bind("<Configure>", self.window_resize_handler)
-
-        self.listener = self.sccd_object.controller.addOutputListener(self.outport)
-        self.after(40, self.handle_output_events)
-        Widget.controller.addInput(Event("ui_initialized", self.inport, [self.winfo_width(), self.winfo_height()]))
-
-    def destruct(self):
-        self.destroy()
-
-    def repack(self):
-        self.c.pack_forget()
-        for b in self.buttons.itervalues():
-            b.pack_forget()
-            b.pack(expand=False, fill=tk.X, side=tk.TOP)
-        self.c.focus_force()
-        self.c.pack(expand=True, fill=tk.BOTH)
-        self.update()
-
-    def window_resize_handler(self, event):
-        Widget.controller.addInput(Event("size_changed", self.inport, [event.width, event.height]))
-
-    def on_click(self, event):
-        event_name = None
-
-        if event.num == 1:
-            event_name = "left-click"
-        elif event.num == 2:
-            event_name = "middle-click"
-        elif event.num == 3:
-            event_name = "right-click"
-
-        if event_name == "right-click":
-            self.last_x = event.x
-            self.last_y = event.y
-            Widget.controller.addInput(Event("create_ball", self.inport, [self.last_x, self.last_y]))
-
-    def handle_output_events(self):
-        while True:
-            output_event = self.listener.fetch(0)
-            if not output_event is None:
-                if output_event.getName() == "create_new_button":
-                    self.on_create_new_button(output_event)
-                elif output_event.getName() == "delete_ball":
-                    self.on_delete_ball(output_event)
-                elif output_event.getName() == "create_new_ball":
-                    self.on_create_new_ball(output_event)
-                elif output_event.getName() == "resize_window":
-                    self.on_resize_window(output_event)
-            else:
-                break
-        for b in self.buttons.itervalues():
-            b.handle_output_events()
-        for b in self.balls.itervalues():
-            b.handle_output_events()
-
-        self.after(40, self.handle_output_events)
-
-    def on_create_new_button(self, event):
-        assoc_name = event.getParameters()[0]
-        sccd_object = event.getParameters()[1]
-        self.buttons[assoc_name] = ButtonVis(sccd_object, self)
-        self.repack()
-
-    def on_delete_ball(self, event):
-        self.balls[event.getParameters()[0]].destruct()
-        del self.balls[event.getParameters()[0]]
-
-    def on_create_new_ball(self, event):
-        assoc_name = event.getParameters()[0]
-        sccd_object = event.getParameters()[1]
-        self.balls[assoc_name] = BallVis(sccd_object, self.c)
-
-    def on_resize_window(self, event):
-        #self.geometry("%sx%s" % tuple(event.getParameters()))
-        pass
-
-class ButtonVis(tk.Button, Widget):
-    def __init__(self, sccd_object, window):
-        tk.Button.__init__(self, window)
-        self.sccd_object = sccd_object
-        self.inport = self.sccd_object.inports["button_ui_in"]
-        self.outport = self.sccd_object.outports["button_ui_out"]
-        Widget.__init__(self, False, self.inport, self.outport)
-
-        self.listener = self.sccd_object.controller.addOutputListener(self.outport)
-
-        Widget.controller.addInput(Event("ui_initialized", self.inport))
-
-    def on_click(self, event):
-        event_name = None
-
-        if event.num == 1:
-            event_name = "left-click"
-        elif event.num == 2:
-            event_name = "middle-click"
-        elif event.num == 3:
-            event_name = "right-click"
-
-        if event_name == "left-click":
-            Widget.controller.addInput(Event("clicked", self.inport))
-
-    def handle_output_events(self):
-        while True:
-            output_event = self.listener.fetch(0)
-            if not output_event is None:
-                if output_event.getName() == "set_text":
-                    self.on_set_text(output_event)
-            else:
-                break
-
-    def on_set_text(self, event):
-        self.config(text=event.getParameters()[0])
-
-    def mymethod(self):
-        pass
-
-class BallVis(Widget):
-    def __init__(self, sccd_object, canvas):
-        self.sccd_object = sccd_object
-        self.inport = self.sccd_object.inports["ball_ui_in"]
-        self.outport = self.sccd_object.outports["ball_ui_out"]
-        Widget.__init__(self, True, self.inport, self.outport)
-        self.canvas = canvas
-
-        self.listener = self.sccd_object.controller.addOutputListener(self.outport)
-
-        Widget.controller.addInput(Event("ui_initialized", self.inport))
-
-    def destruct(self):
-        self.canvas.delete(self.id)
-
-    def on_click(self, event):
-        event_name = None
-
-        if event.num == 1:
-            event_name = "left-click"
-        elif event.num == 2:
-            event_name = "middle-click"
-        elif event.num == 3:
-            event_name = "right-click"
-
-        if event_name == "left-click":
-            self.last_x = event.x
-            self.last_y = event.y
-            Widget.controller.addInput(Event("select_ball", self.inport))
-
-    def on_release(self, event):
-        event_name = None
-
-        if event.num == 1:
-            event_name = "left-release"
-        elif event.num == 2:
-            event_name = "middle-release"
-        elif event.num == 3:
-            event_name = "right-release"
-
-        if event_name == "left-release":
-            self.last_x = event.x
-            self.last_y = event.y
-            Widget.controller.addInput(Event("unselect_ball", self.inport))
-
-    def on_motion(self, event):
-        Widget.controller.addInput(Event("motion", self.inport, [self.canvas.canvasx(event.x) - self.canvas.canvasx(self.last_x), self.canvas.canvasy(event.y) - self.canvas.canvasy(self.last_y)]))
-        self.last_x = event.x
-        self.last_y = event.y
-
-    def handle_output_events(self):
-        while True:
-            output_event = self.listener.fetch(0)
-            if not output_event is None:
-                if output_event.getName() == "set_initial_params":
-                    self.on_set_initial_params(output_event)
-                if output_event.getName() == "change_position":
-                    self.on_change_position(output_event)
-                if output_event.getName() == "change_color":
-                    self.on_change_color(output_event)
-            else:
-                break
-
-    def on_set_initial_params(self, event):
-        self.x, self.y, self.r = event.getParameters()
-        self.id = self.canvas.create_oval(self.x, self.y, self.x + (self.r * 2), self.y + (self.r * 2), fill="black")
-        self.set_bindable_and_tagorid(self.canvas, self.id)
-
-    def on_change_position(self, event):
-        self.x, self.y = event.getParameters()
-        self.canvas.coords(self.id, self.x, self.y, self.x + (self.r * 2), self.y + (self.r * 2))
-
-    def on_change_color(self, event):
-        self.canvas.itemconfig(self.id, fill=event.getParameters()[0])

+ 0 - 122
legacy/examples/bouncingballs/python/widget.py

@@ -1,122 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''
-import Tkinter as tk
-from sccd.runtime.statecharts_core import Event
-
-class Widget:
-	controller = None
-
-	def __init__(self, configure_later=False):
-		if not configure_later:
-			self.set_bindable_and_tagorid(None, None)
-
-	def set_bindable_and_tagorid(self, bindable=None, tagorid=None):
-		if bindable is None:
-			bindable = self
-		self.bindable = bindable
-		self.mytagorid = tagorid
-		if isinstance(self, tk.Toplevel):
-			self.protocol("WM_DELETE_WINDOW", self.window_close)
-		if tagorid is not None:
-			if not isinstance(tagorid, list):
-				tagorid = [tagorid]
-			for t in tagorid:
-				self.bindable.tag_bind(t, "<Button>", self.on_click)
-				self.bindable.tag_bind(t, "<ButtonRelease>", self.on_release)
-				self.bindable.tag_bind(t, "<Motion>", self.on_motion)
-				self.bindable.tag_bind(t, "<Enter>", self.on_enter)
-				self.bindable.tag_bind(t, "<Leave>", self.on_leave)
-				self.bindable.tag_bind(t, "<Key>", self.on_key)
-				self.bindable.tag_bind(t, "<KeyRelease>", self.on_key_release)
-		else:
-			self.bindable.bind("<Button>", self.on_click)
-			self.bindable.bind("<ButtonRelease>", self.on_release)
-			self.bindable.bind("<Motion>", self.on_motion)
-			self.bindable.bind("<Enter>", self.on_enter)
-			self.bindable.bind("<Leave>", self.on_leave)
-			self.bindable.bind("<Key>", self.on_key)
-			self.bindable.bind("<KeyRelease>", self.on_key_release)
-		self.last_x = 50
-		self.last_y = 50
-		self.selected_type = None
-
-	def on_click(self, event):
-		event_name = None
-
-		if event.num == 1:
-			event_name = "left-click"
-		elif event.num == 2:
-			event_name = "middle-click"
-		elif event.num == 3:
-			event_name = "right-click"
-
-		if event_name:
-			self.last_x = event.x
-			self.last_y = event.y
-			Widget.controller.addInput(Event(event_name, "input", [id(self)]))
-
-	def on_release(self, event):
-		event_name = None
-
-		if event.num == 1:
-			event_name = "left-release"
-		elif event.num == 2:
-			event_name = "middle-release"
-		elif event.num == 3:
-			event_name = "right-release"
-
-		if event_name:
-			self.last_x = event.x
-			self.last_y = event.y
-			Widget.controller.addInput(Event(event_name, "input", [id(self)]))
-
-	def on_motion(self, event):
-		self.last_x = event.x
-		self.last_y = event.y
-		Widget.controller.addInput(Event("motion", "input", [id(self)]))
-
-	def on_enter(self, event):
-		Widget.controller.addInput(Event("enter", "input", [id(self)]))
-
-	def on_leave(self, event):
-		Widget.controller.addInput(Event("leave", "input", [id(self)]))
-
-	def on_key(self, event):
-		event_name = None
-
-		if event.keysym == 'Escape':
-			event_name = "escape"
-		elif event.keysym == 'Return':
-			event_name = "return"
-		elif event.keysym == 'Delete':
-			event_name = "delete"
-		elif event.keysym == 'Shift_L':
-			event_name = "shift"
-		elif event.keysym == 'Control_L':
-			event_name = "control"
-
-		if event_name:
-			Widget.controller.addInput(Event(event_name, "input", [id(self)]))
-
-	def on_key_release(self, event):
-		event_name = None
-
-		if event.keysym == 'Escape':
-			event_name = "escape-release"
-		elif event.keysym == 'Return':
-			event_name = "return-release"
-		elif event.keysym == 'Delete':
-			event_name = "delete-release"
-		elif event.keysym == 'Shift_L':
-			event_name = "shift-release"
-		elif event.keysym == 'Control_L':
-			event_name = "control-release"
-
-		if event_name:
-			Widget.controller.addInput(Event(event_name, "input", [id(self)]))
-
-	def window_close(self):
-		Widget.controller.addInput(Event("window-close", "input", [id(self)]))

+ 0 - 125
legacy/examples/bouncingballs/python/widget_private_ports.py

@@ -1,125 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''
-import Tkinter as tk
-from sccd.runtime.statecharts_core import Event
-
-class Widget:
-	controller = None
-
-	def __init__(self, configure_later=False, inport="input", outport="output"):
-		if not configure_later:
-			self.set_bindable_and_tagorid(None, None)
-		self.inport = inport
-		self.outport = outport
-
-	def set_bindable_and_tagorid(self, bindable=None, tagorid=None):
-		if bindable is None:
-			bindable = self
-		self.bindable = bindable
-		self.mytagorid = tagorid
-		if isinstance(self, tk.Toplevel):
-			self.protocol("WM_DELETE_WINDOW", self.window_close)
-		if tagorid is not None:
-			if not isinstance(tagorid, list):
-				tagorid = [tagorid]
-			for t in tagorid:
-				self.bindable.tag_bind(t, "<Button>", self.on_click)
-				self.bindable.tag_bind(t, "<ButtonRelease>", self.on_release)
-				self.bindable.tag_bind(t, "<Motion>", self.on_motion)
-				self.bindable.tag_bind(t, "<Enter>", self.on_enter)
-				self.bindable.tag_bind(t, "<Leave>", self.on_leave)
-				self.bindable.tag_bind(t, "<Key>", self.on_key)
-				self.bindable.tag_bind(t, "<KeyRelease>", self.on_key_release)
-		else:
-			self.bindable.bind("<Button>", self.on_click)
-			self.bindable.bind("<ButtonRelease>", self.on_release)
-			self.bindable.bind("<Motion>", self.on_motion)
-			self.bindable.bind("<Enter>", self.on_enter)
-			self.bindable.bind("<Leave>", self.on_leave)
-			self.bindable.bind("<Key>", self.on_key)
-			self.bindable.bind("<KeyRelease>", self.on_key_release)
-		self.last_x = 50
-		self.last_y = 50
-		self.selected_type = None
-
-	def on_click(self, event):
-		event_name = None
-
-		if event.num == 1:
-			event_name = "left-click"
-		elif event.num == 2:
-			event_name = "middle-click"
-		elif event.num == 3:
-			event_name = "right-click"
-
-		if event_name:
-			self.last_x = event.x
-			self.last_y = event.y
-			Widget.controller.addInput(Event(event_name, self.inport))
-
-	def on_release(self, event):
-		event_name = None
-
-		if event.num == 1:
-			event_name = "left-release"
-		elif event.num == 2:
-			event_name = "middle-release"
-		elif event.num == 3:
-			event_name = "right-release"
-
-		if event_name:
-			self.last_x = event.x
-			self.last_y = event.y
-			Widget.controller.addInput(Event(event_name, self.inport))
-
-	def on_motion(self, event):
-		self.last_x = event.x
-		self.last_y = event.y
-		Widget.controller.addInput(Event("motion", self.inport))
-
-	def on_enter(self, event):
-		Widget.controller.addInput(Event("enter", self.inport))
-
-	def on_leave(self, event):
-		Widget.controller.addInput(Event("leave", self.inport))
-
-	def on_key(self, event):
-		event_name = None
-
-		if event.keysym == 'Escape':
-			event_name = "escape"
-		elif event.keysym == 'Return':
-			event_name = "return"
-		elif event.keysym == 'Delete':
-			event_name = "delete"
-		elif event.keysym == 'Shift_L':
-			event_name = "shift"
-		elif event.keysym == 'Control_L':
-			event_name = "control"
-
-		if event_name:
-			Widget.controller.addInput(Event(event_name, self.inport))
-
-	def on_key_release(self, event):
-		event_name = None
-
-		if event.keysym == 'Escape':
-			event_name = "escape-release"
-		elif event.keysym == 'Return':
-			event_name = "return-release"
-		elif event.keysym == 'Delete':
-			event_name = "delete-release"
-		elif event.keysym == 'Shift_L':
-			event_name = "shift-release"
-		elif event.keysym == 'Control_L':
-			event_name = "control-release"
-
-		if event_name:
-			Widget.controller.addInput(Event(event_name, self.inport))
-
-	def window_close(self):
-		event = Event("close_window", self.inport)
-		Widget.controller.addInput(event)

+ 0 - 11
legacy/examples/external-input/python/runner.py

@@ -1,11 +0,0 @@
-import test, threading
-from sccd.runtime.statecharts_core import Event
-
-controller = test.Controller(False)
-def raw_inputter():
-    while 1:
-        controller.addInput(Event(raw_input(), "input", []))
-thread = threading.Thread(target=raw_inputter)
-thread.daemon = True
-thread.start()
-controller.start()

+ 0 - 180
legacy/examples/external-input/python/test.py

@@ -1,180 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Tue Aug 09 14:27:20 2016
-
-Model author: Yentl Van Tendeloo
-Model name:   broken
-Model description:
-Broken!
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "broken"
-
-class A(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        A.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /x
-        self.states["/x"] = State(1, self)
-        self.states["/x"].setEnter(self._x_enter)
-        
-        # state /ready
-        self.states["/ready"] = State(2, self)
-        self.states["/ready"].setEnter(self._ready_enter)
-        self.states["/ready"].setExit(self._ready_exit)
-        
-        # state /done
-        self.states["/done"] = State(3, self)
-        
-        # add children
-        self.states[""].addChild(self.states["/x"])
-        self.states[""].addChild(self.states["/ready"])
-        self.states[""].addChild(self.states["/done"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/x"]
-        
-        # transition /x
-        _x_0 = Transition(self, self.states["/x"], [self.states["/ready"]])
-        _x_0.setAction(self._x_0_exec)
-        _x_0.setTrigger(Event("instance_created", None))
-        self.states["/x"].addTransition(_x_0)
-        
-        # transition /ready
-        _ready_0 = Transition(self, self.states["/ready"], [self.states["/ready"]])
-        _ready_0.setAction(self._ready_0_exec)
-        _ready_0.setTrigger(Event("_0after"))
-        self.states["/ready"].addTransition(_ready_0)
-        _ready_1 = Transition(self, self.states["/ready"], [self.states["/done"]])
-        _ready_1.setAction(self._ready_1_exec)
-        _ready_1.setTrigger(Event("close", None))
-        self.states["/ready"].addTransition(_ready_1)
-    
-    def _x_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'child', 'B']))
-    
-    def _ready_enter(self):
-        self.addTimer(0, 0.001)
-    
-    def _ready_exit(self):
-        self.removeTimer(0)
-    
-    def _x_0_exec(self, parameters):
-        instancename = parameters[0]
-        self.instancename = instancename
-        self.big_step.outputEventOM(Event("start_instance", None, [self, self.instancename]))
-    
-    def _ready_0_exec(self, parameters):
-        for _ in range(100000):
-            pass
-    
-    def _ready_1_exec(self, parameters):
-        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.instancename]))
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/x"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class B(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        B.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /z
-        self.states["/z"] = State(1, self)
-        
-        # add children
-        self.states[""].addChild(self.states["/z"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/z"]
-        
-        # transition /z
-        _z_0 = Transition(self, self.states["/z"], [self.states["/z"]])
-        _z_0.setAction(self._z_0_exec)
-        _z_0.setTrigger(Event("stop", "input"))
-        self.states["/z"].addTransition(_z_0)
-    
-    def _z_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("narrow_cast", None, [self, 'parent[0]', Event("close", None, [])]))
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/z"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "A":
-            instance = A(self.controller)
-            instance.associations = {}
-            instance.associations["child"] = Association("B", 0, 1)
-        elif class_name == "B":
-            instance = B(self.controller)
-            instance.associations = {}
-            instance.associations["parent"] = Association("A", 1, 1)
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.addInputPort("input")
-        self.object_manager.createInstance("A", [])

+ 0 - 64
legacy/examples/external-input/python/test.xml

@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram author="Yentl Van Tendeloo+Simon Van Mierlo" name="broken">
-    <description>
-        Broken!
-    </description>
-    
-    <inport name="input" />
-
-    <class name="A" default="true">
-        <relationships>
-            <association name="child" class="B" min="0" max="1"/>
-        </relationships>
-
-        <scxml initial="x">
-            <state id="x">
-                <onentry>
-                    <raise scope="cd" event="create_instance">
-                        <parameter expr="'child'"/>
-                        <parameter expr="'B'"/>
-                    </raise>
-                </onentry>
-
-                <transition event="instance_created" target="../ready">
-                    <parameter name="instancename"/>
-                    <script>
-                        self.instancename = instancename
-                    </script>
-                    <raise scope="cd" event="start_instance">
-                        <parameter expr="self.instancename"/>
-                    </raise>
-                </transition>
-            </state>
-            <state id="ready">
-                <transition after="0.001" target=".">
-                    <script>
-                        for _ in range(100000):
-                            pass
-                    </script>
-                </transition>
-                <transition event="close" target="../done">
-                    <raise scope="cd" event="delete_instance">
-                        <parameter expr="self.instancename"/>
-                    </raise>
-                </transition>
-            </state>
-            <state id="done"/>
-        </scxml>
-    </class>
-
-    <class name="B">
-        <relationships>
-            <association name="parent" class="A" min="1" max="1"/>
-        </relationships>
-
-        <scxml initial="z">
-            <state id="z">
-                <transition event="stop" port="input" target=".">
-                    <raise event="close" target="'parent[0]'" />
-                </transition>
-            </state>
-        </scxml>
-    </class>
-
-</diagram>

+ 0 - 15
legacy/examples/my-tests/python/Parallel_Bug/runner.py

@@ -1,15 +0,0 @@
-import sys
-sys.path.append("../")
-
-import tester
-import threading
-from sccd.runtime.statecharts_core import Event
-import time
-
-controller = tester.Controller(keep_running=False)
-
-try:
-    controller.start()
-except KeyboardInterrupt:
-    pass
-

+ 0 - 110
legacy/examples/my-tests/python/Parallel_Bug/tester.py

@@ -1,110 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Fri Sep 08 11:03:01 2017
-
-Model author: Yentl Van Tendeloo
-Model name:   Testing
-Model description:
-Testing
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "Testing"
-
-class Testing(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Testing.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /A
-        self.states["/A"] = ParallelState(1, "/A", self)
-        
-        # state /A/B
-        self.states["/A/B"] = State(2, "/A/B", self)
-        self.states["/A/B"].setExit(self._A_B_exit)
-        
-        # state /A/B/1
-        self.states["/A/B/1"] = State(3, "/A/B/1", self)
-        self.states["/A/B/1"].setEnter(self._A_B_1_enter)
-        
-        # state /A/D
-        self.states["/A/D"] = State(4, "/A/D", self)
-        
-        # state /A/D/a
-        self.states["/A/D/a"] = State(5, "/A/D/a", self)
-        
-        # state /A/D/b
-        self.states["/A/D/b"] = State(6, "/A/D/b", self)
-        
-        # add children
-        self.states[""].addChild(self.states["/A"])
-        self.states["/A"].addChild(self.states["/A/B"])
-        self.states["/A"].addChild(self.states["/A/D"])
-        self.states["/A/B"].addChild(self.states["/A/B/1"])
-        self.states["/A/D"].addChild(self.states["/A/D/a"])
-        self.states["/A/D"].addChild(self.states["/A/D/b"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/A"]
-        self.states["/A/B"].default_state = self.states["/A/B/1"]
-        self.states["/A/D"].default_state = self.states["/A/D/a"]
-        
-        # transition /A/D
-        _A_D_0 = Transition(self, self.states["/A/D"], [self.states["/A/D/a"]])
-        _A_D_0.setTrigger(Event("Z", None))
-        self.states["/A/D"].addTransition(_A_D_0)
-    
-    def _A_B_exit(self):
-        raise Exception("Should never leave!")
-    
-    def _A_B_1_enter(self):
-        self.raiseInternalEvent(Event("Z", None, []))
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/A"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "Testing":
-            instance = Testing(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.object_manager.createInstance("Testing", [])

+ 0 - 33
legacy/examples/my-tests/python/Parallel_Bug/tester.xml

@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram author="Yentl Van Tendeloo" name="Testing">
-    <description>
-        Testing
-    </description>
-
-    <class name="Testing" default="true">
-        <scxml initial="A">
-            <parallel id="A">
-                <state id="B" initial="1">
-                    <onexit>
-                        <script>
-                            raise Exception("Should never leave!")
-                        </script>
-                    </onexit>
-
-                    <state id="1">
-                        <onentry>
-                            <raise event="Z"/>
-                        </onentry>
-                    </state>
-                </state>
-
-                <state id="D" initial="a">
-                    <state id="a"/>
-                    <state id="b"/>
-                    <transition event="Z" target="a"/>
-                </state>
-            </parallel>
-        </scxml>
-    </class>
-</diagram>
-

+ 0 - 14
legacy/examples/my-tests/python/SCCD_broadcast/runner.py

@@ -1,14 +0,0 @@
-import sys
-sys.path.append("../")
-
-import tester
-import threading
-from sccd.runtime.statecharts_core import Event
-import time
-
-controller = tester.Controller(keep_running=False)
-
-try:
-    controller.start()
-except KeyboardInterrupt:
-    pass

+ 0 - 107
legacy/examples/my-tests/python/SCCD_broadcast/tester.py

@@ -1,107 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Thu Sep 07 09:33:21 2017
-
-Model author: Yentl Van Tendeloo
-Model name:   Testing
-Model description:
-Testing
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "Testing"
-
-class Testing(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Testing.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /A
-        self.states["/A"] = ParallelState(1, "/A", self)
-        
-        # state /A/B
-        self.states["/A/B"] = State(2, "/A/B", self)
-        
-        # state /A/B/C
-        self.states["/A/B/C"] = State(3, "/A/B/C", self)
-        self.states["/A/B/C"].setEnter(self._A_B_C_enter)
-        
-        # state /A/D
-        self.states["/A/D"] = State(4, "/A/D", self)
-        
-        # state /A/D/E
-        self.states["/A/D/E"] = State(5, "/A/D/E", self)
-        
-        # add children
-        self.states[""].addChild(self.states["/A"])
-        self.states["/A"].addChild(self.states["/A/B"])
-        self.states["/A"].addChild(self.states["/A/D"])
-        self.states["/A/B"].addChild(self.states["/A/B/C"])
-        self.states["/A/D"].addChild(self.states["/A/D/E"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/A"]
-        self.states["/A/B"].default_state = self.states["/A/B/C"]
-        self.states["/A/D"].default_state = self.states["/A/D/E"]
-        
-        # transition /A/D/E
-        _A_D_E_0 = Transition(self, self.states["/A/D/E"], [self.states["/A/D/E"]])
-        _A_D_E_0.setAction(self._A_D_E_0_exec)
-        _A_D_E_0.setTrigger(Event("Z", None))
-        self.states["/A/D/E"].addTransition(_A_D_E_0)
-    
-    def _A_B_C_enter(self):
-        self.raiseInternalEvent(Event("Z", None, []))
-    
-    def _A_D_E_0_exec(self, parameters):
-        self.big_step.outputEventOM(Event("broad_cast", None, [self, Event("Z", None, [])]))
-        print("Transition fired!")
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/A"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "Testing":
-            instance = Testing(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.object_manager.createInstance("Testing", [])

+ 0 - 31
legacy/examples/my-tests/python/SCCD_broadcast/tester.xml

@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram author="Yentl Van Tendeloo" name="Testing">
-    <description>
-        Testing
-    </description>
-
-    <class name="Testing" default="true">
-        <scxml initial="A">
-            <parallel id="A">
-                <state id="B">
-                    <state id="C">
-                        <onentry>
-                            <raise event="Z"/>
-                        </onentry>
-                    </state>
-                </state>
-
-                <state id="D">
-                    <state id="E">
-                        <transition event="Z" target=".">
-                            <raise event="Z" scope="broad"/>
-                            <script>
-                                print("Transition fired!")
-                            </script>
-                        </transition>
-                    </state>
-                </state>
-            </parallel>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 35
legacy/examples/my-tests/python/Yentil/runner.py

@@ -1,35 +0,0 @@
-import sys
-sys.path.append("../")
-
-import tester
-import Tkinter as tk
-import threading
-import time
-from sccd.runtime.tkinter_eventloop import *
-from sccd.runtime.statecharts_core import Event
-
-from sccd_widget import SCCDWidget
-
-class Root(tk.Tk, SCCDWidget):
-    def __init__(self):
-        tk.Tk.__init__(self)
-        SCCDWidget.__init__(self)
-
-def send_input(controller):
-    while 1:
-        controller.addInput(Event("evt", "input", []))
-        time.sleep(0.01)
-
-if __name__ == '__main__':
-    root = Root()
-    controller = tester.Controller(TkEventLoop(root))
-    SCCDWidget.controller = controller
-    controller.start()
-
-    for _ in range(50):
-        thrd = threading.Thread(target=send_input, args=[controller])
-        thrd.daemon = True
-        thrd.start()
-
-    root.mainloop()
-

+ 0 - 336
legacy/examples/my-tests/python/Yentil/sccd_widget.py

@@ -1,336 +0,0 @@
-'''
-Created on 31-jul.-2014
-
-@author: Simon
-'''
-
-from PIL import Image, ImageTk
-
-import Tkinter as tk
-import atexit
-from sccd.runtime.statecharts_core import Event
-
-class SCCDWidget:
-    controller = None
-
-    def __init__(self, configure_later=False):
-        if not configure_later:
-            self.set_bindable_and_tagorid(None, None)
-
-    def set_bindable_and_tagorid(self, bindable=None, tagorid=None):
-        if bindable is None:
-            bindable = self
-        self.bindable = bindable
-        self.mytagorid = tagorid
-        if isinstance(self, tk.Toplevel):
-            self.protocol("WM_DELETE_WINDOW", self.window_close)
-        if tagorid is not None:
-            if not isinstance(tagorid, list):
-                tagorid = [tagorid]
-            for t in tagorid:
-                self.bindable.tag_bind(t, "<Button>", self.on_click)
-                self.bindable.tag_bind(t, "<Double-Button>", self.on_dbclick)
-                self.bindable.tag_bind(t, "<ButtonRelease>", self.on_release)
-                self.bindable.tag_bind(t, "<Motion>", self.on_motion)
-                self.bindable.tag_bind(t, "<Enter>", self.on_enter)
-                self.bindable.tag_bind(t, "<Leave>", self.on_leave)
-                self.bindable.tag_bind(t, "<Key>", self.on_key)
-                self.bindable.tag_bind(t, "<KeyRelease>", self.on_key_release)
-        else:
-            self.bindable.bind("<Button>", self.on_click)
-            self.bindable.bind("<ButtonRelease>", self.on_release)
-            self.bindable.bind("<Motion>", self.on_motion)
-            self.bindable.bind("<Enter>", self.on_enter)
-            self.bindable.bind("<Leave>", self.on_leave)
-            self.bindable.bind("<Key>", self.on_key)
-            self.bindable.bind("<KeyRelease>", self.on_key_release)
-            self.bindable.bind("<Shift-Up>",self.zoom_in)
-            self.bindable.bind("<Shift-Down>", self.zoom_out)
-            self.bindable.bind("<MouseWheel>", self.scroller)
-
-        self.last_x = 50
-        self.last_y = 50
-        self.event_delta = 0
-        self.zoomer_count = 0
-        self.selected_type = None
-
-    def scroller(self, event):
-        self.event_delta = event.delta
-        event_name= "scroll_mousewheel"
-        self.last_x = event.x
-        self.last_y = event.y
-        SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)]))
-        return "break"
-
-    def zoom_in(self, event):
-        event_name = "zoomer_event"
-        self.last_x = event.x
-        self.last_y = event.y
-        if self.zoomer_count <=6:
-            self.event_delta = 120
-            self.zoomer_count +=1
-        SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)]))
-        return "break"
-
-    def zoom_out(self, event):
-        event_name = "zoomer_event"
-        self.last_x = event.x
-        self.last_y = event.y
-        if self.zoomer_count >=-6:
-            self.event_delta = -120
-            self.zoomer_count -=1
-        SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)]))
-        return "break"
-
-    def on_dbclick(self, event):
-        event_name = None
-
-        if event.num == 1:
-            event_name = "left-dbclick"
-        elif event.num == 2:
-            event_name = "middle-dbclick"
-        elif event.num == 3:
-            event_name = "right-dbclick"
-
-        if event_name:
-            self.last_x = event.x
-            self.last_y = event.y
-            SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)]))
-        return "break"
-
-    def on_click(self, event):
-        event_name = None
-        if event.num == 1:
-            event_name = "left-click"
-        elif event.num == 2:
-            event_name = "middle-click"
-        elif event.num == 3:
-            event_name = "right-click"
-
-        if event_name:
-            self.last_x = event.x
-            self.last_y = event.y
-            SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)]))
-        return "break"
-
-    def on_release(self, event):
-        event_name = None
-
-        if event.num == 1:
-            event_name = "left-release"
-        elif event.num == 2:
-            event_name = "middle-release"
-        elif event.num == 3:
-            event_name = "right-release"
-
-        if event_name:
-            self.last_x = event.x
-            self.last_y = event.y
-            SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)]))
-        return "break"
-
-    def on_motion(self, event):
-        self.last_x = event.x
-        self.last_y = event.y
-        SCCDWidget.controller.addInput(Event("motion", "input", [id(self)]))
-        return "break"
-
-    def on_enter(self, event):
-        SCCDWidget.controller.addInput(Event("enter", "input", [id(self)]))
-        return "break"
-
-    def on_leave(self, event):
-        SCCDWidget.controller.addInput(Event("leave", "input", [id(self)]))
-        return "break"
-
-    def on_key(self, event):
-        event_name = None
-
-        if event.keysym == 'Escape':
-            event_name = "escape"
-        elif event.keysym == 'Return':
-            event_name = "return"
-        elif event.keysym == 'Delete':
-            event_name = "delete"
-        elif event.keysym == 'Shift_L':
-            event_name = "shift"
-        elif event.keysym == 'Control_L':
-            event_name = "control"
-        elif event.keysym == 'Left':
-            event_name = "left_key"
-        elif event.keysym == 'Right':
-            event_name = "right_key"
-        elif event.keysym == 'Up':
-            event_name = "up_key"
-        elif event.keysym == 'Down':
-            event_name = "down_key"
-
-        if event_name:
-            SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)]))
-        return "break"
-
-    def on_key_release(self, event):
-        event_name = None
-
-        if event.keysym == 'Escape':
-            event_name = "escape-release"
-        elif event.keysym == 'Return':
-            event_name = "return-release"
-        elif event.keysym == 'Delete':
-            event_name = "delete-release"
-        elif event.keysym == 'Shift_L':
-            event_name = "shift-release"
-        elif event.keysym == 'Control_L':
-            event_name = "control-release"
-
-        if event_name:
-            SCCDWidget.controller.addInput(Event(event_name, "input", [id(self)]))
-        return "break"
-
-    def window_close(self):
-        SCCDWidget.controller.addInput(Event("window-close", "input", [id(self)]))
-
-class HorizontalScrolledFrame(tk.Frame):
-    def __init__(self, parent, *args, **kw):
-        tk.Frame.__init__(self, parent, *args, **kw)
-
-        # create a canvas object and a horizontal scrollbar for scrolling it
-        hscrollbar = tk.Scrollbar(self, orient=tk.HORIZONTAL)
-        hscrollbar.pack(fill=tk.X, side=tk.BOTTOM, expand=tk.FALSE)
-        self.canvas = tk.Canvas(self, bd=0, highlightthickness=0,
-                                xscrollcommand=hscrollbar.set, height=78)
-        self.canvas.pack(side=tk.LEFT, fill=tk.X, expand=tk.TRUE)
-
-        hscrollbar.config(command=self.canvas.xview)
-
-        # reset the view
-        self.canvas.xview_moveto(0)
-        self.canvas.yview_moveto(0)
-
-        # create a frame inside the canvas which will be scrolled with it
-        self.interior = interior = tk.Frame(self.canvas)
-        self.canvas.create_window(0, 0, window=interior, anchor=tk.NW)
-
-        # track changes to the canvas and frame width and sync them,
-        # also updating the scrollbar
-        def _configure_interior(event):
-            # update the scrollbars to match the size of the inner frame
-            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
-            self.canvas.config(scrollregion="0 0 %s %s" % size)
-
-        interior.bind('<Configure>', _configure_interior)
-
-class VerticalScrolledFrame(tk.Frame):
-    def __init__(self, parent, *args, **kw):
-        tk.Frame.__init__(self, parent, *args, **kw)
-
-        vscrollbar = tk.Scrollbar(self, orient=tk.VERTICAL)
-        vscrollbar.pack(fill=tk.Y, side=tk.RIGHT, expand=tk.FALSE)
-        canvas = tk.Canvas(self, bd=0, highlightthickness=0,
-                           yscrollcommand=vscrollbar.set, width=100)
-        canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=tk.TRUE)
-        vscrollbar.config(command=canvas.yview)
-
-        canvas.xview_moveto(0)
-        canvas.yview_moveto(0)
-
-        self.interior = interior = tk.Frame(canvas)
-        interior_id = canvas.create_window(0, 0, window=interior,
-                                           anchor=tk.NW)
-
-        def _configure_interior(event):
-            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
-            canvas.config(scrollregion="0 0 %s %s" % size)
-            if interior.winfo_reqwidth() != canvas.winfo_width():
-                canvas.config(width=interior.winfo_reqwidth())
-
-        interior.bind('<Configure>', _configure_interior)
-
-        def _configure_canvas(event):
-            if interior.winfo_reqwidth() != canvas.winfo_width():
-                canvas.itemconfigure(interior_id, width=canvas.winfo_width())
-
-        canvas.bind('<Configure>', _configure_canvas)
-
-        return
-
-class VerticallyScrolledWindow(tk.Frame):
-    def __init__(self, root):
-
-        tk.Frame.__init__(self, root)
-        defaultbg = root.cget('bg')
-        self.canvas = tk.Canvas(root, borderwidth=0, background=defaultbg)
-        self.frame = tk.Frame(self.canvas, background=defaultbg)
-        self.vsb = tk.Scrollbar(root, orient="vertical", command=self.canvas.yview)
-        self.canvas.configure(yscrollcommand=self.vsb.set)
-
-        self.vsb.pack(side="right", fill="y")
-        self.canvas.pack(side="left", fill="both", expand=True)
-        self.canvas.create_window((4,4), window=self.frame, anchor="nw",
-                                  tags="self.frame")
-
-        self.frame.bind("<Configure>", self.onFrameConfigure)
-        self.frame.bind_all("<MouseWheel>", self.scroll)
-
-    def scroll(self, event):
-        self.canvas.yview_scroll(-1 * (event.delta / 120), "units")
-
-    def onFrameConfigure(self, event):
-        '''Reset the scroll region to encompass the inner frame'''
-        self.canvas.configure(scrollregion=self.canvas.bbox("all"))
-
-class Visual(object):
-    def get_params(self):
-        raise NotImplementedError()
-
-class TextVisual(Visual):
-    def __init__(self, text):
-        super(TextVisual, self).__init__()
-        self.text = text
-
-    def get_params(self):
-        return {'text': self.text}
-
-class ImageVisual(Visual):
-    def __init__(self, img_loc):
-        super(ImageVisual, self).__init__()
-        self.img = ImageTk.PhotoImage(Image.open(img_loc).resize((32, 32), Image.ANTIALIAS))
-
-    def get_params(self):
-        return {'image': self.img}
-
-class ToolTip:
-    def __init__(self, widget, text):
-        self.widget = widget
-        self.tipwindow = None
-        self.id = None
-        self.x = self.y = 0
-        self.text = text
-
-    def showtip(self):
-        "Display text in tooltip window"
-        if self.tipwindow or not self.text:
-            return
-        x, y, cx, cy = self.widget.bbox("insert")
-        x = x + cx + self.widget.winfo_rootx() + 27
-        y = y + cy + self.widget.winfo_rooty() - 20
-        self.tipwindow = tw = tk.Toplevel(self.widget)
-        tw.wm_overrideredirect(1)
-        tw.wm_geometry("+%d+%d" % (x, y))
-        try:
-            # For Mac OS
-            tw.tk.call("::tk::unsupported::MacWindowStyle",
-                       "style", tw._w,
-                       "help", "noActivates")
-        except tk.TclError:
-            pass
-        label = tk.Label(tw, text=self.text, justify=tk.LEFT,
-                         background="#ffffe0", relief=tk.SOLID, borderwidth=1,
-                         font=("tahoma", "8", "normal"))
-        label.pack(ipadx=1)
-
-    def hidetip(self):
-        tw = self.tipwindow
-        self.tipwindow = None
-        if tw:
-            tw.destroy()

+ 0 - 94
legacy/examples/my-tests/python/Yentil/tester.py

@@ -1,94 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Fri Oct 06 16:24:33 2017
-
-Model author: Yentl Van Tendeloo
-Model name:   Testing
-Model description:
-Testing
-"""
-
-from sccd.runtime.statecharts_core import *
-import time
-
-# package "Testing"
-
-class Testing(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Testing.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /A
-        self.states["/A"] = State(1, "/A", self)
-        self.states["/A"].setEnter(self._A_enter)
-        self.states["/A"].setExit(self._A_exit)
-        
-        # add children
-        self.states[""].addChild(self.states["/A"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/A"]
-        
-        # transition /A
-        _A_0 = Transition(self, self.states["/A"], [self.states["/A"]])
-        _A_0.setAction(self._A_0_exec)
-        _A_0.setTrigger(Event("_0after"))
-        self.states["/A"].addTransition(_A_0)
-    
-    def _A_enter(self):
-        self.addTimer(0, 0.01)
-    
-    def _A_exit(self):
-        self.removeTimer(0)
-    
-    def _A_0_exec(self, parameters):
-        print(time.time())
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/A"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "Testing":
-            instance = Testing(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(EventLoopControllerBase):
-    def __init__(self, event_loop_callbacks, finished_callback = None, behind_schedule_callback = None):
-        if finished_callback == None: finished_callback = None
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        EventLoopControllerBase.__init__(self, ObjectManager(self), event_loop_callbacks, finished_callback, behind_schedule_callback)
-        self.addInputPort("input")
-        self.object_manager.createInstance("Testing", [])

+ 0 - 25
legacy/examples/my-tests/python/Yentil/tester.xml

@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram author="Yentl Van Tendeloo" name="Testing">
-    <description>
-        Testing
-    </description>
-
-    <top>
-        import time
-    </top>
-
-    <inport name="input"/>
-
-    <class name="Testing" default="true">
-        <scxml initial="A">
-            <state id="A">
-                <transition after="0.01" target=".">
-                    <script>
-                        print(time.time())
-                    </script>
-                </transition>
-            </state>
-        </scxml>
-    </class>
-</diagram>
-

+ 0 - 139
legacy/examples/my-tests/python/bugwithsourcechild.py

@@ -1,139 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Wed Oct 04 16:05:54 2017
-
-Model name:   sourcechildbug
-
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "sourcechildbug"
-
-class A(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceChild
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        A.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        self.a = 5
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /running
-        self.states["/running"] = State(1, "/running", self)
-        
-        # state /running/child1
-        self.states["/running/child1"] = State(2, "/running/child1", self)
-        
-        # state /running/child2
-        self.states["/running/child2"] = State(3, "/running/child2", self)
-        
-        # state /running/child3
-        self.states["/running/child3"] = State(4, "/running/child3", self)
-        
-        # add children
-        self.states[""].addChild(self.states["/running"])
-        self.states["/running"].addChild(self.states["/running/child1"])
-        self.states["/running"].addChild(self.states["/running/child2"])
-        self.states["/running"].addChild(self.states["/running/child3"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/running"]
-        self.states["/running"].default_state = self.states["/running/child1"]
-        
-        # transition /running/child1
-        _running_child1_0 = Transition(self, self.states["/running/child1"], [self.states["/running/child2"]])
-        _running_child1_0.setAction(self._running_child1_0_exec)
-        _running_child1_0.setTrigger(None)
-        _running_child1_0.setGuard(self._running_child1_0_guard)
-        self.states["/running/child1"].addTransition(_running_child1_0)
-        _running_child1_1 = Transition(self, self.states["/running/child1"], [self.states["/running/child2"]])
-        _running_child1_1.setAction(self._running_child1_1_exec)
-        _running_child1_1.setTrigger(None)
-        _running_child1_1.setGuard(self._running_child1_1_guard)
-        self.states["/running/child1"].addTransition(_running_child1_1)
-        _running_child1_2 = Transition(self, self.states["/running/child1"], [self.states["/running/child2"]])
-        _running_child1_2.setAction(self._running_child1_2_exec)
-        _running_child1_2.setTrigger(None)
-        _running_child1_2.setGuard(self._running_child1_2_guard)
-        self.states["/running/child1"].addTransition(_running_child1_2)
-        
-        # transition /running
-        _running_0 = Transition(self, self.states["/running"], [self.states["/running/child3"]])
-        _running_0.setAction(self._running_0_exec)
-        _running_0.setTrigger(None)
-        _running_0.setGuard(self._running_0_guard)
-        self.states["/running"].addTransition(_running_0)
-    
-    def _running_0_exec(self, parameters):
-        print('taking outer transition')
-        self.a = -1
-    
-    def _running_0_guard(self, parameters):
-        return self.a == 5
-    
-    def _running_child1_0_exec(self, parameters):
-        print('taking second inner transition')
-        self.a = -1
-    
-    def _running_child1_0_guard(self, parameters):
-        return self.a == 5
-    
-    def _running_child1_1_exec(self, parameters):
-        print('taking third inner transition')
-        self.a = -1
-    
-    def _running_child1_1_guard(self, parameters):
-        return self.a == 3
-    
-    def _running_child1_2_exec(self, parameters):
-        print('taking fourth inner transition')
-        self.a = -1
-    
-    def _running_child1_2_guard(self, parameters):
-        return self.a == 1
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/running"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "A":
-            instance = A(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.addInputPort("input")
-        self.object_manager.createInstance("A", [])

+ 0 - 44
legacy/examples/my-tests/python/bugwithsourcechild.xml

@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram name="sourcechildbug">
-    <inport name="input" />
-    <class name="A" default="true">
-        <constructor>
-            <body>
-                self.a = 5
-            </body>
-        </constructor>
-        <scxml initial="running" priority="source_child">
-            <state id="running" initial="child1">
-                <transition target="child3" cond="self.a == 5">
-                    <script>
-                        print('taking outer transition')
-                        self.a = -1
-                    </script>
-                </transition>
-                <state id="child1">  
-                    <transition target="../child2" cond="self.a == 5">
-                        <script>
-                            print('taking second inner transition')
-                            self.a = -1
-                        </script>
-                    </transition>
-                    <transition target="../child2" cond="self.a == 3">
-                        <script>
-                            print('taking third inner transition')
-                            self.a = -1
-                        </script>
-                    </transition>
-                    <transition target="../child2" cond="self.a == 1">
-                        <script>
-                            print('taking fourth inner transition')
-                            self.a = -1
-                        </script>
-                    </transition>
-                </state>
-                <state id="child2">
-                </state>
-                <state id="child3" />
-            </state>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 154
legacy/examples/my-tests/python/create_and_start.py

@@ -1,154 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Model name:   sourcechildbug
-
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "sourcechildbug"
-
-class A(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        A.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /running
-        self.states["/running"] = State(1, "/running", self)
-        self.states["/running"].setEnter(self._running_enter)
-        
-        # state /created
-        self.states["/created"] = State(2, "/created", self)
-        
-        # state /stopped
-        self.states["/stopped"] = State(3, "/stopped", self)
-        
-        # add children
-        self.states[""].addChild(self.states["/running"])
-        self.states[""].addChild(self.states["/created"])
-        self.states[""].addChild(self.states["/stopped"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/running"]
-        
-        # transition /running
-        _running_0 = Transition(self, self.states["/running"], [self.states["/created"]])
-        _running_0.setAction(self._running_0_exec)
-        _running_0.setTrigger(Event("instance_created", None))
-        self.states["/running"].addTransition(_running_0)
-        
-        # transition /created
-        _created_0 = Transition(self, self.states["/created"], [self.states["/stopped"]])
-        _created_0.setAction(self._created_0_exec)
-        _created_0.setTrigger(Event("instance_started", None))
-        self.states["/created"].addTransition(_created_0)
-    
-    def _running_enter(self):
-        self.big_step.outputEventOM(Event("create_and_start_instance", None, [self, 'to_B']))
-    
-    def _running_0_exec(self, parameters):
-        association_name = parameters[0]
-        print 'A got instance_created [%s]' % association_name
-    
-    def _created_0_exec(self, parameters):
-        association_name = parameters[0]
-        print 'A got instance_started [%s]' % association_name
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/running"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class B(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        B.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /running
-        self.states["/running"] = State(1, "/running", self)
-        self.states["/running"].setEnter(self._running_enter)
-        
-        # add children
-        self.states[""].addChild(self.states["/running"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/running"]
-    
-    def _running_enter(self):
-        print 'B instance created!'
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/running"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "A":
-            instance = A(self.controller)
-            instance.associations = {}
-            instance.associations["to_B"] = Association("B", 0, 1)
-        elif class_name == "B":
-            instance = B(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.addInputPort("input")
-        self.object_manager.createInstance("A", [])

+ 0 - 44
legacy/examples/my-tests/python/create_and_start.xml

@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram name="sourcechildbug">
-    <inport name="input" />
-    <class name="A" default="true">
-        <relationships>
-            <association name="to_B" class="B" min="0" max="1" />
-        </relationships>
-        <scxml initial="running">
-            <state id="running">
-                <onentry>
-                    <raise event="create_and_start_instance" scope="cd">                        
-                        <parameter expr="'to_B'"/>
-                    </raise>
-                </onentry>
-                <transition target="../created" event="instance_created">
-                    <parameter name="association_name" />
-                    <script>
-                        print 'A got instance_created [%s]' % association_name
-                    </script>
-                </transition>
-            </state>
-            <state id="created">
-                <transition target="../stopped" event="instance_started">
-                    <parameter name="association_name" />
-                    <script>
-                        print 'A got instance_started [%s]' % association_name
-                    </script>
-                </transition>
-            </state>
-            <state id="stopped" />
-        </scxml>
-    </class>
-    <class name="B">
-        <scxml initial="running">
-            <state id="running">
-                <onentry>
-                    <script>
-                        print 'B instance created!'
-                    </script>
-                </onentry>
-            </state>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 162
legacy/examples/my-tests/python/else_transition.py

@@ -1,162 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Model name:   else_transition_test
-
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "else_transition_test"
-
-class A(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        A.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        self.x = 3
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /main
-        self.states["/main"] = ParallelState(1, "/main", self)
-        
-        # state /main/one
-        self.states["/main/one"] = State(2, "/main/one", self)
-        
-        # state /main/one/A
-        self.states["/main/one/A"] = State(3, "/main/one/A", self)
-        
-        # state /main/one/B
-        self.states["/main/one/B"] = State(4, "/main/one/B", self)
-        self.states["/main/one/B"].setEnter(self._main_one_B_enter)
-        self.states["/main/one/B"].setExit(self._main_one_B_exit)
-        
-        # state /main/one/C
-        self.states["/main/one/C"] = State(5, "/main/one/C", self)
-        self.states["/main/one/C"].setEnter(self._main_one_C_enter)
-        self.states["/main/one/C"].setExit(self._main_one_C_exit)
-        
-        # state /main/one/D
-        self.states["/main/one/D"] = State(6, "/main/one/D", self)
-        self.states["/main/one/D"].setEnter(self._main_one_D_enter)
-        
-        # state /main/two
-        self.states["/main/two"] = State(7, "/main/two", self)
-        
-        # state /main/two/A
-        self.states["/main/two/A"] = State(8, "/main/two/A", self)
-        
-        # state /main/two/B
-        self.states["/main/two/B"] = State(9, "/main/two/B", self)
-        
-        # add children
-        self.states[""].addChild(self.states["/main"])
-        self.states["/main"].addChild(self.states["/main/one"])
-        self.states["/main"].addChild(self.states["/main/two"])
-        self.states["/main/one"].addChild(self.states["/main/one/A"])
-        self.states["/main/one"].addChild(self.states["/main/one/B"])
-        self.states["/main/one"].addChild(self.states["/main/one/C"])
-        self.states["/main/one"].addChild(self.states["/main/one/D"])
-        self.states["/main/two"].addChild(self.states["/main/two/A"])
-        self.states["/main/two"].addChild(self.states["/main/two/B"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/main"]
-        self.states["/main/one"].default_state = self.states["/main/one/A"]
-        self.states["/main/two"].default_state = self.states["/main/two/A"]
-        
-        # transition /main/one/A
-        _main_one_A_0 = Transition(self, self.states["/main/one/A"], [self.states["/main/one/B"]])
-        _main_one_A_0.setTrigger(Event("a", None))
-        _main_one_A_0.setGuard(self._main_one_A_0_guard)
-        self.states["/main/one/A"].addTransition(_main_one_A_0)
-        _main_one_A_1 = Transition(self, self.states["/main/one/A"], [self.states["/main/one/C"]])
-        _main_one_A_1.setTrigger(Event("a", None))
-        _main_one_A_1.setGuard(self._main_one_A_1_guard)
-        self.states["/main/one/A"].addTransition(_main_one_A_1)
-        
-        # transition /main/one/B
-        _main_one_B_0 = Transition(self, self.states["/main/one/B"], [self.states["/main/one/A"]])
-        _main_one_B_0.setTrigger(Event("_0after"))
-        self.states["/main/one/B"].addTransition(_main_one_B_0)
-        
-        # transition /main/one/C
-        _main_one_C_0 = Transition(self, self.states["/main/one/C"], [self.states["/main/one/A"]])
-        _main_one_C_0.setTrigger(Event("_1after"))
-        self.states["/main/one/C"].addTransition(_main_one_C_0)
-        
-        # transition /main/two/A
-        _main_two_A_0 = Transition(self, self.states["/main/two/A"], [self.states["/main/two/B"]])
-        _main_two_A_0.setAction(self._main_two_A_0_exec)
-        _main_two_A_0.setTrigger(None)
-        self.states["/main/two/A"].addTransition(_main_two_A_0)
-    
-    def _main_one_B_enter(self):
-        print "in B"
-        self.addTimer(0, 0.05)
-    
-    def _main_one_B_exit(self):
-        self.removeTimer(0)
-    
-    def _main_one_C_enter(self):
-        print "in C"
-        self.addTimer(1, 0.05)
-    
-    def _main_one_C_exit(self):
-        self.removeTimer(1)
-    
-    def _main_one_D_enter(self):
-        print "in D"
-    
-    def _main_one_A_0_guard(self, parameters):
-        return self.x == 5
-    
-    def _main_one_A_1_guard(self, parameters):
-        return "ELSE_GUARD"
-    
-    def _main_two_A_0_exec(self, parameters):
-        self.raiseInternalEvent(Event("a", None, []))
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/main"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "A":
-            instance = A(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.object_manager.createInstance("A", [])

+ 0 - 51
legacy/examples/my-tests/python/else_transition.xml

@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram name="else_transition_test">
-    <class name="A" default="true">
-        <constructor>
-            <body>
-                self.x = 3
-            </body>
-        </constructor>
-        <scxml initial="main">
-            <parallel id="main">
-                <state id="one" initial="A">
-                    <state id="A">
-                        <transition target="../B" event="a" cond="self.x == 5" />
-                        <transition target="../C" event="a" cond="ELSE" />
-                    </state>
-                    <state id="B">
-                        <onentry>
-                            <script>
-                                print "in B"
-                            </script>
-                        </onentry>
-                        <transition target="../A" after="0.05" />
-                    </state>
-                    <state id="C">
-                        <onentry>
-                            <script>
-                                print "in C"
-                            </script>
-                        </onentry>
-                        <transition target="../A" after="0.05" />
-                    </state>
-                    <state id="D">
-                        <onentry>
-                            <script>
-                                print "in D"
-                            </script>
-                        </onentry>
-                    </state>
-                </state>
-                <state id="two" initial="A">
-                    <state id="A">
-                        <transition target="../B">
-                            <raise event="a" />
-                        </transition>
-                    </state>
-                    <state id="B" />
-                </state>
-            </parallel>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 95
legacy/examples/my-tests/python/eventloop_bug.py

@@ -1,95 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Wed Sep 27 15:08:22 2017
-
-Model name:   multiple-raises-parallel
-
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "multiple-raises-parallel"
-
-class A(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        A.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /listening
-        self.states["/listening"] = State(1, "/listening", self)
-        self.states["/listening"].setEnter(self._listening_enter)
-        self.states["/listening"].setExit(self._listening_exit)
-        
-        # add children
-        self.states[""].addChild(self.states["/listening"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/listening"]
-        
-        # transition /listening
-        _listening_0 = Transition(self, self.states["/listening"], [self.states["/listening"]])
-        _listening_0.setAction(self._listening_0_exec)
-        _listening_0.setTrigger(Event("input", "input"))
-        self.states["/listening"].addTransition(_listening_0)
-        _listening_1 = Transition(self, self.states["/listening"], [self.states["/listening"]])
-        _listening_1.setTrigger(Event("_0after"))
-        self.states["/listening"].addTransition(_listening_1)
-    
-    def _listening_enter(self):
-        self.addTimer(0, 1)
-    
-    def _listening_exit(self):
-        self.removeTimer(0)
-    
-    def _listening_0_exec(self, parameters):
-        value = parameters[0]
-        print(value)
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/listening"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "A":
-            instance = A(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(EventLoopControllerBase):
-    def __init__(self, event_loop_callbacks, finished_callback = None, behind_schedule_callback = None):
-        if finished_callback == None: finished_callback = None
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        EventLoopControllerBase.__init__(self, ObjectManager(self), event_loop_callbacks, finished_callback, behind_schedule_callback)
-        self.addInputPort("input")
-        self.object_manager.createInstance("A", [])

+ 0 - 17
legacy/examples/my-tests/python/eventloop_bug.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram name="multiple-raises-parallel">
-    <inport name="input" />
-    <class name="A" default="true">
-        <scxml initial="listening">
-            <state id="listening">
-                <transition target="." event="input" port="input">
-                    <parameter name="value" />
-                    <script>
-                        print(value)
-                    </script>
-                </transition>
-                <transition target="." after="1" />
-            </state>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 115
legacy/examples/my-tests/python/exit_parallel.py

@@ -1,115 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Wed Aug 10 11:42:10 2016
-
-Model name:   exit-parallel
-
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "exit-parallel"
-
-class A(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        A.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /x
-        self.states["/x"] = ParallelState(1, self)
-        
-        # state /x/x1
-        self.states["/x/x1"] = State(2, self)
-        
-        # state /x/x1/x1
-        self.states["/x/x1/x1"] = State(3, self)
-        
-        # state /x/x2
-        self.states["/x/x2"] = State(4, self)
-        
-        # state /x/x2/x2
-        self.states["/x/x2/x2"] = State(5, self)
-        
-        # state /done
-        self.states["/done"] = State(6, self)
-        self.states["/done"].setEnter(self._done_enter)
-        
-        # add children
-        self.states[""].addChild(self.states["/x"])
-        self.states[""].addChild(self.states["/done"])
-        self.states["/x"].addChild(self.states["/x/x1"])
-        self.states["/x"].addChild(self.states["/x/x2"])
-        self.states["/x/x1"].addChild(self.states["/x/x1/x1"])
-        self.states["/x/x2"].addChild(self.states["/x/x2/x2"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/x"]
-        self.states["/x/x1"].default_state = self.states["/x/x1/x1"]
-        self.states["/x/x2"].default_state = self.states["/x/x2/x2"]
-        
-        # transition /x/x1/x1
-        _x_x1_x1_0 = Transition(self, self.states["/x/x1/x1"], [self.states["/done"]])
-        _x_x1_x1_0.setAction(self._x_x1_x1_0_exec)
-        _x_x1_x1_0.setTrigger(None)
-        _x_x1_x1_0.setGuard(self._x_x1_x1_0_guard)
-        self.states["/x/x1/x1"].addTransition(_x_x1_x1_0)
-        _x_x1_x1_1 = Transition(self, self.states["/x/x1/x1"], [self.states["/done"]])
-        _x_x1_x1_1.setTrigger(Event("E", None))
-        self.states["/x/x1/x1"].addTransition(_x_x1_x1_1)
-    
-    def _done_enter(self):
-        print 'in done'
-    
-    def _x_x1_x1_0_exec(self, parameters):
-        print 'taking transition'
-    
-    def _x_x1_x1_0_guard(self, parameters):
-        return self.a == 5
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/x"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "A":
-            instance = A(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.object_manager.createInstance("A", [])

+ 0 - 32
legacy/examples/my-tests/python/exit_parallel.xml

@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram name="exit-parallel">
-    <class name="A" default="true">
-        <constructor>
-            self.a = 4
-        </constructor>
-        <scxml initial="x">
-            <parallel id="x">
-                <state id="x1">
-                    <state id="x1">
-                        <transition target="../../../done" cond="self.a == 5">
-                            <script>
-                                print 'taking transition'
-                            </script>
-                        </transition>
-                        <transition event="E" target="../../../done" />
-                    </state>
-                </state>
-                <state id="x2">
-                    <state id="x2" />
-                </state>
-            </parallel>
-            <state id="done">
-                <onentry>
-                    <script>
-                        print 'in done'
-                    </script>
-                </onentry>
-            </state>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 117
legacy/examples/my-tests/python/multiple_afters_running_behind.py

@@ -1,117 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Wed Jun 14 14:49:34 2017
-
-Model name:   multiple-afters-running-behind
-
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "multiple-afters-running-behind"
-
-class Main(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        Main.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # user defined method
-    def cond(self):
-        return True
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /x
-        self.states["/x"] = State(1, self)
-        self.states["/x"].setEnter(self._x_enter)
-        self.states["/x"].setExit(self._x_exit)
-        
-        # add children
-        self.states[""].addChild(self.states["/x"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/x"]
-        
-        # transition /x
-        _x_0 = Transition(self, self.states["/x"], [self.states["/x"]])
-        _x_0.setTrigger(Event("_0after"))
-        _x_0.setGuard(self._x_0_guard)
-        self.states["/x"].addTransition(_x_0)
-        _x_1 = Transition(self, self.states["/x"], [self.states["/x"]])
-        _x_1.setTrigger(Event("_1after"))
-        _x_1.setGuard(self._x_1_guard)
-        self.states["/x"].addTransition(_x_1)
-        _x_2 = Transition(self, self.states["/x"], [self.states["/x"]])
-        _x_2.setTrigger(Event("_2after"))
-        _x_2.setGuard(self._x_2_guard)
-        self.states["/x"].addTransition(_x_2)
-    
-    def _x_enter(self):
-        import time
-        print 'time.time() = %s' % time.time()
-        time.sleep(0.1)
-        print self.sccd_yield()
-        self.addTimer(0, self.sccd_yield() + 0.5)
-        self.addTimer(1, self.sccd_yield() + 0.5)
-        self.addTimer(2, self.sccd_yield() + 0.5)
-    
-    def _x_exit(self):
-        self.removeTimer(0)
-        self.removeTimer(1)
-        self.removeTimer(2)
-    
-    def _x_0_guard(self, parameters):
-        return self.cond()
-    
-    def _x_1_guard(self, parameters):
-        return self.cond()
-    
-    def _x_2_guard(self, parameters):
-        return self.cond()
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/x"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "Main":
-            instance = Main(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.object_manager.createInstance("Main", [])

+ 0 - 25
legacy/examples/my-tests/python/multiple_afters_running_behind.xml

@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram name="multiple-afters-running-behind">
-    <class name="Main" default="true">
-        <method name="cond">
-            <body>
-                return True
-            </body>
-        </method>
-        <scxml initial="x">
-            <state id="x">
-                <transition after="self.sccd_yield() + 0.5" cond="self.cond()" target="." />
-                <transition after="self.sccd_yield() + 0.5" cond="self.cond()" target="." />
-                <transition after="self.sccd_yield() + 0.5" cond="self.cond()" target="." />
-                <onentry>
-                    <script>
-                        import time
-                        print 'time.time() = %s' % time.time()
-                        time.sleep(0.1)
-                        print self.sccd_yield()
-                    </script>
-                </onentry>
-            </state>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 160
legacy/examples/my-tests/python/multiple_raises_parallel.py

@@ -1,160 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Fri Jul 28 15:14:50 2017
-
-Model name:   multiple-raises-parallel
-
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "multiple-raises-parallel"
-
-class A(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeOne
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        A.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, "", self)
-        
-        # state /x
-        self.states["/x"] = ParallelState(1, "/x", self)
-        
-        # state /x/x1
-        self.states["/x/x1"] = State(2, "/x/x1", self)
-        
-        # state /x/x1/x1
-        self.states["/x/x1/x1"] = State(3, "/x/x1/x1", self)
-        
-        # state /x/x1/end
-        self.states["/x/x1/end"] = State(4, "/x/x1/end", self)
-        
-        # state /x/x2
-        self.states["/x/x2"] = State(5, "/x/x2", self)
-        
-        # state /x/x2/x2
-        self.states["/x/x2/x2"] = State(6, "/x/x2/x2", self)
-        
-        # state /x/x2/end
-        self.states["/x/x2/end"] = State(7, "/x/x2/end", self)
-        
-        # state /x/x3
-        self.states["/x/x3"] = State(8, "/x/x3", self)
-        
-        # state /x/x3/x3
-        self.states["/x/x3/x3"] = State(9, "/x/x3/x3", self)
-        
-        # state /x/x3/end
-        self.states["/x/x3/end"] = State(10, "/x/x3/end", self)
-        
-        # state /x/receiving
-        self.states["/x/receiving"] = State(11, "/x/receiving", self)
-        
-        # state /x/receiving/receiving
-        self.states["/x/receiving/receiving"] = State(12, "/x/receiving/receiving", self)
-        
-        # add children
-        self.states[""].addChild(self.states["/x"])
-        self.states["/x"].addChild(self.states["/x/x1"])
-        self.states["/x"].addChild(self.states["/x/x2"])
-        self.states["/x"].addChild(self.states["/x/x3"])
-        self.states["/x"].addChild(self.states["/x/receiving"])
-        self.states["/x/x1"].addChild(self.states["/x/x1/x1"])
-        self.states["/x/x1"].addChild(self.states["/x/x1/end"])
-        self.states["/x/x2"].addChild(self.states["/x/x2/x2"])
-        self.states["/x/x2"].addChild(self.states["/x/x2/end"])
-        self.states["/x/x3"].addChild(self.states["/x/x3/x3"])
-        self.states["/x/x3"].addChild(self.states["/x/x3/end"])
-        self.states["/x/receiving"].addChild(self.states["/x/receiving/receiving"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/x"]
-        self.states["/x/x1"].default_state = self.states["/x/x1/x1"]
-        self.states["/x/x2"].default_state = self.states["/x/x2/x2"]
-        self.states["/x/x3"].default_state = self.states["/x/x3/x3"]
-        self.states["/x/receiving"].default_state = self.states["/x/receiving/receiving"]
-        
-        # transition /x/x1/x1
-        _x_x1_x1_0 = Transition(self, self.states["/x/x1/x1"], [self.states["/x/x1/end"]])
-        _x_x1_x1_0.setAction(self._x_x1_x1_0_exec)
-        _x_x1_x1_0.setTrigger(None)
-        self.states["/x/x1/x1"].addTransition(_x_x1_x1_0)
-        
-        # transition /x/x2/x2
-        _x_x2_x2_0 = Transition(self, self.states["/x/x2/x2"], [self.states["/x/x2/end"]])
-        _x_x2_x2_0.setAction(self._x_x2_x2_0_exec)
-        _x_x2_x2_0.setTrigger(None)
-        self.states["/x/x2/x2"].addTransition(_x_x2_x2_0)
-        
-        # transition /x/x3/x3
-        _x_x3_x3_0 = Transition(self, self.states["/x/x3/x3"], [self.states["/x/x3/end"]])
-        _x_x3_x3_0.setAction(self._x_x3_x3_0_exec)
-        _x_x3_x3_0.setTrigger(None)
-        self.states["/x/x3/x3"].addTransition(_x_x3_x3_0)
-        
-        # transition /x/receiving/receiving
-        _x_receiving_receiving_0 = Transition(self, self.states["/x/receiving/receiving"], [self.states["/x/receiving/receiving"]])
-        _x_receiving_receiving_0.setAction(self._x_receiving_receiving_0_exec)
-        _x_receiving_receiving_0.setTrigger(Event("z", None))
-        self.states["/x/receiving/receiving"].addTransition(_x_receiving_receiving_0)
-    
-    def _x_x1_x1_0_exec(self, parameters):
-        self.raiseInternalEvent(Event("z", None, []))
-        print 'raised event in x1'
-    
-    def _x_x2_x2_0_exec(self, parameters):
-        self.raiseInternalEvent(Event("z", None, []))
-        print 'raised event in x2'
-    
-    def _x_x3_x3_0_exec(self, parameters):
-        self.raiseInternalEvent(Event("z", None, []))
-        print 'raised event in x3'
-    
-    def _x_receiving_receiving_0_exec(self, parameters):
-        print 'received event...'
-    
-    def initializeStatechart(self):
-        # enter default state
-        self.default_targets = self.states["/x"].getEffectiveTargetStates()
-        RuntimeClassBase.initializeStatechart(self)
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "A":
-            instance = A(self.controller)
-            instance.associations = {}
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None, behind_schedule_callback = None):
-        if keep_running == None: keep_running = True
-        if behind_schedule_callback == None: behind_schedule_callback = None
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running, behind_schedule_callback)
-        self.object_manager.createInstance("A", [])

+ 0 - 51
legacy/examples/my-tests/python/multiple_raises_parallel.xml

@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram name="multiple-raises-parallel">
-    <class name="A" default="true">
-        <scxml big_step_maximality="take_one" initial="x">
-            <parallel id="x">
-                <state id="x1" initial="x1">
-                    <state id="x1">
-                        <transition target="../end">
-                            <raise event="z" />
-                            <script>
-                                print 'raised event in x1'
-                            </script>
-                        </transition>
-                    </state>
-                    <state id="end" />
-                </state>
-                <state id="x2" initial="x2">
-                    <state id="x2">
-                        <transition target="../end">
-                            <raise event="z" />
-                            <script>
-                                print 'raised event in x2'
-                            </script>
-                        </transition>
-                    </state>
-                    <state id="end" />
-                </state>
-                <state id="x3" initial="x3">
-                    <state id="x3">
-                        <transition target="../end">
-                            <raise event="z" />
-                            <script>
-                                print 'raised event in x3'
-                            </script>
-                        </transition>
-                    </state>
-                    <state id="end" />
-                </state>
-                <state id="receiving">
-                    <state id="receiving">
-                        <transition target="." event="z">
-                            <script>
-                                print 'received event...'
-                            </script>
-                        </transition>
-                    </state>
-                </state>
-            </parallel>
-        </scxml>
-    </class>
-</diagram>

+ 0 - 3
legacy/examples/my-tests/python/runner.py

@@ -1,3 +0,0 @@
-import server
-controller = server.Controller()
-controller.start()

+ 0 - 3
legacy/examples/my-tests/python/runner_bugwithsourcechild.py

@@ -1,3 +0,0 @@
-import bugwithsourcechild
-controller = bugwithsourcechild.Controller()
-controller.start()

+ 0 - 3
legacy/examples/my-tests/python/runner_create_and_start.py

@@ -1,3 +0,0 @@
-import create_and_start
-controller = create_and_start.Controller(False)
-controller.start()

+ 0 - 3
legacy/examples/my-tests/python/runner_else_transition.py

@@ -1,3 +0,0 @@
-import else_transition
-controller = else_transition.Controller(False)
-controller.start()

+ 0 - 28
legacy/examples/my-tests/python/runner_eventloop_bug.py

@@ -1,28 +0,0 @@
-'''
-Created on 27-jul.-2014
-
-@author: Simon
-'''
-
-import Tkinter as tk
-import threading, time
-import eventloop_bug
-from sccd.runtime.statecharts_core import Event
-from sccd.runtime.tkinter_eventloop import *
-
-if __name__ == '__main__':
-    window = tk.Tk()
-    window.withdraw()
-    controller = eventloop_bug.Controller(TkEventLoop(window))
-    
-    def inputter():
-        time.sleep(1)
-        while 1:
-            controller.addInput(Event("hello world", "input", []))
-    for _ in range(2):
-        thread = threading.Thread(target=inputter)
-        thread.daemon = True
-        thread.start()
-    
-    controller.start()
-    window.mainloop()

+ 0 - 3
legacy/examples/my-tests/python/runner_exit_parallel.py

@@ -1,3 +0,0 @@
-import exit_parallel
-controller = exit_parallel.Controller(False)
-controller.start()

+ 0 - 3
legacy/examples/my-tests/python/runner_multiple_afters_running_behind.py

@@ -1,3 +0,0 @@
-import multiple_afters_running_behind
-controller = multiple_afters_running_behind.Controller(False)
-controller.start()

+ 0 - 3
legacy/examples/my-tests/python/runner_multiple_raises_parallel.py

@@ -1,3 +0,0 @@
-import multiple_raises_parallel
-controller = multiple_raises_parallel.Controller(False)
-controller.start()

+ 0 - 183
legacy/examples/my-tests/python/server.py

@@ -1,183 +0,0 @@
-"""
-Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
-
-Date:   Fri Aug  5 15:59:05 2016
-
-Model author: Yentl Van Tendeloo
-Model name:   broken
-Model description:
-Broken!
-"""
-
-from sccd.runtime.statecharts_core import *
-
-# package "broken"
-
-class A(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        A.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        pass
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /x
-        self.states["/x"] = State(1, self)
-        self.states["/x"].setEnter(self._x_enter)
-        
-        # state /ready
-        self.states["/ready"] = State(2, self)
-        self.states["/ready"].setEnter(self._ready_enter)
-        
-        # state /done
-        self.states["/done"] = State(3, self)
-        
-        # add children
-        self.states[""].addChild(self.states["/x"])
-        self.states[""].addChild(self.states["/ready"])
-        self.states[""].addChild(self.states["/done"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/x"]
-        
-        # transition /x
-        _x_0 = Transition(self, self.states["/x"], [self.states["/ready"]])
-        _x_0.setAction(self._x_0_exec)
-        _x_0.trigger = Event("instance_created", None)
-        self.states["/x"].addTransition(_x_0)
-        
-        # transition /ready
-        _ready_0 = Transition(self, self.states["/ready"], [self.states["/done"]])
-        _ready_0.setAction(self._ready_0_exec)
-        _ready_0.trigger = Event("close", None)
-        self.states["/ready"].addTransition(_ready_0)
-    
-    def _x_enter(self):
-        self.big_step.outputEventOM(Event("create_instance", None, [self, 'child', 'B']))
-    
-    def _ready_enter(self):
-        self.big_step.outputEventOM(Event("start_instance", None, [self, self.instancename]))
-    
-    def _x_0_exec(self, parameters):
-        instancename = parameters[0]
-        self.instancename = instancename
-        print(self.instancename)
-    
-    def _ready_0_exec(self, parameters):
-        print("CLOSED")
-        self.big_step.outputEventOM(Event("delete_instance", None, [self, self.instancename]))
-    
-    def initializeStatechart(self):
-        # enter default state
-        states = self.states["/x"].getEffectiveTargetStates()
-        self.updateConfiguration(states)
-        for state in states:
-            if state.enter:
-                state.enter()
-
-class B(RuntimeClassBase):
-    def __init__(self, controller):
-        RuntimeClassBase.__init__(self, controller)
-        
-        self.semantics.big_step_maximality = StatechartSemantics.TakeMany
-        self.semantics.internal_event_lifeline = StatechartSemantics.Queue
-        self.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep
-        self.semantics.priority = StatechartSemantics.SourceParent
-        self.semantics.concurrency = StatechartSemantics.Single
-        
-        # build Statechart structure
-        self.build_statechart_structure()
-        
-        # call user defined constructor
-        B.user_defined_constructor(self)
-    
-    def user_defined_constructor(self):
-        print("READY")
-    
-    def user_defined_destructor(self):
-        pass
-    
-    
-    # builds Statechart structure
-    def build_statechart_structure(self):
-        
-        # state <root>
-        self.states[""] = State(0, self)
-        
-        # state /z
-        self.states["/z"] = State(1, self)
-        self.states["/z"].setEnter(self._z_enter)
-        self.states["/z"].setExit(self._z_exit)
-        
-        # add children
-        self.states[""].addChild(self.states["/z"])
-        self.states[""].fixTree()
-        self.states[""].default_state = self.states["/z"]
-        
-        # transition /z
-        _z_0 = Transition(self, self.states["/z"], [self.states["/z"]])
-        _z_0.setAction(self._z_0_exec)
-        _z_0.trigger = Event("_0after")
-        self.states["/z"].addTransition(_z_0)
-    
-    def _z_enter(self):
-        self.addTimer(0, 0)
-        print("RUN")
-    
-    def _z_exit(self):
-        self.removeTimer(0)
-    
-    def _z_0_exec(self, parameters):
-        print("RAISE")
-        self.big_step.outputEventOM(Event("broad_cast", None, [Event("close", None, [])]))
-    
-    def initializeStatechart(self):
-        # enter default state
-        states = self.states["/z"].getEffectiveTargetStates()
-        self.updateConfiguration(states)
-        for state in states:
-            if state.enter:
-                state.enter()
-
-class ObjectManager(ObjectManagerBase):
-    def __init__(self, controller):
-        ObjectManagerBase.__init__(self, controller)
-    
-    def instantiate(self, class_name, construct_params):
-        if class_name == "A":
-            instance = A(self.controller)
-            instance.associations = {}
-            instance.associations["child"] = Association("B", 0, 1)
-        elif class_name == "B":
-            instance = B(self.controller)
-            instance.associations = {}
-            instance.associations["parent"] = Association("A", 1, 1)
-        else:
-            raise Exception("Cannot instantiate class " + class_name)
-        return instance
-
-class Controller(ThreadsControllerBase):
-    def __init__(self, keep_running = None):
-        if keep_running == None: keep_running = True
-        ThreadsControllerBase.__init__(self, ObjectManager(self), keep_running)
-        self.object_manager.createInstance("A", [])

+ 0 - 79
legacy/examples/my-tests/python/server.xml

@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram author="Yentl Van Tendeloo" name="broken">
-    <description>
-        Broken!
-    </description>
-
-    <class name="A" default="true">
-        <relationships>
-            <association name="child" class="B" min="0" max="1"/>
-        </relationships>
-
-        <scxml initial="x">
-            <state id="x">
-                <onentry>
-                    <raise scope="cd" event="create_instance">
-                        <parameter expr="'child'"/>
-                        <parameter expr="'B'"/>
-                    </raise>
-                </onentry>
-
-                <transition event="instance_created" target="../ready">
-                    <parameter name="instancename"/>
-                    <script>
-                        self.instancename = instancename
-                        print(self.instancename)
-                    </script>
-                </transition>
-
-            </state>
-            <state id="ready">
-                <onentry>
-                    <raise scope="cd" event="start_instance">
-                        <parameter expr="self.instancename"/>
-                    </raise>
-                </onentry>
-
-                <transition event="close" target="../done">
-                    <script>
-                        print("CLOSED")
-                    </script>
-                    <raise scope="cd" event="delete_instance">
-                        <parameter expr="self.instancename"/>
-                    </raise>
-                </transition>
-
-            </state>
-            <state id="done"/>
-        </scxml>
-    </class>
-
-    <class name="B">
-        <constructor>
-            <body>
-                print("READY")
-            </body>
-        </constructor>
-
-        <relationships>
-            <association name="parent" class="A" min="1" max="1"/>
-        </relationships>
-
-        <scxml initial="z">
-            <state id="z">
-                <onentry>
-                    <script>
-                        print("RUN")
-                    </script>
-                </onentry>
-                <transition after="0" target=".">
-                    <script>
-                        print("RAISE")
-                    </script>
-                    <raise scope="broad" event="close"/>
-                </transition>
-            </state>
-        </scxml>
-    </class>
-
-</diagram>

+ 0 - 133
legacy/examples/tanks/AIMap.py

@@ -1,133 +0,0 @@
-from random import choice
-import heapq
-from examples.tanks.mymath import D60, D105, D360
-import math
-
-FREE, OBSTACLE = range(2)    
-        
-class AIMap():
-
-    def __init__(self, level):
-        self.totalWidth = level.totalWidth
-        self.totalHeight = level.totalHeight
-        self.cellSize = level.cellSize
-        obstacleMap = level.structure
-        self.cellsX = self.totalWidth // self.cellSize
-        self.cellsY = self.totalHeight // self.cellSize
-        self.structure = [[ OBSTACLE if obstacleMap[x][y] else FREE for y in range(self.cellsY)] for x in range(self.cellsX)]
-        
-    def getNewExplore(self, position, tankAngle):
-        cell = self.calculateCell(position)
-        successors = self.getSuccessors(cell)
-        good = []
-        for (successor,wildcard) in successors :
-            #successorCoords = self.calculateCoords(successor)
-            diffAngle = math.fabs(tankAngle - self.getAngleToDest(cell,successor))
-            if diffAngle > math.pi :
-                diffAngle = D360-diffAngle
-            value = len(self.getSuccessors(successor))
-            if diffAngle <= D60 :
-                good.append((successor,value+7))
-            elif diffAngle <= D105 :
-                good.append((successor,value+4))
-            else :
-                good.append((successor,value))
-        max_value = 0
-
-        result = []
-        for (pos,value) in good :
-            if value > max_value :
-                result = [pos]
-                max_value = value
-            elif value == max_value :
-                result.append(pos)
-        return self.calculateCoords(choice(result))
-        
-        
-    def getSuccessors(self, pos):
-        successors = []
-        (xpos, ypos) = pos
-        i = 0
-        for y in range(ypos-1,ypos+2):
-            for x in range(xpos-1,xpos+2):
-                i = i + 1
-                if x >= 0 and x < self.cellsX and y >= 0 and y < self.cellsY  :
-                    if i == 5 :
-                        continue
-                    elif self.structure[x][y] == FREE :
-                        if (x == xpos or y == ypos) : 
-                            successors.append(((x,y),1))                            
-                        elif i == 1 :
-                            if self.structure[x+1][y] == FREE and self.structure[x][y+1] == FREE : successors.append(((x,y),1.4))
-                        elif i == 3 :
-                            if self.structure[x-1][y] == FREE and self.structure[x][y+1] == FREE : successors.append(((x,y),1.4))
-                        elif i == 7 :
-                            if self.structure[x+1][y] == FREE and self.structure[x][y-1] == FREE : successors.append(((x,y),1.4))
-                        elif i == 9 :
-                            if self.structure[x-1][y] == FREE and self.structure[x][y-1] == FREE : successors.append(((x,y),1.4))
-        return successors
-
-    def calculateCell(self, p):
-        (xp, yp) = p
-        return ( int(xp / self.cellSize) , int(yp / self.cellSize) )
-        
-    def calculateCoords(self,cell):
-        return (self.cellSize * (cell[0]+0.5),self.cellSize * (cell[1]+0.5))
-    
-    def getAngleToDest(self,pos, des):
-        (xpos, ypos) = pos
-        (xdes, ydes) = des
-        return math.atan2(ypos-ydes, xdes-xpos) % D360
-    
-    #------PathFinding----#
-    
-    def calculatePath(self, start, destination):
-        #self.controller.stop()
-
-        class PriorityQueue:
-            def  __init__(self):  
-                self.heap = []
-
-            def push(self, item, priority):
-                pair = (priority,item)
-                heapq.heappush(self.heap,pair)
-
-            def pop(self):
-                popped = heapq.heappop(self.heap)
-                return popped[1]#item
-
-            def isEmpty(self):
-                return len(self.heap) == 0    
-            
-        #A*
-        start_cell = self.calculateCell(start)
-        destination_cell = self.calculateCell(destination)
-        explored = {}
-        fringe = PriorityQueue();
-        startNode = (start_cell, 0, 0) #(state,parent,cost to get to this state)
-        fringe.push(startNode, startNode[2])
-        while (True) :
-            while (True) :
-                currentNode = fringe.pop()
-                if currentNode[0] not in explored : #same node on the fringe multiple times. we only want the lowest cost node expanded.
-                    break
-            explored[currentNode[0]] = currentNode
-            if currentNode[0] == destination_cell :
-                break
-            successors = self.getSuccessors(currentNode[0])
-            for (successor,cost) in successors :
-                totalcost = currentNode[2] + cost            
-                if successor not in explored : #nodes that are not expanded yet, but are already on the fringe will still be added.
-                    node = (successor, currentNode, totalcost)
-                    heuristic =  ((successor[0] - destination[0]) ** 2 + (successor[1] - destination[1]) ** 2 ) ** 0.5
-                    fringe.push(node,(totalcost+heuristic))    
-                    
-        newpoints = []
-        while ( currentNode[0] != start_cell) :
-            newpoints.insert(0, self.calculateCoords(currentNode[0]))
-            currentNode = currentNode[1]
-            
-        return newpoints
-        
-    
-    

+ 0 - 17
legacy/examples/tanks/AITank.py

@@ -1,17 +0,0 @@
-from Tank import Tank
-import math
-from mymath import D360
-from ai_controller import Controller, Event
-from sccd.runtime.tkinter_eventloop import *
-
-class AITank(Tank):
-	def __init__(self, field, data):			
-		Tank.__init__(self, field, data)
-		self.controller = Controller(self, TkEventLoop(field.canvas.master))
-		self.controller.start()		
-			
-	def update(self, delta):
-		self.controller.addInput(Event("update","engine"))
-		
-	def angleToDest(self, (dest_x,dest_y)):
-		return math.atan2(self.y- dest_y, dest_x-self.x) % D360

+ 0 - 50
legacy/examples/tanks/Bullet.py

@@ -1,50 +0,0 @@
-import math as Math
-
-class Bullet():
-
-    def __init__(self, x, y, team, speed, direction, damage, radius, canvas):
-        self.x = x
-        self.y = y
-        self.speed = speed
-        self.direction = direction
-        self.damage = damage
-        self.radius = radius
-        self.canvas = canvas
-        self.team = team
-        self.image = self.canvas.create_oval(self.x-self.radius, self.y-self.radius, self.x+self.radius, self.y+self.radius, outline='black', fill="firebrick1",stipple='gray25', tags="bullet")
-        self.exploded = False
-
-    def getTeam(self):
-        return self.team 
-        
-    def getX(self):
-        return self.x
-        
-    def getY(self):
-        return self.y
-                
-    def getRadius(self):
-        return self.radius
-        
-    def getExploded(self):
-        return self.exploded
-        
-    def getDamage(self):
-        return self.damage
-        
-    def getImage(self):
-        return self.image
-        
-    def move(self):
-        self.x += Math.cos(self.direction)*self.speed
-        self.y -= Math.sin(self.direction)*self.speed
-        
-    def draw(self):
-        self.canvas.coords(self.image, self.x-self.radius, self.y-self.radius, self.x+self.radius, self.y+self.radius)
-   
-    def destroy(self):
-        self.exploded = True
-        self.canvas.delete(self.image)
-        
-    def update(self):
-        self.move()

+ 0 - 19
legacy/examples/tanks/Level.py

@@ -1,19 +0,0 @@
-from Obstacle import Obstacle
-
-class Level():
-    def __init__(self, field):
-
-        self.cellSize = 50
-        self.totalWidth = field.width
-        self.totalHeight = field.height
-        self.canvas = field.canvas
-        self.cellsX = self.totalWidth // self.cellSize
-        self.cellsY = self.totalHeight // self.cellSize
-        self.structure = [[0 for x in range(self.cellsY)] for x in range(self.cellsX)]
-        self.obstacles = []
-        
-    def addObstacles(self, obstacle_list):
-        for (x,y) in obstacle_list :
-            self.structure[x][y] = 1
-            obstacle = Obstacle(self.canvas, self.cellSize * (x+0.5),self.cellSize * (y+0.5),self.cellSize,self.cellSize)
-            self.obstacles.append(obstacle)

+ 0 - 17
legacy/examples/tanks/Makefile

@@ -1,17 +0,0 @@
-.PHONY: all clean
-
-SCCDC = python -m sccd.compiler.sccdc
-FLAGS = -l python -p eventloop
-
-SOURCES = ai_controller.xml player_controller.xml
-TARGETS = ai_controller.py player_controller.py
-PY_BYPRODUCTS = $(TARGETS:%.py=%.pyc)
-
-all: $(TARGETS)
-
-clean:
-	rm -f $(TARGETS) $(PY_BYPRODUCTS)
-
-%.py: %.xml
-	$(SCCDC) $(FLAGS) -o $@ $<
-

+ 0 - 33
legacy/examples/tanks/Obstacle.py

@@ -1,33 +0,0 @@
-import math as Math
-
-class Obstacle():
-    def __init__(self, canvas, x,y, width, height, color = "LightGray"):
-        self.canvas = canvas
-        self.x = x
-        self.y = y
-        self.width = width
-        self.height = height
-        self.radius = Math.sqrt(Math.pow(self.width+2,2)+Math.pow(self.height+2,2))
-        halfwidth = width/2
-        halfheight = height/2
-        self.coords =[(self.x-halfwidth, self.y-halfheight), (self.x+halfwidth, self.y-halfheight),
-        (self.x+halfwidth, self.y+halfheight), (self.x-halfwidth, self.y+halfheight)]
-        self.image = self.canvas.create_polygon(self.coords,outline="SlateGray4",width=0, stipple="gray50", tags="obstacle", fill=color)
-        
-    def getRadius(self):
-        return self.radius
-        
-    def getX(self):
-        return self.x
-        
-    def getY(self):
-        return self.y
-        
-    def getWidth(self):
-        return self.width
-        
-    def getCoords(self):
-        return self.coords
-        
-    def getImage(self):
-        return self.image

+ 0 - 0
legacy/examples/tanks/PlayerTank.py


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است