From 152e8abe8e685b221a48199f5cf60809699639e6 Mon Sep 17 00:00:00 2001 From: nri Date: Fri, 16 May 2003 12:39:10 +0000 Subject: [PATCH] NRI : First integration. --- Makefile.in | 97 ++++ build_configure | 206 ++++++++ configure.in.base | 358 +++++++++++++ idl/Makefile.in | 71 +++ idl/SUPERV.idl | 876 +++++++++++++++++++++++++++++++ resources/ModuleSupervision.png | Bin 0 -> 1623 bytes resources/SUPERV_en.xml | 53 ++ resources/SUPERV_fr.xml | 47 ++ resources/Superv_tree_superv.png | Bin 0 -> 917 bytes resources/components.png | Bin 0 -> 1334 bytes resources/edit.png | Bin 0 -> 629 bytes resources/export.gif | Bin 0 -> 267 bytes resources/import.gif | Bin 0 -> 270 bytes resources/kill.png | Bin 0 -> 889 bytes resources/modify.png | Bin 0 -> 959 bytes resources/reload.png | Bin 0 -> 250 bytes resources/resources.png | Bin 0 -> 822 bytes resources/run.png | Bin 0 -> 831 bytes resources/steps.png | Bin 0 -> 234 bytes resources/suspend-resume.gif | Bin 0 -> 214 bytes 20 files changed, 1708 insertions(+) create mode 100644 Makefile.in create mode 100755 build_configure create mode 100644 configure.in.base create mode 100644 idl/Makefile.in create mode 100644 idl/SUPERV.idl create mode 100644 resources/ModuleSupervision.png create mode 100755 resources/SUPERV_en.xml create mode 100755 resources/SUPERV_fr.xml create mode 100644 resources/Superv_tree_superv.png create mode 100644 resources/components.png create mode 100644 resources/edit.png create mode 100644 resources/export.gif create mode 100644 resources/import.gif create mode 100644 resources/kill.png create mode 100644 resources/modify.png create mode 100644 resources/reload.png create mode 100644 resources/resources.png create mode 100644 resources/run.png create mode 100644 resources/steps.png create mode 100644 resources/suspend-resume.gif diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..61816d1 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,97 @@ +# -* Makefile *- +# +# Author : Patrick GOLDBRONN (CEA) +# Date : 28/06/2001 +# $Header$ +# + +# source path +top_srcdir=@top_srcdir@ +top_builddir=. +srcdir=@srcdir@ +VPATH=.:@srcdir@:@top_srcdir@/bin:@top_srcdir@/resources:./bin:@top_srcdir@/idl + + +@COMMENCE@ + +SUBDIRS = idl src + +RESOURCES_FILES = \ +components.png \ +edit.png \ +export.gif \ +import.gif \ +kill.png \ +modify.png \ +ModuleSupervision.png \ +reload.png \ +resources.png \ +run.png \ +steps.png \ +SUPERV_en.xml \ +SUPERV_fr.xml \ +suspend-resume.gif \ +Superv_tree_superv.png + +# copy header files in common directory +ifeq ($(HAVE_SSTREAM),yes) + include_list=include/salome/SALOMEconfig.h +else + include_list=include/salome/SALOMEconfig.h include/salome/sstream +endif + +inc: idl $(include_list) + +include/salome/SALOMEconfig.h: salome_adm/unix/SALOMEconfig.h + -$(RM) $@ + $(LN_S) ../../$< $@ + +include/salome/sstream: salome_adm/unix/sstream + -$(RM) $@ + $(LN_S) ../../$< $@ + +depend: depend_idl + +depend_idl: + (cd idl ; $(MAKE) $@) || exit 1 + +# doc is already build : if you want to had documents, go manually to doc and run 'make doc' +#doc: +# (cd doc && $(MAKE) $@) || exit 1 + +install-end: +# finish libtool install +# @$(LT) --mode=finish $(libdir) + +install-include: $(include_list) + $(INSTALL) -d $(includedir) + @for f in X $(include_list); do \ + if test $$f != X; then \ + ($(INSTALL_DATA) $$f $(includedir)/. || exit 1); \ + fi; \ + done + +# install script in $(bindir) : +install-bin: $(BIN_SCRIPT) + $(INSTALL) -d $(bindir) + if test $(BIN_SCRIPT)X != X; then \ + $(INSTALL_PROGRAM) $^ $(bindir); \ + fi + +uninstall: uninstall-idl + +uninstall-idl: + $(RM) $(idldir)/*.idl + +distclean: distclean-other + +distclean-other: + -$(RM) salome_adm/unix/*~ salome_adm/unix/*% salome_adm/unix/*.bak salome_adm/unix/*.new salome_adm/unix/*.old + -$(RM) salome_adm/unix/make_* + -$(RM) salome_adm/unix/depend salome_adm/unix/SALOMEconfig.h + -$(RM) config.cache config.log config.status + +@MODULE@ + +install: install-bin install-include install-end + diff --git a/build_configure b/build_configure new file mode 100755 index 0000000..4edf6f4 --- /dev/null +++ b/build_configure @@ -0,0 +1,206 @@ +#!/bin/bash + +# +# Tool for updating list of .in file for the SALOME project +# and regenerating configure script +# +# Author : Marc Tajchman - CEA +# Date : 10/10/2002 +# $Header$ +# + +ORIG_DIR=`pwd` +CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"` + +######################################################################## +# Test if the KERNEL_ROOT_DIR is set correctly + +if test ! -d "${KERNEL_ROOT_DIR}"; then + echo "failed : KERNEL_ROOT_DIR variable is not correct !" + exit +fi + +# Test if the KERNEL_SRC is set correctly + +#if test ! -d "${KERNEL_SRC}"; then +# echo "failed : KERNEL_SRC variable is not correct !" +# exit +#fi +######################################################################## +# find_in - utility function +# +# usage : +# find_in directory filename +# +# Finds files following the *.in pattern, recursively in the +# directory (first argument). +# Results are appended into the file (second argument) +# +# Difference from the standard unix find is that files are tested +# before directories +# + +find_in() +{ + local i + local f=$2 + +# if the first argument is not a directory, returns + + if [ ! -d "$1" ] ; then + return + fi + +# dont look in the CVS directories + + case $1 in + */CVS) return ;; + *) ;; + esac + +# for each regular file contained in the directory +# test if it's a .in file + + for i in "$1"/* + do + if [ -f "$i" ] ; then + case $i in + *.in) echo " "$i" \\" >> $f;; + *) ;; + esac + fi + done + +# for each subdirectory of the first argument, proceeds recursively + + for i in "$1"/* + do + if [ -d "$i" ] ; then + find_in "$i" "$f" + fi + done +} + + +####################################################################### +# Generate list of .in files (Makefile.in, config.h.in, etc) +# appending it in file configure.in + +cd ${CONF_DIR} +ABS_CONF_DIR=`pwd` + +# +# Common part of the configure.in file +# +chmod u+w configure.in.base +if ! \cp -f configure.in.base configure.in_tmp1 +then + echo + echo "error : can't create files in" ${CONF_DIR} + echo "aborting ..." + chmod u-w configure.in.base + exit +fi +chmod u-w configure.in.base + +# make a link allowing AC_OUTPUT to find the salome_adm/.../*.in files +echo "" >> configure.in_tmp1 +echo 'ln -fs ${KERNEL_ROOT_DIR}/salome_adm ${ROOT_SRCDIR}/salome_adm' >> configure.in_tmp1 + +echo "" >> configure.in_tmp1 +echo "AC_OUTPUT([ \\" >> configure.in_tmp1 + +# +# List of .in files in the adm/unix directory +# These files MUST be on top of AC_OUTPUT list so we +# put them "manually" +# + +echo " ./salome_adm/unix/SALOMEconfig.h \\" >> configure.in_tmp1 +echo " ./salome_adm/unix/F77config.h \\" >> configure.in_tmp1 +echo " ./salome_adm/unix/sstream \\" >> configure.in_tmp1 +echo " ./salome_adm/unix/depend \\" >> configure.in_tmp1 +echo " ./salome_adm/unix/make_omniorb \\" >> configure.in_tmp1 +echo " ./salome_adm/unix/envScript \\" >> configure.in_tmp1 +echo " ./salome_adm/unix/make_commence \\" >> configure.in_tmp1 +echo " ./salome_adm/unix/make_conclude \\" >> configure.in_tmp1 +echo " ./salome_adm/unix/make_module \\" >> configure.in_tmp1 + +\rm -f configure.in_tmp2 configure.in_tmp3 +touch configure.in_tmp2 +find_in . configure.in_tmp2 +sed '/^.*salome_adm/d' configure.in_tmp2 > configure.in_tmp3 +sed '/configure.in/d' configure.in_tmp3 > configure.in_tmp2 +sed 's/.in / /' configure.in_tmp2 >> configure.in_tmp1 + +echo "])" >> configure.in_tmp1 + +# delete the link created for AC_OUTPUT +#echo "" >> configure.in_tmp1 +#echo 'rm -f ${ROOT_SRCDIR}/salome_adm' >> configure.in_tmp1 +\mv configure.in_tmp1 configure.in_new +\rm -f configure.in_tmp2 configure.in_tmp3 + + +######################################################################## +# Create new (or replace old) configure.in file +# Print a message if the file is write protected +# + +echo +if test ! -f configure.in +then + echo -n "Creating new file 'configure.in' ... " + if \mv configure.in_new configure.in >& /dev/null + then + echo "done" + else + echo "error, check your file permissions" + fi +else + echo -n "Updating 'configure.in' file ... " + if ! \cp configure.in configure.in_old >& /dev/null + then + echo + echo + echo "Can't backup previous configure.in" + echo -n "Continue (you will not be able to revert) - (Y/N) ? " + read R + case "x$R" in + xn*) exit;; + xN*) exit;; + esac + echo + echo -n " " + fi + if \cp configure.in_new configure.in >& /dev/null + then + echo "done" + else + echo + echo "error, can't update previous configure.in" + fi +fi + +######################################################################## +# Use autoconf to rebuild the configure script +# + +if test -f configure +then + echo -n "Updating 'configure' script ... " +else + echo -n "Creating 'configure' script ... " +fi + +aclocal --acdir=${KERNEL_ROOT_DIR}/salome_adm/unix/config_files +if autoconf +then + echo "done" +else + echo "failed (check file permissions and/or user quotas ...)" +fi + +cd ${ORIG_DIR} + +echo diff --git a/configure.in.base b/configure.in.base new file mode 100644 index 0000000..a688b33 --- /dev/null +++ b/configure.in.base @@ -0,0 +1,358 @@ +# +# PLEASE DO NOT MODIFY configure.in FILE +# +# ALL CHANGES WILL BE DISCARDED BY THE NEXT +# build_configure COMMAND +# +# CHANGES MUST BE MADE IN configure.in.base FILE +# +# +# Author : Marc Tajchman (CEA) +# Date : 28/06/2001 +# Modified by : Patrick GOLDBRONN (CEA) +# Modified by : Marc Tajchman (CEA) +# +# Created from configure.in.base +# + +AC_INIT(src) +AC_CONFIG_AUX_DIR(${KERNEL_ROOT_DIR}/salome_adm/unix/config_files) +AC_CANONICAL_HOST + +PACKAGE=salome +AC_SUBST(PACKAGE) + +VERSION=0.0.1 +AC_SUBST(VERSION) + +dnl +dnl Initialize source and build root directories +dnl + +ROOT_BUILDDIR=`pwd` +ROOT_SRCDIR=`echo $0 | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` +cd $ROOT_SRCDIR +ROOT_SRCDIR=`pwd` +cd $ROOT_BUILDDIR + +AC_SUBST(ROOT_SRCDIR) +AC_SUBST(ROOT_BUILDDIR) + +echo +echo Source root directory : $ROOT_SRCDIR +echo Build root directory : $ROOT_BUILDDIR +echo +echo + +if test -z "$AR"; then + AC_CHECK_PROGS(AR,ar xar,:,$PATH) +fi +AC_SUBST(AR) + +dnl Export the AR macro so that it will be placed in the libtool file +dnl correctly. +export AR + +echo +echo --------------------------------------------- +echo testing make +echo --------------------------------------------- +echo + +AC_PROG_MAKE_SET +AC_PROG_INSTALL +dnl +dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + pour les librairies dynamiques ! + +AC_ENABLE_DEBUG(yes) +AC_DISABLE_PRODUCTION + +echo --------------------------------------------- +echo testing libtool +echo --------------------------------------------- + +dnl first, we set static to no! +dnl if we want it, use --enable-static +AC_ENABLE_STATIC(no) + +AC_LIBTOOL_DLOPEN +AC_PROG_LIBTOOL + +dnl Fix up the INSTALL macro if it s a relative path. We want the +dnl full-path to the binary instead. +case "$INSTALL" in + *install-sh*) + INSTALL='\${KERNEL_ROOT_DIR}'/salome_adm/unix/config_files/install-sh + ;; +esac + +echo +echo --------------------------------------------- +echo testing C/C++ +echo --------------------------------------------- +echo + +cc_ok=no +dnl inutil car libtool +dnl AC_PROG_CC +AC_PROG_CXX +AC_DEPEND_FLAG +# AC_CC_WARNINGS([ansi]) +cc_ok=yes + +dnl Library libdl : +AC_CHECK_LIB(dl,dlopen) + +dnl add library libm : +AC_CHECK_LIB(m,ceil) + +dnl +dnl Well we use sstream which is not in gcc pre-2.95.3 +dnl We must test if it exists. If not, add it in include ! +dnl + +AC_CXX_HAVE_SSTREAM + +dnl +dnl --------------------------------------------- +dnl testing MPICH +dnl --------------------------------------------- +dnl + +CHECK_MPICH + +echo +echo --------------------------------------------- +echo testing LEX \& YACC +echo --------------------------------------------- +echo + +lex_yacc_ok=no +AC_PROG_YACC +AC_PROG_LEX +lex_yacc_ok=yes + +echo +echo --------------------------------------------- +echo testing python +echo --------------------------------------------- +echo + +CHECK_PYTHON + +echo +echo --------------------------------------------- +echo testing java +echo --------------------------------------------- +echo + +CHECK_JAVA + +echo +echo --------------------------------------------- +echo testing swig +echo --------------------------------------------- +echo + +CHECK_SWIG + +echo +echo --------------------------------------------- +echo testing threads +echo --------------------------------------------- +echo + +ENABLE_PTHREADS + +echo +echo --------------------------------------------- +echo testing omniORB +echo --------------------------------------------- +echo + +CHECK_OMNIORB + +echo +echo --------------------------------------------- +echo testing mico +echo --------------------------------------------- +echo + +CHECK_MICO + +echo +echo --------------------------------------------- +echo default ORB : omniORB +echo --------------------------------------------- +echo + +DEFAULT_ORB=omniORB +CHECK_CORBA + +AC_SUBST_FILE(CORBA) +corba=make_$ORB +CORBA=salome_adm/unix/$corba + +echo +echo --------------------------------------------- +echo testing openGL +echo --------------------------------------------- +echo + +CHECK_OPENGL + +echo +echo --------------------------------------------- +echo testing QT +echo --------------------------------------------- +echo + +CHECK_QT + +echo +echo --------------------------------------------- +echo testing VTK +echo --------------------------------------------- +echo + +CHECK_VTK + +echo +echo --------------------------------------------- +echo testing HDF5 +echo --------------------------------------------- +echo + +CHECK_HDF5 + +echo +echo --------------------------------------------- +echo testing MED2 +echo --------------------------------------------- +echo + +CHECK_MED2 + +echo +echo --------------------------------------------- +echo Testing OpenCascade +echo --------------------------------------------- +echo + +CHECK_CAS + +echo +echo --------------------------------------------- +echo Testing Kernel +echo --------------------------------------------- +echo + +CHECK_KERNEL + +echo +echo --------------------------------------------- +echo Summary +echo --------------------------------------------- +echo + +echo Configure +variables="cc_ok lex_yacc_ok python_ok java_ok swig_ok threads_ok OpenGL_ok qt_ok vtk_ok hdf5_ok med2_ok omniORB_ok mico_ok occ_ok Kernel_ok" + +for var in $variables +do + printf " %10s : " `echo \$var | sed -e "s,_ok,,"` + eval echo \$$var +done + +echo +echo "Default ORB : $DEFAULT_ORB" +echo + +dnl generals files which could be included in every makefile + +AC_SUBST_FILE(COMMENCE) COMMENCE=salome_adm/unix/make_commence +AC_SUBST_FILE(CONCLUDE) CONCLUDE=salome_adm/unix/make_conclude +AC_SUBST_FILE(MODULE) MODULE=salome_adm/unix/make_module + +dnl les dependences +AC_SUBST_FILE(DEPEND) DEPEND=salome_adm/unix/depend + +dnl We don t need to say when we re entering directories if we re using +dnl GNU make becuase make does it for us. +if test "X$GMAKE" = "Xyes"; then + AC_SUBST(SETX) SETX=":" +else + AC_SUBST(SETX) SETX="set -x" +fi + +# make other build directories +for rep in salome_adm adm_local doc bin/salome include/salome lib/salome share/salome/resources share/salome/doc idl +do +# if test ! -d $rep ; then +# eval mkdir $rep +# fi + $INSTALL -d $rep +done + +echo +echo --------------------------------------------- +echo copying resource files, shell scripts, and +echo xml files +echo --------------------------------------------- +echo + + +dnl copy resources directories + +#for i in `find $ROOT_SRCDIR -name 'resources' -print` +#do +# local_res=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"` +# local_res_dir=`echo $local_res | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` +# mkdir -p $local_res_dir +# cd $local_res_dir +# ln -fs $i +# echo $local_res +# cd $ROOT_BUILDDIR +#done + +dnl copy shells and utilities contained in the bin directory +dnl excluding .in files (treated in AC-OUTPUT below) and CVS +dnl directory + +cd bin +for i in $ROOT_SRCDIR/bin/* +do + local_bin=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"` + case "$local_bin" in + *.in | *~) ;; + ./bin/CVS) ;; + *) ln -fs $i; echo $local_bin ;; + esac +done +cd $ROOT_BUILDDIR + +AC_SUBST_FILE(ENVSCRIPT) ENVSCRIPT=salome_adm/unix/envScript + +dnl copy xml files to the build tree (lib directory) +dnl pourquoi ???? + +#cd lib +#for i in `find $ROOT_SRCDIR -name "*.xml" -print` +#do +# ln -fs $i +# echo `echo $i | sed -e "s,$ROOT_SRCDIR,.,"` +#done +#cd $ROOT_BUILDDIR + + +echo +echo --------------------------------------------- +echo generating Makefiles and configure files +echo --------------------------------------------- +echo + +AC_OUTPUT_COMMANDS([ \ + chmod +x ./bin/* \ +]) + +## do not delete this line diff --git a/idl/Makefile.in b/idl/Makefile.in new file mode 100644 index 0000000..4d3d9dd --- /dev/null +++ b/idl/Makefile.in @@ -0,0 +1,71 @@ +# +# generate dependencies for idl file : +# + +# source path +top_srcdir=@top_srcdir@ +top_builddir=.. +srcdir=@srcdir@ +VPATH=.:$(srcdir):${KERNEL_ROOT_DIR}/idl/salome + +@COMMENCE@ + +IDL_FILES = \ + SALOME_Component.idl \ + SALOMEDS.idl \ + SALOMEDS_Attributes.idl \ + SALOME_Exception.idl \ + Logger.idl \ + SALOME_ModuleCatalog.idl \ + SUPERV.idl + +PY_CLIENT_IDL = $(IDL_FILES) + +# we copy all idl file in $(top_builddir)/idl +inc: $(IDL_FILES:%=$(top_builddir)/idl/%) + +$(IDL_FILES:%=$(top_builddir)/idl/%):$(top_builddir)/idl/%:% +# $(CP) $< $@ + cp -f $< $@ + + +lib: pyidl + +PYTHON_BUILD_SITE=$(top_builddir)/lib/python$(PYTHON_VERSION)/site-packages/@PACKAGE@ + +pyidl: $(PYTHON_BUILD_SITE) $(IDL_FILES:%.idl=$(PYTHON_BUILD_SITE)/%_idl.py) + +$(PYTHON_BUILD_SITE): + $(INSTALL) -d $@ + +$(PYTHON_BUILD_SITE)/%_idl.py: %.idl + $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_BUILD_SITE) $< + + +# install python client (generated from idl file +install: install-pyidl install-idl + +# create directory $(idldir) and copy idl files into it +install-idl: $(IDL_FILES) + $(INSTALL) -d $(idldir) + $(INSTALL_DATA) $^ $(idldir) + + +install-pyidl: $(IDL_FILES) + $(INSTALL) -d $(PYTHON_SITE_INSTALL) + @for file in $^ dummy; do \ + if [ $$file != "dummy" ]; then \ + $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_SITE_INSTALL) $$file ; \ + fi ; \ + done ; + +#@ CONCLUDE @ + +cleandep: + -$(RM) .dep* + +distclean: + -$(RM) *.py + -$(RM) $(IDL_FILES:%=$(top_builddir)/idl/%) + -$(RM) Makefile + diff --git a/idl/SUPERV.idl b/idl/SUPERV.idl new file mode 100644 index 0000000..cfe17a4 --- /dev/null +++ b/idl/SUPERV.idl @@ -0,0 +1,876 @@ +// File: SUPERV.idl +// Created: Jan 03 2002 +// Author: Jean Rahuel +// Project: SALOME +// Copyright : CEA/DEN/DMSS/LGLS +// $Header: + +/*! \file SUPERV.idl This file contains a set of interfaces of the %SUPERVISION module +*/ +/*! + \defgroup Supervision SALOME SUPERVISION module +*/ +#ifndef __SUPERV_IDL__ +#define __SUPERV_IDL__ + +#include "SALOME_ModuleCatalog.idl" +#include "SALOME_Component.idl" +#include "SALOMEDS.idl" +/*! \ingroup Supervision + The main package of interfaces of %SUPERVISION module +*/ +module SUPERV { + +/*! +This enumeration contains a set of elements defining the type of the port. +\note
In general, ports represent input or output parameters of the functions, +implemented in different kinds of nodes of the graph. +*/ + enum KindOfPort { UndefinedParameter , ServiceParameter , GateParameter , + InLineParameter , LoopParameter , SwitchParameter , + EndSwitchParameter , GOTOParameter } ; + +/*! +This enumeration contains a set of elements defining the type of the node. +*/ + enum KindOfNode { FactoryNode , DataFlowNode , ComputingNode , + InLineNode , LoopNode , EndLoopNode , + SwitchNode , EndSwitchNode , GOTONode , UnknownNode }; + +/*! +This struct contains fields defining the date. +*/ + struct SDate { + short Second; + short Minute; + short Hour; + short Day; + short Month; + short Year; + }; +/*! +This enumeration contains a set of elements defining the type of operation, which has been performed +on this node(graph). +*/ + + enum GraphEvent { UndefinedEvent , NoEvent , NewThreadEvent , + WaitingEvent , ReadyEvent , + RunningEvent , DoneEvent , ErroredEvent , + SuspendEvent , ResumeEvent , + KillEvent , StopEvent , + ReRunEvent , ReStartEvent } ; + + // UndefinedState : Non existing Node, Port etc... +/*! +This enumeration contains a set of elements defining the current state of the node(graph). +*/ + + enum GraphState { UndefinedState , NoState , EditingState , SuspendState , + WaitingState , ReadyState , SuspendReadyState , + RunningState , + DoneState , ErrorState , + SuspendDoneState , SuspendErroredState , + KillState , StopState , + ReRunState , ReStartState , + NumberOfGraphStates } ; + + typedef sequence ListOfStrings ; + + interface Value ; + + interface Link ; + + typedef sequence ListOfLinks ; + + interface Port ; + + typedef sequence ListOfPorts ; + + interface CNode ; + interface FNode ; + interface INode ; + interface GNode ; + interface LNode ; + interface ELNode ; + interface SNode ; + interface ESNode ; + typedef sequence ListOfCNodes ; + typedef sequence ListOfFNodes ; + typedef sequence ListOfINodes ; + typedef sequence ListOfGNodes ; + typedef sequence ListOfLNodes ; + typedef sequence ListOfELNodes ; + typedef sequence ListOfSNodes ; + typedef sequence ListOfESNodes ; + + struct ListOfNodes { + ListOfCNodes CNodes ; + ListOfFNodes FNodes ; + ListOfINodes INodes ; + ListOfGNodes GNodes ; + ListOfLNodes LNodes ; + ListOfELNodes ELNodes ; + ListOfSNodes SNodes ; + ListOfESNodes ESNodes ; + } ; + + interface Graph ; + + typedef sequence ListOfGraphs ; + + // ToSuspendState : will be Suspended before running if waiting or + // will be Suspended while running or + // will be Suspended after run + // ToSuspendStartState : will be Suspended at the beginning of execution + // ToSuspendDoneState : will be Suspended after run +/*! +This enumeration contains a set of elements defining the %ControlState of the node. +The %ControlState gives a possibility to determine the "control actions" which have been done by +the user (Suspend, SuspendDone, Kill, etc...). +*/ + enum ControlState { VoidState , ToSuspendStartState , + ToSuspendState , ToSuspendDoneState , + ToKillState , ToKillDoneState , ToStopState , + NumberOfControlStates } ; +/*! +The AutomatonState is an internal state of the automaton of the Executor +of the %SuperVision %Engine. It is used for inner debugging purposes only. +*/ + + enum AutomatonState { UnKnownState , + DataUndefState , + DataWaitingState , + DataReadyState , + SuspendedReadyState, + SuspendedReadyToResumeState , + ResumedReadyState , + KilledReadyState , + StoppedReadyState , + ExecutingState , + SuspendedExecutingState , + ResumedExecutingState , + KilledExecutingState , + StoppedExecutingState , + SuccessedExecutingState , + ErroredExecutingState , + SuspendedSuccessedState , + SuspendedErroredState, + ResumedSuccessedState , + ResumedErroredState , + KilledSuccessedState , + KilledErroredState , + StoppedSuccessedState , + StoppedErroredState , + SuccessedState , + ErroredState , + SuspendedState , + KilledState , + StoppedState , + SuspendedSuccessedToReStartState , + SuspendedErroredToReStartState , + ReRunnedState , + ReStartedState , + NumberOfAutomatonStates + } ; + + + + + + + + + //////////////// +/*! \brief interface %SuperG + +This interface contains a set of methods necessary for management of a %graph. +*/ + interface SuperG : Engines::Component, SALOMEDS::Driver { + //////////////// +/*! + Constructs a graph with possibility to read/edit it + \param aGraph %aGraphName or %aGraphXmlFile +*/ + SUPERV::Graph Graph(in string aGraph ) ; // aGraphName or aGraphXmlFile + +/*! + Constructs a read Only graph ( for execution ). + \note
In this graph there is also a possibility to update nodes, coordinates of the links, + of container names and input data. + \param aGraph %aGraphName or %aGraphXmlFile +*/ + SUPERV::Graph GraphE(in string aGraph ) ; // aGraphName or aGraphXmlFile + +/*! +Creates a value for %Input method in interface %Node. +*/ + SUPERV::Value StringValue( in string aString ) ; + SUPERV::Value AnyValue( in any anAny ) ; +/*! + Gets a graph from its %IOR +*/ + SUPERV::Graph getGraph(in string ior); // get Graph from is IOR + + }; + +/*! \brief Interface of a node + +This interface includes a set of methods used for management of the nodes in the graph. +*/ + + ////////////// + interface CNode : Engines::Component { + ////////////// + + +/*! +Returns the name of the node(graph). +*/ + string Name() ; +/*! +Returns the service of this node . +*/ + SALOME_ModuleCatalog::Service Service() ; +/*! +Returns the type of the node. +*/ + SUPERV::KindOfNode Kind() ; +/*! +Returns the date of creation of the node(graph). +*/ + SUPERV::SDate CreationDate() ; +/*! +Returns the date of last update of the node(graph). +*/ + SUPERV::SDate LastUpdateDate() ; +/*! +Returns the name of the version of the node(graph). +*/ + string Version() ; +/*! +Returns the name of the author of the node(graph). +*/ + string Author() ; +/*! +Returns the string containing comments about this node(graph). +*/ + string Comment() ; + + +/*! +Sets the name of the node(graph). Returns True if it is updated. +*/ + boolean SetName(in string aNewName ) ; +/*! +Sets the name of the author. Returns True if it is updated. +*/ + boolean SetAuthor(in string anAuthor ) ; +/*! +Allows to update the comments about this node(graph). +*/ + boolean SetComment(in string aComment ) ; + +/*! + Gets a port of the node. +*/ + SUPERV::Port Port( in string aParameterName ) ; + +/*! + Enters a value into an Input %Port +*/ + SUPERV::Port Input( in string InputParameterName , + in Value aValue ) ; + + + // Create an Input %Port and an Output Port in LabelNode or ControlNode + // boolean BusPort( in string InOutParameterName , + // in string InOutParameterType , + // out SUPERV::Port InputPort , + // out SUPERV::Port OutputPort ) ; + // boolean BusPorts( in string InputParameterName , + // in string InputParameterType , + // in string OutputParameterName , + // in string OutputParameterType , + // out SUPERV::Port InputPort , + // out SUPERV::Port OutputPort ) ; + +/*! + Gets a list of ports of the node(graph) +*/ + SUPERV::ListOfPorts Ports() ; + + // Get list of Links + SUPERV::ListOfLinks Links() ; + +/*! +Returns True if this node is a graph. +\note
A node of the graph can also represent in its turn another graph. +*/ + boolean IsGraph() ; +/*! +Returns True if the node appears to be a %computing node. +*/ + boolean IsComputing() ; + boolean IsFactory() ; + boolean IsInLine() ; + boolean IsGOTO() ; + boolean IsLoop() ; + boolean IsEndLoop() ; + boolean IsSwitch() ; + boolean IsEndSwitch() ; + +/*! + Returns the number of SubGraphs +*/ + long SubGraph() ; + +/*! +Returns nuber of threads. +*/ + long Thread() ; + +/*! + Returns True if the node(graph) is waiting for Data input +*/ + boolean IsWaiting() ; + +/*! + Returns True if the node(graph) is ready for execution +*/ + boolean IsReady() ; + + /*! + Returns True if the node(graph) is running +*/ + boolean IsRunning() ; + +/*! + Returns True if execution is finished +*/ + + boolean IsDone() ; +/*! + Returns True if execution is suspended +*/ + + boolean IsSuspended() ; +/*! +Returns the current state of the graph. +*/ + SUPERV::GraphState State() ; + + // wait for ready_to_run state, Suspend and return + boolean ReadyW() ; + + // wait for running state, Suspend and return + boolean RunningW() ; + + // wait for done state, Suspend and return + boolean DoneW() ; + + // wait for Suspend state and return + boolean SuspendedW() ; + + // boolean Ping(); + + // if not running : will be killed when ready to run + // if running : Kill immediatly + boolean Kill(); + + // will be killed only just after running (only for nodes) + boolean KillDone(); + + // if not running : will be stopped when ready to run + // if running : Stop immediatly + boolean Stop(); + + // if not running : will be Suspended when ready to run + // if running : Suspend immediatly + boolean Suspend(); + + // will be Suspended only just after running + boolean SuspendDone(); + + // if Suspended : running will continue + // if not Suspended : cancel current ControlState ( Suspend, Kill, ...) + boolean Resume(); + +/*! + Restarts execution of the node(graph). +*/ + boolean ReRun(); +/*! +Restarts execution of the graph beginning from a definite node. +*/ + boolean ReRunAt( in string aNodeName ); + +/*! + Restarts and suspends execution of the node(graph). +*/ + boolean ReStart(); +/*! +Restarts and suspends execution of the graph beginning from a definite node. +*/ + boolean ReStartAt( in string aNodeName ); + +/*! + Returns automaton execution state of the node(graph). +*/ + SUPERV::AutomatonState AutoState() ; + + // Control state required : Kill, Suspend, Stop + SUPERV::ControlState Control() ; +/*! +Clears the control state of the node(graph). +*/ + void ControlClear() ; + + boolean ContainerKill(); +/*! +Sets the position of the node in the window. +*/ + void Coords( in long X , in long Y ) ; +/*! +Returns the position of the node along X-axis. +*/ + long X() ; +/*! +Returns the position of the node along Y-axis. +*/ + long Y() ; + + } ; + + ////////////// + interface FNode : CNode { + ////////////// + + string GetComponentName() ; + string GetInterfaceName() ; + string GetContainer() ; + boolean SetComponentName(in string aComponentName ) ; + boolean SetInterfaceName(in string anInterfaceName ) ; + boolean SetContainer(in string aContainer ) ; + } ; + + // InLine Nodes + ////////////// + interface INode : CNode { + ////////////// + + void SetPyFunction( in string FuncName , + in SUPERV::ListOfStrings aPyInitFunction ) ; + SUPERV::ListOfStrings PyFunction() ; + string PyFuncName() ; + + // Create Input/Output Port in InLineNodes + SUPERV::Port InPort( in string aParameterName , in string aParameterType ) ; + SUPERV::Port OutPort( in string aParameterName , in string aParameterType ) ; + } ; + + // GOTO/EndLoop/EndSwitch Nodes + /////////////// + interface GNode : INode { + /////////////// + + boolean SetCoupled( in string anInLineNode ) ; + SUPERV::INode Coupled() ; + } ; + + // Loop Nodes + /////////////// + interface LNode : GNode { + /////////////// + + void SetPyInit( in string MoreName , + in SUPERV::ListOfStrings aPyMoreFunction ) ; + SUPERV::ListOfStrings PyInit() ; + string PyInitName() ; + + void SetPyMore( in string MoreName , + in SUPERV::ListOfStrings aPyMoreFunction ) ; + SUPERV::ListOfStrings PyMore() ; + string PyMoreName() ; + + void SetPyNext( in string NextName , + in SUPERV::ListOfStrings aPyNextFunction ) ; + SUPERV::ListOfStrings PyNext() ; + string PyNextName() ; + + } ; + + // EndOfLoop Nodes + //////////////// + interface ELNode : GNode { + //////////////// + } ; + + // Switch Nodes + /////////////// + interface SNode : GNode { + /////////////// + } ; + + // EndOfSwitch Nodes + //////////////// + interface ESNode : GNode { + //////////////// + } ; + +/*! \brief Interface of a graph + +This interface includes a set of methods used for management of the graphs in %SUPERVISION module. +*/ + + /////////////// + interface Graph : INode { + /////////////// + + // Create a Computing Node in a Graph + SUPERV::CNode CNode( in SALOME_ModuleCatalog::Service aService ) ; + + // Create a Factory Node in a Graph + SUPERV::FNode FNode( in string aComponentName , + in string anInterfaceName , + in SALOME_ModuleCatalog::Service aService ) ; + + // Create an InLine Node in a Graph + SUPERV::INode INode( in string FuncName , in ListOfStrings aPythonFunction ) ; + + // Create a GOTO node and link to the corresponding InLine node + SUPERV::GNode GNode( in string FuncName , in ListOfStrings aPythonFunction , + in string anINode ) ; + + // Create a "for" or "while" node and the corresponding end of loop node + SUPERV::LNode LNode( in string InitName , in ListOfStrings InitFunction , + in string MoreName , in ListOfStrings MoreFunction , + in string NextName , in ListOfStrings NextFunction , + out SUPERV::INode anEndOfLoop ) ; + + // Create a "if/elseif/else" or "switch" node and the corresponding end node + SUPERV::SNode SNode( in string FuncName , in ListOfStrings aPythonFunction , + out SUPERV::INode anEndOfSwitch ) ; + + // Create a CORBA Component Object Reference + Engines::Component ComponentRef( in string aComputerContainer , + in string aComponentName ) ; + +/*! + Creates a link connecting two ports (%Output %Port and %Input %Port) of the nodes in a Graph +*/ + SUPERV::Link Link( in SUPERV::Port OutputPort , + in SUPERV::Port InputPort ) ; + +/*! +Imports a graph into a file with XML format +*/ + boolean Import( in string anXmlFile ) ; +/*! +Exports a graph from a file with XML format +*/ + boolean Export( in string anXmlFile ) ; +/*! +Returns True if the graph is read Only. +*/ + boolean IsReadOnly() ; + +/*! + Starts asynchronous execution of the graph. +*/ + boolean Run() ; + +/*! + Assigns to the %Node an %Event and a %State of the %Node, if the Event is + available. And returns immediately Nil, NoEvent and NoState if not. + Returns false if the graph is finished, suspended, killed or stopped. +\param aNode %Node for which this method is called +\param anEvent An operation, which has been performed on this node(graph). +\param aState Current state of the graph +*/ + boolean EventNoW( out SUPERV::CNode aNode , out SUPERV::GraphEvent anEvent , + out SUPERV::GraphState aState ) ; + +/*! + Assigns to the %Node an %Event and a %State of the %Node, if the Event is + available. Waits if it is not available at the current moment. + Returns false if the graph is finished, suspended, killed or stopped. +\param aNode %Node for which this method is called +\param anEvent An operation, which has been performed on this node(graph). +\param aState Current state of the graph +*/ + boolean Event( out SUPERV::CNode aNode , out SUPERV::GraphEvent anEvent , + out SUPERV::GraphState aState ) ; + + // Same as Event but execution of the thread is suspended between the + // return of EventW and the next call to EventW +/*! + Assigns to the %Node an %Event and a %State of the %Node, if the Event is + available. And returns immediately Nil, NoEvent and NoState if not. + Returns false if the graph is finished, suspended, killed or stopped. +\note
Execution of the thread is suspended between the return of this +method and its next usage. +\param aNode %Node for which this method is called +\param anEvent An operation, which has been performed on this node(graph). +\param aState Current state of the graph +*/ + boolean EventW( out SUPERV::CNode aNode , out SUPERV::GraphEvent anEvent , + out SUPERV::GraphState aState ) ; + + long LevelMax() ; + SUPERV::ListOfNodes LevelNodes( in long aLevel ) ; + long ThreadsMax() ; +/*! +Returns the number of independent subgraphs +*/ + long GraphsNumber() ; +/*! +Returns the number of currently running threads. +*/ + long Threads(); +/*! +Returns the number of suspended threads. +*/ + long SuspendedThreads(); +/*! +Returns True if the graph is valid. +*/ + boolean IsValid() ; +/*! +Returns True if the graph can be executed. +*/ + boolean IsExecutable() ; +/*! +Returns True if the graph represents a working algorithm. +*/ + boolean IsDataFlow() ; + +/*! +Returns True if the graph is being currently edited. +*/ + boolean IsEditing() ; +/*! +Returns True if the graph is being currently executed. +*/ + boolean IsExecuting() ; + + long LastLevelDone() ; + +/*! + Launches step-by-step execution of the graph. +\note The execution is suspended immediatly after performance of operations of the first node and +user can specify the nodes, where execution will be again suspended after its resuming. +*/ + boolean Start() ; +/*! +Allows to copy one graph into another. +*/ + SUPERV::Graph Copy() ; +/*! +Merges two graphs +*/ + boolean Merge( in Graph aGraph ) ; +/*! +Returns a list of nodes of the graph. +*/ + SUPERV::ListOfNodes Nodes() ; +/*! +Returns a list of links of the graph. +*/ + SUPERV::ListOfLinks GLinks() ; +/*! +Gets IOR of the garph. +*/ + string getIOR(); + +/*! +Returns a list of graphs. +\note Not implemented +*/ + SUPERV::ListOfGraphs Graphs() ; + + } ; + + + + + +/*! \brief Interface of the %link + +This interface contains a set of methods used for representation and management of the links +connecting nodes in a %graph. +*/ + + ////////////// + interface Link : Engines::Component { + ////////////// +/*! +Associates an %Output %Port to the Link +*/ + SUPERV::Port OutPort() ; + +/*! +Associates an %Input %Port to the Link +*/ + SUPERV::Port InPort() ; + + // For GUI : +/*! \name Methods used for representation of links in GUI of %SALOME application : +*/ +/*@{*/ +/*! +Returns the number of coordinate points which are included in the link. +\note
Every link can contain a set of coordinate points which constitute it. These points have +index numbers (beginning from 1) and coordinates defining their position in the window. Indexing of +the points starts from input port to output port of the corresponding link. +*/ + long CoordsSize() ; +/*! +Adds a coordinate point to the link. +\param index Index of the point. +\param X Coordinates of the point. +\param Y Coordinates of the point. +*/ + boolean AddCoord( in long index , in long X , in long Y ) ; +/*! +Changes the location of a definite coordinate point of the link. +\param index Index of the point. +\param X Coordinates of the point. +\param Y Coordinates of the point. +*/ + + boolean ChangeCoord( in long index , in long X , in long Y ) ; +/*! +Removes a coordinate point of the link. +\param index Index of the point. +*/ + + boolean RemoveCoord( in long index ) ; + +/*! +Sets the location of a coordinate point of the link. +\param index Index of the point. +\param X Coordinates of the point. +\param Y Coordinates of the point. +*/ + + boolean Coords( in long index , out long X , out long Y ) ; +/*@}*/ + + // void Destroy() ; + + } ; + +/*! \brief %Value interface + +This interface contains a set of methods used for setting initial parameters of the ports +*/ + + /////////////// + interface Value : Engines::Component { + /////////////// +/*! +Converts the given value into a value of string type. +*/ + string ToString() ; +/*! +Converts the given value into a value of independant data type. +*/ + any ToAny() ; +/*! +Returns True if the value represents an IOR. +*/ + boolean IsIOR() ; +/*! +Gets data type of the component. +*/ + string ComponentDataType() ; + + // void Destroy() ; + + } ; +/*! \brief %Port interface + +This interface contains a set of methods used for management of the ports. +*/ + + ////////////// + interface Port : Value { + ////////////// + +/*! + Gives a value to an Input %Port +*/ + boolean Input( in SUPERV::Value aValue ) ; + +/*! +Returns the node of the port +*/ + SUPERV::CNode Node() ; +/*! +Sets the name of the port. +*/ + string Name() ; + + // Type of a Port + string Type() ; + + // Link of an Input Port +/*! +Returns the link of an %Input %Port +*/ + SUPERV::Link Link() ; + +/*! +Returns a list of links of an Input %Port of an EndSwitchNode +*/ + SUPERV::ListOfLinks Links() ; + +/*! +Returns True if this port appears to be an %Input %Port of a Node +*/ + boolean IsInput() ; + +/*! +Returns True if an %Input %Value exists for that %Input %Port (without link) +*/ + boolean HasInput() ; + +/*! +Returns True if the %Port is linked (without value) +*/ +// Port with link (without Value) + boolean IsLinked() ; + + // Kind of a Port + SUPERV::KindOfPort Kind() ; + + // Port from the service of the node +/*! +Returns True if the %Port is a parameter of a service +*/ + boolean IsParam() ; + // Port is a Gate of the node +/*! +Returns True if the %Port appears to be a GatePort of the node +*/ + boolean IsGate() ; + // Port is a parameter of an InLineNode + boolean IsInLine() ; + // Port is a LoopParameter (InitLoop or DoLoop) of an LoopNode + boolean IsLoop() ; + // Port is an output parameter of a SwitchNode connected to an InGate +/*! +Returns True if the %Port appears to be a parameter of a switch node +*/ + // Port is a parameter of a switch node + boolean IsSwitch() ; + // Port is an Input parameter of a EndSwitchNode connected to several output ports + boolean IsEndSwitch() ; + + SUPERV::GraphState State() ; + boolean IsDone() ; + + } ; + +}; +#endif diff --git a/resources/ModuleSupervision.png b/resources/ModuleSupervision.png new file mode 100644 index 0000000000000000000000000000000000000000..71e30a1a21aff362fd096a7a17c6703b7268e84d GIT binary patch literal 1623 zcmV-d2B`UoP)X>G_9Qo35rBe4@i}ItxzQ_q$UKT zxP)dGio7Z7g9#OZpVKtum_>FE$VPIsR%yUUmh%UCY)=Fg;Run9aN`L$nI61j*7n-F zP9kXE#n$ZX?0YlceBYa4<#HMSXAFF30tbZ>q|@26XN6y%wY4>Na60`XkN^NEt`-^R z9K6muo~g5{sBBcAsTzCy`(qIr4jn4VUg#+x8jT775JF(`!lc(KJj&*>Qvkp@AI#>m zZ#n1q&jC$d5~6`as2fVFRBt`^ZFL{ZtOFj5Fa)Dofx7GRntmY0`dnkEdx00873usaz5OaQVB-Efe7@U}ABpvvF|=LI}X)84=0fibMF6e8xFvnyUG3 z*nZGcK)GCIm5mBG=crX{xN-A_XrJ+RkkSy~wHb*>$Q1wpw-~<=-IoA|5CcI-!lr57 zHw@!yGMU8k@^Ul#NQB42jbDVDZ9CgL;GB>1I$!ttM$iy-zyLIbGe0xud|b{b(^QS8 z&GaAuKmqiGj@*OXF;eJNcr0A+IauqM1M!*ouGe!R1Q=^9RJ(v{SFRlokA*9N1+?R^ zeNlUe3L!dH)s5s2Np|2mkb97WrfT=one_KW1YYIM(e#8aDjSs}q|jR;^0gJD5J17d z-9BDm0q&xssTu%Wozv%9RwJEBGXUV6kASe*UUa-bL;wdgUHef8fy})OJM+~U5D|t( zh7cKvj640-y~gTm1$=ywEH=;+`m4;ZnJ+;2(_M7D5E>3ik-tbrM1&z4LS!UzGCUUc z-1riQdZ3ZTCYek^Pv}q7S#@t`d&loJM59q5gg{}X@F`>(Xb5@c_wJzzFio@hKbcH^ zmbsT<6H^mn>($nH5FvKeeqG}=Is4;5YCigXH`*H zDV%c0@nL1NzOzt}qGK4wplOt+E8Z53B+2n;uVdX7mS8dd)HE_-` z8X1LtT^EjpK0!o(cUz6V1h{>XbdpZNS%=H8IU+Ep&+S-wYZ$;@VWsdfuk%rLRuzn~ zmQ!AQCf+TZ2@vjrV<9vg^4!dU1vtKFfOGzbp3uK!jKMGrIqTzI?^t>3bbKbh4d5>; zZ+%S)ZA$Whe>QV|zXi2g6F2(W#H7$CdO|-f$@}&vTDS66B%8}#iO}bc-l;}Ib-g?7CNv1pmErqyfBGuE^CoO3jknO?e$u< zhSYpY*j2j@G^%HNij>5yytQRl?TB18pnDi~vC#bq@H%X3sul)f)>Iwa>i};k4w;tJ58*bu5Gz2JsmA4eT zYVSJlHaBcf0kjVRevtP;srl4hSqrSZ^|@WO_q>QlMj|JP=vinuve#_A8)40U)wd1}5g4_p5NF(MDA9uV@ zM~FBUdfi=|2E@CPw8!@RXay6{Po{7YKT1R|yOsWK=!di$T?O=;DI$@`2_kwP8V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/SUPERV_fr.xml b/resources/SUPERV_fr.xml new file mode 100755 index 0000000..cd45f74 --- /dev/null +++ b/resources/SUPERV_fr.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/Superv_tree_superv.png b/resources/Superv_tree_superv.png new file mode 100644 index 0000000000000000000000000000000000000000..7d24c753e0290630a3597875c49c18353c56494c GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F?i!z|0Wf6XFWwGW=)Qo1OiC6pV(z z$P0n`Dr+xb7GNp~@(cdY@N~NYi09<#;uunKEA*TrAA=%?^TlcR{-5I$Dfz*DwmXo; zbHXBL{aZQaPusR`>{uz;rL#U~T`-UK{r@vGAMAXedd}g`|C*!B$$1R#j!lw}0_87H LS3j3^P606W@)QA}JUnhQOKl!zqn{a`Y-)MDEjWbZlk48{!K-f{){1iXDqT z1NDa;#fQ1U4w%+!{fVzL2`07D4$h%8@Wp>wLl3qf7%EH>Saqsa5=dGDCx62?G00r6 zkiAtrdbWG;37qpIL2f?i0F#f?;JEN9@@AdmcQRe7Bo8d)DAqAUJT2!MC3n$Y0 z?~$|4^bp{*3j<*$dE!gh(q|sT!=_y8qW;JHt9hw&=`+->_^iuVnEw5a`F|SeJf<8f z8=H821TqWex0}v(G5vblji^`EEmA7+IX_Fc+?K_2O~5%tq)B^-B_HC$>O(4!D+;AR oRU{Z1v;QI%uoo;0*_pe9aO3=e0#*!?ZMdHI^l=BA%AdsBA41Q#xfd>Q}%0rE*iK~#90rIo#o(?A$SkHcmc;f+`+v5)|X5;~M79c`-Z(x=Wl zP|;9QrSKCVlqaB~CP@4>Xd8lDfCRQe5J(w&?D;4XCmF}i58P&a<(V_r*S5xCL%m*4 z=JPp9DFBpGF&jB1tbh2sUIA%B;md#sjG@H$sPN!U6UgG;cgTX+m;45{zU71WK zvP)4ENe~3mYPDoM9*gh$0!WcnD<=yfGWB^D7R(~E^- z3P}~R^ilwqcI-HgHD0Tqff(vHZep~;y?q}s8I5}n0l0YZXp6D;m(G(E6G^54$nr`K zNxYaT%LR+xjb4mmvZY^l3~Y65forw3HA`TY$ literal 0 HcmV?d00001 diff --git a/resources/import.gif b/resources/import.gif new file mode 100644 index 0000000000000000000000000000000000000000..badc18ba7aa0985c963f95758a8edebfb10be668 GIT binary patch literal 270 zcmZ?wbhEHb6k!ly_{_rq0+a4|?D*f!z_5scVJ8E_1qO!a3=IDn820Vk*LUSV5C9oq zbs$3VCkrD30}q4ZKUD<<&)kCiqLS1Ug|wplT!n}LUxm!v#Pn1vh0=nQ#FA9Kih^7Q z9gr@NWz8T4DORy0O*rYfdapur_d(0HiG{)qbLIz%NM|m3a4YF}=Mrth@O#r&vC6V1 zd}u9l^6^-#$Wvx>&B>8frCq1hL4d)=b5hSVYo_+&vBjLcZy9bpeOR*b>9T|Gts>8! Rc>lAOtGuB$S6Gn28USmXV^shE literal 0 HcmV?d00001 diff --git a/resources/kill.png b/resources/kill.png new file mode 100644 index 0000000000000000000000000000000000000000..51ecc2793f0a23c76b71211ded9ec729b4d4c8fd GIT binary patch literal 889 zcmV-<1BU#GP)+Uu`oH#*sWCZW#bpYZxK}rdL3?){h!JgRX{lUF_Kk>VvMdo5H z^vv*1u3yV&*IMyn5k5l*idMKTaYzs1-fwS26oLyI5uydK1;c$ zhmNiaZg~TRQiVcS7X#ztbnV(j_wH>}mzEgtV}|9xR8Q zC(i(|^^;-T&JwokV!K85oFB`|HhPu98&x`8K~LjZQ}ZkU%=6|(1s81#yek*;yKNtR zitV~ozdDId5&(W1K8{`J1R=8161;4P;{>@BkV;7$C(K_P%OCFe`18!cb(#9|LsGwv zaGHjyb;L?3j8f<{K}ksxN6cRR_63KjufIU25>aqS>rY<-URL7QkV+xLIx0<2smvo? z(Y|w+0D%fZEN>ZXn)k$l=dBDE1LCMbyy%lWtG`gwsc(jJr*|%Y2ceG%LyS`G!9oZ; z&qFsFU|EP_XWspln#!ktGjZ%t?s(wtkHk(0T4S_sQwn34zkQo0PiCO!(!!cLDfm`xfM1|1c*tezDvHUOgvfsK1Z>f#kr!gE(b_WjRoA&{2f( z0-|UE{fCEst%#gmWG+?II!a7#Dm881+5t2}{e2A9Q{GBbHoo1L)o@vjndvNTt(lX$ zEwmLlhY$F1wo$8x-xx3kqqFoUH(VP){G)q$?d^ZKrWV<96D8 zXXp36<6*nW%5G>{f0r3}XFfddGk;Rtn?j+G0Eh@8f-&ZSjv~U+($bzYZ$4{|9U4c` zHd9kmJj@uq!KpK!vxQF1Y{SMF0463Ty58)09=Tku>)MYOzTuTUSDBq2Lru=W;>k|< zLC0Fl&tDaoogQQ8)pucW4nmin_6r^c{p{!q%uWtB(eraqbwQ*vvFCX^LhWmD9P`ts zN0@mr$I$r9HmU>^o$yXQws&l;<@*z_F+D!qL`$cUO&6sEjl%ca;N4bXt>t3j4TcY9 zw$ZA$g}P<%s$CM_4{e+~%UC{7W+)G()3CXUQVNa2^946hd{A_D-*J*8G|rvH$>mVa zB-P~wGF1Ewomv9qy=Nr;e|zt>GNZKz0;yOAuDkqHu8VDw@@b;=__dtyX&n z2zFIPT))l8^^1@nhrlCri){K892v$BD|mslqc?y*?gKaf0oFE}X_bR6m+^y5Dq)Df zDQG>wd`U>B)3i|FMn@If9UDv}BuT_*a0$lpgry?hYKaxEjMkbJ8DP0s;k`rCe7Sgm z77En6zQ-a02#Cf+5oxuKu2d+muCn5lDTabu);Nyh89wp->T(8_Aj$>Nrf8bW)-`6f9#?UZ^ufJX4e9^@j z$TEL?hUL;tjEU*%bx_t2g&W+8dP%F!hu;B@Jo7Y&5Z(C)-w#+gd6>(-;k!#!o_}tH zC$jr_EPH?f)q}NnF(%^bZ|nDV+6CUKLN}`bm_PLie_p%B(BpOb`}-Ju>PhxFeW+BO zBATc*2sS1=m}dRvU;K@bvO;2GFfoaZNvw1v hPPLsU{QueV{spsR6H!O|y@~(;002ovPDHLkV1mk%voHVv literal 0 HcmV?d00001 diff --git a/resources/reload.png b/resources/reload.png new file mode 100644 index 0000000000000000000000000000000000000000..05f559d867e5b60f0bf1690100b11d1752851ce7 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFBm8hDP=v80$S>Hz%xdO05GTpo-G!lpRn`N@;VkfoEM{Qf z76M_$OLy!300r4gJbhi+FL27R@W{V!yao~q^mK6yshFeN+sMmc$iY;|{PPQY#@q+t z1^*YyZB>&x!p+3+az)a+?Nd^BY&`PQL?vv>`nseGQ{8*SwcBKlS)DwUar&bA>krux i_K#Dy^4;?K%>F=$^-b2oS$;sn89ZJ6T-G@yGywp;=1^_` literal 0 HcmV?d00001 diff --git a/resources/resources.png b/resources/resources.png new file mode 100644 index 0000000000000000000000000000000000000000..d53db9ea960e49369d1290dface8a0593c8e7f4d GIT binary patch literal 822 zcmb7?!41MN3`JdW$7^5m=66J5SbElIby=#B4z9 zu`b){qbHzHu8SVkd``LYl2c*4 zPKk{182+Wl%LZTRQH6|;v}lj}08K9QLvXfiz?Jm4Sr@E5W9 S_(IH~@2KCu+$KBPj_?bj?_1UY literal 0 HcmV?d00001 diff --git a/resources/run.png b/resources/run.png new file mode 100644 index 0000000000000000000000000000000000000000..16a20c116e8243a6b49ed862613d2cc49bdf4caa GIT binary patch literal 831 zcmV-F1Hk-=P)A+3!%gdoE?w?yY*XMamxaAW~()k6;QGVVf3ZPpQcy+38CrH3{Qk zoaxN-vWJ+OcH(Y#5qvHK|CitMf1CdUU;7AQ8zF4-#i736F~#EMso~pq*Ek7JMLa$}POH_T(b)M|f)>8t;^3f3 zKA)#ntMKyW+7Z-s>l6xWsZ53jrMAEC5{41RXe`Snj$`6DMr+Vop|xgsc$hE@Sz20V zb@eG)%b|Y+_m{*NND_%L1}POFH@MUObOdhQq^%&CMdWZvC2q+x@_Pg_JQ$DGG%bJbwIyVzG#2o#E=$@5yGf z#Bm5%IplY1BB@I((}Bdlpj1;;nAaqNZEDBWHP2)F0;K|LMcrchIBe@ z&Ye4p5H>e&{)pCc=qTd1Z_6|q4IIZIpUy{Fg7-dG2KQ=nb2l+s9lDyqr z7!DY|eAoo!aTa()7Bet#3xP1>rMq>1fP(BLp1!W^ml-8^jLg@h%=!%!%Jy_|45^6g zo#@GTK!Jyu{Yv}q=Pw(N=yqQ@$9i<*VulZn(XS$|-V|VR(BI2E(Q@%DmJ+AQ8!jDR zn3(BhnVn;>O~mYkd4T8QCtIpR+OOR-aws<7n;FD%!g`O<${imk%&eSz`t97W^Aqa7 a$lvM6Q4+HLn0Xm!ErX}4pUXO@geCy1h*Kv3 literal 0 HcmV?d00001 diff --git a/resources/suspend-resume.gif b/resources/suspend-resume.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0ffb7e0cc026c1e0c383a17044f5aabcf4b5d91 GIT binary patch literal 214 zcmZ?wbhEHb6k!l!IK;s4|Ns9p|NqaNIWsLS&DhwO0R|NR`GsU;7Aqtcl_&tI%shpX zj8uh!(xjZsWQCOc+{Da0Jq7R7GN6P8 zTBKlTX=%!!_>+Z^fq{`h2V@1vb_QloiCuU88JzN5z4yk{OJ&c!6gd(UCY?Un$r?Nn?=Lqvv3P#w6Kw&mW_iT|AE}uhs$W)G1T8