From: Alan Knowles Date: Wed, 16 Sep 2020 08:48:54 +0000 (+0800) Subject: Fix #5829 - Messing around with flutter API X-Git-Tag: release-4.4.2~124 X-Git-Url: http://git.roojs.org/?p=roobuilder;a=commitdiff_plain;h=3ebe55bb39f2089ca4b72871c485718daa7234c4 Fix #5829 - Messing around with flutter API --- diff --git a/.gitignore b/.gitignore index f09c022d3..ac32f85eb 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ src/*.stamp src/*.stamp-t tests/*.c +Makecache Makefile Makefile.in aclocal.m4 diff --git a/INSTALL b/INSTALL index 209984075..8865734f8 100644 --- a/INSTALL +++ b/INSTALL @@ -1,8 +1,8 @@ Installation Instructions ************************* -Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, -Inc. + Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software +Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -12,97 +12,96 @@ without warranty of any kind. Basic Installation ================== - Briefly, the shell command `./configure && make && make install' + Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following -more-detailed instructions are generic; see the `README' file for +more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this -`INSTALL' file but do not implement all of the features documented +'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. - The `configure' shell script attempts to guess correct values for + The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that +those values to create a 'Makefile' in each directory of the package. +It may also create one or more '.h' files containing system-dependent +definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). +file 'config.log' containing compiler output (useful mainly for +debugging 'configure'). - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. + It can also use an optional file (typically called 'config.cache' and +enabled with '--cache-file=config.cache' or simply '-C') that saves the +results of its tests to speed up reconfiguring. Caching is disabled by +default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can +to figure out how 'configure' could check whether to do them, and mail +diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you +some point 'config.cache' contains results you don't want to keep, you may remove or edit it. - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. + The file 'configure.ac' (or 'configure.in') is used to create +'configure' by a program called 'autoconf'. You need 'configure.ac' if +you want to change it or regenerate 'configure' using a newer version of +'autoconf'. The simplest way to compile this package is: - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. + 1. 'cd' to the directory containing the package's source code and type + './configure' to configure the package for your system. - Running `configure' might take a while. While running, it prints + Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. - 2. Type `make' to compile the package. + 2. Type 'make' to compile the package. - 3. Optionally, type `make check' to run any self-tests that come with + 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. - 4. Type `make install' to install the programs and any data files and + 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular - user, and only the `make install' phase executed with root + user, and only the 'make install' phase executed with root privileges. - 5. Optionally, type `make installcheck' to repeat any self-tests, but + 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a - regular user, particularly if the prior `make install' required + regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly + source code directory by typing 'make clean'. To also remove the + files that 'configure' created (so you can compile the package for + a different kind of computer), type 'make distclean'. There is + also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. - 7. Often, you can also type `make uninstall' to remove the installed + 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. - 8. Some packages, particularly those that use Automake, provide `make + 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other - targets like `make install' and `make uninstall' work correctly. + targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' +the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: + You can give 'configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here is +an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix @@ -113,21 +112,21 @@ Compiling For Multiple Architectures You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the +own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. This -is known as a "VPATH" build. +the 'configure' script. 'configure' automatically checks for the source +code in the directory that 'configure' is in and in '..'. This is known +as a "VPATH" build. - With a non-GNU `make', it is safer to compile the package for one + With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before +installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple `-arch' options to the -compiler but only a single `-arch' option to the preprocessor. Like +"universal" binaries--by specifying multiple '-arch' options to the +compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ @@ -136,105 +135,104 @@ this: This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results -using the `lipo' tool if you have problems. +using the 'lipo' tool if you have problems. Installation Names ================== - By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX', where PREFIX must be an + By default, 'make install' installs the package's commands under +'/usr/local/bin', include files under '/usr/local/include', etc. You +can specify an installation prefix other than '/usr/local' by giving +'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses +pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the -default for these options is expressed in terms of `${prefix}', so that -specifying just `--prefix' will affect all of the other directory +options like '--bindir=DIR' to specify different values for particular +kinds of files. Run 'configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the default +for these options is expressed in terms of '${prefix}', so that +specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the -correct locations to `configure'; however, many packages provide one or +correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the -`make install' command line to change installation locations without +'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each -affected directory. For example, `make install +affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of -`${prefix}'. Any directories that were specified during `configure', -but not in terms of `${prefix}', must each be overridden at install -time for the entire installation to be relocated. The approach of -makefile variable overrides for each directory variable is required by -the GNU Coding Standards, and ideally causes no recompilation. -However, some platforms have known limitations with the semantics of -shared libraries that end up requiring recompilation when using this -method, particularly noticeable in packages that use GNU Libtool. - - The second method involves providing the `DESTDIR' variable. For -example, `make install DESTDIR=/alternate/directory' will prepend -`/alternate/directory' before all installation names. The approach of -`DESTDIR' overrides is not required by the GNU Coding Standards, and +'${prefix}'. Any directories that were specified during 'configure', +but not in terms of '${prefix}', must each be overridden at install time +for the entire installation to be relocated. The approach of makefile +variable overrides for each directory variable is required by the GNU +Coding Standards, and ideally causes no recompilation. However, some +platforms have known limitations with the semantics of shared libraries +that end up requiring recompilation when using this method, particularly +noticeable in packages that use GNU Libtool. + + The second method involves providing the 'DESTDIR' variable. For +example, 'make install DESTDIR=/alternate/directory' will prepend +'/alternate/directory' before all installation names. The approach of +'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of `${prefix}' -at `configure' time. +when some directory options were not specified in terms of '${prefix}' +at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the +with an extra prefix or suffix on their names by giving 'configure' the +option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. + + Some packages pay attention to '--enable-FEATURE' options to +'configure', where FEATURE indicates an optional part of the package. +They may also pay attention to '--with-PACKAGE' options, where PACKAGE +is something like 'gnu-as' or 'x' (for the X Window System). The +'README' should mention any '--enable-' and '--with-' options that the package recognizes. - For packages that use the X Window System, `configure' can usually + For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. +you can use the 'configure' options '--x-includes=DIR' and +'--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the -execution of `make' will be. For these packages, running `./configure +execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be -overridden with `make V=1'; while running `./configure +overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be -overridden with `make V=0'. +overridden with 'make V=0'. Particular systems ================== - On HP-UX, the default C compiler is not ANSI C compatible. If GNU -CC is not installed, it is recommended to use the following options in + On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC +is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. - HP-UX `make' updates targets which have the same time stamps as -their prerequisites, which makes it generally unusable when shipped -generated files such as `configure' are involved. Use GNU `make' -instead. + HP-UX 'make' updates targets which have the same time stamps as their +prerequisites, which makes it generally unusable when shipped generated +files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its `' header file. The option `-nodtk' can be used as -a workaround. If GNU CC is not installed, it is therefore recommended -to try +parse its '' header file. The option '-nodtk' can be used as a +workaround. If GNU CC is not installed, it is therefore recommended to +try ./configure CC="cc" @@ -242,26 +240,26 @@ and if that doesn't work, try ./configure CC="cc -nodtk" - On Solaris, don't put `/usr/ucb' early in your `PATH'. This + On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of -these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -in your `PATH', put it _after_ `/usr/bin'. +these programs are available in '/usr/bin'. So, if you need '/usr/ucb' +in your 'PATH', put it _after_ '/usr/bin'. - On Haiku, software installed for all users goes in `/boot/common', -not `/usr/local'. It is recommended to use the following options: + On Haiku, software installed for all users goes in '/boot/common', +not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== - There may be some features `configure' cannot figure out + There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints +_same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: +'--build=TYPE' option. TYPE can either be a short name for the system +type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM @@ -270,101 +268,101 @@ where SYSTEM can have one of these forms: OS KERNEL-OS - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't + See the file 'config.sub' for the possible values of each field. If +'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will +use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. +eventually be run) with '--host=TYPE'. Sharing Defaults ================ - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. + If you want to set default values for 'configure' scripts to share, +you can create a site shell script called 'config.site' that gives +default values for variables like 'CC', 'cache_file', and 'prefix'. +'configure' looks for 'PREFIX/share/config.site' if it exists, then +'PREFIX/etc/config.site' if it exists. Or, you can set the +'CONFIG_SITE' environment variable to the location of the site script. +A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run +environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: +them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc -causes the specified `gcc' to be used as the C compiler (unless it is +causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). -Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf limitation. Until the limitation is lifted, you can use -this workaround: +Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an +Autoconf limitation. Until the limitation is lifted, you can use this +workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash -`configure' Invocation +'configure' Invocation ====================== - `configure' recognizes the following options to control how it + 'configure' recognizes the following options to control how it operates. -`--help' -`-h' - Print a summary of all of the options to `configure', and exit. +'--help' +'-h' + Print a summary of all of the options to 'configure', and exit. -`--help=short' -`--help=recursive' +'--help=short' +'--help=recursive' Print a summary of the options unique to this package's - `configure', and exit. The `short' variant lists options used - only in the top level, while the `recursive' variant lists options - also present in any nested packages. + 'configure', and exit. The 'short' variant lists options used only + in the top level, while the 'recursive' variant lists options also + present in any nested packages. -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' +'--version' +'-V' + Print the version of Autoconf used to generate the 'configure' script, and exit. -`--cache-file=FILE' +'--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to + traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. +'--config-cache' +'-C' + Alias for '--cache-file=config.cache'. -`--quiet' -`--silent' -`-q' +'--quiet' +'--silent' +'-q' Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error + suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). -`--srcdir=DIR' +'--srcdir=DIR' Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. + 'configure' can determine that directory automatically. -`--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: - for more details, including other options available for fine-tuning - the installation locations. +'--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: for + more details, including other options available for fine-tuning the + installation locations. -`--no-create' -`-n' +'--no-create' +'-n' Run the configure checks, but stop before creating any output files. -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. +'configure' also accepts some other, not widely useful, options. Run +'configure --help' for more details. diff --git a/configure.ac b/configure.ac index 55d19beb7..7d2f12dc5 100644 --- a/configure.ac +++ b/configure.ac @@ -20,8 +20,7 @@ AC_CHECK_LIB([m],[cos]) dnl we need to check these exist, then it will generate a compile string for them. -PKG_CHECK_MODULES(ROOBUILDER, [ - clutter-gtk-1.0 +PKG_CHECK_MODULES(ROOBUILDER, [ clutter-gtk-1.0 glib-2.0 >= 2.24.1 gobject-2.0 >= 2.24.1 gtk+-3.0 >= 3.11.3 @@ -30,7 +29,7 @@ PKG_CHECK_MODULES(ROOBUILDER, [ gee-0.8 libxml-2.0 libsoup-2.4, - roojspacker-1.1 + roojspacker-1.2 ]) dnl --- libvala -- needs to find matching really.. diff --git a/debian/README b/debian/README new file mode 100644 index 000000000..02b26bce4 --- /dev/null +++ b/debian/README @@ -0,0 +1,6 @@ +The Debian Package roobuilder +---------------------------- + +Comments regarding the Package + + -- Alan Thu, 16 May 2019 17:47:00 +0800 diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 000000000..b2cefab78 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,6 @@ +roobuilder for Debian +-------------------- + + + + -- Alan Thu, 16 May 2019 17:47:00 +0800 diff --git a/debian/README.source b/debian/README.source new file mode 100644 index 000000000..8375732cb --- /dev/null +++ b/debian/README.source @@ -0,0 +1,10 @@ +roobuilder for Debian +-------------------- + + + + + + -- Alan Thu, 16 May 2019 17:47:00 +0800 + diff --git a/debian/autoreconf.after b/debian/autoreconf.after new file mode 100644 index 000000000..bba07e933 --- /dev/null +++ b/debian/autoreconf.after @@ -0,0 +1,220 @@ +6eea1cef1a961dc5c2ef097725c8132b ./roobuilder.desktop +1347d659e83304654e25bcc1f65c9199 ./NEWS +b991e5e96350ca96b2495eb33a13ceb9 ./README +bac3fb7f33d1f10f02f0b6460d2eee12 ./install-sh +5db3cf4d791f482908f0f4a158794ba0 ./notes/flutter.txt +97f2718962a7909393f49dd4efee49df ./Makefile.in +d41d8cd98f00b204e9800998ecf8427e ./ChangeLog +dc2a3bd2e90ea29308069119e150d84c ./src/c/jscore_object_call_as_function.c +2c88d5ad89ce40f359e8414bfd040e45 ./src/Main.vala +437f6610203214a814dc36114bb7b437 ./src/Builder4/WindowRooView.bjs +7272e7972a83347b82448b2b06096e8c ./src/Builder4/Editor.c +9ab1eabf13565763ada54b9a7f0b5912 ./src/Builder4/DialogTemplateSelect.bjs +70800a190a8949d7e047426fdd369747 ./src/Builder4/ProjectSettings.bjs +f5dc979d81e74ab04bc3c900cf9156b3 ./src/Builder4/WindowLeftProps.c +254a8daff9072d59e32f03113d02e429 ./src/Builder4/DialogTemplateSelect.vala +c5ef3fde1b376ea73b1006e3d669edb7 ./src/Builder4/ClutterFiles.bjs +189bc983b2dc0403b5aba0e4a609216b ./src/Builder4/RooProjectSettings.bjs +c2bb7577fb27ec3cef054511b0522bcd ./src/Builder4/DialogConfirm.c +e09dd27e29d115acecd768c13efc7633 ./src/Builder4/WindowLeftProjects.vala +4f275dc627f27b9cf7ee985f75f0d565 ./src/Builder4/WindowLeftProjects.c +edc8430ca864508d07046aa44624ab22 ./src/Builder4/ProjectSettings.c +de51165527299a2c386ca4da85454b05 ./src/Builder4/ValaCompileErrors.bjs +068e65d2956ba1ffa4261d7fcaf23a9b ./src/Builder4/WindowAddProp.c +94f3a77a9014c646b2b47f207378126a ./src/Builder4/WindowLeftTree.c +b4637d799b5e74ac3688fdaac268c8cd ./src/Builder4/ValaCompileResults.bjs +bcbd703da89ceddaf872c411a4c7c6ea ./src/Builder4/WindowState.c +8885b520fec55e22d24df7035d93e2ae ./src/Builder4/WindowLeftTree.bjs +4b3ca347619a75423add229246d6934b ./src/Builder4/ValaProjectSettings.c +0bc9d997eb1a281f42785b779ff7162d ./src/Builder4/GtkView.bjs +4f146ffda5805206cf3fc30c41c9bb24 ./src/Builder4/DialogSaveTemplate.bjs +082c8b2506b9475913ed023cef26dcba ./src/Builder4/StandardErrorDialog.c +01f94aae4ea0d5d9b6b56f34fa5f79f4 ./src/Builder4/DialogConfirm.vala +012a185febbfda70c1e6f47122ce6cd0 ./src/Builder4/FakeServer.c +2ce7c191c666149680726970ebfdd655 ./src/Builder4/PopoverProperty.vala +a927514d7a5725861a523749559447a2 ./src/Builder4/MainWindow.vala +9005b8b5550eeff5287f8d95cd54a030 ./src/Builder4/Editor.bjs +a755a32cc8adae70223cf843e849cc11 ./src/Builder4/ValaCompileErrors.c +d6f4ffc749087a615b6084cefeaf0987 ./src/Builder4/PopoverFileDetails.bjs +c9b5314660024b98a92708a49325d0f4 ./src/Builder4/ValaProjectSettings.vala +adeacc7dd66841599cda89216128060a ./src/Builder4/ValaCompileResults.c +b0b017c153127530146f16d8cf6c1da9 ./src/Builder4/FakeServer.vala +224ba6d82948ea5089d9da64f2a35502 ./src/Builder4/PopoverProperty.c +cdf6b9e2b975731ea6a358d1b80910cc ./src/Builder4/WindowRightPalete.c +215dadaf4cf4d649e9010beb4103ab41 ./src/Builder4/Editor.vala +98410f02491be156d42a51c73b20d849 ./src/Builder4/DialogSaveModule.vala +991eba8f43356da1547fb636a6aa3f3e ./src/Builder4/WindowRightPalete.bjs +1fc179baf6dce16840371f35d4b2f659 ./src/Builder4/EditProject.vala +3cd8ea2fb7f65354e434b4681d22cf63 ./src/Builder4/WindowRooView.vala +b5e47df8732d6dce9766fcf3a077d56b ./src/Builder4/PopoverFileDetails.c +f97678a1fc03a8f6d3350f4bbf5bbced ./src/Builder4/WindowLeftProjects.bjs +6278ccc0f64f5c2757895aacda602251 ./src/Builder4/CompileState.vala +6122186210519e090be762452501721b ./src/Builder4/GtkView.c +8d3de0f75a2c7a448a1356dce17a8d23 ./src/Builder4/WindowState.vala +ce71c422abff3cc9fab85e082758417f ./src/Builder4/EditProject.c +3240de25cec411f70a664d60a863a5bf ./src/Builder4/.deps/ValaProjectSettings.Po +eac560ca8d937023d780ae709733ee95 ./src/Builder4/.deps/ProjectSettings.Po +9e1a8765021308ba8f73802d9897224d ./src/Builder4/ValaCompileResults.vala +4f55a16a3c362bf5cb07cca9fe3d07aa ./src/Builder4/About.bjs +cbbda6c2c27159717513bd3b77066252 ./src/Builder4/DialogSaveTemplate.vala +fd611a15189da35ea6473d62d27ccf89 ./src/Builder4/ValaProjectSettings.bjs +b5a357fc8cb9f019b387d5da68799d6e ./src/Builder4/WindowAddProp.bjs +dd2c826f5916481994b8f05060e38561 ./src/Builder4/PopoverFileDetails.vala +1d5c2aaecfb07b255ee7b55bbeb28b94 ./src/Builder4/GladeView.bjs +dcf242bff22c4c817bc7ee67bd88a1ce ./src/Builder4/PopoverProperty.bjs +48da45963803c1c3ac9a3b7b25335ef5 ./src/Builder4/StandardErrorDialog.vala +ec30fd67d2234631eff16e8cfca3b930 ./src/Builder4/ClutterFiles.c +654440c2f4e05ed6b4b83860261246ee ./src/Builder4/WindowLeftProps.vala +15a0e9b11f4f9dfc8ff4cdb9a0c8f7af ./src/Builder4/WindowRightPalete.vala +a6d4c79785530fddc067d050b508c5c6 ./src/Builder4/GladeView.vala +0aed6f6d1867b8191b565e8fb8d44760 ./src/Builder4/About.vala +a3102786032699989c21897d8ab47464 ./src/Builder4/ClutterFiles.vala +6cd0d8e30e1f09056d312997ee79d19b ./src/Builder4/WindowAddProp.vala +d5cacc76623a955e58cc149ae16c92ed ./src/Builder4/MainWindow.bjs +3fcd0fabe94561a2b70f399e217a7fb3 ./src/Builder4/DialogSaveTemplate.c +1d5825633e811a1dda8727fa2fa5056d ./src/Builder4/EditProject.bjs +c37d5d443138bd1563e0e698b8610570 ./src/Builder4/WindowLeftProps.bjs +9273edb5b24f4d231a672609f4d10f72 ./src/Builder4/GtkView.vala +fa525dc2730059a4acf269ecc056438c ./src/Builder4/WindowLeftTree.vala +05bcd8817a6e30e5902c651e026e9485 ./src/Builder4/GladeExtras.vala +5cb20f952a96b0162253c5496ed2bc0a ./src/Builder4/DialogConfirm.bjs +184408c7dc96918ebd93f4e687236bb6 ./src/Builder4/About.c +4f50a2f48cdba1c5d9c4ec0e9cb0543b ./src/Builder4/DialogNewComponent.c +f5abeefbed7d8439d841b8eea1098ee0 ./src/Builder4/ValaCompileErrors.vala +372d3a7d2e3792715ab89f2bb3831388 ./src/Builder4/StandardErrorDialog.bjs +05486cb40599ea0075d3dc4e65120e78 ./src/Builder4/ValaProjectSettingsPopover.bjs +aad50720ee14dd0ef5e7a60721833677 ./src/Builder4/ValaProjectSettingsPopover.c +7a12ce5a0039fbfdd4744b1cf79379fe ./src/Builder4/DialogPluginWebkit.c +e1798d5a4a585db6006d63e4ff3b4cee ./src/Builder4/DialogTemplateSelect.c +5ead2660becb78a5eb4fd8bfd5e1cc69 ./src/Builder4/config1.builder +e43ad6bdc45bd4537e63484485f354df ./src/Builder4/MainWindow.c +c2eb8daa2916479455d30808eedd103e ./src/Builder4/DialogNewComponent.vala +40989c636c2d81e95a9087300a6439f1 ./src/Builder4/DialogNewComponent.bjs +b24d48781f2c87d7e1f2323d18a2b042 ./src/Builder4/ValaProjectSettingsPopover.vala +87a5712c433a6ba725c5ead9a49b635e ./src/Builder4/DialogSaveModule.c +b70433ba324a8fb409703a195e4d90a4 ./src/Builder4/RooProjectSettings.c +eb127adf198003d608837c990fb5a73d ./src/Builder4/WindowRooView.c +1f587a243cd750b83a861392add1d4e6 ./src/Builder4/DialogPluginWebkit.bjs +885fc466b28ef592476dc060b0ec8148 ./src/Builder4/ProjectSettings.vala +ff780fedae19e2780a259375966af977 ./src/Builder4/RooProjectSettings.vala +898e2fc7aba201e1b3c6c5b3d8e3b7a2 ./src/Builder4/DialogSaveModule.bjs +5b733e38e79a7c9525ac5269225fc9ab ./src/Builder4/DialogPluginWebkit.vala +8f97e7575b7a283a47ff5825d32ba7d0 ./src/Palete/ValaSourceCompiler.c +7b35a871bfb84e6c46b2070249d122ce ./src/Palete/CompletionProvider.vala +9fa897f76b56755cca3e98dbf3530770 ./src/Palete/Flutter.vala +ea0059f1957b5e6b17ca448dad6191c6 ./src/Palete/RooDatabase.vala +3390066e59fda51233aa69b9d0c83a60 ./src/Palete/VapiParser.vala +d19d498e7709fb8c9a39465a6e64ef4e ./src/Palete/ValaSource.vala +057a5bf7ddb3bdce1c032a2d6334109c ./src/Palete/Roo.c +f41ca8a737e50ed9a85d02e7cc6cf7e8 ./src/Palete/ValaSourceCompiler.vala +caa831b61659ccfd4db5628015fe12f9 ./src/Palete/Gir.vala +5ccf4a30083a52e1e1274ed69bc8cf98 ./src/Palete/Gir.c +7ccea6bbb31bf0087da5dc7794fa38d7 ./src/Palete/Palete.c +b0aed743a03ab341c9ea05c0f6aa2a07 ./src/Palete/Flutter.c +76b0f9b6b1d79b8864bc309b8e59e4b6 ./src/Palete/CompletionProvider.c +581fd21f70fd4084fd235284cd7d35ee ./src/Palete/Gtk.vala +91e2f33476f3df8c2cf2673f4550aa5f ./src/Palete/Gtk.c +1d5404639d887029ab380571e3aaf963 ./src/Palete/Palete.vala +094a17ad6d135983c84ea91a4811354e ./src/Palete/GirFile.vala +a88233b9eb5e1ee7d8431003bf5b3212 ./src/Palete/GirObject.c +075435f8e118605eb2889e1040591513 ./src/Palete/GirObject.vala +e589490ee8ccd6b95b8e4d049db17de4 ./src/Palete/VapiParser.c +2fcd8eab5b49e4a4bf5815f8e2b457c9 ./src/Palete/Javascript.vala +9a55ce91b22b74690964eca8aa2d88fa ./src/Palete/Javascript.c +74e61bf448fbfe17f950130f4ed19708 ./src/Palete/Roo.vala +0b5bb5eb10e37cf4b262ed24eb26c771 ./src/Palete/ValaSource.c +bd26d0e4e8f61f2f74044ccfcc32b19d ./src/Palete/RooDatabase.c +217ae3377b326521a86b434657f5f8db ./src/Project/Flutter.vala +a1dfdf1a841a3c6b93df7d912cc39ec1 ./src/Project/Roo.c +2a64befaee5f8a3ca707a23af2c4ea21 ./src/Project/Flutter.c +aa78cf21db9316718affb2775f24a30f ./src/Project/Project.vala +b3064aad4efb16fba5ef720ddd1e5bd5 ./src/Project/Gtk.vala +ff62d2b62b9f9ce77a6dc5eb3b67f879 ./src/Project/Gtk.c +a9098fd82b26aafc388d755863233436 ./src/Project/Project.c +5ab57539900a47c67ee131246dd5ad83 ./src/Project/Roo.vala +f7848e4f204c76e6ecef12cd266457bd ./src/Resources.vala +c500cd3a11de508932df990dc4a90e03 ./src/JsRender/JsRender.c +23a5a4cee54cb098913f4963565b3405 ./src/JsRender/NodeToJs.c +3463fa4065b0a0e0d4e1a10a7337ad79 ./src/JsRender/Flutter.vala +c13e885cb9c5d005596d16fba3c47fa8 ./src/JsRender/Lang.vala +288bd9a3fda1f4200b8a9096bc44dea4 ./src/JsRender/NodeToVala.vala +42598d76a0e67353b743eb64e678927f ./src/JsRender/NodeToGlade.vala +c4644cc113a7785eb8d4a6cd314fa384 ./src/JsRender/Roo.c +cca8742ee92c401d1d773f69cec0310d ./src/JsRender/Flutter.c +795386e67345b780edaa1ee7c6ab76bd ./src/JsRender/.deps/NodeToGlade.Po +570afee9030bd29d2bd527792a683427 ./src/JsRender/Node.vala +412a4a5d4c8546682e1c1d16ec34c158 ./src/JsRender/NodeToGtk.c +4e62ef7f135b4e584b8ad7323e191580 ./src/JsRender/PlainFile.c +48beb4f76709fdd459c3becc85a23522 ./src/JsRender/Gtk.vala +6943b34ed483aff73c1782b8f67abe24 ./src/JsRender/Gtk.c +0d2aea902b7b7ea329bf8f5a94be4f19 ./src/JsRender/NodeToJs.vala +5bd3885eed20e3db5b50182e73e96486 ./src/JsRender/NodeToGtk.vala +7f055e60d2c6cf048eb76d95efdf324d ./src/JsRender/NodeToVala.c +aa81c2be70eef717f866f7befd9c4ca6 ./src/JsRender/Node.c +3a35080221d45b86345f4c13cb507d47 ./src/JsRender/JsRender.vala +fc35bec99bdbb9866d3284eecba161cf ./src/JsRender/PlainFile.vala +66abdb6c4667f431e3b7f402bd78de3b ./src/JsRender/NodeToGlade.c +b0e058351254b968e8ecd242732f144b ./src/JsRender/Lang.c +6733448aa8ea872c16f7ada96f872670 ./src/JsRender/Roo.vala +cd8431c45757810084dd256b824fb8bc ./src/Makefile.in +4ce5bbec19fa1c9ebdb13e7e77e0ed5a ./src/Application.vala +7092d3be746731ffe05b0b33be8dac75 ./src/Spawn.vala +700806e5f5f7e6aa79613173c3d57f5d ./src/vapi/webkit2gtk-3.0.vapi +659a69a8dee9ae4f08593f514effd91f ./src/vapi/javascriptcore.vapi +747b7b8e9902de789177be05f50c060c ./src/vapi/gladeui-2.0.vapi +68cfd3e90ce15ba9dad4b7b37504f875 ./src/vapi/libgda-5.0.vapi +1352f995b6afaa2b853dc7c0154c7b7a ./src/vapi/test-old/clutter-1.0.vapi +446a9caaaef7130e2dec0abacc227807 ./src/vapi/test-old/clutter-1.0.deps +0350c769f8ba1ac10db7ccee1133fb2c ./src/vapi/libgda-4.0.vapi +4ac1d8541498d9e18e485f4fd9205377 ./src/vapi/webkit2gtk-4.0.vapi +f89c0f1eef0e7c248bfe480e96439ccc ./src/vapi/gobject-introspection-1.0.vapi +7c0fd34de7d495cebaee5c7c5e2ed1ac ./src/vapi/libgda-5.0.deps +7c0fd34de7d495cebaee5c7c5e2ed1ac ./src/vapi/libgda-4.0.deps +a7fef8cb9bd957f2b1bb09dd5d6e5251 ./src/vapi/seed.vapi +c798806bb294207506bbb4048b7fd5c5 ./src/Makefile.am +38dbe56a5dded4eb2b849e1859efb18b ./config.h.in~ +eda3c072d9f068dd891ea0986963e871 ./.gitignore +f9352a0655e7e3060fd3a24d5f78f190 ./README.md +959bffe2993816eb32ec4bc1ec1d5875 ./LICENSE +91a2cbdb18360e2e8fcaec1f0f35e278 ./autom4te.cache/requests +0f986d44210396ed4464e798b1d5ce9b ./autom4te.cache/traces.1 +a6bd103f0a602aa369a1516f06b64440 ./autom4te.cache/output.1 +8b50b636c4e8c56a158ecfe01edb39ba ./autom4te.cache/traces.0 +a6bd103f0a602aa369a1516f06b64440 ./autom4te.cache/output.0 +d32239bcb673463ab874e80d47fae504 ./COPYING +94b2b1ed19e0f30985e5b242f5b92e7d ./README.txt +e194375eb17ee97cc2db1c3e680412a3 ./INSTALL.txt +234ae97ddd94d5596656997f26bdd94a ./AUTHORS +e93be940bda9805b18b8ca846d2de2a3 ./resources/mailer.builder.html +1a7782784d67a90e2ae208fcb4201c96 ./resources/RooUsage.txt +372ddbd7adb4dc8a7088a619edfa0f29 ./resources/Editors/Editor.Roo.LayoutDialog.bjs +d0f1f79d3446882d9deec05b74b41d7d ./resources/Editors/Editor.Roo.GridPanel.bjs +bcf4e7e1d446bd0d28964e4d36c29ea3 ./resources/Editors/Editor.Roo.GridPanel.js +4e81e520cb233ace7f9ff17f2990277f ./resources/Editors/Editor.Roo.LayoutDialog.js +a9117200c74bc72db6d5c9f8a1ce5815 ./resources/Gir.overides +f72e9f9fdb220731ee1c3ffe08a536fd ./resources/bootstrap.builder.html +bbc8301b56a86029440348e200099c6a ./resources/roo.builder.js +43132ba4eba80eb9372676e2db556fd4 ./resources/GtkUsage.txt +8dcc309c476908ddf5eb918da5dc693c ./resources/roo.builder.html +ba4d941cf15b1a233f7e43a846b7eaef ./configure.ac +17382ef7b74816c91ee84c6544a6cefc ./tools/flutter_sqlite.php +a04cee5026068c7834e137a397601b7b ./tools/flutter_extract.php +8e994154f15ad797670a43a0d95ec053 ./tools/flutter_nodes.php +38dbe56a5dded4eb2b849e1859efb18b ./config.h.in +07d430ce5391076acebaa0df9b53c740 ./config1.builder +f5330c9945d9d4614b980c7ae34bc64c ./Makefile.am +28e27b0082703426127843fe36c96cc0 ./compile +ff06331c3f16a2d526d6399dfeabf67a ./missing +615bc412455420ecc37d3c288b60a518 ./autogen.sh +f2766448e74c24bd1c1c5d12466093ae ./INSTALL +e5f9da8b55623ead67f2bcfee03fb4d4 ./depcomp +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/32x32/apps/roobuilder.png +59c13b531a926680fd6ab056e52caa4b ./pixmaps/Makefile.in +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/22x22/apps/roobuilder.png +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/48x48/apps/roobuilder.png +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/16x16/apps/roobuilder.png +93526bdbc7e5a3030f59bc53c8f48030 ./pixmaps/Makefile.am +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/24x24/apps/roobuilder.png +fa24c0fa97285945d72d7118b0994050 ./configure +95f5dbbfa807632edadf7e2a12f46142 ./aclocal.m4 +0d3a87501b8bdddc6c10720883d8f0af ./org.roojs.roobuilder.json diff --git a/debian/autoreconf.before b/debian/autoreconf.before new file mode 100644 index 000000000..059e7c22a --- /dev/null +++ b/debian/autoreconf.before @@ -0,0 +1,206 @@ +6eea1cef1a961dc5c2ef097725c8132b ./roobuilder.desktop +1347d659e83304654e25bcc1f65c9199 ./NEWS +b991e5e96350ca96b2495eb33a13ceb9 ./README +5db3cf4d791f482908f0f4a158794ba0 ./notes/flutter.txt +d41d8cd98f00b204e9800998ecf8427e ./ChangeLog +dc2a3bd2e90ea29308069119e150d84c ./src/c/jscore_object_call_as_function.c +2c88d5ad89ce40f359e8414bfd040e45 ./src/Main.vala +437f6610203214a814dc36114bb7b437 ./src/Builder4/WindowRooView.bjs +7272e7972a83347b82448b2b06096e8c ./src/Builder4/Editor.c +9ab1eabf13565763ada54b9a7f0b5912 ./src/Builder4/DialogTemplateSelect.bjs +70800a190a8949d7e047426fdd369747 ./src/Builder4/ProjectSettings.bjs +f5dc979d81e74ab04bc3c900cf9156b3 ./src/Builder4/WindowLeftProps.c +254a8daff9072d59e32f03113d02e429 ./src/Builder4/DialogTemplateSelect.vala +c5ef3fde1b376ea73b1006e3d669edb7 ./src/Builder4/ClutterFiles.bjs +189bc983b2dc0403b5aba0e4a609216b ./src/Builder4/RooProjectSettings.bjs +c2bb7577fb27ec3cef054511b0522bcd ./src/Builder4/DialogConfirm.c +e09dd27e29d115acecd768c13efc7633 ./src/Builder4/WindowLeftProjects.vala +4f275dc627f27b9cf7ee985f75f0d565 ./src/Builder4/WindowLeftProjects.c +edc8430ca864508d07046aa44624ab22 ./src/Builder4/ProjectSettings.c +de51165527299a2c386ca4da85454b05 ./src/Builder4/ValaCompileErrors.bjs +068e65d2956ba1ffa4261d7fcaf23a9b ./src/Builder4/WindowAddProp.c +94f3a77a9014c646b2b47f207378126a ./src/Builder4/WindowLeftTree.c +b4637d799b5e74ac3688fdaac268c8cd ./src/Builder4/ValaCompileResults.bjs +bcbd703da89ceddaf872c411a4c7c6ea ./src/Builder4/WindowState.c +8885b520fec55e22d24df7035d93e2ae ./src/Builder4/WindowLeftTree.bjs +4b3ca347619a75423add229246d6934b ./src/Builder4/ValaProjectSettings.c +0bc9d997eb1a281f42785b779ff7162d ./src/Builder4/GtkView.bjs +4f146ffda5805206cf3fc30c41c9bb24 ./src/Builder4/DialogSaveTemplate.bjs +082c8b2506b9475913ed023cef26dcba ./src/Builder4/StandardErrorDialog.c +01f94aae4ea0d5d9b6b56f34fa5f79f4 ./src/Builder4/DialogConfirm.vala +012a185febbfda70c1e6f47122ce6cd0 ./src/Builder4/FakeServer.c +2ce7c191c666149680726970ebfdd655 ./src/Builder4/PopoverProperty.vala +a927514d7a5725861a523749559447a2 ./src/Builder4/MainWindow.vala +9005b8b5550eeff5287f8d95cd54a030 ./src/Builder4/Editor.bjs +a755a32cc8adae70223cf843e849cc11 ./src/Builder4/ValaCompileErrors.c +d6f4ffc749087a615b6084cefeaf0987 ./src/Builder4/PopoverFileDetails.bjs +c9b5314660024b98a92708a49325d0f4 ./src/Builder4/ValaProjectSettings.vala +adeacc7dd66841599cda89216128060a ./src/Builder4/ValaCompileResults.c +b0b017c153127530146f16d8cf6c1da9 ./src/Builder4/FakeServer.vala +224ba6d82948ea5089d9da64f2a35502 ./src/Builder4/PopoverProperty.c +cdf6b9e2b975731ea6a358d1b80910cc ./src/Builder4/WindowRightPalete.c +215dadaf4cf4d649e9010beb4103ab41 ./src/Builder4/Editor.vala +98410f02491be156d42a51c73b20d849 ./src/Builder4/DialogSaveModule.vala +991eba8f43356da1547fb636a6aa3f3e ./src/Builder4/WindowRightPalete.bjs +1fc179baf6dce16840371f35d4b2f659 ./src/Builder4/EditProject.vala +3cd8ea2fb7f65354e434b4681d22cf63 ./src/Builder4/WindowRooView.vala +b5e47df8732d6dce9766fcf3a077d56b ./src/Builder4/PopoverFileDetails.c +f97678a1fc03a8f6d3350f4bbf5bbced ./src/Builder4/WindowLeftProjects.bjs +6278ccc0f64f5c2757895aacda602251 ./src/Builder4/CompileState.vala +6122186210519e090be762452501721b ./src/Builder4/GtkView.c +8d3de0f75a2c7a448a1356dce17a8d23 ./src/Builder4/WindowState.vala +ce71c422abff3cc9fab85e082758417f ./src/Builder4/EditProject.c +3240de25cec411f70a664d60a863a5bf ./src/Builder4/.deps/ValaProjectSettings.Po +eac560ca8d937023d780ae709733ee95 ./src/Builder4/.deps/ProjectSettings.Po +9e1a8765021308ba8f73802d9897224d ./src/Builder4/ValaCompileResults.vala +4f55a16a3c362bf5cb07cca9fe3d07aa ./src/Builder4/About.bjs +cbbda6c2c27159717513bd3b77066252 ./src/Builder4/DialogSaveTemplate.vala +fd611a15189da35ea6473d62d27ccf89 ./src/Builder4/ValaProjectSettings.bjs +b5a357fc8cb9f019b387d5da68799d6e ./src/Builder4/WindowAddProp.bjs +dd2c826f5916481994b8f05060e38561 ./src/Builder4/PopoverFileDetails.vala +1d5c2aaecfb07b255ee7b55bbeb28b94 ./src/Builder4/GladeView.bjs +dcf242bff22c4c817bc7ee67bd88a1ce ./src/Builder4/PopoverProperty.bjs +48da45963803c1c3ac9a3b7b25335ef5 ./src/Builder4/StandardErrorDialog.vala +ec30fd67d2234631eff16e8cfca3b930 ./src/Builder4/ClutterFiles.c +654440c2f4e05ed6b4b83860261246ee ./src/Builder4/WindowLeftProps.vala +15a0e9b11f4f9dfc8ff4cdb9a0c8f7af ./src/Builder4/WindowRightPalete.vala +a6d4c79785530fddc067d050b508c5c6 ./src/Builder4/GladeView.vala +0aed6f6d1867b8191b565e8fb8d44760 ./src/Builder4/About.vala +a3102786032699989c21897d8ab47464 ./src/Builder4/ClutterFiles.vala +6cd0d8e30e1f09056d312997ee79d19b ./src/Builder4/WindowAddProp.vala +d5cacc76623a955e58cc149ae16c92ed ./src/Builder4/MainWindow.bjs +3fcd0fabe94561a2b70f399e217a7fb3 ./src/Builder4/DialogSaveTemplate.c +1d5825633e811a1dda8727fa2fa5056d ./src/Builder4/EditProject.bjs +c37d5d443138bd1563e0e698b8610570 ./src/Builder4/WindowLeftProps.bjs +9273edb5b24f4d231a672609f4d10f72 ./src/Builder4/GtkView.vala +fa525dc2730059a4acf269ecc056438c ./src/Builder4/WindowLeftTree.vala +05bcd8817a6e30e5902c651e026e9485 ./src/Builder4/GladeExtras.vala +5cb20f952a96b0162253c5496ed2bc0a ./src/Builder4/DialogConfirm.bjs +184408c7dc96918ebd93f4e687236bb6 ./src/Builder4/About.c +4f50a2f48cdba1c5d9c4ec0e9cb0543b ./src/Builder4/DialogNewComponent.c +f5abeefbed7d8439d841b8eea1098ee0 ./src/Builder4/ValaCompileErrors.vala +372d3a7d2e3792715ab89f2bb3831388 ./src/Builder4/StandardErrorDialog.bjs +05486cb40599ea0075d3dc4e65120e78 ./src/Builder4/ValaProjectSettingsPopover.bjs +aad50720ee14dd0ef5e7a60721833677 ./src/Builder4/ValaProjectSettingsPopover.c +7a12ce5a0039fbfdd4744b1cf79379fe ./src/Builder4/DialogPluginWebkit.c +e1798d5a4a585db6006d63e4ff3b4cee ./src/Builder4/DialogTemplateSelect.c +5ead2660becb78a5eb4fd8bfd5e1cc69 ./src/Builder4/config1.builder +e43ad6bdc45bd4537e63484485f354df ./src/Builder4/MainWindow.c +c2eb8daa2916479455d30808eedd103e ./src/Builder4/DialogNewComponent.vala +40989c636c2d81e95a9087300a6439f1 ./src/Builder4/DialogNewComponent.bjs +b24d48781f2c87d7e1f2323d18a2b042 ./src/Builder4/ValaProjectSettingsPopover.vala +87a5712c433a6ba725c5ead9a49b635e ./src/Builder4/DialogSaveModule.c +b70433ba324a8fb409703a195e4d90a4 ./src/Builder4/RooProjectSettings.c +eb127adf198003d608837c990fb5a73d ./src/Builder4/WindowRooView.c +1f587a243cd750b83a861392add1d4e6 ./src/Builder4/DialogPluginWebkit.bjs +885fc466b28ef592476dc060b0ec8148 ./src/Builder4/ProjectSettings.vala +ff780fedae19e2780a259375966af977 ./src/Builder4/RooProjectSettings.vala +898e2fc7aba201e1b3c6c5b3d8e3b7a2 ./src/Builder4/DialogSaveModule.bjs +5b733e38e79a7c9525ac5269225fc9ab ./src/Builder4/DialogPluginWebkit.vala +8f97e7575b7a283a47ff5825d32ba7d0 ./src/Palete/ValaSourceCompiler.c +7b35a871bfb84e6c46b2070249d122ce ./src/Palete/CompletionProvider.vala +9fa897f76b56755cca3e98dbf3530770 ./src/Palete/Flutter.vala +ea0059f1957b5e6b17ca448dad6191c6 ./src/Palete/RooDatabase.vala +3390066e59fda51233aa69b9d0c83a60 ./src/Palete/VapiParser.vala +d19d498e7709fb8c9a39465a6e64ef4e ./src/Palete/ValaSource.vala +057a5bf7ddb3bdce1c032a2d6334109c ./src/Palete/Roo.c +f41ca8a737e50ed9a85d02e7cc6cf7e8 ./src/Palete/ValaSourceCompiler.vala +caa831b61659ccfd4db5628015fe12f9 ./src/Palete/Gir.vala +5ccf4a30083a52e1e1274ed69bc8cf98 ./src/Palete/Gir.c +7ccea6bbb31bf0087da5dc7794fa38d7 ./src/Palete/Palete.c +b0aed743a03ab341c9ea05c0f6aa2a07 ./src/Palete/Flutter.c +76b0f9b6b1d79b8864bc309b8e59e4b6 ./src/Palete/CompletionProvider.c +581fd21f70fd4084fd235284cd7d35ee ./src/Palete/Gtk.vala +91e2f33476f3df8c2cf2673f4550aa5f ./src/Palete/Gtk.c +1d5404639d887029ab380571e3aaf963 ./src/Palete/Palete.vala +094a17ad6d135983c84ea91a4811354e ./src/Palete/GirFile.vala +a88233b9eb5e1ee7d8431003bf5b3212 ./src/Palete/GirObject.c +075435f8e118605eb2889e1040591513 ./src/Palete/GirObject.vala +e589490ee8ccd6b95b8e4d049db17de4 ./src/Palete/VapiParser.c +2fcd8eab5b49e4a4bf5815f8e2b457c9 ./src/Palete/Javascript.vala +9a55ce91b22b74690964eca8aa2d88fa ./src/Palete/Javascript.c +74e61bf448fbfe17f950130f4ed19708 ./src/Palete/Roo.vala +0b5bb5eb10e37cf4b262ed24eb26c771 ./src/Palete/ValaSource.c +bd26d0e4e8f61f2f74044ccfcc32b19d ./src/Palete/RooDatabase.c +217ae3377b326521a86b434657f5f8db ./src/Project/Flutter.vala +a1dfdf1a841a3c6b93df7d912cc39ec1 ./src/Project/Roo.c +2a64befaee5f8a3ca707a23af2c4ea21 ./src/Project/Flutter.c +aa78cf21db9316718affb2775f24a30f ./src/Project/Project.vala +b3064aad4efb16fba5ef720ddd1e5bd5 ./src/Project/Gtk.vala +ff62d2b62b9f9ce77a6dc5eb3b67f879 ./src/Project/Gtk.c +a9098fd82b26aafc388d755863233436 ./src/Project/Project.c +5ab57539900a47c67ee131246dd5ad83 ./src/Project/Roo.vala +f7848e4f204c76e6ecef12cd266457bd ./src/Resources.vala +c500cd3a11de508932df990dc4a90e03 ./src/JsRender/JsRender.c +23a5a4cee54cb098913f4963565b3405 ./src/JsRender/NodeToJs.c +3463fa4065b0a0e0d4e1a10a7337ad79 ./src/JsRender/Flutter.vala +c13e885cb9c5d005596d16fba3c47fa8 ./src/JsRender/Lang.vala +288bd9a3fda1f4200b8a9096bc44dea4 ./src/JsRender/NodeToVala.vala +42598d76a0e67353b743eb64e678927f ./src/JsRender/NodeToGlade.vala +c4644cc113a7785eb8d4a6cd314fa384 ./src/JsRender/Roo.c +cca8742ee92c401d1d773f69cec0310d ./src/JsRender/Flutter.c +795386e67345b780edaa1ee7c6ab76bd ./src/JsRender/.deps/NodeToGlade.Po +570afee9030bd29d2bd527792a683427 ./src/JsRender/Node.vala +412a4a5d4c8546682e1c1d16ec34c158 ./src/JsRender/NodeToGtk.c +4e62ef7f135b4e584b8ad7323e191580 ./src/JsRender/PlainFile.c +48beb4f76709fdd459c3becc85a23522 ./src/JsRender/Gtk.vala +6943b34ed483aff73c1782b8f67abe24 ./src/JsRender/Gtk.c +0d2aea902b7b7ea329bf8f5a94be4f19 ./src/JsRender/NodeToJs.vala +5bd3885eed20e3db5b50182e73e96486 ./src/JsRender/NodeToGtk.vala +7f055e60d2c6cf048eb76d95efdf324d ./src/JsRender/NodeToVala.c +aa81c2be70eef717f866f7befd9c4ca6 ./src/JsRender/Node.c +3a35080221d45b86345f4c13cb507d47 ./src/JsRender/JsRender.vala +fc35bec99bdbb9866d3284eecba161cf ./src/JsRender/PlainFile.vala +66abdb6c4667f431e3b7f402bd78de3b ./src/JsRender/NodeToGlade.c +b0e058351254b968e8ecd242732f144b ./src/JsRender/Lang.c +6733448aa8ea872c16f7ada96f872670 ./src/JsRender/Roo.vala +4ce5bbec19fa1c9ebdb13e7e77e0ed5a ./src/Application.vala +7092d3be746731ffe05b0b33be8dac75 ./src/Spawn.vala +700806e5f5f7e6aa79613173c3d57f5d ./src/vapi/webkit2gtk-3.0.vapi +659a69a8dee9ae4f08593f514effd91f ./src/vapi/javascriptcore.vapi +747b7b8e9902de789177be05f50c060c ./src/vapi/gladeui-2.0.vapi +68cfd3e90ce15ba9dad4b7b37504f875 ./src/vapi/libgda-5.0.vapi +1352f995b6afaa2b853dc7c0154c7b7a ./src/vapi/test-old/clutter-1.0.vapi +446a9caaaef7130e2dec0abacc227807 ./src/vapi/test-old/clutter-1.0.deps +0350c769f8ba1ac10db7ccee1133fb2c ./src/vapi/libgda-4.0.vapi +4ac1d8541498d9e18e485f4fd9205377 ./src/vapi/webkit2gtk-4.0.vapi +f89c0f1eef0e7c248bfe480e96439ccc ./src/vapi/gobject-introspection-1.0.vapi +7c0fd34de7d495cebaee5c7c5e2ed1ac ./src/vapi/libgda-5.0.deps +7c0fd34de7d495cebaee5c7c5e2ed1ac ./src/vapi/libgda-4.0.deps +a7fef8cb9bd957f2b1bb09dd5d6e5251 ./src/vapi/seed.vapi +c798806bb294207506bbb4048b7fd5c5 ./src/Makefile.am +eda3c072d9f068dd891ea0986963e871 ./.gitignore +f9352a0655e7e3060fd3a24d5f78f190 ./README.md +959bffe2993816eb32ec4bc1ec1d5875 ./LICENSE +d32239bcb673463ab874e80d47fae504 ./COPYING +94b2b1ed19e0f30985e5b242f5b92e7d ./README.txt +e194375eb17ee97cc2db1c3e680412a3 ./INSTALL.txt +234ae97ddd94d5596656997f26bdd94a ./AUTHORS +e93be940bda9805b18b8ca846d2de2a3 ./resources/mailer.builder.html +1a7782784d67a90e2ae208fcb4201c96 ./resources/RooUsage.txt +372ddbd7adb4dc8a7088a619edfa0f29 ./resources/Editors/Editor.Roo.LayoutDialog.bjs +d0f1f79d3446882d9deec05b74b41d7d ./resources/Editors/Editor.Roo.GridPanel.bjs +bcf4e7e1d446bd0d28964e4d36c29ea3 ./resources/Editors/Editor.Roo.GridPanel.js +4e81e520cb233ace7f9ff17f2990277f ./resources/Editors/Editor.Roo.LayoutDialog.js +a9117200c74bc72db6d5c9f8a1ce5815 ./resources/Gir.overides +f72e9f9fdb220731ee1c3ffe08a536fd ./resources/bootstrap.builder.html +bbc8301b56a86029440348e200099c6a ./resources/roo.builder.js +43132ba4eba80eb9372676e2db556fd4 ./resources/GtkUsage.txt +8dcc309c476908ddf5eb918da5dc693c ./resources/roo.builder.html +ba4d941cf15b1a233f7e43a846b7eaef ./configure.ac +17382ef7b74816c91ee84c6544a6cefc ./tools/flutter_sqlite.php +a04cee5026068c7834e137a397601b7b ./tools/flutter_extract.php +8e994154f15ad797670a43a0d95ec053 ./tools/flutter_nodes.php +38dbe56a5dded4eb2b849e1859efb18b ./config.h.in +07d430ce5391076acebaa0df9b53c740 ./config1.builder +f5330c9945d9d4614b980c7ae34bc64c ./Makefile.am +615bc412455420ecc37d3c288b60a518 ./autogen.sh +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/32x32/apps/roobuilder.png +59c13b531a926680fd6ab056e52caa4b ./pixmaps/Makefile.in +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/22x22/apps/roobuilder.png +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/48x48/apps/roobuilder.png +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/16x16/apps/roobuilder.png +93526bdbc7e5a3030f59bc53c8f48030 ./pixmaps/Makefile.am +8fe4d7396ce59f473126cfaa971bb078 ./pixmaps/24x24/apps/roobuilder.png +95f5dbbfa807632edadf7e2a12f46142 ./aclocal.m4 +0d3a87501b8bdddc6c10720883d8f0af ./org.roojs.roobuilder.json diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 000000000..4b654d810 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +roobuilder (4.0.0) unstable; urgency=medium + + * Initial Release. + + -- Alan Thu, 16 May 2019 17:47:00 +0800 diff --git a/debian/compat b/debian/compat new file mode 100644 index 000000000..b4de39476 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +11 diff --git a/debian/control b/debian/control new file mode 100644 index 000000000..e28ae0d2d --- /dev/null +++ b/debian/control @@ -0,0 +1,15 @@ +Source: roobuilder +Section: unknown +Priority: optional +Maintainer: Alan +Build-Depends: debhelper (>= 11), autotools-dev +Standards-Version: 4.1.3 +Homepage: +#Vcs-Browser: https://salsa.debian.org/debian/roobuilder +#Vcs-Git: https://salsa.debian.org/debian/roobuilder.git + +Package: roobuilder +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 000000000..d21a95150 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,34 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: roobuilder +Source: + +Files: * +Copyright: + +License: GPL-3.0+ + +Files: debian/* +Copyright: 2019 Alan +License: GPL-3.0+ + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. +# Please avoid picking licenses with terms that are more restrictive than the +# packaged work, as it may make Debian's contributions unacceptable upstream. diff --git a/debian/debhelper-build-stamp b/debian/debhelper-build-stamp new file mode 100644 index 000000000..01b6105ff --- /dev/null +++ b/debian/debhelper-build-stamp @@ -0,0 +1 @@ +roobuilder diff --git a/debian/files b/debian/files new file mode 100644 index 000000000..095cc2cbc --- /dev/null +++ b/debian/files @@ -0,0 +1,3 @@ +roobuilder-dbgsym_4.0.0_amd64.ddeb debug optional +roobuilder_4.0.0_amd64.buildinfo unknown optional +roobuilder_4.0.0_amd64.deb unknown optional diff --git a/debian/manpage.1.ex b/debian/manpage.1.ex new file mode 100644 index 000000000..32e3b1821 --- /dev/null +++ b/debian/manpage.1.ex @@ -0,0 +1,56 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" (C) Copyright 2019 Alan , +.\" +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH Roobuilder SECTION "May 16 2019" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +roobuilder \- program to do something +.SH SYNOPSIS +.B roobuilder +.RI [ options ] " files" ... +.br +.B bar +.RI [ options ] " files" ... +.SH DESCRIPTION +This manual page documents briefly the +.B roobuilder +and +.B bar +commands. +.PP +.\" TeX users may be more comfortable with the \fB\fP and +.\" \fI\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBroobuilder\fP is a program that... +.SH OPTIONS +These programs follow the usual GNU command line syntax, with long +options starting with two dashes (`-'). +A summary of options is included below. +For a complete description, see the Info files. +.TP +.B \-h, \-\-help +Show summary of options. +.TP +.B \-v, \-\-version +Show version of program. +.SH SEE ALSO +.BR bar (1), +.BR baz (1). +.br +The programs are documented fully by +.IR "The Rise and Fall of a Fooish Bar" , +available via the Info system. diff --git a/debian/manpage.sgml.ex b/debian/manpage.sgml.ex new file mode 100644 index 000000000..8fd412c59 --- /dev/null +++ b/debian/manpage.sgml.ex @@ -0,0 +1,154 @@ + manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + + FIRSTNAME"> + SURNAME"> + + May 16 2019"> + + SECTION"> + alan@roojs.com"> + + Roobuilder"> + + + Debian"> + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2003 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + program to do something + + + + &dhpackage; + + + + + + + + DESCRIPTION + + This manual page documents briefly the + &dhpackage; and bar + commands. + + This manual page was written for the &debian; distribution + because the original program does not have a manual page. + Instead, it has documentation in the &gnu; + Info format; see below. + + &dhpackage; is a program that... + + + + OPTIONS + + These programs follow the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. For a complete description, see the + Info files. + + + + + + + + Show summary of options. + + + + + + + + Show version of program. + + + + + + SEE ALSO + + bar (1), baz (1). + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + Info system. + + + AUTHOR + + This manual page was written by &dhusername; &dhemail; for + the &debian; system (and may be used by others). Permission is + granted to copy, distribute and/or modify this document under + the terms of the &gnu; General Public License, Version 2 any + later version published by the Free Software Foundation. + + + On Debian systems, the complete text of the GNU General Public + License can be found in /usr/share/common-licenses/GPL. + + + +
+ + diff --git a/debian/manpage.xml.ex b/debian/manpage.xml.ex new file mode 100644 index 000000000..ecd75610f --- /dev/null +++ b/debian/manpage.xml.ex @@ -0,0 +1,291 @@ + +.
will be generated. You may view the +manual page with: nroff -man .
| less'. A typical entry +in a Makefile or Makefile.am is: + +DB2MAN = /usr/share/sgml/docbook/stylesheet/xsl/docbook-xsl/manpages/docbook.xsl +XP = xsltproc -''-nonet -''-param man.charmap.use.subset "0" + +manpage.1: manpage.xml + $(XP) $(DB2MAN) $< + +The xsltproc binary is found in the xsltproc package. The XSL files are in +docbook-xsl. A description of the parameters you can use can be found in the +docbook-xsl-doc-* packages. Please remember that if you create the nroff +version in one of the debian/rules file targets (such as build), you will need +to include xsltproc and docbook-xsl in your Build-Depends control field. +Alternatively use the xmlto command/package. That will also automatically +pull in xsltproc and docbook-xsl. + +Notes for using docbook2x: docbook2x-man does not automatically create the +AUTHOR(S) and COPYRIGHT sections. In this case, please add them manually as + ... . + +To disable the automatic creation of the AUTHOR(S) and COPYRIGHT sections +read /usr/share/doc/docbook-xsl/doc/manpages/authors.html. This file can be +found in the docbook-xsl-doc-html package. + +Validation can be done using: `xmllint -''-noout -''-valid manpage.xml` + +General documentation about man-pages and man-page-formatting: +man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/ + +--> + + + + + + + + + + + + + +]> + + + + &dhtitle; + &dhpackage; + + + &dhfirstname; + &dhsurname; + Wrote this manpage for the Debian system. +
+ &dhemail; +
+
+
+ + 2007 + &dhusername; + + + This manual page was written for the Debian system + (and may be used by others). + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU General Public License, + Version 2 or (at your option) any later version published by + the Free Software Foundation. + On Debian systems, the complete text of the GNU General Public + License can be found in + /usr/share/common-licenses/GPL. + +
+ + &dhucpackage; + &dhsection; + + + &dhpackage; + program to do something + + + + &dhpackage; + + + + + + + + + this + + + + + + + + this + that + + + + + &dhpackage; + + + + + + + + + + + + + + + + + + + DESCRIPTION + This manual page documents briefly the + &dhpackage; and bar + commands. + This manual page was written for the Debian distribution + because the original program does not have a manual page. + Instead, it has documentation in the GNU + info + 1 + format; see below. + &dhpackage; is a program that... + + + OPTIONS + The program follows the usual GNU command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. For a complete description, see the + + info + 1 + files. + + + + + + + Does this and that. + + + + + + + Show summary of options. + + + + + + + Show version of program. + + + + + + FILES + + + /etc/foo.conf + + The system-wide configuration file to control the + behaviour of &dhpackage;. See + + foo.conf + 5 + for further details. + + + + ${HOME}/.foo.conf + + The per-user configuration file to control the + behaviour of &dhpackage;. See + + foo.conf + 5 + for further details. + + + + + + ENVIRONMENT + + + FOO_CONF + + If used, the defined file is used as configuration + file (see also ). + + + + + + DIAGNOSTICS + The following diagnostics may be issued + on stderr: + + + Bad configuration file. Exiting. + + The configuration file seems to contain a broken configuration + line. Use the option, to get more info. + + + + + &dhpackage; provides some return codes, that can + be used in scripts: + + Code + Diagnostic + + 0 + Program exited successfully. + + + 1 + The configuration file seems to be broken. + + + + + + BUGS + The program is currently limited to only work + with the foobar library. + The upstreams BTS can be found + at . + + + SEE ALSO + + + bar + 1 + , + baz + 1 + , + foo.conf + 5 + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + info + 1 + system. + +
+ diff --git a/debian/menu.ex b/debian/menu.ex new file mode 100644 index 000000000..d86daf904 --- /dev/null +++ b/debian/menu.ex @@ -0,0 +1,2 @@ +?package(roobuilder):needs="X11|text|vc|wm" section="Applications/see-menu-manual"\ + title="roobuilder" command="/usr/bin/roobuilder" diff --git a/debian/postinst.ex b/debian/postinst.ex new file mode 100644 index 000000000..c22db8cae --- /dev/null +++ b/debian/postinst.ex @@ -0,0 +1,39 @@ +#!/bin/sh +# postinst script for roobuilder +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + configure) + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/postrm.ex b/debian/postrm.ex new file mode 100644 index 000000000..e138da49b --- /dev/null +++ b/debian/postrm.ex @@ -0,0 +1,37 @@ +#!/bin/sh +# postrm script for roobuilder +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/preinst.ex b/debian/preinst.ex new file mode 100644 index 000000000..5ac3b31a1 --- /dev/null +++ b/debian/preinst.ex @@ -0,0 +1,35 @@ +#!/bin/sh +# preinst script for roobuilder +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + install|upgrade) + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/prerm.ex b/debian/prerm.ex new file mode 100644 index 000000000..dd15411cc --- /dev/null +++ b/debian/prerm.ex @@ -0,0 +1,38 @@ +#!/bin/sh +# prerm script for roobuilder +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `upgrade' +# * `failed-upgrade' +# * `remove' `in-favour' +# * `deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + remove|upgrade|deconfigure) + ;; + + failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/roobuilder-docs.docs b/debian/roobuilder-docs.docs new file mode 100644 index 000000000..d6341a026 --- /dev/null +++ b/debian/roobuilder-docs.docs @@ -0,0 +1,3 @@ +README.source +README +README.Debian diff --git a/debian/roobuilder.cron.d.ex b/debian/roobuilder.cron.d.ex new file mode 100644 index 000000000..93d2f758c --- /dev/null +++ b/debian/roobuilder.cron.d.ex @@ -0,0 +1,4 @@ +# +# Regular cron jobs for the roobuilder package +# +0 4 * * * root [ -x /usr/bin/roobuilder_maintenance ] && /usr/bin/roobuilder_maintenance diff --git a/debian/roobuilder.doc-base.EX b/debian/roobuilder.doc-base.EX new file mode 100644 index 000000000..418cfc102 --- /dev/null +++ b/debian/roobuilder.doc-base.EX @@ -0,0 +1,20 @@ +Document: roobuilder +Title: Debian roobuilder Manual +Author: +Abstract: This manual describes what roobuilder is + and how it can be used to + manage online manuals on Debian systems. +Section: unknown + +Format: debiandoc-sgml +Files: /usr/share/doc/roobuilder/roobuilder.sgml.gz + +Format: postscript +Files: /usr/share/doc/roobuilder/roobuilder.ps.gz + +Format: text +Files: /usr/share/doc/roobuilder/roobuilder.text.gz + +Format: HTML +Index: /usr/share/doc/roobuilder/html/index.html +Files: /usr/share/doc/roobuilder/html/*.html diff --git a/debian/roobuilder.substvars b/debian/roobuilder.substvars new file mode 100644 index 000000000..dd0fb506e --- /dev/null +++ b/debian/roobuilder.substvars @@ -0,0 +1,3 @@ +shlibs:Depends=libc6 (>= 2.14), libcairo2 (>= 1.2.4), libclutter-1.0-0 (>= 1.11.10), libclutter-gtk-1.0-0 (>= 0.91.8), libgda-5.0-4 (>= 5.0.2), libgdk-pixbuf2.0-0 (>= 2.22.0), libgee-0.8-2 (>= 0.8.3), libglib2.0-0 (>= 2.35.9), libgtk-3-0 (>= 3.16.2), libgtksourceview-3.0-1 (>= 3.10.1), libjavascriptcoregtk-4.0-18, libjson-glib-1.0-0 (>= 0.16.0), libpango-1.0-0 (>= 1.14.0), libsoup2.4-1 (>= 2.41.90), libvala-0.36-0 (>= 0.35.1), libwebkit2gtk-4.0-37 (>= 2.5.3), roojspacker +misc:Depends= +misc:Pre-Depends= diff --git a/debian/roobuilder/DEBIAN/control b/debian/roobuilder/DEBIAN/control new file mode 100644 index 000000000..b7d46261b --- /dev/null +++ b/debian/roobuilder/DEBIAN/control @@ -0,0 +1,11 @@ +Package: roobuilder +Version: 4.0.0 +Architecture: amd64 +Maintainer: Alan +Installed-Size: 1176 +Depends: libc6 (>= 2.14), libcairo2 (>= 1.2.4), libclutter-1.0-0 (>= 1.11.10), libclutter-gtk-1.0-0 (>= 0.91.8), libgda-5.0-4 (>= 5.0.2), libgdk-pixbuf2.0-0 (>= 2.22.0), libgee-0.8-2 (>= 0.8.3), libglib2.0-0 (>= 2.35.9), libgtk-3-0 (>= 3.16.2), libgtksourceview-3.0-1 (>= 3.10.1), libjavascriptcoregtk-4.0-18, libjson-glib-1.0-0 (>= 0.16.0), libpango-1.0-0 (>= 1.14.0), libsoup2.4-1 (>= 2.41.90), libvala-0.36-0 (>= 0.35.1), libwebkit2gtk-4.0-37 (>= 2.5.3), roojspacker +Section: unknown +Priority: optional +Homepage: +Description: + diff --git a/debian/roobuilder/DEBIAN/md5sums b/debian/roobuilder/DEBIAN/md5sums new file mode 100644 index 000000000..4db9a869c --- /dev/null +++ b/debian/roobuilder/DEBIAN/md5sums @@ -0,0 +1,10 @@ +79c121a421c0b2329c0faa7d2192ce9d usr/bin/roobuilder +6eea1cef1a961dc5c2ef097725c8132b usr/share/applications/roobuilder.desktop +7d9c14e3aa7000aa755c80212eab3404 usr/share/doc/roobuilder/README.Debian +965ae87b17bc3df5facdd2ced32134d4 usr/share/doc/roobuilder/changelog.gz +fa7c793c19bbb543e862b58b47c239bd usr/share/doc/roobuilder/copyright +8fe4d7396ce59f473126cfaa971bb078 usr/share/icons/hicolor/16x16/apps/roobuilder.png +8fe4d7396ce59f473126cfaa971bb078 usr/share/icons/hicolor/22x22/apps/roobuilder.png +8fe4d7396ce59f473126cfaa971bb078 usr/share/icons/hicolor/24x24/apps/roobuilder.png +8fe4d7396ce59f473126cfaa971bb078 usr/share/icons/hicolor/32x32/apps/roobuilder.png +8fe4d7396ce59f473126cfaa971bb078 usr/share/icons/hicolor/48x48/apps/roobuilder.png diff --git a/debian/roobuilder/usr/bin/roobuilder b/debian/roobuilder/usr/bin/roobuilder new file mode 100755 index 000000000..0bbff7b45 Binary files /dev/null and b/debian/roobuilder/usr/bin/roobuilder differ diff --git a/debian/roobuilder/usr/share/applications/roobuilder.desktop b/debian/roobuilder/usr/share/applications/roobuilder.desktop new file mode 100644 index 000000000..3110851f1 --- /dev/null +++ b/debian/roobuilder/usr/share/applications/roobuilder.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Name=Roo App Builder +Comment=Vala and Javascript Application Builder +Exec=roobuilder +Icon=roobuilder +Terminal=false +Type=Application +StartupNotify=true +Categories=GNOME;GTK;Utility; diff --git a/debian/roobuilder/usr/share/doc/roobuilder/README.Debian b/debian/roobuilder/usr/share/doc/roobuilder/README.Debian new file mode 100644 index 000000000..b2cefab78 --- /dev/null +++ b/debian/roobuilder/usr/share/doc/roobuilder/README.Debian @@ -0,0 +1,6 @@ +roobuilder for Debian +-------------------- + + + + -- Alan Thu, 16 May 2019 17:47:00 +0800 diff --git a/debian/roobuilder/usr/share/doc/roobuilder/changelog.gz b/debian/roobuilder/usr/share/doc/roobuilder/changelog.gz new file mode 100644 index 000000000..ae44b56f0 Binary files /dev/null and b/debian/roobuilder/usr/share/doc/roobuilder/changelog.gz differ diff --git a/debian/roobuilder/usr/share/doc/roobuilder/copyright b/debian/roobuilder/usr/share/doc/roobuilder/copyright new file mode 100644 index 000000000..d21a95150 --- /dev/null +++ b/debian/roobuilder/usr/share/doc/roobuilder/copyright @@ -0,0 +1,34 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: roobuilder +Source: + +Files: * +Copyright: + +License: GPL-3.0+ + +Files: debian/* +Copyright: 2019 Alan +License: GPL-3.0+ + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. +# Please avoid picking licenses with terms that are more restrictive than the +# packaged work, as it may make Debian's contributions unacceptable upstream. diff --git a/debian/roobuilder/usr/share/icons/hicolor/16x16/apps/roobuilder.png b/debian/roobuilder/usr/share/icons/hicolor/16x16/apps/roobuilder.png new file mode 100644 index 000000000..8144c1b03 Binary files /dev/null and b/debian/roobuilder/usr/share/icons/hicolor/16x16/apps/roobuilder.png differ diff --git a/debian/roobuilder/usr/share/icons/hicolor/22x22/apps/roobuilder.png b/debian/roobuilder/usr/share/icons/hicolor/22x22/apps/roobuilder.png new file mode 100644 index 000000000..8144c1b03 Binary files /dev/null and b/debian/roobuilder/usr/share/icons/hicolor/22x22/apps/roobuilder.png differ diff --git a/debian/roobuilder/usr/share/icons/hicolor/24x24/apps/roobuilder.png b/debian/roobuilder/usr/share/icons/hicolor/24x24/apps/roobuilder.png new file mode 100644 index 000000000..8144c1b03 Binary files /dev/null and b/debian/roobuilder/usr/share/icons/hicolor/24x24/apps/roobuilder.png differ diff --git a/debian/roobuilder/usr/share/icons/hicolor/32x32/apps/roobuilder.png b/debian/roobuilder/usr/share/icons/hicolor/32x32/apps/roobuilder.png new file mode 100644 index 000000000..8144c1b03 Binary files /dev/null and b/debian/roobuilder/usr/share/icons/hicolor/32x32/apps/roobuilder.png differ diff --git a/debian/roobuilder/usr/share/icons/hicolor/48x48/apps/roobuilder.png b/debian/roobuilder/usr/share/icons/hicolor/48x48/apps/roobuilder.png new file mode 100644 index 000000000..8144c1b03 Binary files /dev/null and b/debian/roobuilder/usr/share/icons/hicolor/48x48/apps/roobuilder.png differ diff --git a/debian/rules b/debian/rules new file mode 100755 index 000000000..e1c367c12 --- /dev/null +++ b/debian/rules @@ -0,0 +1,25 @@ +#!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#export DH_VERBOSE = 1 + + +# see FEATURE AREAS in dpkg-buildflags(1) +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + + +%: + dh $@ + + +# dh_make generated override targets +# This is example for Cmake (See https://bugs.debian.org/641051 ) +#override_dh_auto_configure: +# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) + diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 000000000..89ae9db8f --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/notes/flutter.txt b/notes/flutter.txt new file mode 100644 index 000000000..b17511fee --- /dev/null +++ b/notes/flutter.txt @@ -0,0 +1,38 @@ +Create a project (with all the files..) + +flutter create /path/to/newdir +------- +build +build: (PWD== working dir) +flutter create apk + +------- +Set up emulators +flutter emulators +1 available emulator: + +Nexus_6_API_28 • Nexus 6 • Google • Nexus 6 API 28 + +To run an emulator, run 'flutter emulators --launch '. +To create a new emulator, run 'flutter emulators --create [--name xyz]'. + +You can find more information on managing emulators at the links below: + https://developer.android.com/studio/run/managing-avds + https://developer.android.com/studio/command-line/avdmanager + flutter emulator --launch Nexus_6_API_28 +------- +test run: + +flutter run + +(press 'r') - triggers the hot reload + +--------------------------- +emulator embedded? + +Xvfb :2 -screen 0 1024x768x24 > /dev/null 2>&1 & +x11vnc -display :2 -quiet -nopw +DISPLAY=:2 ~/Android/Sdk/emulator/emulator -avd Nexus_6_API_28 + +// this bti can use vnc-gtk... +vncviewer localhost:0 \ No newline at end of file diff --git a/org.roojs.roobuilder.json b/org.roojs.roobuilder.json new file mode 100644 index 000000000..0aa133820 --- /dev/null +++ b/org.roojs.roobuilder.json @@ -0,0 +1,48 @@ +{ + "id": "org.roojs.roobuilder", + "runtime": "org.gnome.Platform", + "runtime-version": "3.32", + "sdk": "org.gnome.Sdk", + "command": "roobuilder", + "clean": [ "/include", "*.la" ], + "build-options" : { + "cflags": "-O2 -g", + "cxxflags": "-O2 -g", + "env": { + "V": "1" + }, + "arch": { + "x86_64": { + "cflags": "-O3 -g" + } + } + }, + "modules": [ + { + "name" : "gtksourceview", + "config-opts" : [ + "--disable-Werror" + ], + "sources" : [ + { + "type" : "git", + "branch" : "gnome-3-24", + "url" : "https://gitlab.gnome.org/GNOME/gtksourceview.git" + } + ] + }, + { + "name" : "vala", + "config-opts" : [ + "--disable-Werror" + ], + "sources" : [ + { + "type" : "git", + "branch" : "0.36", + "url" : "https://gitlab.gnome.org/GNOME/vala.git" + } + ] + } + ] +} diff --git a/src/Application.vala b/src/Application.vala index 2892ae309..a39de4b80 100644 --- a/src/Application.vala +++ b/src/Application.vala @@ -58,13 +58,14 @@ { "add-file", 0, 0, OptionArg.STRING, ref opt_compile_add, "Add this file to compile list", null }, { "output", 0, 0, OptionArg.STRING, ref opt_compile_output, "output binary file path", null }, { "debug", 0, 0, OptionArg.NONE, ref opt_debug, "Show debug messages", null }, + { "pull-resources", 0, 0, OptionArg.NONE, ref opt_pull_resources, "Fetch the online resources", null }, // some testing code. { "list-projects", 0, 0, OptionArg.NONE, ref opt_list_projects, "List Projects", null }, { "list-files", 0, 0, OptionArg.NONE, ref opt_list_files, "List Files (in a project", null}, { "bjs", 0, 0, OptionArg.STRING, ref opt_bjs_compile, "convert bjs file", null }, { "bjs-target", 0, 0, OptionArg.STRING, ref opt_bjs_compile_target, "convert bjs file to tareet : vala / js", null }, - + { "test", 0, 0, OptionArg.STRING, ref opt_test, "run a test use 'help' to list the available tests", null }, { null } }; @@ -75,9 +76,11 @@ public static string opt_compile_output; public static string opt_bjs_compile; public static string opt_bjs_compile_target; + public static string opt_test; public static bool opt_debug = false; public static bool opt_list_projects = false; public static bool opt_list_files = false; + public static bool opt_pull_resources = false; public static string _self; @@ -126,6 +129,16 @@ GLib.Process.exit(Posix.EXIT_FAILURE); } + this.initDebug(); + this.runTests(); + this.pullResources(); + + Project.Project.loadAll(); + this.listProjects(); + var cur_project = this.compileProject(); + this.listFiles(cur_project); + this.compileBjs(cur_project); + this.compileVala(); } @@ -159,6 +172,165 @@ return dirname; } + + // --------------- non static... + + void initDebug() + { + + if (BuilderApplication.opt_debug || BuilderApplication.opt_compile_project == null) { + GLib.Log.set_handler(null, + GLib.LogLevelFlags.LEVEL_DEBUG | GLib.LogLevelFlags.LEVEL_WARNING, + (dom, lvl, msg) => { + print("%s: %s\n", dom, msg); + }); + } + + + } + void listProjects() + { + if (!BuilderApplication.opt_list_projects) { + return; + } + print("Projects\n %s\n", Project.Project.listAllToString()); + GLib.Process.exit(Posix.EXIT_SUCCESS); + + } + Project.Project? compileProject() + { + + if (BuilderApplication.opt_compile_project == null) { + return null; + } + Project.Project cur_project = null; + cur_project = Project.Project.getProjectByHash( BuilderApplication.opt_compile_project); + + if (cur_project == null) { + GLib.error("invalid project %s, use --list-projects to show project ids",BuilderApplication.opt_compile_project); + } + cur_project.scanDirs(); + + return cur_project; + + } + void listFiles(Project.Project? cur_project) + { + if (!BuilderApplication.opt_list_files) { + return; + } + if (cur_project == null) { + GLib.error("missing project, use --project to select which project"); + } + print("Files for %s\n %s\n", cur_project.name, cur_project.listAllFilesToString()); + GLib.Process.exit(Posix.EXIT_SUCCESS); + + } + void compileBjs(Project.Project? cur_project) + { + if (BuilderApplication.opt_bjs_compile == null) { + return; + } + if (cur_project == null) { + GLib.error("missing project, use --project to select which project"); + } + var file = cur_project.getByName(BuilderApplication.opt_bjs_compile); + if (file == null) { + GLib.error("missing file %s in project %s", BuilderApplication.opt_bjs_compile, cur_project.name); + } + //BuilderApplication.compileBjs(); + file.loadItems(); + var str = file.toSourceCode(); + + + if (!BuilderApplication.opt_debug) { + print("%s", str); + GLib.Process.exit(Posix.EXIT_SUCCESS); + } + + // dump the node tree + file.tree.dumpProps(); + + + var str_ar = str.split("\n"); + for(var i =0;i { + print("Got %d/%d", (int) p,(int)t); + if (p == t) { + loop.quit(); + } + }); + Resources.singleton().fetchStart(); + loop.run(); + GLib.Process.exit(Posix.EXIT_SUCCESS); + } + + + void runTests() + { + if (opt_test == null) { + return; + } + switch(opt_test) { + case "help": + print(""" +help - list available tests +flutter-project - create a flutter project in /tmp/test-flutter +"""); + break; + case "flutter-project": + Project.Project.loadAll(); + var p = Project.Project.factory("Flutter", "/tmp/test-flutter"); + var pa = p.palete as Palete.Flutter; + pa.dumpusage(); + var ar = pa.getChildList("material.Scaffold"); + GLib.debug("childlist for material.Scaffold is %s", + string.joinv( "\n-- ", ar) + ); + ar = pa.getDropList("material.MaterialApp"); + GLib.debug("droplist for material.MaterialApp is %s", + string.joinv( "\n-- ", ar) + ); + break; + + default: + print("Invalid test\n"); + break; + + + } + GLib.Process.exit(Posix.EXIT_SUCCESS); + } + + } diff --git a/src/Builder4/DialogNewComponent.bjs b/src/Builder4/DialogNewComponent.bjs index 07f044543..8015afa12 100644 --- a/src/Builder4/DialogNewComponent.bjs +++ b/src/Builder4/DialogNewComponent.bjs @@ -2,7 +2,7 @@ "name" : "DialogNewComponent", "parent" : "", "title" : "", - "path" : "/home/alan/gitlive/app.Builder.js/src/Builder4/DialogNewComponent.bjs", + "path" : "/home/alan/gitlive/roobuilder/src/Builder4/DialogNewComponent.bjs", "permname" : "", "modOrder" : "", "build_module" : "", @@ -14,14 +14,14 @@ "show" : "(self) => {\n this.el.show_all();\n //test\n}" }, "| void updateFileFromEntry" : "() {\n\n _this.file.title = _this.title.el.get_text();\n _this.file.region = _this.region.el.get_text(); \n _this.file.parent = _this.parent.el.get_text(); \n _this.file.permname = _this.permname.el.get_text(); \n _this.file.modOrder = _this.modOrder.el.get_text();\n \n if (_this.file.name.length > 0 && _this.file.name != _this.name.el.get_text()) {\n _this.file.renameTo(_this.name.el.get_text());\n }\n // store the module...\n _this.file.build_module = \"\"; \n Gtk.TreeIter iter; \n if (_this.build_module.el.get_active_iter (out iter)) {\n Value vfname;\n this.dbmodel.el.get_value (iter, 0, out vfname);\n if (((string)vfname).length > 0) {\n _this.file.build_module = (string)vfname;\n }\n \n }\n \n \n\n \n} ", - "id" : "DialogNewComponent", "@ void success" : "(Project.Project pr, JsRender.JsRender file)", + "id" : "DialogNewComponent", "default_width" : 500, "$ deletable" : true, "# Project.Project project" : "", "title" : "New Component", "xtype" : "Dialog", - "| void show" : "(JsRender.JsRender c) \n{\n this.project = c.project;\n \n //if (!this.el) {\n //this.init();\n //}\n \n _this.name.el.set_text(c.name);\n _this.title.el.set_text(c.title);\n _this.parent.el.set_text(c.parent); \n _this.region.el.set_text(c.region);\n _this.modOrder.el.set_text(c.modOrder);\n _this.permname.el.set_text(c.permname);\n \n if (c.path.length > 0) {\n this.el.set_title(\"Edit File Details - \" + c.name);\n } else {\n this.el.set_title(\"Create New File\");\n }\n \n var ar = new Gee.ArrayList();\n _this.dbmodel.loadData(ar,\"\");\n // load the modules... if relivant..\n if (this.project.xtype == \"Gtk\") {\n var p = (Project.Gtk)c.project;\n var cg = p.compilegroups;\n\n var iter = cg.map_iterator();\n while(iter.next()) {\n var key = iter.get_key();\n if (key == \"_default_\") {\n continue;\n }\n ar.add(key);\n };\n _this.dbmodel.loadData(ar, c.build_module);\n\n }\n \n \n _this.file = c;\n //console.log('show all');\n this.el.show_all();\n \n //this.success = c.success;\n \n \n}", + "| void show" : "(JsRender.JsRender c) \n{\n this.project = c.project;\n \n //if (!this.el) {\n //this.init();\n //}\n \n _this.name.el.set_text(c.name);\n _this.title.el.set_text(c.title);\n _this.parent.el.set_text(c.parent); \n _this.region.el.set_text(c.region);\n _this.modOrder.el.set_text(c.modOrder);\n _this.permname.el.set_text(c.permname);\n \n if (c.path.length > 0) {\n this.el.set_title(\"Edit File Details - \" + c.name);\n } else {\n this.el.set_title(\"Create New File\");\n }\n \n var ar = new Gee.ArrayList();\n _this.dbmodel.loadData(ar,\"\");\n // load the modules... if relivant..\n if (this.project.xtype == \"Gtk\") {\n var p = (Project.Gtk)c.project;\n var cg = p.compilegroups;\n\n var iter = cg.map_iterator();\n while(iter.next()) {\n var key = iter.get_key();\n if (key == \"_default_\") {\n continue;\n }\n ar.add(key);\n };\n _this.dbmodel.loadData(ar, c.build_module);\n\n } \n \n _this.file = c;\n //console.log('show all');\n this.el.show_all();\n \n //this.success = c.success;\n \n \n}", "# JsRender.JsRender file" : "null", "default_height" : 200, "$ modal" : true, @@ -75,8 +75,8 @@ }, { "label" : "Region", - "$ visible" : true, "tooltip_text" : "center, north, south, east, west", + "$ visible" : true, "xalign" : 0.90000000000000002, "* pack" : "attach_defaults,0,1,2,3", "xtype" : "Label", @@ -161,14 +161,14 @@ "items" : [ { "id" : "dbcellrenderer", - "xtype" : "CellRendererText", "* pack" : "pack_start,true", + "xtype" : "CellRendererText", "$ xns" : "Gtk" }, { "id" : "dbmodel", - "xtype" : "ListStore", "* pack" : "set_model", + "xtype" : "ListStore", "$ columns" : "typeof(string),typeof(string)", "n_columns" : 2, "$ xns" : "Gtk", @@ -182,14 +182,14 @@ }, { "label" : "Cancel", - "xtype" : "Button", "* pack" : "add_action_widget,0", + "xtype" : "Button", "$ xns" : "Gtk" }, { "label" : "OK", - "xtype" : "Button", "* pack" : "add_action_widget,1", + "xtype" : "Button", "$ xns" : "Gtk" } ] diff --git a/src/Builder4/DialogNewComponent.vala b/src/Builder4/DialogNewComponent.vala index ff65b70a0..319c7f528 100644 --- a/src/Builder4/DialogNewComponent.vala +++ b/src/Builder4/DialogNewComponent.vala @@ -1,6 +1,6 @@ static Xcls_DialogNewComponent _DialogNewComponent; -public class Xcls_DialogNewComponent : Object +public class Xcls_DialogNewComponent : Object { public Gtk.Dialog el; private Xcls_DialogNewComponent _this; @@ -27,7 +27,7 @@ public class Xcls_DialogNewComponent : Object public Project.Project project; public JsRender.JsRender file; - // ctor + // ctor public Xcls_DialogNewComponent() { _this = this; @@ -52,7 +52,7 @@ public class Xcls_DialogNewComponent : Object child_2.ref(); this.el.add_action_widget ( child_2.el , 1 ); - // listeners + //listeners this.el.delete_event.connect( (self, event) => { this.el.hide(); return true; @@ -164,7 +164,7 @@ public class Xcls_DialogNewComponent : Object }); } - // user defined functions + // user defined functions public void updateFileFromEntry () { _this.file.title = _this.title.el.get_text(); @@ -230,8 +230,7 @@ public class Xcls_DialogNewComponent : Object }; _this.dbmodel.loadData(ar, c.build_module); - } - + } _this.file = c; //console.log('show all'); @@ -241,7 +240,7 @@ public class Xcls_DialogNewComponent : Object } - public class Xcls_VBox2 : Object + public class Xcls_VBox2 : Object { public Gtk.VBox el; private Xcls_DialogNewComponent _this; @@ -249,7 +248,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_VBox2(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -263,9 +262,9 @@ public class Xcls_DialogNewComponent : Object this.el.pack_start ( child_0.el , false,false,0 ); } - // user defined functions + // user defined functions } - public class Xcls_Table3 : Object + public class Xcls_Table3 : Object { public Gtk.Table el; private Xcls_DialogNewComponent _this; @@ -273,7 +272,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Table3(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -326,9 +325,9 @@ public class Xcls_DialogNewComponent : Object this.el.attach_defaults ( child_13.el , 1,2,6,7 ); } - // user defined functions + // user defined functions } - public class Xcls_Label4 : Object + public class Xcls_Label4 : Object { public Gtk.Label el; private Xcls_DialogNewComponent _this; @@ -336,7 +335,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Label4(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -349,9 +348,10 @@ public class Xcls_DialogNewComponent : Object this.el.xalign = 0.900000f; } - // user defined functions + // user defined functions } - public class Xcls_name : Object + + public class Xcls_name : Object { public Gtk.Entry el; private Xcls_DialogNewComponent _this; @@ -359,7 +359,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_name(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -372,9 +372,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_Label6 : Object + + public class Xcls_Label6 : Object { public Gtk.Label el; private Xcls_DialogNewComponent _this; @@ -382,7 +383,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Label6(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -396,9 +397,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_title : Object + + public class Xcls_title : Object { public Gtk.Entry el; private Xcls_DialogNewComponent _this; @@ -406,7 +408,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_title(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -419,9 +421,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_Label8 : Object + + public class Xcls_Label8 : Object { public Gtk.Label el; private Xcls_DialogNewComponent _this; @@ -429,7 +432,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Label8(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -444,9 +447,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_region : Object + + public class Xcls_region : Object { public Gtk.Entry el; private Xcls_DialogNewComponent _this; @@ -454,7 +458,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_region(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -467,9 +471,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_Label10 : Object + + public class Xcls_Label10 : Object { public Gtk.Label el; private Xcls_DialogNewComponent _this; @@ -477,7 +482,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Label10(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -491,9 +496,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_parent : Object + + public class Xcls_parent : Object { public Gtk.Entry el; private Xcls_DialogNewComponent _this; @@ -501,7 +507,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_parent(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -514,9 +520,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_Label12 : Object + + public class Xcls_Label12 : Object { public Gtk.Label el; private Xcls_DialogNewComponent _this; @@ -524,7 +531,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Label12(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -538,9 +545,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_permname : Object + + public class Xcls_permname : Object { public Gtk.Entry el; private Xcls_DialogNewComponent _this; @@ -548,7 +556,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_permname(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -561,9 +569,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_Label14 : Object + + public class Xcls_Label14 : Object { public Gtk.Label el; private Xcls_DialogNewComponent _this; @@ -571,7 +580,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Label14(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -585,9 +594,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_modOrder : Object + + public class Xcls_modOrder : Object { public Gtk.Entry el; private Xcls_DialogNewComponent _this; @@ -595,7 +605,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_modOrder(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -608,9 +618,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_Label16 : Object + + public class Xcls_Label16 : Object { public Gtk.Label el; private Xcls_DialogNewComponent _this; @@ -618,7 +629,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Label16(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -632,9 +643,10 @@ public class Xcls_DialogNewComponent : Object this.el.visible = true; } - // user defined functions + // user defined functions } - public class Xcls_build_module : Object + + public class Xcls_build_module : Object { public Gtk.ComboBox el; private Xcls_DialogNewComponent _this; @@ -642,7 +654,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_build_module(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -659,14 +671,14 @@ public class Xcls_DialogNewComponent : Object child_1.ref(); this.el.set_model ( child_1.el ); - // init method + // init method this.el.add_attribute(_this.dbcellrenderer.el , "markup", 1 ); } - // user defined functions + // user defined functions } - public class Xcls_dbcellrenderer : Object + public class Xcls_dbcellrenderer : Object { public Gtk.CellRendererText el; private Xcls_DialogNewComponent _this; @@ -674,7 +686,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_dbcellrenderer(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -686,9 +698,10 @@ public class Xcls_DialogNewComponent : Object // set gobject values } - // user defined functions + // user defined functions } - public class Xcls_dbmodel : Object + + public class Xcls_dbmodel : Object { public Gtk.ListStore el; private Xcls_DialogNewComponent _this; @@ -696,7 +709,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_dbmodel(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -708,7 +721,7 @@ public class Xcls_DialogNewComponent : Object // set gobject values } - // user defined functions + // user defined functions public void loadData (Gee.ArrayList data, string cur) { this.el.clear(); Gtk.TreeIter iter; @@ -744,7 +757,11 @@ public class Xcls_DialogNewComponent : Object } } - public class Xcls_Button20 : Object + + + + + public class Xcls_Button20 : Object { public Gtk.Button el; private Xcls_DialogNewComponent _this; @@ -752,7 +769,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Button20(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -764,9 +781,10 @@ public class Xcls_DialogNewComponent : Object this.el.label = "Cancel"; } - // user defined functions + // user defined functions } - public class Xcls_Button21 : Object + + public class Xcls_Button21 : Object { public Gtk.Button el; private Xcls_DialogNewComponent _this; @@ -774,7 +792,7 @@ public class Xcls_DialogNewComponent : Object // my vars (def) - // ctor + // ctor public Xcls_Button21(Xcls_DialogNewComponent _owner ) { _this = _owner; @@ -786,6 +804,7 @@ public class Xcls_DialogNewComponent : Object this.el.label = "OK"; } - // user defined functions + // user defined functions } + } diff --git a/src/Builder4/EditProject.bjs b/src/Builder4/EditProject.bjs index b55233e4c..5b87580bb 100644 --- a/src/Builder4/EditProject.bjs +++ b/src/Builder4/EditProject.bjs @@ -2,7 +2,7 @@ "name" : "EditProject", "parent" : "", "title" : "", - "path" : "/home/alan/gitlive/app.Builder.js/src/Builder4/EditProject.bjs", + "path" : "/home/alan/gitlive/roobuilder/src/Builder4/EditProject.bjs", "permname" : "", "modOrder" : "", "build_module" : "builder", @@ -16,7 +16,7 @@ "title" : "Project Properties", "xtype" : "Dialog", "default_height" : 500, - "| Project.Project? show" : "() {\n \n\n //[ 'xtype' ].forEach(function(k) {\n // _this.get(k).setValue(typeof(c[k]) == 'undefined' ? '' : c[k]);\n //});\n\t// shouild set path..\n _this.model.loadData();\n this.el.show_all();\n \n var err_dialog = StandardErrorDialog.singleton();\n\n var id = -1;\n while (id < 0) {\n id = this.el.run();\n if (id < 1) {\n this.el.hide();\n return null;\n }\n \n \n if (_this.xtype.getValue().length < 1) {\n \n err_dialog.show(_this.el,\"You have to set Project type\"); \n id = -1;\n continue;\n }\n if (_this.dir.el.get_filename().length < 1) {\n \n err_dialog.show(_this.el,\"You have to select a folder\"); \n id = -1;\n continue;\n }\n \n }\n \n this.el.hide();\n \n \n \n \n var fn = _this.dir.el.get_filename();\n print(\"add %s\\n\" , fn);\n \n var project = Project.Project.factory(_this.xtype.getValue(), fn);\n project.save();\n Project.projects.set(project.name,project);\n \n //var pr = imports.Builder.Provider.ProjectManager.ProjectManager.update(this.project);\n \n return project;\n\n \n //this.success = c.success;\n}\n", + "| Project.Project? show" : "() {\n \n\n //[ 'xtype' ].forEach(function(k) {\n // _this.get(k).setValue(typeof(c[k]) == 'undefined' ? '' : c[k]);\n //});\n\t// shouild set path..\n _this.model.loadData();\n this.el.show_all();\n \n var err_dialog = StandardErrorDialog.singleton();\n\n var id = -1;\n while (id < 0) {\n id = this.el.run();\n if (id < 1) {\n this.el.hide();\n return null;\n }\n \n \n if (_this.xtype.getValue().length < 1) {\n \n err_dialog.show(_this.el,\"You have to set Project type\"); \n id = -1;\n continue;\n }\n if (_this.dir.el.get_filename().length < 1) {\n\n err_dialog.show(_this.el,\"You have to select a folder\"); \n id = -1;\n continue;\n }\n \n }\n \n this.el.hide();\n \n \n \n \n var fn = _this.dir.el.get_filename();\n print(\"add %s\\n\" , fn);\n \n var project = Project.Project.factory(_this.xtype.getValue(), fn);\n project.save();\n Project.projects.set(project.name,project);\n \n //var pr = imports.Builder.Provider.ProjectManager.ProjectManager.update(this.project);\n \n return project;\n\n \n //this.success = c.success;\n}\n", "$ modal" : true, "$ xns" : "Gtk", "border_width" : 3, @@ -44,7 +44,7 @@ "$ xns" : "Gtk" }, { - "| string getValue" : " () {\n var ix = this.el.get_active();\n if (ix < 0 ) {\n return \"\";\n }\n switch(ix) {\n case 0:\n return \"Roo\";\n case 1:\n return \"Gtk\";\n }\n return \"\";\n}\n", + "| string getValue" : " () {\n var ix = this.el.get_active();\n if (ix < 0 ) {\n return \"\";\n }\n switch(ix) {\n case 0:\n return \"Roo\";\n case 1:\n return \"Gtk\";\n case 2:\n return \"Flutter\";\n }\n return \"\";\n}\n", "id" : "xtype", "* init" : " this.el.add_attribute(_this.cellrender.el , \"markup\", 1 ); \n ", "xtype" : "ComboBox", @@ -64,7 +64,7 @@ "$ columns" : "typeof(string),typeof(string)", "n_columns" : 2, "$ xns" : "Gtk", - "| void loadData" : " ( ) {\n this.el.clear();\n \n Gtk.TreeIter iter;\n \n el.append(out iter);\n \n el.set_value(iter, 0, \"Roo\");\n el.set_value(iter, 1, \"Roo Project\");\n el.append(out iter);\n \n el.set_value(iter, 0, \"Gtk\");\n el.set_value(iter, 1, \"Gtk Project\");\n \n \n \n}\n" + "| void loadData" : " ( ) {\n this.el.clear();\n \n Gtk.TreeIter iter;\n \n el.append(out iter);\n el.set_value(iter, 0, \"Roo\");\n el.set_value(iter, 1, \"Roo Project\");\n \n el.append(out iter);\n el.set_value(iter, 0, \"Gtk\");\n el.set_value(iter, 1, \"Gtk Project\");\n \n el.append(out iter);\n el.set_value(iter, 0, \"Flutter\");\n el.set_value(iter, 1, \"Flutter Project\");\n \n \n}\n" } ] } diff --git a/src/Builder4/EditProject.vala b/src/Builder4/EditProject.vala index af626275b..2baecc910 100644 --- a/src/Builder4/EditProject.vala +++ b/src/Builder4/EditProject.vala @@ -75,18 +75,18 @@ public class EditProject : Object } - if (_this.xtype.getValue().length < 1) { - - err_dialog.show(_this.el,"You have to set Project type"); - id = -1; - continue; - } - if (_this.dir.el.get_filename().length < 1) { - - err_dialog.show(_this.el,"You have to select a folder"); - id = -1; - continue; - } + if (_this.xtype.getValue().length < 1) { + + err_dialog.show(_this.el,"You have to set Project type"); + id = -1; + continue; + } + if (_this.dir.el.get_filename().length < 1) { + + err_dialog.show(_this.el,"You have to select a folder"); + id = -1; + continue; + } } @@ -229,6 +229,8 @@ public class EditProject : Object return "Roo"; case 1: return "Gtk"; + case 2: + return "Flutter"; } return ""; } @@ -283,14 +285,16 @@ public class EditProject : Object Gtk.TreeIter iter; el.append(out iter); - el.set_value(iter, 0, "Roo"); el.set_value(iter, 1, "Roo Project"); - el.append(out iter); + el.append(out iter); el.set_value(iter, 0, "Gtk"); el.set_value(iter, 1, "Gtk Project"); + el.append(out iter); + el.set_value(iter, 0, "Flutter"); + el.set_value(iter, 1, "Flutter Project"); } diff --git a/src/Builder4/MainWindow.bjs b/src/Builder4/MainWindow.bjs index 058b576cf..5412b4696 100644 --- a/src/Builder4/MainWindow.bjs +++ b/src/Builder4/MainWindow.bjs @@ -33,8 +33,8 @@ "items" : [ { "id" : "headerbar", - "* pack" : "set_titlebar", "xtype" : "HeaderBar", + "* pack" : "set_titlebar", "bool show_close_button" : true, "$ xns" : "Gtk", "string title" : "Application Builder", @@ -47,8 +47,8 @@ "items" : [ { "bool use_popover" : false, - "* pack" : "add", "xtype" : "MenuButton", + "* pack" : "add", "$ xns" : "Gtk", "items" : [ { @@ -62,9 +62,9 @@ "listeners" : { "activate" : "( ) => {\n _this.openNewWindow();\n}" }, + "xtype" : "MenuItem", "string label" : "Open a new Window", "* pack" : "append", - "xtype" : "MenuItem", "$ xns" : "Gtk" }, { @@ -76,26 +76,26 @@ "listeners" : { "activate" : " ( ) => {\n Resources.singleton().fetchStart();\n}" }, + "* pack" : "append", "xtype" : "MenuItem", "string label" : "Download updated Resources", - "* pack" : "append", "$ xns" : "Gtk" }, { "listeners" : { "activate" : "() => {\n About.singleton().el.show();\n }" }, + "string label" : "About the Builder", "* pack" : "append", "xtype" : "MenuItem", - "string label" : "About the Builder", "$ xns" : "Gtk" } ] }, { + "xtype" : "Image", "utf8 icon_name" : "help-about", "* pack" : "set_image", - "xtype" : "Image", "$ xns" : "Gtk" } ] @@ -105,15 +105,15 @@ "clicked" : " ( ) => {\n _this.windowstate.switchState(WindowState.State.FILES);\n \n\n}" }, "id" : "openbtn", - "xtype" : "Button", "* pack" : "add", + "xtype" : "Button", "$ xns" : "Gtk", "$ tooltop_text" : "\"Open File\"", "items" : [ { + "* pack" : "set_image", "xtype" : "Image", "utf8 icon_name" : "document-open", - "* pack" : "set_image", "$ xns" : "Gtk" } ] @@ -130,9 +130,9 @@ "bool visible" : false, "items" : [ { + "utf8 icon_name" : "go-previous", "* pack" : "set_image", "xtype" : "Image", - "utf8 icon_name" : "go-previous", "$ xns" : "Gtk" } ] @@ -143,8 +143,8 @@ }, { "id" : "vbox", - "xtype" : "Box", "* pack" : "add", + "xtype" : "Box", "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "$ homogeneous" : false, @@ -160,29 +160,29 @@ "items" : [ { "id" : "leftpane", - "* pack" : "add1", "xtype" : "Box", + "* pack" : "add1", "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "items" : [ { "id" : "editpane", - "* pack" : "pack_start,true,true,0", "xtype" : "Paned", + "* pack" : "pack_start,true,true,0", "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "items" : [ { "id" : "tree", - "* pack" : "add1", "xtype" : "Box", + "* pack" : "add1", "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL" }, { "id" : "props", - "* pack" : "add2", "xtype" : "Box", + "* pack" : "add2", "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL" } @@ -256,8 +256,8 @@ "items" : [ { "* init" : "((Gtk.Container)(this.el.get_widget())).add ( child_0.el);", - "* pack" : "add_child", "xtype" : "Actor", + "* pack" : "add_child", "$ xns" : "GtkClutter", "items" : [ { @@ -265,16 +265,16 @@ "clicked" : " ( ) => {\n // if (_this.windowstate.state == WindowState.State.FILEPROJECT) {\n \n//\t _this.windowstate.switchState(WindowState.State.FILES);\n // } else { \n\t _this.windowstate.switchState(WindowState.State.PREVIEW);\n // }\n \n\n}" }, "utf8 tooltip_text" : "Back", - "xtype" : "Button", "* pack" : false, + "xtype" : "Button", "width_request" : 50, "$ xns" : "Gtk", "height_request" : 50, "items" : [ { + "* pack" : "set_image", "xtype" : "Image", "utf8 icon_name" : "go-previous", - "* pack" : "set_image", "$ xns" : "Gtk" } ] @@ -292,8 +292,8 @@ "items" : [ { "* init" : "((Gtk.Container)(this.el.get_widget())).add ( child_0.el);", - "xtype" : "Actor", "* pack" : "add_child", + "xtype" : "Actor", "$ xns" : "GtkClutter", "items" : [ { @@ -308,9 +308,9 @@ "height_request" : 50, "items" : [ { + "xtype" : "Image", "utf8 icon_name" : "document-properties", "* pack" : "set_image", - "xtype" : "Image", "$ xns" : "Gtk" } ] @@ -328,8 +328,8 @@ "items" : [ { "* init" : "((Gtk.Container)(this.el.get_widget())).add ( child_0.el);", - "xtype" : "Actor", "* pack" : "add_child", + "xtype" : "Actor", "$ xns" : "GtkClutter", "items" : [ { @@ -344,9 +344,9 @@ "height_request" : 50, "items" : [ { + "* pack" : "set_image", "xtype" : "Image", "utf8 icon_name" : "emblem-system", - "* pack" : "set_image", "$ xns" : "Gtk" } ] @@ -368,8 +368,8 @@ "items" : [ { "* init" : "((Gtk.Container)(this.el.get_widget())).add ( child_0.el);", - "xtype" : "Actor", "* pack" : "add_child", + "xtype" : "Actor", "$ xns" : "GtkClutter", "items" : [ { @@ -384,9 +384,9 @@ "height_request" : 50, "items" : [ { + "utf8 icon_name" : "list-add", "* pack" : "set_image", "xtype" : "Image", - "utf8 icon_name" : "list-add", "$ xns" : "Gtk" } ] @@ -404,8 +404,8 @@ "items" : [ { "* init" : "((Gtk.Container)(this.el.get_widget())).add ( child_0.el);", - "xtype" : "Actor", "* pack" : "add_child", + "xtype" : "Actor", "$ xns" : "GtkClutter", "items" : [ { @@ -420,9 +420,9 @@ "height_request" : 50, "items" : [ { + "xtype" : "Image", "utf8 icon_name" : "format-justify-left", "* pack" : "set_image", - "xtype" : "Image", "$ xns" : "Gtk" } ] @@ -440,8 +440,8 @@ "items" : [ { "* init" : "((Gtk.Container)(this.el.get_widget())).add ( child_0.el);", - "xtype" : "Actor", "* pack" : "add_child", + "xtype" : "Actor", "$ xns" : "GtkClutter", "items" : [ { @@ -456,9 +456,9 @@ "height_request" : 50, "items" : [ { + "* pack" : "set_image", "xtype" : "Image", "utf8 icon_name" : "appointment-new", - "* pack" : "set_image", "$ xns" : "Gtk" } ] @@ -476,8 +476,8 @@ "items" : [ { "* init" : "((Gtk.Container)(this.el.get_widget())).add ( child_0.el);", - "xtype" : "Actor", "* pack" : "add_child", + "xtype" : "Actor", "$ xns" : "GtkClutter", "items" : [ { @@ -492,9 +492,9 @@ "height_request" : 50, "items" : [ { + "xtype" : "Image", "utf8 icon_name" : "folder-new", "* pack" : "set_image", - "xtype" : "Image", "$ xns" : "Gtk" } ] @@ -512,8 +512,8 @@ "items" : [ { "* init" : "((Gtk.Container)(this.el.get_widget())).add ( child_0.el);", - "xtype" : "Actor", "* pack" : "add_child", + "xtype" : "Actor", "$ xns" : "GtkClutter", "items" : [ { @@ -528,9 +528,9 @@ "height_request" : 50, "items" : [ { + "utf8 icon_name" : "document-new", "* pack" : "set_image", "xtype" : "Image", - "utf8 icon_name" : "document-new", "$ xns" : "Gtk" } ] @@ -548,8 +548,8 @@ "items" : [ { "* init" : "((Gtk.Container)(this.el.get_widget())).add ( child_0.el);", - "xtype" : "Actor", "* pack" : "add_child", + "xtype" : "Actor", "$ xns" : "GtkClutter", "items" : [ { @@ -564,9 +564,9 @@ "height_request" : 50, "items" : [ { + "xtype" : "Image", "utf8 icon_name" : "user-trash", "* pack" : "set_image", - "xtype" : "Image", "$ xns" : "Gtk" } ] @@ -585,21 +585,21 @@ }, { "bool homogeneous" : false, - "* pack" : "pack_end,false,true,0", "xtype" : "Box", + "* pack" : "pack_end,false,true,0", "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL", "items" : [ { + "string label" : " ", "* pack" : "pack_start,true,true,0", "xtype" : "Label", - "string label" : " ", "$ xns" : "Gtk" }, { "bool show_text" : true, - "ulong handler_id" : "-1", "id" : "statusbar", + "ulong handler_id" : "-1", "* init" : "{\n this.handler_id = Resources.singleton().updateProgress.connect((pos,total) => {\n if (pos < 1) {\n this.el.hide();\n _this.mainpane.el.set_sensitive(true);\n \n return;\n }\n _this.mainpane.el.set_sensitive(false);\n this.el.show();\n this.el.set_fraction ((1.0f * pos) / (1.0f * total));\n this.el.set_text(\"Fetching Resource : %s/%s\".printf(pos.to_string(), total.to_string()));\n \n });\n}\n", "xtype" : "ProgressBar", "* pack" : "pack_start,true,true,0", @@ -635,9 +635,9 @@ "$ xns" : "Gtk", "items" : [ { + "utf8 icon_name" : "system-search", "* pack" : "set_image", "xtype" : "Image", - "utf8 icon_name" : "system-search", "bool sensitive" : false, "$ xns" : "Gtk" } @@ -645,8 +645,8 @@ }, { "id" : "statusbar_compilestatus_label", - "* pack" : "add", "xtype" : "MenuItem", + "* pack" : "add", "string label" : "Compile Status:", "$ xns" : "Gtk" }, @@ -665,9 +665,9 @@ "$ xns" : "Gtk", "items" : [ { + "* pack" : "set_image", "xtype" : "Image", "utf8 icon_name" : "dialog-error", - "* pack" : "set_image", "$ xns" : "Gtk" } ] @@ -687,9 +687,9 @@ "$ xns" : "Gtk", "items" : [ { + "utf8 icon_name" : "dialog-warning", "* pack" : "set_image", "xtype" : "Image", - "utf8 icon_name" : "dialog-warning", "$ xns" : "Gtk" } ] @@ -709,9 +709,9 @@ "$ xns" : "Gtk", "items" : [ { + "xtype" : "Image", "utf8 icon_name" : "dialog-information", "* pack" : "set_image", - "xtype" : "Image", "$ xns" : "Gtk" } ] @@ -729,9 +729,9 @@ "$ xns" : "Gtk", "items" : [ { + "utf8 icon_name" : "media-playback-start", "* pack" : "set_image", "xtype" : "Image", - "utf8 icon_name" : "media-playback-start", "$ xns" : "Gtk" } ] @@ -740,8 +740,8 @@ }, { "id" : "statusbar_compile_spinner", - "* pack" : "add", "xtype" : "Spinner", + "* pack" : "add", "| void stop" : "() {\n this.el.stop();\n this.el.hide();\n}\n", "string tooltip_text" : "Compiling", "$ xns" : "Gtk", diff --git a/src/Builder4/PopoverFileDetails.bjs b/src/Builder4/PopoverFileDetails.bjs index 85a670741..a9bcb765f 100644 --- a/src/Builder4/PopoverFileDetails.bjs +++ b/src/Builder4/PopoverFileDetails.bjs @@ -12,8 +12,8 @@ "closed" : "() => {\n if (!this.done) {\n _this.el.show();\n \n }\n} " }, "| void updateFileFromEntry" : "() {\n\n _this.file.title = _this.title.el.get_text();\n _this.file.region = _this.region.el.get_text(); \n _this.file.parent = _this.parent.el.get_text(); \n _this.file.permname = _this.permname.el.get_text(); \n _this.file.modOrder = _this.modOrder.el.get_text();\n \n if (_this.file.name.length > 0 && _this.file.name != _this.name.el.get_text()) {\n _this.file.renameTo(_this.name.el.get_text());\n }\n // store the module...\n _this.file.build_module = \"\"; \n Gtk.TreeIter iter; \n if (_this.build_module.el.get_active_iter (out iter)) {\n Value vfname;\n this.dbmodel.el.get_value (iter, 0, out vfname);\n if (((string)vfname).length > 0) {\n _this.file.build_module = (string)vfname;\n }\n \n }\n \n \n\n \n} ", - "@ void success" : "(Project.Project pr, JsRender.JsRender file)", "id" : "PopoverFileDetails", + "@ void success" : "(Project.Project pr, JsRender.JsRender file)", "| void show" : "(JsRender.JsRender c, Gtk.Widget btn) \n{\n this.project = c.project;\n this.done = false;\n \n \n //if (!this.el) {\n //this.init();\n //}\n \n _this.name.el.set_text(c.name);\n _this.title.el.set_text(c.title);\n _this.parent.el.set_text(c.parent); \n _this.region.el.set_text(c.region);\n _this.modOrder.el.set_text(c.modOrder);\n _this.permname.el.set_text(c.permname);\n \n \n \n \n \n \n \n \n var ar = new Gee.ArrayList();\n _this.dbmodel.loadData(ar,\"\");\n // load the modules... if relivant..\n if (this.project.xtype == \"Gtk\") {\n var p = (Project.Gtk)c.project;\n var cg = p.compilegroups;\n\n var iter = cg.map_iterator();\n while(iter.next()) {\n var key = iter.get_key();\n if (key == \"_default_\") {\n continue;\n }\n ar.add(key);\n };\n _this.dbmodel.loadData(ar, c.build_module);\n\n }\n \n \n _this.file = c;\n //console.log('show all');\n this.el.set_modal(true);\n this.el.set_relative_to(btn);\n\n this.el.set_position(Gtk.PositionType.RIGHT);\n \n // window + header?\n print(\"SHOWALL - POPIP\\n\");\n this.el.show_all();\n this.name.el.grab_focus();\n \n \n \n if (c.path.length > 0) {\n\t this.save_btn.el.set_label(\"Save\");\n\t\t_this.filetype.el.hide();\n\t\t_this.filetypelbl.el.hide();\n\t\t_this.filetype.showhide(true); // as we only work on bjs files currently\n } else {\n this.save_btn.el.set_label(\"Create\");\n _this.ftdbmodel.loadData(\"bjs\"); // fixme - need to determine type..\n\t _this.filetype.el.show();\n\t _this.filetypelbl.el.show();\n }\n \n \n //this.success = c.success;\n \n \n}", "bool done" : false, "# Project.Project project" : "", @@ -27,8 +27,8 @@ "items" : [ { "bool homogeneous" : false, - "xtype" : "Box", "$ pack" : "add", + "xtype" : "Box", "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "items" : [ @@ -68,19 +68,19 @@ "* init" : "this.el.add_attribute(_this.ftdbcellrenderer.el , \"markup\", 1 );", "* pack" : "attach,1,0,1,1", "xtype" : "ComboBox", - "| void showhide" : "(bool is_bjs) {\n\tfor (var i = 2; i < 9;i++) {\n\t\tvar el = _this.grid.el.get_child_at(0,i);\n\t\t\n\t\tvar showhide= is_bjs;\n\t\tif (i> 7) {\n\t\t\tshowhide = !showhide;\n\t\t}\n\t\t\n\t\tif (showhide) {\n\t\t el.show();\n\t\t} else {\n\t\t\tel.hide();\n\t\t}\n\t\t el = _this.grid.el.get_child_at(1,i);\n\t\tif (showhide) {\n\t\t el.show();\n\t\t} else {\n\t\t\tel.hide();\n\t\t} \n }\n // load up the directories\n //??? why can we not create bjs files in other directories??\n\tif (!is_bjs && _this.file.path.length < 1) {\n\t\t_this.dirmodel.loadData();\n\t\t\n\t\t\n\t}\n \n \n}\n", + "| void showhide" : "(bool is_bjs) {\n\n\n\tif (_this.project.xtype != \"Roo\") {\n\t \tis_bjs = false;\n \t}\n\n\tfor (var i = 2; i < 9;i++) {\n\t\tvar el = _this.grid.el.get_child_at(0,i);\n\t\t\n\t\tvar showhide= is_bjs;\n\t\tif (i> 7) {\n\t\t\tshowhide = !showhide;\n\t\t}\n\t\t\n\t\tif (showhide) {\n\t\t el.show();\n\t\t} else {\n\t\t\tel.hide();\n\t\t}\n\t\t el = _this.grid.el.get_child_at(1,i);\n\t\tif (showhide) {\n\t\t el.show();\n\t\t} else {\n\t\t\tel.hide();\n\t\t} \n }\n // load up the directories\n //??? why can we not create bjs files in other directories??\n\t//if (!is_bjs && _this.file.path.length < 1) {\n\t\n\t\t_this.dirmodel.loadData();\n\t\t\n\t\t\n\t//}\n \n \n}\n", "$ xns" : "Gtk", "items" : [ { "id" : "ftdbcellrenderer", - "* pack" : "pack_start,true", "xtype" : "CellRendererText", + "* pack" : "pack_start,true", "$ xns" : "Gtk" }, { "id" : "ftdbmodel", - "* pack" : "set_model", "xtype" : "ListStore", + "* pack" : "set_model", "$ columns" : "typeof(string),typeof(string)", "n_columns" : 2, "$ xns" : "Gtk", @@ -123,8 +123,8 @@ }, { "label" : "Region", - "$ visible" : true, "tooltip_text" : "center, north, south, east, west", + "$ visible" : true, "xalign" : 0.90000000000000002, "* pack" : "attach,0,3,1,1", "xtype" : "Label", @@ -209,14 +209,14 @@ "items" : [ { "id" : "dbcellrenderer", - "xtype" : "CellRendererText", "* pack" : "pack_start,true", + "xtype" : "CellRendererText", "$ xns" : "Gtk" }, { "id" : "dbmodel", - "xtype" : "ListStore", "* pack" : "set_model", + "xtype" : "ListStore", "$ columns" : "typeof(string),typeof(string)", "n_columns" : 2, "$ xns" : "Gtk", @@ -243,14 +243,14 @@ "items" : [ { "id" : "dircellrenderer", - "* pack" : "pack_start,true", "xtype" : "CellRendererText", + "* pack" : "pack_start,true", "$ xns" : "Gtk" }, { "id" : "dirmodel", - "* pack" : "set_model", "xtype" : "ListStore", + "* pack" : "set_model", "$ columns" : "typeof(string),typeof(string)", "n_columns" : 2, "$ xns" : "Gtk", @@ -272,9 +272,9 @@ "listeners" : { "clicked" : "() => { \n\n _this.done = true;\n _this.el.hide(); \n}" }, + "string label" : "Cancel", "* pack" : "add", "xtype" : "Button", - "string label" : "Cancel", "$ xns" : "Gtk" }, { @@ -282,8 +282,8 @@ "clicked" : "( ) => { \n\n \n\n\n\tif (_this.name.el.get_text().length < 1) {\n\t StandardErrorDialog.show(\n\t _this.mainwindow.el,\n\t \"You have to set Component name \"\n\t );\n\t \n\t return;\n\t}\n\t// what does this do?\n\t\n\tvar isNew = _this.file.name.length > 0 ? false : true;\n\t/*\n\tif (!isNew && this.file.name != _this.name.el.get_text()) {\n\t Xcls_StandardErrorDialog.singleton().show(\n\t this.el,\n\t \"Sorry changing names does not work yet. \"\n\t );\n\t \n\t return;\n\t}\n\t*/\n\t \n\t\n \n\t// FIXME - this may be more complicated...\n\t//for (var i in this.def) {\n\t// this.file[i] = this.get(i).el.get_text();\n\t//}\n\n\tif (!isNew) {\n\t try {\n\t _this.updateFileFromEntry();\n\t } catch( JsRender.Error.RENAME_FILE_EXISTS er) {\n\t Xcls_StandardErrorDialog.singleton().show(\n\t _this.mainwindow.el,\n\t \"The name you used already exists \"\n\t );\n\t return;\n\t \n\t }\n\n\t _this.done = true;\n\t _this.file.save();\n\t _this.el.hide();\n\t return;\n\t}\n\t\n\t// ---------------- NEW FILES...\n\tGtk.TreeIter iter;\n\n\tif (!_this.filetype.el.get_active_iter(out iter)) {\n\t\t// should not happen...\n\t\t// so we are jut going to return without \n\t\tStandardErrorDialog.show(\n\t _this.mainwindow.el,\n\t \"You must select a file type. \"\n\t );\n\t return;\n\t\t \n\t}\n\t\n\t\n\tvar fn = _this.name.el.get_text();\n\t\n\tValue ftypename;\n\t_this.ftdbmodel.el.get_value (iter, 0, out ftypename);\n\tvar ext = ((string)ftypename);\n\tvar dir = _this.project.firstPath(); \n\tif (ext != \"bjs\") {\n\t \n\t\tif (!_this.dir.el.get_active_iter(out iter)) {\n\t\t\t// should not happen...\n\t\t\t// so we are jut going to return without \n\t\t\tStandardErrorDialog.show(\n\t\t\t _this.mainwindow.el,\n\t\t\t \"You must select a directory \"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tValue vdir;\n\t\t_this.dirmodel.el.get_value (iter, 0, out vdir);\n\t\tdir = (string)vdir;\n\t}\n\t\n\tvar targetfile = dir + \"/\" + fn;\n\t\n\t// strip the file type off the end..\n\t\n\t\n var rx = new GLib.Regex(\"\\\\.\" + ext + \"$\",GLib.RegexCompileFlags.CASELESS);\n targetfile = rx.replace(targetfile, targetfile.length, 0, \"\"); \n \n\tif (GLib.FileUtils.test(targetfile + \".\" + ext, GLib.FileTest.EXISTS)) {\n\t Xcls_StandardErrorDialog.singleton().show(\n\t _this.mainwindow.el,\n\t \"That file already exists\"\n\t ); \n\t return;\n\t}\n \n var f = JsRender.JsRender.factory(\n\t\text == \"bjs\" ? _this.file.project.xtype : \"PlainFile\", \n\t\t_this.file.project, \n\t\ttargetfile + \".\" + ext);\n\n\t_this.file = f;\n\t\n\n\t\n\t_this.updateFileFromEntry();\n\t_this.file.loaded = true;\n\t_this.file.save();\n\tif (ext == \"bjs\") {\n\t\t_this.file.project.addFile(_this.file);\n\t}\n\t\n \n\t// what about .js ?\n _this.done = true;\n\t_this.el.hide();\n\n// hopefull this will work with bjs files..\n\t\n\t_this.success(_this.project, _this.file);\n \n}" }, "id" : "save_btn", - "xtype" : "Button", "* pack" : "add", + "xtype" : "Button", "string label" : "Save", "$ xns" : "Gtk" } diff --git a/src/Builder4/PopoverFileDetails.vala b/src/Builder4/PopoverFileDetails.vala index bb186e479..3cdfce268 100644 --- a/src/Builder4/PopoverFileDetails.vala +++ b/src/Builder4/PopoverFileDetails.vala @@ -376,6 +376,12 @@ public class Xcls_PopoverFileDetails : Object // user defined functions public void showhide (bool is_bjs) { + + + if (_this.project.xtype != "Roo") { + is_bjs = false; + } + for (var i = 2; i < 9;i++) { var el = _this.grid.el.get_child_at(0,i); @@ -398,11 +404,12 @@ public class Xcls_PopoverFileDetails : Object } // load up the directories //??? why can we not create bjs files in other directories?? - if (!is_bjs && _this.file.path.length < 1) { + //if (!is_bjs && _this.file.path.length < 1) { + _this.dirmodel.loadData(); - } + //} } diff --git a/src/Builder4/WindowRightPalete.bjs b/src/Builder4/WindowRightPalete.bjs index ee0957d84..cd5eb5214 100644 --- a/src/Builder4/WindowRightPalete.bjs +++ b/src/Builder4/WindowRightPalete.bjs @@ -2,7 +2,7 @@ "name" : "WindowRightPalete", "parent" : "", "title" : "", - "path" : "/home/alan/gitlive/app.Builder.js/src/Builder4/WindowRightPalete.bjs", + "path" : "/home/alan/gitlive/roobuilder/src/Builder4/WindowRightPalete.bjs", "permname" : "", "modOrder" : "", "build_module" : "builder", @@ -21,8 +21,8 @@ "items" : [ { "id" : "viewbox", - "* pack" : "pack_start,true,true,0", "xtype" : "Box", + "* pack" : "pack_start,true,true,0", "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "items" : [ @@ -66,8 +66,8 @@ "items" : [ { "id" : "txtrender", - "xtype" : "CellRendererText", "* pack" : "pack_start,true", + "xtype" : "CellRendererText", "$ xns" : "Gtk" } ] diff --git a/src/Builder4/config1.builder b/src/Builder4/config1.builder index def2961f3..fb1a60a37 100644 --- a/src/Builder4/config1.builder +++ b/src/Builder4/config1.builder @@ -65,7 +65,10 @@ "../Palete/CompletionProvider.vala", "../Builder4/PopoverProperty.vala", "../Builder4/ValaProjectSettingsPopover.vala", - "../Builder4/RooProjectSettings.vala" + "../Builder4/RooProjectSettings.vala", + "../Project/Flutter.vala", + "../Palete/Flutter.vala", + "../JsRender/Flutter.vala" ], "packages" : [ ] diff --git a/src/JsRender/Flutter.vala b/src/JsRender/Flutter.vala new file mode 100644 index 000000000..cc69edcea --- /dev/null +++ b/src/JsRender/Flutter.vala @@ -0,0 +1,185 @@ +/** + * + * this is the code represents a File when using the Gtk view.. + * + * It ues NodeToGtk + * + * + */ + +namespace JsRender { + + + + + + + public class Flutter : JsRender + { + static int fid = 1; + + public Flutter(Project.Project project, string path) { + + base( project, path); + this.xtype = "Flutter"; + this.language = "dart"; + + this.id = "file-flutter-%d".printf(fid++); + + + + + } + + + + public override void removeFiles() { + /* + var js = GLib.Path.get_dirname(this.path) +"/" + name + ".js"; + if (FileUtils.test(js, FileTest.EXISTS)) { + GLib.FileUtils.remove(js); + } + var vala = GLib.Path.get_dirname(this.path) +"/" + name + ".vala"; + if (FileUtils.test(vala, FileTest.EXISTS)) { + GLib.FileUtils.remove(vala); + } + */ + } + + public override void loadItems() throws GLib.Error // : function(cb, sync) == original was async. + { + + print("load Items!\n"); + if (this.tree != null) { + this.loaded = true; + + return; + } + /* + print("load: %s\n" , this.path); + if (!GLib.FileUtils.test(this.path, GLib.FileTest.EXISTS)) { + // new file?!? + this.tree = null; + this.loaded = true; + return; + } + */ + + var pa = new Json.Parser(); + pa.load_from_file(this.path); + var node = pa.get_root(); + + if (node.get_node_type () != Json.NodeType.OBJECT) { + throw new Error.INVALID_FORMAT ("Unexpected element type %s", node.type_name ()); + } + var obj = node.get_object (); + + this.name = obj.get_string_member("name"); + this.parent = obj.get_string_member("parent"); + this.title = obj.get_string_member("title"); + + + // load items[0] ??? into tree... + var bjs_version_str = this.jsonHasOrEmpty(obj, "bjs-version"); + bjs_version_str = bjs_version_str == "" ? "1" : bjs_version_str; + + if (obj.has_member("items") + && + obj.get_member("items").get_node_type() == Json.NodeType.ARRAY + && + obj.get_array_member("items").get_length() > 0 + ) { + var ar = obj.get_array_member("items"); + var tree_base = ar.get_object_element(0); + this.tree = new Node(); + this.tree.loadFromJson(tree_base, int.parse(bjs_version_str)); + + } + //NodeToVala.mungeFile(this); // force line numbering.. + this.loaded = true; + + } + + + + public override string toSourcePreview() + { + return ""; + } + public override void setSource(string str) {} + + public override string toSourceCode() // no seed support currently. + { + return ""; ///NodeToVala.mungeFile(this); + } + + // this is only used by dumping code... + public override string toSource() // no seed support currently. + { + + + return ""; + + + } + + public override void save() { + this.saveBJS(); + // this.saveJS(); - disabled at present.. project settings will probably enable this later.. + + //this.saveVala(); + } + // ignore these calls. + public override void saveHTML ( string html ) {} + + + /** + * saveJS + * + * save as a javascript file. - not used currently + * why is this not save...??? + * + + + void saveJS() + { + + var fn = GLib.Path.get_dirname(this.path) + "/" + this.name + ".js"; + print("WRITE :%s\n " , fn); + this.writeFile(fn, this.toSource()); + + } + */ + void saveVala() + { + /*if (this.tree == null) { + return; + } + var fn = GLib.Path.get_dirname(this.path) + "/" + this.name + ".vala"; + print("WRITE :%s\n " , fn); + this.writeFile(fn, NodeToVala.mungeFile(this)); + */ + + } + + + + string getHelpUrl(string cls) + { + return "http://devel.akbkhome.com/seed/" + cls + ".html"; + } + public override void findTransStrings(Node? node ) + { + // not yet.. + } + + + + + + + } +} + + + diff --git a/src/JsRender/JsRender.vala b/src/JsRender/JsRender.vala index 26cc16841..a608052d3 100644 --- a/src/JsRender/JsRender.vala +++ b/src/JsRender/JsRender.vala @@ -124,6 +124,8 @@ namespace JsRender { return new Gtk(project, path); case "Roo": return new Roo(project, path); + case "Flutter": + return new Flutter(project, path); case "PlainFile": return new PlainFile(project, path); } diff --git a/src/Main.vala b/src/Main.vala index f65ffad86..16108f0f2 100644 --- a/src/Main.vala +++ b/src/Main.vala @@ -9,127 +9,20 @@ int main (string[] args) { - new JsRender.Lang_Class(); + new JsRender.Lang_Class(); var app = BuilderApplication.singleton( args); + + Gtk.init (ref args); + GtkClutter.init (ref args); - if (BuilderApplication.opt_debug || BuilderApplication.opt_compile_project == null) { - GLib.Log.set_handler(null, - GLib.LogLevelFlags.LEVEL_DEBUG | GLib.LogLevelFlags.LEVEL_WARNING, - (dom, lvl, msg) => { - print("%s: %s\n", dom, msg); - }); - } - - - if (BuilderApplication.opt_list_projects) { - - //BuilderApplication.compileBjs(); - Project.Project.loadAll(); - print("Projects\n %s\n", Project.Project.listAllToString()); - GLib.Process.exit(Posix.EXIT_SUCCESS); - } - Project.Project.loadAll(); - - if (BuilderApplication.opt_list_projects) { - - //BuilderApplication.compileBjs(); - - print("Projects\n %s\n", Project.Project.listAllToString()); - GLib.Process.exit(Posix.EXIT_SUCCESS); - } - Project.Project cur_project = null; - if (BuilderApplication.opt_compile_project != null) { - - - cur_project = Project.Project.getProjectByHash( BuilderApplication.opt_compile_project); - - if (cur_project == null) { - GLib.error("invalid project %s, use --list-projects to show project ids",BuilderApplication.opt_compile_project); - } - cur_project.scanDirs(); - - - } - - if (BuilderApplication.opt_list_files) { - if (cur_project == null) { - GLib.error("missing project, use --project to select which project"); - } - print("Files for %s\n %s\n", cur_project.name, cur_project.listAllFilesToString()); - GLib.Process.exit(Posix.EXIT_SUCCESS); - } - - if (BuilderApplication.opt_bjs_compile != null) { - if (cur_project == null) { - GLib.error("missing project, use --project to select which project"); - } - var file = cur_project.getByName(BuilderApplication.opt_bjs_compile); - if (file == null) { - GLib.error("missing file %s in project %s", BuilderApplication.opt_bjs_compile, cur_project.name); - } - //BuilderApplication.compileBjs(); - file.loadItems(); - var str = file.toSourceCode(); - - - if (!BuilderApplication.opt_debug) { - print("%s", str); - GLib.Process.exit(Posix.EXIT_SUCCESS); - } - - // dump the node tree - file.tree.dumpProps(); - - - var str_ar = str.split("\n"); - for(var i =0;i> implementors; + Gee.HashMap childType; + Gee.HashMap no_children; + Gee.HashMap is_abstract; + Gee.HashMap> extends; + + public UsageMap() + { + this.implementors = new Gee.HashMap>(); + this.extends = new Gee.HashMap>(); + this.childType = new Gee.HashMap(); + this.no_children = new Gee.HashMap(); + this.is_abstract = new Gee.HashMap(); + var pa = new Json.Parser(); + pa.load_from_file(BuilderApplication.configDirectory() + "/resources/flutter_tree.json"); + + var node = pa.get_root(); + this.addArray(node.get_array()); + + this.removeNonChild(); + } + + + private void addArray(Json.Array ar) + { + for(var i=0;i< ar.get_length(); i++) { + this.addObject(ar.get_object_element(i)); + } + } + private void addObject(Json.Object o) + { + + this.addArray(o.get_array_member("cn")); + + var name = o.get_string_member("name"); + if (!o.get_boolean_member("is_class")) { + return; + } + if (o.get_array_member("implementors").get_length() > 0) { + this.implementors.set(name , this.jsonStringArray(o.get_array_member("implementors"))); + } + if (o.get_array_member("extends").get_length() > 0) { + this.extends.set(name , this.jsonStringArray(o.get_array_member("extends"))); + } + if (o.get_string_member("childtype").length > 0) { + this.childType.set( name, o.get_string_member("childtype")); + this.no_children.set( name, (int) o.get_int_member("childtypes")); + } + + } + private Gee.ArrayList jsonStringArray(Json.Array ar) + { + var ret = new Gee.ArrayList(); + for(var i=0;i< ar.get_length(); i++) { + ret.add(ar.get_string_element(i)); + } + return ret; + } + public void removeNonChild() + { + // do we need to clean this up? + // remove all the unrelated objects? + } + public Gee.ArrayList possibleChildrenOf(string n) + { + GLib.debug("possibleChildrenOf %s", n); + var ret = new Gee.ArrayList(); + if (!this.childType.has_key(n)) { + return ret; + } + + var ch = this.childType.get(n); + GLib.debug("childType %s", ch); + + if (this.is_abstract.has_key(ch) && !this.is_abstract.get(ch)) { + GLib.debug("add Implementor (self) %s", ch); + ret.add(ch); // it's not abstract... + } + + if (!this.implementors.has_key(ch)) { + return ret; + } + foreach(var k in this.implementors.get(ch)) { + GLib.debug("add Implementor %s", k); + ret.add(k); + } + return ret; + } + public Gee.ArrayList possibleParentsOf(string n) + { + + // basically a list of all the types that accept this type, or it's parents.. + // find a list of parents. + + var ret = new Gee.ArrayList(); + if (!this.extends.has_key(n)) { + return ret; + } + var ch = this.extends.get(n); + + foreach(var k in this.childType.keys) { + if (ch.contains(this.childType.get(k))) { + ret.add(k); + } + } + + return ret; + } + + + public Gee.ArrayList implementorsOf(string n) + { + var ret = new Gee.ArrayList(); + foreach(var k in this.implementors.get(n)) { + ret.add(k); + } + return ret; + } + + public bool is_a(string cls, string subclass) { + return this.extends.get(cls).contains(subclass); + } + + public void dump() + { + foreach (var k in this.implementors.keys) { + GLib.debug("cls: %s : imps: %d", k, this.implementors.get(k).size); + } + foreach (var k in this.childType.keys) { + GLib.debug("cls: %s : child: %s", k, this.childType.get(k)); + } + foreach (var k in this.extends.keys) { + var s = ""; + foreach(var v in this.extends.get(k)) { + s+=v +", "; + } + GLib.debug("cls: %s : extends: %s", k,s); + } + } + + } + + + public class Flutter : Palete { + + //public Gee.ArrayList package_cache; + static UsageMap usagemap = null; + + public Flutter(Project.Flutter project) + { + base(project); + this.name = "Flutter"; + //var context = new Vala.CodeContext (); + + //this.package_cache = this.loadPackages(Path.get_dirname (context.get_vapi_path("glib-2.0"))); + //this.package_cache.add_all( + // this.loadPackages(Path.get_dirname (context.get_vapi_path("gee-0.8"))) + //); + //this.load(); + // various loader methods.. + //this.map = []; + //this.load(); + //this.proplist = {}; + //this.comments = { }; + if (Flutter.usagemap == null) { + Flutter.usagemap = new UsageMap(); + } + // no parent... + } + public override void load () { + // in Roo & Gtk, usage is loaded here.. but it;s already called in the Ctor.?? + //GLib.error("should not get here?"); + } + + public override GirObject? getClass(string ename) + { + + GLib.error("not supported"); + + return null; + + } + public override Gee.HashMap getPropertiesFor( string ename, string type) + { + + GLib.error("not supported"); + + return new Gee.HashMap(); + } + + public override void fillPack(JsRender.Node node,JsRender.Node parent) + { + return; // flutter does not have pack... + } + public override bool typeOptions(string fqn, string key, string type, out string[] opts) + { + GLib.error("not supported"); + opts = {}; + return false; + } + public override List suggestComplete( + JsRender.JsRender file, + JsRender.Node? node, + string proptype, + string key, + string complete_string + ) { + return new List(); + } + Gee.HashMap> implementors; + void loadFlutterUsageFile() + { + this.usagemap = new UsageMap(); + } + + public override string[] getChildList(string in_rval) + { + GLib.debug("getChildlist %s", in_rval); + // for top level: + // StatelessWidget (or a generic 'statefull_myname extends State') + //both have a single child that is a widget + if (in_rval == "*top") { + return { "widgets.StatelessWidget" , "widgets.StatefullWidget" }; + } + Gee.ArrayList ar = new Gee.ArrayList(); + if (in_rval == "widgets.StatelessWidget" || in_rval == "widgets.StatefullWidget") { + ar = this.usagemap.implementorsOf("widgets.Widget"); + } else { + + ar = this.usagemap.possibleChildrenOf(in_rval); + } + string[] ret = {}; + foreach(var k in ar) { + ret += k; + } + return ret; + + } + public override string[] getDropList(string rval) + { + var ar = this.usagemap.possibleParentsOf(rval); + if (this.usagemap.is_a(rval, "widgets.Widget")) { + ar.add("widgets.StatelessWidget"); + ar.add( "widgets.StatefullWidget"); + } + + string[] ret = {}; + foreach(var k in ar) { + ret += k; + } + return ret; + + } + + public void dumpusage() + { + this.usagemap.dump(); + + } + + + } +} \ No newline at end of file diff --git a/src/Palete/Gtk.vala b/src/Palete/Gtk.vala index 72409a7a6..a2f494140 100644 --- a/src/Palete/Gtk.vala +++ b/src/Palete/Gtk.vala @@ -543,7 +543,15 @@ namespace Palete { return ret; } - + + public override string[] getChildList(string in_rval) + { + return this.original_getChildList( in_rval); + } + public override string[] getDropList(string rval) + { + return this.default_getDropList(rval); + } } } diff --git a/src/Palete/Javascript.vala b/src/Palete/Javascript.vala index f962cbdca..0b2d3fb86 100644 --- a/src/Palete/Javascript.vala +++ b/src/Palete/Javascript.vala @@ -196,7 +196,7 @@ namespace Palete { return (string) buf; } - + } diff --git a/src/Palete/Palete.vala b/src/Palete/Palete.vala index 529b97f86..f29cc0130 100644 --- a/src/Palete/Palete.vala +++ b/src/Palete/Palete.vala @@ -105,9 +105,9 @@ namespace Palete - + // this is the old verison using 'Usage'... see flutter for a better version.. - public string[] getChildList(string in_rval) + public string[] original_getChildList(string in_rval) { if (this.map == null) { @@ -150,7 +150,8 @@ namespace Palete } - public string[] getDropList(string rval) + + public string[] default_getDropList(string rval) { if (this.map == null) { @@ -469,6 +470,10 @@ namespace Palete string key, string complete_string ); + public abstract string[] getChildList(string in_rval); + public abstract string[] getDropList(string rval); + + } diff --git a/src/Palete/Roo.vala b/src/Palete/Roo.vala index 6848c3539..89c1bf08a 100644 --- a/src/Palete/Roo.vala +++ b/src/Palete/Roo.vala @@ -415,6 +415,14 @@ namespace Palete { return ret; } + public override string[] getChildList(string in_rval) + { + return this.original_getChildList( in_rval); + } + public override string[] getDropList(string rval) + { + return this.default_getDropList(rval); + } } } diff --git a/src/Project/Flutter.vala b/src/Project/Flutter.vala new file mode 100644 index 000000000..cc9df3ad4 --- /dev/null +++ b/src/Project/Flutter.vala @@ -0,0 +1,66 @@ +/** + Deps: + Palete.Flutter + +*/ + +namespace Project +{ + static int fl_id = 1; + + + public class Flutter : Project + { + /** + * Gir cache - it's local as we might want clear it if we modify the packages... + * + */ + //public Gee.HashMap gir_cache = null; + //public bool gir_cache_loaded = false; + + + public Flutter(string path) { + + + base(path); + this.palete = new Palete.Flutter(this); + + //this.gir_cache = new Gee.HashMap(); + this.xtype = "Flutter"; + var gid = "project-flutter-%d".printf(gtk_id++); + this.id = gid; + try { + this.loadConfig(); + } catch (GLib.Error e ) { + // is tihs ok? + } + //scan files.. + // if no 'pubspec.yml' ... then we need to run flutter create... + this.scanDirs(); + + } + + public void loadConfig() throws GLib.Error + { + // ?? read the yaml file? + + // ?? read the 'iml' xml files - contains librayr info? + + + } + public void writeConfig() {} + + public Gee.ArrayList filesAll(string in_path,bool abspath = true) + { + GLib.error("Not supported yet"); + } + public Gee.ArrayList filesForCompile(string in_path, bool abspath = true) { + GLib.error("Not supported yet"); + } + + public Gee.ArrayList filesForOpen(string in_path) + { + GLib.error("Not supported yet"); + } + } +} \ No newline at end of file diff --git a/src/Project/Project.vala b/src/Project/Project.vala index 7dac6e205..e7a098b17 100644 --- a/src/Project/Project.vala +++ b/src/Project/Project.vala @@ -284,6 +284,8 @@ namespace Project { return new Gtk(path); case "Roo": return new Roo(path); + case "Flutter": + return new Flutter(path); } throw new Error.INVALID_TYPE("invalid project type"); @@ -514,7 +516,7 @@ namespace Project { var xt = this.xtype; return JsRender.JsRender.factory(xt, this, path); - } + } public JsRender.JsRender create(string filename) { @@ -548,6 +550,7 @@ namespace Project { this.on_changed(); } + public void scanDirs() // cached version { if (this.is_scanned) { @@ -557,7 +560,7 @@ namespace Project { //console.dump(this.files); } - + public void scanDirsForce() { this.is_scanned = true; @@ -581,6 +584,8 @@ namespace Project { return; } // this should be done async -- but since we are getting the proto up ... + var other_files = new Gee.ArrayList(); + var bjs_files = new Gee.ArrayList(); var subs = new GLib.List();; var f = File.new_for_path(dir); @@ -605,30 +610,12 @@ namespace Project { } if (!Regex.match_simple("\\.bjs$", fn)) { + other_files.add(fn); //print("no a bjs\n"); continue; } - /* - var parent = ""; - //if (dp > 0 ) { - - var sp = dir.split("/"); - var parent = ""; - for (var i = 0; i < sp.length; i++) { - - } - - /* - sp = sp.splice(sp.length - (dp +1), (dp +1)); - parent = sp.join('.'); - - - if (typeof(_this.files[dir + '/' + fn]) != 'undefined') { - // we already have it.. - _this.files[dir + '/' + fn].parent = parent; - return; - } - */ + bjs_files.add(fn.substring(0, fn.length-4)); + var xt = this.xtype; var el = JsRender.JsRender.factory(xt,this, dir + "/" + fn); this.files.set( dir + "/" + fn, el); @@ -641,8 +628,18 @@ namespace Project { } catch (GLib.Error e) { GLib.warning("Project::scanDirs failed : " + e.message + "\n"); } + foreach(var fn in other_files) { + var dpos = fn.last_index_of("."); + var without_ext = fn.substring(0, dpos); + if (bjs_files.contains(without_ext)) { + continue; + } + GLib.debug("Could have added %s/%s", dir, fn); + //var el = JsRender.JsRender.factory("plain",this, dir + "/" + fn); + //this.files.set( dir + "/" + fn, el); + } + for (var i = 0; i < subs.length(); i++) { - this.scanDir(subs.nth_data(i), dp+1); } diff --git a/src/Resources.vala b/src/Resources.vala index ef10dbf8b..0f5644d67 100644 --- a/src/Resources.vala +++ b/src/Resources.vala @@ -87,6 +87,7 @@ public class Resources : Object { string[] avail_files = { "roodata.json", + "flutter_tree.json", "*", "Editors/*.js", "vapi/*" @@ -99,8 +100,11 @@ public class Resources : Object if (target == "roodata.json") { src = "https://raw.githubusercontent.com/roojs/roojs1/master/docs/json/roodata.json"; - //src = "http://git.roojs.org/?p=roojs1;a=blob_plain;f=docs/json/roodata.json"; } + if (target == "flutter_tree.json") { + src = "https://raw.githubusercontent.com/roojs/flutter-docs-json/master/tree.json"; + } + if (target.contains("*")) { var split = target.split("*"); diff --git a/tools/flutter_extract.php b/tools/flutter_extract.php new file mode 100644 index 000000000..b372b05d3 --- /dev/null +++ b/tools/flutter_extract.php @@ -0,0 +1,296 @@ + ... or + children → List << fixed.. + material/PopupMenuEntry-class.html + http://localhost/roojs1/docs/?/flutter/#material.PopupMenuDivider + + + Constants on Libraries.. /? classes? + + Abstracts - no need to show them in menu? + + extends link: + source link? + generic links... + + + config --- constructor links... + + + */ + +require_once 'flutter_nodes.php'; // the classes.. + +define( 'FDIR', '/home/alan/Downloads/flutterdocs/flutter/'); +define( 'TDIR', '/home/alan/gitlive/flutter-docs-json/'); + + /* +$c = new eClass(array( + 'name' => 'dart:core.List', + 'href' => 'dart-core/List-class.html', + 'memberOf' => 'dart:core', + 'dtype' => 'class' +)); + +// let's do some testing... +$c = new eClass(array( + 'name' => 'dart:core.Object', + 'href' => 'dart-core/Object-class.html', + 'memberOf' => 'dart:core', + 'dtype' => 'class' +)); + +$c = new eClass(array( + 'name' => 'foundation.Diagnosticable', + 'href' => 'foundation/Diagnosticable-class.html', + 'memberOf' => 'foundation', + 'dtype' => 'class' +)); + +$c = new eClass(array( + 'name' => 'foundation.DiagnosticableTree', + 'href' => 'foundation/DiagnosticableTree-class.html', + 'memberOf' => 'foundation', + 'dtype' => 'class' +)); + + + +$c = new eClass(array( + 'name' => 'widgets.Widget', + 'href' => 'widgets/Widget-class.html', + 'memberOf' => 'widgets', + 'dtype' => 'class' +)); +$c = new eClass(array( + 'name' => 'widgets.StatelessWidget', + 'href' => 'widgets/StatelessWidget-class.html', + 'memberOf' => 'widgets', + 'dtype' => 'class' +)); + +$c = new eClass(array( + 'name' => 'widgets.StatelessWidget', + 'href' => 'widgets/StatelessWidget-class.html', + 'memberOf' => 'widgets', + 'dtype' => 'class' +)); + +$c = new eClass(array( + 'name' => 'material.AboutDialog', + 'href' => 'material/AboutDialog-class.html', + 'memberOf' => 'material', + 'dtype' => 'class' +)); + $add = new Prop(array( + 'name' => 'children', + 'href' => 'material/AboutDialog/children.html', + 'memberOf' => 'material.AboutDialog' + )); + + $c->props[] = $add; + +$c->readDocs(); +print_r($c); +exit; + +*/ + + +$js = json_decode(file_get_contents(FDIR.'index.json')); + +foreach($js as $o) { + + + switch($o->type) { + case 'library': + new Ns(array( + 'name' => $o->name, + 'href' => $o->href + )); + + break; + + case 'class': + case 'mixin': + case 'enum': + case 'typedef': // func sig? + case 'top-level property': + $ctor = 'e'. ucfirst(str_replace('top-level ', '', $o->type)); + + + new $ctor(array( + 'name' => $o->qualifiedName, + 'href' => $o->href, + 'isMixin' => $o->type == 'mixin', + 'isEnum' => $o->type == 'enum', + 'isTypedef' => $o->type == 'typedef', + 'isConstant' => $o->type == 'top-level constant', + 'memberOf' => $o->enclosedBy->name, + 'dtype' => $o->type, + )); + break; + + + + case 'constructor': + case 'method': + case 'function': + $ar = explode('.', $o->qualifiedName); + array_pop($ar); + $cls = implode('.', $ar); + $ctor = 'e'. ucfirst($o->type); + $add = new $ctor(array( + 'name' => $o->name, + 'href' => $o->href, + 'isConstructor' => $o->type == 'constructor', + 'memberOf' => $cls, + )); + if ($o->type != 'function') { + eClass::$all[$cls]->methods[] = $add; + } else { + eClass::$all[$o->qualifiedName] = $add; + } + break; + + case 'top-level constant': + case 'constant': + $ar = explode('.', $o->qualifiedName); + array_pop($ar); + $memberof= implode('.', $ar); + + $add = new eConstant(array( + 'name' => $o->name, + 'href' => $o->href, + 'memberOf' => $memberof, + )); + switch($o->enclosedBy->type) { + case 'class': + if (empty(eClass::$all[$memberof])) { + print_r($o); + echo "Can not find class: $memberof to add object to"; + exit; + } + eClass::$all[$memberof]->props[] = $add; + break; + + case 'library': + Ns::add($add); + break; + + default: + print_R($o); + exit; + + } + break; + + case 'property': + + + $ar = explode('.', $o->qualifiedName); + array_pop($ar); + $cls = implode('.', $ar); + + + + if (substr($o->name, 0,2) == 'on' && $o->type == 'property') { + // presumtionus... + eClass::$all[$cls]->events[] = new eMethod(array( + 'name' => $o->name, + 'href' => $o->href, + 'isConstant' => $o->type == 'constant', + + )); + break; + } + $add = new Prop(array( + 'name' => $o->name, + 'href' => $o->href, + 'memberOf' => $cls + )); + + eClass::$all[$cls]->props[] = $add; + + break; + default: + print_R($o); + die("invalid type {$o->type}"); + } + + + +} + + + + +$summary = array(); +if (!file_exists(TDIR .'symbols')) { + mkdir(FDIR .'symbols', 0755, true); +} +if (!file_exists(TDIR .'ns')) { + mkdir(FDIR .'ns', 0755, true); +} + + + +foreach(eClass::$all as $c) { + + if (!method_exists($c, 'readDocs')) { + echo "missing readDocs"; + print_R($c);exit; + } + $c->readDocs(); + // constant's and other mixins.. +} +// at this point we need to dump the whole thing. + + + + + +foreach(eClass::$all as $c) { + + if (!method_exists($c, 'readDocs')) { + echo "missing readDocs"; + print_R($c);exit; + } + if (is_a($c, 'eClass') ||is_a($c, 'eMixin') ) { + $c->expandImplementors(); + } + // constant's and other mixins.. +} + +// output the files.. +foreach(eClass::$all as $c) { + //$summary[$c->name] = $c->toSummaryArray(); + if (is_a($c, 'eClass') ||is_a($c, 'eMixin') ) { + $c->realImplementors(); + file_put_contents(TDIR .'symbols/'.$c->name. '.json', json_encode($c,JSON_PRETTY_PRINT)); + } + // constant's and other mixins.. +} +foreach(Ns::$tree as $c) { + //$summary[$c->name] = $c->toSummaryArray(); + file_put_contents(TDIR .'ns/'.$c->name. '.json', json_encode($c,JSON_PRETTY_PRINT)); + + // constant's and other mixins.. +} +$tree = array(); +foreach(Ns::$tree as $e) { + $e->fakeTree(); + $tree[] = $e->toTreeArray(); +} +file_put_contents(TDIR .'tree.json', json_encode($tree, JSON_PRETTY_PRINT)); +//file_put_contents(FDIR .'json/index.json', json_encode($summary, JSON_PRETTY_PRINT)); // this is for builder.. later.. + +//print_r(eClass::$all); \ No newline at end of file diff --git a/tools/flutter_nodes.php b/tools/flutter_nodes.php new file mode 100644 index 000000000..a5fca130f --- /dev/null +++ b/tools/flutter_nodes.php @@ -0,0 +1,616 @@ + array('props', 'events', 'methods'), + 'eMixin' => array('props', 'events', 'methods'), + 'eTypedef' => array('name', 'type', 'sig', 'static', 'desc','memberOf'), + 'eProperty' => array('name', 'type', 'desc','memberOf'), + 'eConstant' => array('name', 'type', 'desc','memberOf'), + 'eMethod' => array('name', 'type', 'sig', 'static', 'desc','memberOf', 'isConstructor'), + 'eConstructor' => array('name', 'type', 'sig', 'static', 'desc','memberOf', 'isConstructor'), + 'eEnum' => array('name', 'type', 'desc','memberOf'), // fixme .. .values.? + 'eFunction' => array('name', 'type', 'sig', 'static', 'desc','memberOf', 'isConstructor'),// fixme .. .memberof == package. + 'Prop' => array('name', 'type', 'desc','memberOf'), + ); + + var $href = ''; + var $desc = ''; + var $example = ''; + var $isDeprecated = false; + + function __construct($ar) + { + foreach($ar as $k=>$v) { + $this->{$k} = $v; + } + + } + + + function parseHTML() + { + $dom = new DomDocument(); + libxml_use_internal_errors(true); + echo "Reading : {$this->href}\n"; + $dom->loadHTMLFile(FDIR . $this->href); + libxml_clear_errors(); + $xp = new DomXPath($dom); + $desc = $this->getElementsByClassName($dom, 'desc'); + if ($desc->length) { + $this->desc = $this->innerHTML($desc->item(0)); + } + $sc = $this->getElementsByClassName($dom, 'source-code'); + if ($sc->length) { + $this->example = $this->innerHTML($sc->item(0)); + } + return $dom; + } + + function getElementsByClassName($dom, $class) + { + $xp = new DomXPath($dom); + return $xp->query("//*[contains(concat(' ', @class, ' '), ' ".$class." ')]"); + } + function innerHTML($node) + { + if (!$node) { + print_r($this); + } + $dom= $node->ownerDocument; + $ret = ''; + foreach ($node->childNodes as $child) + { + $ret.= $dom->saveHTML($child); + } + return $ret; + + } + function parseType($sp) + { + if (!$sp) { + print_R($this); + echo "parseType got invalid value"; + } + $ar = $sp->getElementsByTagName('a'); + if (!$ar->length) { + $this->type = $sp->textContent; + } + if ($ar->length == 1) { + $this->type = eClass::$url_map[$ar->item(0)->getAttribute('href')]->name; + return; + } + $this->types = array(); + $t = ''; + for($i =0;$i<$ar->length;$i++) { + $add = eClass::$url_map[$ar->item($i)->getAttribute('href')]->name;; + $this->types[] = $add; + + $t .= ($i == 0) ? $add : ('<'. $add ); + + } + for($i =0;$i<$ar->length-1;$i++) { + $t .= '>'; + } + $this->type = $t; + + + } + function toSummaryArray() + { + $ret = array(); + if (!isset(self::$out_props[get_class($this)] )) { + die("don't know how to handle class: " . get_class($this)); + } + foreach(self::$out_props[get_class($this)] as $k) { + $out = $this->{$k}; + if (is_array($out)) { + $out = array(); + foreach($this->{$k} as $v) { + $out[] = $v->toSummaryArray(); + } + } + $ret[$k] = $out; + } + return $ret; + } + function isA($str) + { + return false; + } + +} + +class Ns extends Obj { + static $tree = array(); + static $kv = array(); + var $name = ''; + var $href = ''; + var $cn = array(); + var $isFakeNamespace = false; + function __construct($ar) + { + parent::__construct($ar); + + if ($this->isFakeNamespace) { + return; + } + + $bits= explode('.', $this->name); + + self::$kv[$this->name] = $this; + + if (count($bits) == 1 ) { + self::$tree[] = $this; + return; + } + array_pop($bits); + $par = implode('.', $bits); + $this->memberOf = $par; + self::add($this); + + + } + static function add($cls) + { + self::$kv[$cls->memberOf]->cn[] = $cls; + } + + function fakeTree() + { + + foreach($this->cn as $c) { + if (!isset($c->shortname)) { + continue; + } + $map[$c->shortname] = $c; + + + + } + + $cn = array(); + foreach($this->cn as $c) { + if (!isset($c->shortname)) { + continue; + } + $bits = preg_split('/(?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z])/', + $c->shortname, -1, PREG_SPLIT_NO_EMPTY); + //print_r($bits); + if (count($bits) < 2 ) { + $cn[] = $c; + continue; + } + if (!isset($map[$bits[0]])) { + $add = new Ns(array( + 'name' => $c->memberOf .'.'. $bits[0], + 'isFakeNamespace' => true, + + )); + $map[$bits[0]] = $add; + $cn[] = $add; + } + + $map[$bits[0]]->cn[] = $c; + + } + + // finally remove from tree if it's saving '1' + $cc = array(); + foreach($cn as $c) { + if (empty($c->isFakeNamespace)) { + $cc[] = $c; + continue; + } + if (count($c->cn) < 2) { + $cc[] = $c->cn[0]; + continue; + } + $cc[] = $c; + + } + + $this->cn = $cc; + + + } + + function toTreeArray() + { + // tidy the tree before starting... + + + + $ret = array( + 'name' => $this->name, + 'is_class' => false, + 'cn' => array() + ); + // in theory flutter has a flat tree... ? + foreach($this->cn as $e) { + if (in_array(get_class($e) , array('eClass', 'eMixin', 'Ns'))) { + $ret['cn'][] = $e->toTreeArray(); + } + + } + return $ret; + } +} + + +class eClass extends Obj { + + static $all = array(); + static $url_map = array(); + var $name; + var $extends = array(); + var $memberOf; /// really the package.. + var $events = array(); + var $methods = array(); + var $props = array(); + var $isMixin = false; + var $isEnum = false; + var $isTypedef = false; + var $isConstant = false; + var $isAbstract = false; + var $implementors = array(); + var $realImplementors = array(); + var $cn = array(); + function __construct($ar) + { + parent::__construct($ar); + $bits = explode('.', $this->name); + $this->shortname = array_pop($bits); + + self::$all[$this->name] = $this; + self::$url_map[$this->href] = $this; + Ns::add($this); + } + + function parseHTML() + { + // do children first.. + + + + $dom = parent::parseHTML(); + + $sc = $this->getElementsByClassName($dom,'self-crumb'); + if ($sc->length) { + // abstracts actually impletment stuff in flutter... + if (preg_match('/abstract class/', $this->innerHTML($sc->item(0)))) { + $this->isAbstract = true; + } + + } + + + + $dl = $dom->getElementsByTagName('dl')->item(0); + if ($dl->getAttribute('class') != 'dl-horizontal') { + $this->extends = array(); + return; + } + + if (strpos($this->innerHTML($dl), '@deprecated')) { + $this->isDeprecated = true; + } + + + + $dt = $dl->getElementsByTagName('dt'); + if (!$dt->length) { + return; + } + if ($this->innerHTML($dt->item(0)) != 'Inheritance') { + return; + } + + $dd = $dl->getElementsByTagName('dd'); + if (!$dd->length) { + return; + } + $as = $dd->item(0)->getElementsByTagName('a'); + $this->extends = array(); + for($i = $as->length-1;$i > -1; $i--) { + + if (!isset(self::$url_map[$as->item($i)->getAttribute('href')])) { + die("could not find " . $as->item($i)->getAttribute('href') . " when parsing" . $this->href); + } + + $this->extends[] = self::$url_map[$as->item($i)->getAttribute('href')]->name; + self::$url_map[$as->item($i)->getAttribute('href')]->addImplementor($this->name); + } + + + + + + } + function addImplementor($n) + { + if (!in_array($n, $this->implementors)) { + $this->implementors[] = $n; + } + } + function expandImplementors($exclude = array()) + { + $exclude[] = $this->name; + $add = array(); + $orig = $this->implementors; + foreach($orig as $c) { + if (in_array($c, $exclude)) { + continue; + } + $cl = self::$all[$c]->expandImplementors($exclude); + foreach($cl as $cc) { + if (!in_array($cc, $this->implementors)) { + $this->implementors[]= $cc; + } + } + } + return $this->implementors; + + } + function realImplementors() + { + + $this->realImplementors = array(); + foreach($this->implementors as $c) { + if (self::$all[$c]->isAbstract) { + return; + } + $this->realImplementors[] = $c; + } + + } + + function readDocs() + { + $this->parseHTML(); + foreach($this->events as $e) { + $e->parseHTML(); + } + foreach($this->methods as $e) { + $e->parseHTML(); + } + foreach($this->props as $e) { + $e->parseHTML(); + } + // loop through children. + + } + function toTreeArray() + { + $cn = array(); + foreach($this->cn as $e) { + if (in_array(get_class($e) , array('eClass', 'eMixin'))) { + $cn[] = $e->toTreeArray(); + } + } + $child = $this->prop('child'); + $child = $child ? $child : $this->prop('children'); + $child = $child ? $child : $this->prop('home'); // MaterialApp?? + // above might be a constant... - technically we could work out the type of that.. + if ($child && !in_array(get_class($child), array( 'eProperty', 'Prop'))) { + $child = false; + } + $childtypes = 0; + $childtype = ''; + + + // to complicated to check if these are widget children ... some are wrappers around + + if ($child ) { + $childtypes = $child->isA('dart:core.List') ? 2 : 1; + $childtype = count($child->types) ? array_pop($child->types) : $child->type; + + } + + return array( + 'name' => $this->name, + 'is_class' => true, + 'cn' => $cn, + 'extends' => $this->extends, + 'is_abstract' => $this->isAbstract, + 'childtypes' => $childtypes, + 'childtype' => $childtype, + 'implementors' => $this->realImplementors, // this is not really complete... + ); + } + function isA($name) + { + return in_array($name,$this->extends); + } + function prop($name) + { + foreach($this->props as $p) { + if ($p->name == $name) { + return $p; + } + } + return false; + } + + +} +class eMixin extends eClass +{ + function parseHTML() + { + $dom = Obj::parseHTML(); + } +} +class eConstant extends Obj +{ + var $type = ''; + function parseHTML() + { + $dom = Obj::parseHTML(); + } + +} +class eEnum extends eClass // enums look alot like classes.. +{ + var $type = ''; + function parseHTML() + { + $dom = Obj::parseHTML(); + } +} + +class eProperty extends Obj +{ + var $name = ''; + var $type = '?'; + var $desc = ''; + var $memberOf = ''; + function parseHTML() + { + $dom = Obj::parseHTML(); + } +} + +class Prop extends Obj { + var $name = ''; + var $type = ''; + var $types = array(); // generics... + var $desc = ''; + var $memberOf = ''; + var $isConstant = false; + function parseHTML() + { + $dom = Obj::parseHTML(); + // work out the type.. + $rt = $this->getElementsByClassName($dom, 'returntype'); + $this->parseType($rt->item(0)); + } + function isA($name) + { + if (empty($this->types)) { + return $name == $this->type; + } + + if (in_array($name,$this->types)) { + return true; + } + foreach($this->types as $ty) { + if (!isset(eClass::$all[$ty])) { + print_R($this); + die("could not find type $ty\n"); + } + if (in_array($name, eClass::$all[$ty]->extends)) { + return true; + } + } + return false; + } +} + + + +class eMethod extends Obj { // doubles up for events? - normally 'on' is the name + var $name = ''; + var $type = ''; // return... + var $desc = ''; + var $static = false; + var $memberOf = ''; + var $sig = ''; + var $params = array(); + + //"isStatic" : false, + var $isConstructor = false; + //"example" : "", + // "deprecated" : "", + // "since" : "", + // "see" : "", + // return_desc + function parseHTML() + { + + $dom = parent::parseHTML(); + $sp = $this->getElementsByClassName($dom,'returntype')->item(0); + $this->parseType($sp); + + // params... + $ar = $this->getElementsByClassName($dom,'parameter'); + for($i =0;$i<$ar->length;$i++) { + $this->params[] = new Param( $ar->item($i) ); + } + + return $dom; + } + +} +class eConstructor extends eMethod { + function parseHTML() + { + + $dom = Obj::parseHTML(); + // doesnt have a 'type' + // params... + $ar = $this->getElementsByClassName($dom,'parameter'); + for($i =0;$i<$ar->length;$i++) { + $this->params[] = new Param( $ar->item($i) ); + } + + return $dom; + } +} + + +class eFunction extends eMethod +{ + function __construct($ar) + { + parent::__construct($ar); + eClass::$all[$this->name] = $this; + eClass::$url_map[$this->href] = $this; + Ns::add($this); + } + function readDocs() + { + $this->parseHTML(); + // loop through children. + + } + function parseHTML() + { + + $dom = parent::parseHTML(); + } +} +class eTypedef extends eFunction +{ + +} +class Param extends Obj { + var $name = ''; + var $type = ''; + var $desc = ''; + var $isOptional = true; + function __construct($node) + { + + $ar = $node->getElementsByTagName('span'); + if (!$ar->length) { + echo "mssing paramter info", $this->innerHTML($node); exit; + } + for($i = 0; $i < $ar->length; $i++) { + + switch($ar->item($i)->getAttribute('class')) { + case 'parameter-name': + $this->name = $ar->item($i)->textContent; + break; + case 'type-annotation': + $this->parseType($ar->item($i)); + break; + + } + } + + + + } +} \ No newline at end of file diff --git a/tools/flutter_sqlite.php b/tools/flutter_sqlite.php new file mode 100644 index 000000000..3032bd4c9 --- /dev/null +++ b/tools/flutter_sqlite.php @@ -0,0 +1,1036 @@ +( + -- classes - we need to parse the right hand column to determine which properties/ methods are static.. + -- enums have methods !! + -- types on topLevelconstants are broken (might be able to extract it from the implementation.) + -- parse packages on left, and create fake libraries for them... + */ + +class fsql { + var $pdo; + function __construct() + { + $this->opendb(); + $this->create(); + } + function opendb() { + $this->pdo = new PDO("sqlite:". TDIR . "doc.db"); + $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + } + function create() + { + $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); + + $this->pdo->exec(" + CREATE TABLE IF NOT EXISTS node ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + + href VARCHAR (255) NOT NULL DEFAULT '', + name VARCHAR (255) NOT NULL DEFAULT '', + type VARCHAR (32) NOT NULL DEFAULT '', + overriddenDepth INTEGER NOT NULL DEFAULT '', + qualifiedName VARCHAR (255) NOT NULL DEFAULT '', + enclosedBy_name VARCHAR (255) NOT NULL DEFAULT '', + enclosedBy_type VARCHAR (16) NOT NULL DEFAULT '', + -- derived data / html extracted... + + memberOf VARCHAR (255) NOT NULL DEFAULT '', + is_constructor INTEGER NOT NULL DEFAULT 0, + is_static INTEGER NOT NULL DEFAULT 0, + + example TEXT, + desc TEXT, + + is_fake_namespace INTEGER NOT NULL DEFAULT 0, + is_mixin INTEGER NOT NULL DEFAULT 0, + is_enum INTEGER NOT NULL DEFAULT 0, + is_typedef INTEGER NOT NULL DEFAULT 0, + is_constant INTEGER NOT NULL DEFAULT 0, + is_abstract INTEGER NOT NULL DEFAULT 0, + parent_id INTEGER NOT NULL DEFAULT 0, + + extends VARCHAR(255) NOT NULL DEFAULT '' + + ); + + "); + + $this->pdo->exec("ALTER TABLE node ADD COLUMN is_deprecated INTEGER NOT NULL DEFAULT 0"); + // deals with param type or return type. + $this->pdo->exec("ALTER TABLE node ADD COLUMN value_type VARCHAR (255) NOT NULL DEFAULT ''"); + // for params + $this->pdo->exec("ALTER TABLE node ADD COLUMN sequence_no INTEGER NOT NULL DEFAULT 0"); + + $this->pdo->exec("create index lookup on node(name,qualifiedName,parent_id,type)"); + + $this->pdo->exec(" + CREATE TABLE IF NOT EXISTS extends ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + class_id INTEGER NOT NULL DEFAULT 0, + extends_id INTEGER NOT NULL DEFAULT 0 + ); + "); + + $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + + + + } + function fixParents() + { + echo "Grouping properties/methods with parents\n"; + $this->pdo->exec(" + UPDATE + node as cn + set + parent_id = coalesce(( + SELECT + id + FROM + node as pn + where + pn.qualifiedName = substr(cn.qualifiedName, 0, length(cn.qualifiedName) - length(cn.name)) + AND + pn.type = 'class' + ),0) where + enclosedBy_type ='class' + and parent_id = 0 + "); + } + + function get($k,$v) + { + //print_R(array($k,$v)); + $s = $this->pdo->prepare("SELECT * FROM node where $k=?"); + $s->execute(array($v)); + $r = $s->fetchAll(PDO::FETCH_ASSOC); + + if (count($r) != 1) { + print_R(array($k,$v,$r)); + throw new Exception("not 1 record when searching"); + } + return $r[0]; + } + function lookup($k,$v) + { + //print_R(array($k,$v)); + $s = $this->pdo->prepare("SELECT id FROM node where $k=?"); + $s->execute(array($v)); + $r = $s->fetchAll(PDO::FETCH_ASSOC); + //print_R($r); + if (count($r) > 1) { + print_R(array($k,$v,$r)); + die("more than one record when calling lookup"); + } + return $r ? $r[0]['id'] : 0; + } + + function addExtends($class_id , $extends_id) + { + $s = $this->pdo->prepare("SELECT id FROM extends where class_id=? AND extends_id=?"); + $s->execute(array($class_id , $extends_id)); + if ($s->fetchAll(PDO::FETCH_ASSOC)) { + return; + } + $s = $this->pdo->prepare("INSERT INTO extends (class_id, extends_id) VALUES (?,?)"); + $s->execute(array($class_id , $extends_id)); + + + } + + function update($id, $o) + { + if (empty($o)) { + return; + } + //echo "UPDATE";print_r($o); + foreach((array) $o as $k=>$v) { + if (is_a($v,'stdClass')) { + foreach((array)$v as $ik => $iv) { + $kk[] = $k . '_' . $ik; + $vv[] = '?'; + $vvv[] = $iv; + $kv[]="{$k}_{$ik}=?"; + } + continue; + } + $kk[] = $k; + $vv[] = '?'; + $vvv[] = $v; + $kv[]="{$k}=?"; + } + if (!$id) { + $s = $this->pdo->prepare("INSERT INTO node (". + implode(',',$kk) . ") VALUES (". + implode(',',$vv) . ")"); + // var_dump($s); + $s->execute($vvv); + return; + } + $s = $this->pdo->prepare("UPDATE node SET ". + implode(',',$kv) . " WHERE id = $id"); + $s->execute($vvv); + } + + + + + function fromIndex($o) + { + $id = $this->lookup('href', $o->href); + $this->update($id, $o); + + } + function parseIndex() + { + + $this->pdo = null; + if (file_exists(TDIR. 'docs.db')) { + unlink(TDIR.'docs.db'); + } + $this->opendb(); + $js = json_decode(file_get_contents(FDIR.'index.json')); + foreach($js as $o) { + $this->fromIndex($o); + } + $sq->fixParents(); + } + function readDom($url) + { + $dom = new DomDocument(); + libxml_use_internal_errors(true); + echo "Reading : {$url}\n"; + $dom->loadHTMLFile(FDIR . $url); + libxml_clear_errors(); + $xp = new DomXPath($dom); + + return $dom; + } + function getElementsByClassName($dom, $class, $node = null) + { + $xp = new DomXPath($dom); + return $xp->query("//*[contains(concat(' ', @class, ' '), ' ".$class." ')]", $node); + } + function innerHTML($node) + { + if (!$node) { + print_r($this); + } + $dom= $node->ownerDocument; + $ret = ''; + foreach ($node->childNodes as $child) + { + $ret.= $dom->saveHTML($child); + } + return $ret; + + } + function readDesc($dom, $id) + { + $array = array(); + $desc = $this->getElementsByClassName($dom, 'desc'); + if ($desc->length) { + $array['desc'] = $this->innerHTML($desc->item(0)); + } + $sc = $this->getElementsByClassName($dom, 'source-code'); + if ($sc->length) { + $array['example'] = $this->innerHTML($sc->item(0)); + } + $this->update($id, $array); + + } + function readClassData($dom, $id) + { + $ar = array(); + $sc = $this->getElementsByClassName($dom,'self-crumb'); + + if ($sc->length) { + // abstracts actually impletment stuff in flutter... + if (preg_match('/abstract class/', $this->innerHTML($sc->item(0)))) { + $ar['is_abstract'] = 1; + } + } + $this->update($id, $ar); + $dl = $dom->getElementsByTagName('dl')->item(0); + if ($dl->getAttribute('class') != 'dl-horizontal') { + return; + } + if (strpos($this->innerHTML($dl), '@deprecated')) { + $ar['is_deprecated'] = 1; + $this->update($id, $ar); + } + $dt = $dl->getElementsByTagName('dt'); + if (!$dt->length || $this->innerHTML($dt->item(0)) != 'Inheritance') { + return; + } + $dd = $dl->getElementsByTagName('dd'); + if (!$dd->length) { + return; + } + + $as = $dd->item(0)->getElementsByTagName('a'); + $extends = array(); + for($i = $as->length-1;$i > -1; $i--) { + + $ex = $this->get('href', $as->item($i)->getAttribute('href')); + if (!$ex) { + die("could not find " . $as->item($i)->getAttribute('href') . " when parsing" . $id); + } + if (empty($ex['qualifiedName'])) { + + print_r($ex);die("missing qualifiedName"); + } + $this->addExtends($id, $ex['id']); + $extends[] = $ex['qualifiedName']; + + } + $ar['extends'] = implode(',', $extends); + $this->update($id, $ar); + //print_r(array($extends, $id));exit; + + } + + function readReturnType($dom, $id) + { + + $sp = $this->getElementsByClassName($dom,'returntype')->item(0); + $vt = $this->readTypeToString($sp); + $this->update($id, array('value_type' => $vt)); + + + } + function readSignature($dom, $id) + { + // simple type: + // String + // complex type + // List ... --- List -> generic type = Widget + // let's start by just storing the values. + // in where? - + /* + * node + * type='param' + * href=''; + * parent_id + * + */ + + $parent = $this->get('id',$id); + $ar = $this->getElementsByClassName($dom,'parameter'); + for($i =0;$i<$ar->length;$i++) { + // paramenters are used where methods return callbacks with their own params.. + if ($ar->item($i)->parentNode->getAttribute('class') == 'signature') { + continue; + } + $this->readParam( $id, $ar->item($i) , $parent['qualifiedName'] .'.param'); + } + return $dom; + + } + + function readParam($id, $node, $prefix) + { + $ar = $node->getElementsByTagName('span'); + if (!$ar->length) { + echo $this->innerHTML($node); + die("mssing paramter info"); + } + + $o = array( + 'type' => 'param', + 'parent_id' => $id, + 'href' => '', + + ); + $seq = 1; + for($i = 0; $i < $ar->length; $i++) { + + switch($ar->item($i)->getAttribute('class')) { + + case 'parameter-name': + $o['name'] = $ar->item($i)->textContent; + $o['sequence_no'] = $seq++; + $o['qualifiedName' ] = $prefix . '.'. $o['name'] ; + break; + + case 'type-annotation': + + $o['value_type'] = $this->readTypeToString($ar->item($i) ); + break; + + } + } + if (empty($o['qualifiedName' ])) { + $out = $this->get('id', $id); + print_r($out); + die("missing paramenter name onn this page:" .$out['href']); + + } + + $id = $this->lookup('qualifiedName',$o['qualifiedName' ] ); + $this->update($id,$o); + + } + + function readTypeToString($sp) + { + if (!$sp) { + print_R($this); + die("readTypeToString got invalid value"); + + } + $type = ''; + $ar = $sp->getElementsByTagName('a'); + if (!$ar->length) { + return '<'. $sp->textContent .'>'; // guessing these are generics.. + } + if ($ar->length == 1) { + $rt = $this->get('href',$ar->item(0)->getAttribute('href')); + return $rt['qualifiedName']; + } + $types = array(); + $t = ''; + for($i =0;$i<$ar->length;$i++) { + $rt = $this->get('href',$ar->item($i)->getAttribute('href')); + + $types[] = $rt['qualifiedName']; + + //$t .= ($i == 0) ? $rt['qualifiedName'];: ('<'. $rt['qualifiedName'];); + + } + //for($i =0;$i<$ar->length-1;$i++) { + // $t .= '>'; + // } + return implode(',', $types); + + + + } + + var $blacklist = array( + 'dart-io/HttpOverrides/runZoned.html', // very complex method call - object with callbacks.. + 'dart-io/IOOverrides/runZoned.html',// insanly complex method call - object with callbacks.. + 'dart-async/StreamTransformer/StreamTransformer.fromBind.html', // complex ctor + ); + + function parse($type) + { + echo "Parse $type\n"; + $s = $this->pdo->prepare("SELECT * FROM node WHERE type = ?"); + $s->execute(array($type)); + $res = $s->fetchAll(PDO::FETCH_ASSOC); + foreach($res as $r) { + if (in_array($r['href'], $this->blacklist)) { + continue; + } + $m = "parse".preg_replace('/[^A-Z]/i', '', $type); + $this->$m($r); + } + + } + function parseClass($o) + { + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + $this->readClassData($d,$o['id']); + + } + + function parseConstructor($o) + { + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + $this->readSignature($d,$o['id']); + } + function parseMethod($o) + { + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + $this->readReturnType($d,$o['id']); + $this->readSignature($d,$o['id']); + } + function parseProperty($o) + { + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + $this->readReturnType($d,$o['id']); + + } + function parseEnum($o) + { + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + //$this->readReturnType($d,$o['id']); + $ct = $d->getElementById('constants'); + $props = $this->getElementsByClassName($ct->ownerDocument,'properties',$ct)->item(0); + //echo $this->innerHTML($props); + for($i = 0; $i< $props->childNodes->length; $i++) { + $cn = $props->childNodes->item($i); + //var_dump($cn->nodeName); + switch($cn->nodeName) { + case 'dt': // look for name + + $name = $cn->getElementsByTagName('span')->item(0)->textContent; //$this->getElementsByClassName($cn->ownerDocument,'name',$cn)->item(0)->textContent; + //var_Dump($name); + $n = array( + 'type' => 'enum-value', + 'parent_id' => $o['id'], + 'qualifiedName' => $o['qualifiedName'] .'.' . $name, + 'name' => $name, + // enclosed by?? - leave? + ); + + break; + case 'dd': // the description + //print_r($n); + $n['desc'] = $this->innerHTML($cn); + + $id = $this->lookup('qualifiedName', $n['qualifiedName']); + if (!strlen(trim($n['name']))) { + break; + } + $this->update($id, $n); + //print_r($n); + break; + } + + } + // we ignore methods??? + //exit; + + + } + function parseMixin($o) + { + // oddly enough mixin's have ctors??? + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + // methods and props should be handled ok anyway.. + + //print_R($o);exit; + + } + function parsetypeDef($o) + { + // these appear to be function signatures really. + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + // methods and props should be handled ok anyway.. + + //print_R($o);exit; + + } + function parseConstant($o) + { + // these appear to be function signatures really. + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + // methods and props should be handled ok anyway.. + $this->readReturnType($d,$o['id']); + + + } + + function parseTopLevelConstant($o) + { + + + // these appear to be function signatures really. + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + // methods and props should be handled ok anyway.. + //$this->readReturnType($d,$o['id']); + + } + function parseTopLevelProperty($o) + { + + //print_r($o);exit; + // aliases to pre-created classes... + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + // methods and props should be handled ok anyway.. + $this->readReturnType($d,$o['id']); + + } + function parseFunction($o) + { + + // print_r($o);exit; + // these appear to be function signatures really. + $d = $this->readDom($o['href']); + $this->readDesc($d,$o['id']); + // methods and props should be handled ok anyway.. + $this->readReturnType($d,$o['id']); + $this->readSignature($d,$o['id']); + + + } + /* ----------------------------- OUTPUT -----------------------------*/ + + function outImplementorsToArray($id) + { + $res = $this->pdo->query(" + SELECT + qualifiedName + FROM + node + where + id IN (SELECT distinct(class_id) FROM extends WHERE extends_id = {$id}) + AND + is_abstract = 0 + order by + qualifiedName ASC + "); + return $res->fetchAll(PDO::FETCH_COLUMN); + } + + function outTree() + { + ///make a tree of the classes, and collapse the classes that have same prefix into the prefix. + echo "Creating Tree.json\n"; + // our tree should only include classes (non-abstract), and namespaces + $res = $this->pdo->query(" + SELECT + id, + qualifiedName as name, + qualifiedName, + type, + CASE WHEN type != 'library' THEN 1 ELSE 0 END AS is_class, + is_abstract, + extends + from + node + where + type IN ('class', 'library', 'enum', 'mixin') + + order by + qualifiedName ASC + "); + $all = $res->fetchAll(PDO::FETCH_ASSOC); + $stack = array(); + $nsmap = array(); + foreach($all as $o) { + $add = (object) $o; + $add->cn = array(); + $add->is_class = $add->is_class == 1; + unset($add->id); + $add->extends = strlen($add->extends) ? explode(',',$add->extends) : array(); + if ($o['type'] == 'library') { + + $out[] = $add; + $stack = array($add); + continue; + } + + $add->implementors = $this->outImplementorsToArray($o['id']); + + // find if the element has a child or children... + // this is not really where this should go.. but we will add it for the time being. + + + $res = $this->pdo->query(" + SELECT + name, value_type + FROM + node + where + ( + parent_id = {$o['id']} + OR + parent_id IN (SELECT distinct(class_id) FROM extends WHERE extends_id = {$o['id']}) + ) + AND + type = 'property' + AND + name IN ('child','children','home', 'body') + order by + name ASC + limit 1 + "); + $types = $res->fetch(PDO::FETCH_ASSOC); + $add->childtype = ''; + $add->childtypes = '0'; + if ($types) { + $car = explode(',', $types['value_type']); + $add->childtype = array_pop($car); + $add->childtypes = (count($car) && $car[0] == 'date:core.List') ? 2 : 1; + } + + + //echo "looking for " .$o['qualifiedName']; print_R($stack); + for($i = count($stack)-1; $i > -1; $i--) { + $last = $stack[$i]; + //print_r(array( substr($o['qualifiedName'], 0, strlen($last->qualifiedName)), $last->qualifiedName)); + if (substr($add->qualifiedName, 0, strlen($last->qualifiedName)) == $last->qualifiedName) { + $last->cn[] = $add; + $stack[$i+1] = $add; + break; + } + + + } + } + $libs = array(); + foreach($out as $c) { + $this->outTreeGroups($c); + $bits = explode(".", $c->qualifiedName); + if (count($bits)< 2 || !isset($libs[$bits[0]])) { + $libs[$c->qualifiedName] = $c; + continue; + } + $libs[$bits[0]]->cn[] = $c; + } + + $out = array_values($libs); + echo "WRITE: " .TDIR ."tree.json\n"; + file_put_contents(TDIR .'tree.json', json_encode($out, JSON_PRETTY_PRINT)); + + //print_r($out); + + + + } + function outTreeGroups($obj) + { + $groups= array(); + $libs = array(); + foreach($obj->cn as $c) { + + $name = substr($c->qualifiedName, strlen($obj->qualifiedName) +1); + $bits = preg_split('/(?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z])/', + $name, -1, PREG_SPLIT_NO_EMPTY); + if (!isset($groups[$bits[0]])) { + $groups[$bits[0]] = array(); + } + $groups[$bits[0]][] = $c; + } + $obj->cn = $libs; + foreach($groups as $k => $list) { + if (count($list) < 2) { + $obj->cn[] = $list[0]; + continue; + } + $obj->cn[] = (object) array( + 'name' => $obj->qualifiedName .'.' . $k, + 'qualifiedName' => $obj->qualifiedName .'.' . $k, + 'cn' => $list, + 'is_class' => 'false', + 'type' => 'group', + ); + } + + } + + function typeStringToGeneric($str) + { + $bits = explode(',', $str); + if (count($bits) < 2) { + return $str; + } + $t = ''; + foreach($bits as $i => $add) { + $t .= ($i == 0) ? $add : ('<'. $add ); + + } + for($i =0;$ipdo->query(" + SELECT + id, + COALESCE(desc, '') as desc, + type as dtype, + COALESCE(example, '') as example, + href, + is_abstract as isAbstract, + false as isConstant, + is_deprecated as isDeprecated, + + enclosedBy_name as memberOf, + qualifiedName as name, + name as shortname, + extends + from + node + where + type IN ('class', 'mixin', 'enum') + + order by + qualifiedName ASC + "); + $all = $res->fetchAll(PDO::FETCH_ASSOC); + $ns = array(); + foreach($all as $clsar) { + $cls = (object) $clsar; + unset($cls->id); + + if (!isset($ns[$cls->memberOf])) { + $ns[$cls->memberOf] = (object) array( + 'class' => array(), + 'mixin' => array(), + //'constants' => array(), // within a class.. - we could treat as static properties.. + 'enum' => array(), // like a class... + 'typedef' => array(), // need to query these seperatly... -- look very different to classes.. + // functions (within a library... ) + // top level constant? (within a library - without a class) + // top level proeprty? (predefined instances of clases) - within a library + ); + } + + $cls->isConstant = $cls->isConstant == 1; + + $cls->isAbstract = $cls->isAbstract == 1; + $cls->isDeprecated = $cls->isDeprecated == 1; + $cls->is_enum = $cls->dtype == 'enum'; + $cls->is_mixin = $cls->dtype == 'mixin'; + //$cls->is_typedef = $cls->is_typedef = 1; + $cls->extends = strlen($cls->extends) ? explode(',',$cls->extends) : array(); + $cls->realImplementors = $this->outImplementorsToArray($clsar['id']); + $cls->events = $this->outEventSymbols($clsar); // event's are properties that are typedefs.. + $cls->methods = $this->outMethodSymbols($clsar); + $cls->props = $this->outPropertySymbols($clsar); + + echo "OUT:".TDIR .'symbols/'.$cls->name. '.json' ."\n"; + file_put_contents(TDIR .'symbols/'.$cls->name. '.json', json_encode($cls,JSON_PRETTY_PRINT)); + + + $ns[$cls->memberOf]->{$cls->dtype}[] = $cls; + + } + foreach($ns as $nm => $cls) { + echo "OUT:".TDIR .'ns/'.$nm. '.json' ."\n"; + file_put_contents(TDIR .'ns/'.$nm. '.json', json_encode($cls,JSON_PRETTY_PRINT)); + } + + + + } + + function outEventSymbols($c) + { + $res = $this->pdo->query(" + SELECT + id, + COALESCE(desc, '') as desc, + COALESCE(example, '') as example, + href, + is_deprecated as isDeprecated, + value_type as type, + name as name + from + node + where + parent_id = {$c['id']} + AND + type IN ('property') + AND + 'typedef' = (SELECT type from node as sc where sc.qualifiedName = (CASE + WHEN instr(node.value_type,',') > 0 + THEN substr(node.value_type, 0, instr(node.value_type,',')) + ELSE node.value_type + END) limit 1) ; + + + order by + qualifiedName ASC + "); + $all = $res->fetchAll(PDO::FETCH_ASSOC); + $events = array(); + foreach($all as $evar) { + $ev = (object) $evar; + unset($ev->id); + $ev->isDeprecated = $ev->isDeprecated == 1; + $ev->memberOf = $c['name']; + $ev->params = array(); // FIXME + $ev->type = $this->typeStringToGeneric($ev->type); + $events[] = $ev; + + } + return $events; + + } + + function outPropertySymbols($c) + { + $res = $this->pdo->query(" + SELECT + id, + COALESCE(desc, '') as desc, + COALESCE(example, '') as example, + href, + name as name, + is_deprecated as isDeprecated, + value_type as type, + type as dtype + + from + node + where + parent_id = {$c['id']} + AND + ( + ( + type IN ('property') + AND + 'typedef' != (SELECT type from node as sc where sc.qualifiedName = (CASE + WHEN instr(node.value_type,',') > 0 + THEN substr(node.value_type, 0, instr(node.value_type,',')) + ELSE node.value_type + END) limit 1) + ) OR ( + type IN ('constant', 'enum-value') + ) + + ); + + + order by + qualifiedName ASC + "); + $all = $res->fetchAll(PDO::FETCH_ASSOC); + $events = array(); + foreach($all as $evar) { + $ev = (object) $evar; + unset($ev->id); + $ev->isStatic = in_array($ev->dtype , array( 'constant', 'enum-value')); // since we do not know what static properties are... + $ev->isConstant = in_array($ev->dtype , array( 'constant', 'enum-value')); + $ev->memberOf = $c['name']; + $ev->isDeprecated = $ev->isDeprecated == 1; + $ev->params = array(); // FIXME + $ev->type = $this->typeStringToGeneric($ev->type); + $events[] = $ev; + + } + return $events; + + } + function outMethodSymbols($c) + { + + $res = $this->pdo->query(" + SELECT + id, + COALESCE(desc, '') as desc, + COALESCE(example, '') as example, + href, + is_deprecated as isDeprecated, + value_type as type, + name as name, + type as dtype + from + node + where + parent_id = {$c['id']} + AND + type IN ('method','constructor') + + + + order by + qualifiedName ASC + "); + $all = $res->fetchAll(PDO::FETCH_ASSOC); + $events = array(); + foreach($all as $evar) { + $ev = (object) $evar; + unset($ev->id); + $ev->isConstructor = $ev->dtype == 'constructor'; + + $ev->static = false; + $ev->memberOf = $c['name']; + $ev->isDeprecated = $ev->isDeprecated == 1; + $ev->params = $this->outParamSymbols($evar); + $ev->type = $this->typeStringToGeneric($ev->type); + $events[] = $ev; + + } + return $events; + + } + function outParamSymbols($c) + { + + $res = $this->pdo->query(" + SELECT + id, + name as name, + COALESCE(desc, '') as desc, + COALESCE(example, '') as example, + href, + is_deprecated as isDeprecated, + false as isOptional, + value_type as type + from + node + where + parent_id = {$c['id']} + AND + type IN ('param') + + + + order by + qualifiedName ASC + "); + $all = $res->fetchAll(PDO::FETCH_ASSOC); + $events = array(); + foreach($all as $evar) { + $ev = (object) $evar; + unset($ev->id); + $ev->isDeprecated = $ev->isDeprecated == 1; + $ev->isOptional = $c['dtype'] == 'constructor'; + $ev->type = $this->typeStringToGeneric($ev->type); + $events[] = $ev; + + } + return $events; + + } + + +} + + +define( 'FDIR', '/home/alan/Downloads/flutterdocs/flutter/'); +define( 'TDIR', '/home/alan/gitlive/flutter-docs-json/'); + +$sq = new fsql(); +print_r($_SERVER['argv']); +if (!empty($_SERVER['argv'][1]) && $_SERVER['argv'][1] == 'index') { + echo "rebuilding Index" ;$sq->parseIndex();exit; +} +//$sq->parse('library'); // what does this achieve? +/* +$sq->parse('class'); +$sq->parse('constructor'); +$sq->parse('method'); +$sq->parse('property'); +$sq->parse('enum'); +$sq->parse('mixin'); +$sq->parse('typedef'); +$sq->parse('constant'); +$sq->parse('top-level constant'); +$sq->parse('function'); +$sq->parse('top-level property'); + + +*/ +// +// +//$sq->outTree(); +$sq->outClassSymbols();