diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..0f71bf7 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Aharon Hillel diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..99e4ae6 --- /dev/null +++ b/COPYING @@ -0,0 +1,25 @@ +Copyright notice for exactness: + +Copyright (C) 2011 by various contributors (see AUTHORS) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..7d1c323 --- /dev/null +++ b/INSTALL @@ -0,0 +1,365 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +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 +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 +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 +you can run in the future to recreate the current configuration, and a +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. + + 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 +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 +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 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. + + 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. + + 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 + 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 + privileges. + + 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 + 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 + 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 + 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 + distcheck', which can by used by developers to test that all other + 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' +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: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +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 +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. + + 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 +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 +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + 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. + +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 +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 +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 +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 +both of the following shortcuts of passing variable assignments to the +`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 +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 +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. + +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 +package recognizes. + + 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. + + Some packages offer the ability to configure how verbose the +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 +--disable-silent-rules' sets the default to verbose, which can be +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 +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. + + 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 + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + 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'. + + 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 +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 +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: + + CPU-COMPANY-SYSTEM + +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 +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 +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'. + +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. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +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: + + ./configure CC=/usr/local2/bin/gcc + +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 bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `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=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. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--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 + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--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 + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `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. + +`--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. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..6958a53 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,18 @@ + +MAINTAINERCLEANFILES = \ +Makefile.in \ +aclocal.m4 \ +config.guess \ +config.h.in \ +config.sub \ +configure \ +install-sh \ +depcomp \ +libtool \ +missing + +EXTRA_DIST = README AUTHORS COPYING + +SUBDIRS = src + +ACLOCAL_AMFLAGS = -I m4 diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README b/README new file mode 100644 index 0000000..9c3d31a --- /dev/null +++ b/README @@ -0,0 +1,103 @@ +exactness is a software package aimed to automate Elementary testing +after updating elm code. +The testing process is composed of running widget test, +cycling through API functions, and screenshot are taken on each stage of test. +(on user request with F2 key). + +Next, these screenshots are compared with screenshots of widget test +done before the code update. +When exactness detects difference in screenshot comparison, +it means widget layout was changed. +Unexpected layout changes may reveal that something is broken +in the new implementation. + +Testing with exactness composed of the following stages: +1. Test Recording. + Done once and exactness user most likely does not need to do this. + A set of pre-recorded tests already resides under 'data/recording' folder. + + To record a test just issue the command: + exactness -r + + Example: + exactness -r test_hover + + The record file will be produced in the current-working-directory as: + test_hover.rec + + In case you tried to run exactness with specific TestName + and nothing happens, this means you misspelled the test name. + You may review test names as it appears in tsuite.c source file. + + NOTE: omitting the test name causes recording all tests one after another. + Do this if you only mean it. + This rule applies to ALL proceeding stages as well. + + As widget test run you may press F2 at any point to set a screenshot. + (screenshot procduced in 'play' stage, set timing of screenshot here) + However, don't do this while animation is ongoing + or you get inconsistent PNG output each time test played. + + NOTE: You may change screenshot key from F2 to any other key + with TSUITE_SHOT_KEY env var. + +2. Test Initiation. + The final stage of testing process is based on PNG image comparison + of original screenshots with current screenshots produced after code change. + + To start you need to produce original screenshot set before code change. + To do that just issue the command: + exactness -i TestName1 [TestName2 ...] + + This command will play the test (TestName.rec file) and place PNG files + under 'orig' folders created in current-working-directory. + You need to do this just once. + Again, omitting the TestName will play and produce PNG files for all tests. + + Example: + exactness -i test_hover + This will produce PNG files such orig/test_hover_1.png + +3. Test playing, producing current state PNG files. + After doing Test Initiation (2) and updating elementary code, + you may run tests for current state of elm: + + exactness -p [-d DestDir] TestName1 [TestName2 ...] + Omitting DestDir param will cause exactness place all PNG files + under (default) folder named 'current'. + +4. Comparing PNG files. + This is the final stage of testing in which we compare output + before code update and after the update. + Matching PNG files from 'orig' and 'current' folder are compared. + When all comparisons done you get final report of (N) files did not match. + In case difference was found, you may look at comp_*.png files in DestDir. + + To run a comparison: + exactness -c [-d DestDir] TestName1 [TestName2 ...] + All comp_*.png files will reside in DestDir. + Omitting DestDir cause exactness to use default of 'current' folder name. + + Optional: + You may also do play and compare in a single command: + exactness -p -c [-d DestDir] TestName1 [TestName2 ...] + +5. fail_if(expr) macro: + You may use fail_if(expr); macro to verify variable value on-the-fly. + For example, if your code contains: + + char *p; + ... + fail_if(p == NULL); + + In case (p == NULL), a "fail_TestName.txt" file is crated + current working directory with a comment specifying the expr/line failed. + + fail_*.txt files are produced only for when expr fails when running. + When tests completed, the user gets notification message if any tests failed. + In such case, please review the fail_*.txt files. + +6. To view exactness help issue the command: + exactness --help + or + exactness -h diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..b6d9e4b --- /dev/null +++ b/autogen.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +rm -rf autom4te.cache +rm -f aclocal.m4 ltmain.sh +rm -f config.cache + +touch README +touch ABOUT-NLS + +echo "Running aclocal..." ; aclocal $ACLOCAL_FLAGS || exit 1 +echo "Running autoheader..." ; autoheader || exit 1 +echo "Running autoconf..." ; autoconf || exit 1 +echo "Running libtoolize..." ; (libtoolize --copy --automake || glibtoolize --automake) || exit 1 +echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1 + +if [ -z "$NOCONFIGURE" ]; then + ./configure "$@" +fi diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..a2f33d8 --- /dev/null +++ b/configure.ac @@ -0,0 +1,48 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_INIT([exactness], [0.1.0], [enlightenment-devel@lists.sourceforge.net]) +AC_PREREQ([2.52]) +AC_CONFIG_SRCDIR([configure.ac]) +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +AM_INIT_AUTOMAKE([1.6 dist-bzip2]) +AM_CONFIG_HEADER([config.h]) + +AC_ISC_POSIX +AC_PROG_CC +AM_PROG_CC_STDC +AC_HEADER_STDC +AC_C_CONST + +PKG_PROG_PKG_CONFIG +AC_PROG_LIBTOOL + +dnl Checking for __attribute__ support +AC_MSG_CHECKING([for __attribute__]) +AC_CACHE_VAL([_cv_have___attribute__], + [ + AC_TRY_COMPILE([#include ], + [int func(int x); int foo(int x __attribute__ ((unused))) { exit(1); }], + [_cv_have___attribute__="yes"], + [_cv_have___attribute__="no"]) + ]) + +if test "x${_cv_have___attribute__}" = "xyes" ; then + AC_DEFINE([HAVE___ATTRIBUTE__], [1], [Define to 1 if your compiler has __attribute__]) +fi +AC_MSG_RESULT([${_cv_have___attribute__}]) + +PKG_CHECK_MODULES([EFL], + [ + elementary >= 0.7.0 + ]) + +AC_OUTPUT([ +Makefile +src/Makefile +src/bin/Makefile +src/lib/Makefile +src/scripts/Makefile +]) diff --git a/data/recording/test_3d.rec b/data/recording/test_3d.rec new file mode 100644 index 0000000..7312db9 Binary files /dev/null and b/data/recording/test_3d.rec differ diff --git a/data/recording/test_actionslider.rec b/data/recording/test_actionslider.rec new file mode 100644 index 0000000..66950b7 Binary files /dev/null and b/data/recording/test_actionslider.rec differ diff --git a/data/recording/test_anchorblock.rec b/data/recording/test_anchorblock.rec new file mode 100644 index 0000000..cdcaaba Binary files /dev/null and b/data/recording/test_anchorblock.rec differ diff --git a/data/recording/test_anchorview.rec b/data/recording/test_anchorview.rec new file mode 100644 index 0000000..a23bdef Binary files /dev/null and b/data/recording/test_anchorview.rec differ diff --git a/data/recording/test_bg_image.rec b/data/recording/test_bg_image.rec new file mode 100644 index 0000000..0f2e360 Binary files /dev/null and b/data/recording/test_bg_image.rec differ diff --git a/data/recording/test_bg_options.rec b/data/recording/test_bg_options.rec new file mode 100644 index 0000000..e17675b Binary files /dev/null and b/data/recording/test_bg_options.rec differ diff --git a/data/recording/test_bg_plain.rec b/data/recording/test_bg_plain.rec new file mode 100644 index 0000000..3ef4374 Binary files /dev/null and b/data/recording/test_bg_plain.rec differ diff --git a/data/recording/test_box_horiz.rec b/data/recording/test_box_horiz.rec new file mode 100644 index 0000000..5dbf82a Binary files /dev/null and b/data/recording/test_box_horiz.rec differ diff --git a/data/recording/test_box_vert.rec b/data/recording/test_box_vert.rec new file mode 100644 index 0000000..f3d2828 Binary files /dev/null and b/data/recording/test_box_vert.rec differ diff --git a/data/recording/test_bubble.rec b/data/recording/test_bubble.rec new file mode 100644 index 0000000..9557b79 Binary files /dev/null and b/data/recording/test_bubble.rec differ diff --git a/data/recording/test_button.rec b/data/recording/test_button.rec new file mode 100644 index 0000000..7756095 Binary files /dev/null and b/data/recording/test_button.rec differ diff --git a/data/recording/test_calendar.rec b/data/recording/test_calendar.rec new file mode 100644 index 0000000..cace51d Binary files /dev/null and b/data/recording/test_calendar.rec differ diff --git a/data/recording/test_check.rec b/data/recording/test_check.rec new file mode 100644 index 0000000..1c67aba Binary files /dev/null and b/data/recording/test_check.rec differ diff --git a/data/recording/test_colorselector.rec b/data/recording/test_colorselector.rec new file mode 100644 index 0000000..b3da6fc Binary files /dev/null and b/data/recording/test_colorselector.rec differ diff --git a/data/recording/test_conformant.rec b/data/recording/test_conformant.rec new file mode 100644 index 0000000..d42c5a4 Binary files /dev/null and b/data/recording/test_conformant.rec differ diff --git a/data/recording/test_conformant2.rec b/data/recording/test_conformant2.rec new file mode 100644 index 0000000..701952a Binary files /dev/null and b/data/recording/test_conformant2.rec differ diff --git a/data/recording/test_ctxpopup.rec b/data/recording/test_ctxpopup.rec new file mode 100644 index 0000000..2da7707 Binary files /dev/null and b/data/recording/test_ctxpopup.rec differ diff --git a/data/recording/test_diskselector.rec b/data/recording/test_diskselector.rec new file mode 100644 index 0000000..3413015 Binary files /dev/null and b/data/recording/test_diskselector.rec differ diff --git a/data/recording/test_fileselector.rec b/data/recording/test_fileselector.rec new file mode 100644 index 0000000..f458cf6 Binary files /dev/null and b/data/recording/test_fileselector.rec differ diff --git a/data/recording/test_fileselector_button.rec b/data/recording/test_fileselector_button.rec new file mode 100644 index 0000000..ae8847e Binary files /dev/null and b/data/recording/test_fileselector_button.rec differ diff --git a/data/recording/test_fileselector_entry.rec b/data/recording/test_fileselector_entry.rec new file mode 100644 index 0000000..719b169 Binary files /dev/null and b/data/recording/test_fileselector_entry.rec differ diff --git a/data/recording/test_focus.rec b/data/recording/test_focus.rec new file mode 100644 index 0000000..9ad4f43 Binary files /dev/null and b/data/recording/test_focus.rec differ diff --git a/data/recording/test_gengrid.rec b/data/recording/test_gengrid.rec new file mode 100644 index 0000000..37d61b1 Binary files /dev/null and b/data/recording/test_gengrid.rec differ diff --git a/data/recording/test_genlist.rec b/data/recording/test_genlist.rec new file mode 100644 index 0000000..7783001 Binary files /dev/null and b/data/recording/test_genlist.rec differ diff --git a/data/recording/test_genlist10.rec b/data/recording/test_genlist10.rec new file mode 100644 index 0000000..cdc3d48 Binary files /dev/null and b/data/recording/test_genlist10.rec differ diff --git a/data/recording/test_genlist11.rec b/data/recording/test_genlist11.rec new file mode 100644 index 0000000..093a060 Binary files /dev/null and b/data/recording/test_genlist11.rec differ diff --git a/data/recording/test_genlist2.rec b/data/recording/test_genlist2.rec new file mode 100644 index 0000000..6e7ed57 Binary files /dev/null and b/data/recording/test_genlist2.rec differ diff --git a/data/recording/test_genlist3.rec b/data/recording/test_genlist3.rec new file mode 100644 index 0000000..939ae3b Binary files /dev/null and b/data/recording/test_genlist3.rec differ diff --git a/data/recording/test_genlist4.rec b/data/recording/test_genlist4.rec new file mode 100644 index 0000000..9757f97 Binary files /dev/null and b/data/recording/test_genlist4.rec differ diff --git a/data/recording/test_genlist6.rec b/data/recording/test_genlist6.rec new file mode 100644 index 0000000..2902ab1 Binary files /dev/null and b/data/recording/test_genlist6.rec differ diff --git a/data/recording/test_genlist8.rec b/data/recording/test_genlist8.rec new file mode 100644 index 0000000..25203e8 Binary files /dev/null and b/data/recording/test_genlist8.rec differ diff --git a/data/recording/test_grid.rec b/data/recording/test_grid.rec new file mode 100644 index 0000000..67009dd Binary files /dev/null and b/data/recording/test_grid.rec differ diff --git a/data/recording/test_hover.rec b/data/recording/test_hover.rec new file mode 100644 index 0000000..ac4206d Binary files /dev/null and b/data/recording/test_hover.rec differ diff --git a/data/recording/test_hover2.rec b/data/recording/test_hover2.rec new file mode 100644 index 0000000..d035139 Binary files /dev/null and b/data/recording/test_hover2.rec differ diff --git a/data/recording/test_hoversel.rec b/data/recording/test_hoversel.rec new file mode 100644 index 0000000..c72de1c Binary files /dev/null and b/data/recording/test_hoversel.rec differ diff --git a/data/recording/test_index.rec b/data/recording/test_index.rec new file mode 100644 index 0000000..b6b87fe Binary files /dev/null and b/data/recording/test_index.rec differ diff --git a/data/recording/test_inwin.rec b/data/recording/test_inwin.rec new file mode 100644 index 0000000..41e5f1a Binary files /dev/null and b/data/recording/test_inwin.rec differ diff --git a/data/recording/test_inwin2.rec b/data/recording/test_inwin2.rec new file mode 100644 index 0000000..f1df54d Binary files /dev/null and b/data/recording/test_inwin2.rec differ diff --git a/data/recording/test_label.rec b/data/recording/test_label.rec new file mode 100644 index 0000000..eb08f3d Binary files /dev/null and b/data/recording/test_label.rec differ diff --git a/data/recording/test_list.rec b/data/recording/test_list.rec new file mode 100644 index 0000000..17fee07 Binary files /dev/null and b/data/recording/test_list.rec differ diff --git a/data/recording/test_notify.rec b/data/recording/test_notify.rec new file mode 100644 index 0000000..65c0432 Binary files /dev/null and b/data/recording/test_notify.rec differ diff --git a/data/recording/test_pager_slide.rec b/data/recording/test_pager_slide.rec new file mode 100644 index 0000000..449a980 Binary files /dev/null and b/data/recording/test_pager_slide.rec differ diff --git a/data/recording/test_panel.rec b/data/recording/test_panel.rec new file mode 100644 index 0000000..05b8c54 Binary files /dev/null and b/data/recording/test_panel.rec differ diff --git a/data/recording/test_panes.rec b/data/recording/test_panes.rec new file mode 100644 index 0000000..3bb6fd4 Binary files /dev/null and b/data/recording/test_panes.rec differ diff --git a/data/recording/test_progressbar.rec b/data/recording/test_progressbar.rec new file mode 100644 index 0000000..b07d1a7 Binary files /dev/null and b/data/recording/test_progressbar.rec differ diff --git a/data/recording/test_radio.rec b/data/recording/test_radio.rec new file mode 100644 index 0000000..1d30b1d Binary files /dev/null and b/data/recording/test_radio.rec differ diff --git a/data/recording/test_scaling.rec b/data/recording/test_scaling.rec new file mode 100644 index 0000000..b2b55ac Binary files /dev/null and b/data/recording/test_scaling.rec differ diff --git a/data/recording/test_scaling2.rec b/data/recording/test_scaling2.rec new file mode 100644 index 0000000..ec6e820 Binary files /dev/null and b/data/recording/test_scaling2.rec differ diff --git a/data/recording/test_scroller.rec b/data/recording/test_scroller.rec new file mode 100644 index 0000000..4ba26eb Binary files /dev/null and b/data/recording/test_scroller.rec differ diff --git a/data/recording/test_scroller2.rec b/data/recording/test_scroller2.rec new file mode 100644 index 0000000..9109cc4 Binary files /dev/null and b/data/recording/test_scroller2.rec differ diff --git a/data/recording/test_segment_control.rec b/data/recording/test_segment_control.rec new file mode 100644 index 0000000..42794c6 Binary files /dev/null and b/data/recording/test_segment_control.rec differ diff --git a/data/recording/test_separator.rec b/data/recording/test_separator.rec new file mode 100644 index 0000000..411d398 Binary files /dev/null and b/data/recording/test_separator.rec differ diff --git a/data/recording/test_slider.rec b/data/recording/test_slider.rec new file mode 100644 index 0000000..06385db Binary files /dev/null and b/data/recording/test_slider.rec differ diff --git a/data/recording/test_spinner.rec b/data/recording/test_spinner.rec new file mode 100644 index 0000000..74b2c0c Binary files /dev/null and b/data/recording/test_spinner.rec differ diff --git a/data/recording/test_table.rec b/data/recording/test_table.rec new file mode 100644 index 0000000..2b8c51c Binary files /dev/null and b/data/recording/test_table.rec differ diff --git a/data/recording/test_table2.rec b/data/recording/test_table2.rec new file mode 100644 index 0000000..472a949 Binary files /dev/null and b/data/recording/test_table2.rec differ diff --git a/data/recording/test_table3.rec b/data/recording/test_table3.rec new file mode 100644 index 0000000..9932972 Binary files /dev/null and b/data/recording/test_table3.rec differ diff --git a/data/recording/test_table4.rec b/data/recording/test_table4.rec new file mode 100644 index 0000000..4bfcd8f Binary files /dev/null and b/data/recording/test_table4.rec differ diff --git a/data/recording/test_table5.rec b/data/recording/test_table5.rec new file mode 100644 index 0000000..66fc4a9 Binary files /dev/null and b/data/recording/test_table5.rec differ diff --git a/data/recording/test_table6.rec b/data/recording/test_table6.rec new file mode 100644 index 0000000..535a9c5 Binary files /dev/null and b/data/recording/test_table6.rec differ diff --git a/data/recording/test_toggle.rec b/data/recording/test_toggle.rec new file mode 100644 index 0000000..578b611 Binary files /dev/null and b/data/recording/test_toggle.rec differ diff --git a/data/recording/test_toolbar.rec b/data/recording/test_toolbar.rec new file mode 100644 index 0000000..de28714 Binary files /dev/null and b/data/recording/test_toolbar.rec differ diff --git a/data/recording/test_toolbar2.rec b/data/recording/test_toolbar2.rec new file mode 100644 index 0000000..ce9274b Binary files /dev/null and b/data/recording/test_toolbar2.rec differ diff --git a/data/recording/test_toolbar3.rec b/data/recording/test_toolbar3.rec new file mode 100644 index 0000000..3deba34 Binary files /dev/null and b/data/recording/test_toolbar3.rec differ diff --git a/data/recording/test_toolbar4.rec b/data/recording/test_toolbar4.rec new file mode 100644 index 0000000..95660e2 Binary files /dev/null and b/data/recording/test_toolbar4.rec differ diff --git a/data/recording/test_toolbar5.rec b/data/recording/test_toolbar5.rec new file mode 100644 index 0000000..23f58d6 Binary files /dev/null and b/data/recording/test_toolbar5.rec differ diff --git a/data/recording/test_tooltip.rec b/data/recording/test_tooltip.rec new file mode 100644 index 0000000..d03fdf6 Binary files /dev/null and b/data/recording/test_tooltip.rec differ diff --git a/data/recording/test_tooltip2.rec b/data/recording/test_tooltip2.rec new file mode 100644 index 0000000..2b69fbb Binary files /dev/null and b/data/recording/test_tooltip2.rec differ diff --git a/data/recording/test_win_state.rec b/data/recording/test_win_state.rec new file mode 100644 index 0000000..7b5e64d Binary files /dev/null and b/data/recording/test_win_state.rec differ diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..f0311c7 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,4 @@ + +MAINTAINERCLEANFILES = Makefile.in + +SUBDIRS = bin lib scripts diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am new file mode 100644 index 0000000..78e098e --- /dev/null +++ b/src/bin/Makefile.am @@ -0,0 +1,80 @@ + +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I$(top_srcdir)/src/lib \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +-DLOCALE_DIR=\"$(datadir)/locale\" \ +@EFL_CFLAGS@ + +bin_PROGRAMS = exactness_raw + +exactness_raw_SOURCES = \ + tsuite.c \ + ../lib/tsuite_file_data.c \ + test_3d.c \ + test_actionslider.c \ + test_focus2.c \ + test_panel.c \ + test_anchorblock.c \ + test_focus3.c \ + test_panes.c \ + test_anchorview.c \ + test_focus.c \ + test_photo.c \ + test_bg.c \ + test_gengrid.c \ + test_photocam.c \ + test_box.c \ + test_genlist.c \ + test_progressbar.c \ + test_bubble.c \ + test_radio.c \ + test_button.c \ + test_scaling.c \ + test_calendar.c \ + test_grid.c \ + test_segment_control.c \ + test_check.c \ + test_hover.c \ + test_separator.c \ + test_hoversel.c \ + test_slider.c \ + test_colorselector.c \ + test_conform.c \ + test_spinner.c \ + test_ctxpopup.c \ + test_index.c \ + test_table.c \ + test_cursor.c \ + test_inwin.c \ + test_thumb.c \ + test_diskselector.c \ + test_label.c \ + test_toggle.c \ + test_entry.c \ + test_toolbar.c \ + test_fileselector_button.c \ + test_tooltip.c \ + test_fileselector.c \ + test_list.c \ + test_fileselector_entry.c \ + test_map.c \ + test_weather.c \ + test_menu.c \ + test_win_inline.c \ + test_naviframe.c \ + test_win_state.c \ + test_notify.c \ + test_floating.c \ + test_scroller.c \ + test_pager.c + + + +exactness_raw_LDADD = @EFL_LIBS@ + +EXTRA_DIST = \ + tsuite.h + diff --git a/src/bin/test_3d.c b/src/bin/test_3d.c new file mode 100644 index 0000000..db1704b --- /dev/null +++ b/src/bin/test_3d.c @@ -0,0 +1,338 @@ +#include +#include "tsuite.h" + +typedef struct _Point +{ + Evas_Coord x, y, z, u, v; +} Point; + +typedef struct _Side +{ + Evas_Object *o; + Point pt[4]; +} Side; + +typedef struct _Cube +{ + Side side[6]; +} Cube; + +static Cube *cube; +static double rotx = 0.0, roty = 0.0, rotz = 0.0; +static double cxo = 0.0, cyo = 0.0, focv = 256.0, z0v = 0.0; +#define POINT(n, p, xx, yy, zz, uu, vv) \ + c->side[n].pt[p].x = xx; \ + c->side[n].pt[p].y = yy; \ + c->side[n].pt[p].z = zz; \ + c->side[n].pt[p].u = uu; \ + c->side[n].pt[p].v = vv + +static Cube * +_cube_new(Evas *evas, Evas_Coord w, Evas_Coord h, Evas_Coord d) +{ + Cube *c; + int i; + + w -= (w / 2); + h -= (h / 2); + d -= (d / 2); + c = calloc(1, sizeof(Cube)); + for (i = 0; i < 6; i++) + { + Evas_Object *o; + char buf[PATH_MAX]; + o = evas_object_image_add(evas); + c->side[i].o = o; + snprintf(buf, sizeof(buf), "%s/images/%s", + elm_app_data_dir_get(), "twofish.jpg"); + evas_object_image_file_set(o, buf, NULL); + evas_object_image_fill_set(o, 0, 0, 256, 256); + evas_object_resize(o, 256, 256); + evas_object_image_smooth_scale_set(o, 0); + evas_object_show(o); + } + POINT(0, 0, -w, -h, -d, 0, 0); + POINT(0, 1, w, -h, -d, 256, 0); + POINT(0, 2, w, h, -d, 256, 256); + POINT(0, 3, -w, h, -d, 0, 256); + + POINT(1, 0, w, -h, -d, 0, 0); + POINT(1, 1, w, -h, d, 256, 0); + POINT(1, 2, w, h, d, 256, 256); + POINT(1, 3, w, h, -d, 0, 256); + + POINT(2, 0, w, -h, d, 0, 0); + POINT(2, 1, -w, -h, d, 256, 0); + POINT(2, 2, -w, h, d, 256, 256); + POINT(2, 3, w, h, d, 0, 256); + + POINT(3, 0, -w, -h, d, 0, 0); + POINT(3, 1, -w, -h, -d, 256, 0); + POINT(3, 2, -w, h, -d, 256, 256); + POINT(3, 3, -w, h, d, 0, 256); + + POINT(4, 0, -w, -h, d, 0, 0); + POINT(4, 1, w, -h, d, 256, 0); + POINT(4, 2, w, -h, -d, 256, 256); + POINT(4, 3, -w, -h, -d, 0, 256); + + POINT(5, 0, -w, h, -d, 0, 0); + POINT(5, 1, w, h, -d, 256, 0); + POINT(5, 2, w, h, d, 256, 256); + POINT(5, 3, -w, h, d, 0, 256); + + return c; +} + +static void +_cube_pos(Cube *c, + Evas_Coord x, Evas_Coord y, Evas_Coord z, + double dx, double dy, double dz, + Evas_Coord cx, Evas_Coord cy, Evas_Coord foc, Evas_Coord z0) +{ + Evas_Map *m; + int i, j, order[6], sorted; + Evas_Coord mz[6]; + + m = evas_map_new(4); + evas_map_smooth_set(m, 0); + + for (i = 0; i < 6; i++) + { + Evas_Coord tz[4]; + + for (j = 0; j < 4; j++) + { + evas_map_point_coord_set(m, j, + c->side[i].pt[j].x + x, + c->side[i].pt[j].y + y, + c->side[i].pt[j].z + z); + evas_map_point_image_uv_set(m, j, + c->side[i].pt[j].u, + c->side[i].pt[j].v); + evas_map_point_color_set(m, j, 255, 255, 255, 255); + } + evas_map_util_3d_rotate(m, dx, dy, dz, x, y, z); + evas_map_util_3d_lighting(m, -1000, -1000, -1000, + 255, 255, 255, + 20, 20, 20); + evas_map_util_3d_perspective(m, cx, cy, foc, z0); + if (evas_map_util_clockwise_get(m)) + { + evas_object_map_enable_set(c->side[i].o, 1); + evas_object_map_set(c->side[i].o, m); + evas_object_show(c->side[i].o); + } + else + evas_object_hide(c->side[i].o); + + order[i] = i; + for (j = 0; j < 4; j++) + evas_map_point_coord_get(m, j, NULL, NULL, &(tz[j])); + mz[i] = (tz[0] + tz[1] + tz[2] + tz[3]) / 4; + } + sorted = 0; + do + { + sorted = 1; + for (i = 0; i < 5; i++) + { + if (mz[order[i]] > mz[order[i + 1]]) + { + j = order[i]; + order[i] = order[i + 1]; + order[i + 1] = j; + sorted = 0; + } + } + } + while (!sorted); + + evas_object_raise(c->side[order[0]].o); + for (i = 1; i < 6; i++) + evas_object_stack_below(c->side[order[i]].o, c->side[order[i - 1]].o); + evas_map_free(m); +} + +/* +static void +_cube_free(Cube *c) +{ + int i; + + for (i = 0; i < 6; i++) evas_object_del(c->side[i].o); + free(c); +} +*/ + +static void +_cube_update(Evas_Object *win, Cube *c) +{ + Evas_Coord w, h; + + evas_object_geometry_get(win, NULL, NULL, &w, &h); + _cube_pos(c, + (w / 2), (h / 2), 512, + rotx, roty, rotz, + (w / 2) + cxo, (h / 2) + cyo, z0v, focv); +} + +void +_ch_rot_x(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + rotx = elm_slider_value_get(obj); + _cube_update(win, cube); +} + +void +_ch_rot_y(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + roty = elm_slider_value_get(obj); + _cube_update(win, cube); +} + +void +_ch_rot_z(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + rotz = elm_slider_value_get(obj); + _cube_update(win, cube); +} + +void +_ch_cx(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + cxo = elm_slider_value_get(obj); + _cube_update(win, cube); +} + +void +_ch_cy(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + cyo = elm_slider_value_get(obj); + _cube_update(win, cube); +} + +void +_ch_foc(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + focv = elm_slider_value_get(obj); + _cube_update(win, cube); +} + +void +_ch_z0(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + z0v = elm_slider_value_get(obj); + _cube_update(win, cube); +} + +TEST_START(test_3d) +{ + Evas_Object *bg, *bx, *sl; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + cube = _cube_new(evas_object_evas_get(win), 240, 240, 240); + + bx = elm_box_add(win); + evas_object_layer_set(bx, 10); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Rot X"); + elm_slider_unit_format_set(sl, "%1.0f units"); + elm_slider_span_size_set(sl, 360); + elm_slider_min_max_set(sl, 0, 360); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sl); + evas_object_smart_callback_add(sl, "changed", _ch_rot_x, win); + evas_object_show(sl); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Rot Y"); + elm_slider_unit_format_set(sl, "%1.0f units"); + elm_slider_span_size_set(sl, 360); + elm_slider_min_max_set(sl, 0, 360); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sl); + evas_object_smart_callback_add(sl, "changed", _ch_rot_y, win); + evas_object_show(sl); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Rot Z"); + elm_slider_unit_format_set(sl, "%1.0f units"); + elm_slider_span_size_set(sl, 360); + elm_slider_min_max_set(sl, 0, 360); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sl); + evas_object_smart_callback_add(sl, "changed", _ch_rot_z, win); + evas_object_show(sl); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "CX Off"); + elm_slider_unit_format_set(sl, "%1.0f units"); + elm_slider_span_size_set(sl, 360); + elm_slider_min_max_set(sl, -320, 320); + elm_slider_value_set(sl, cxo); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sl); + evas_object_smart_callback_add(sl, "changed", _ch_cx, win); + evas_object_show(sl); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "CY Off"); + elm_slider_unit_format_set(sl, "%1.0f units"); + elm_slider_span_size_set(sl, 360); + elm_slider_min_max_set(sl, -320, 320); + elm_slider_value_set(sl, cyo); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sl); + evas_object_smart_callback_add(sl, "changed", _ch_cy, win); + evas_object_show(sl); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Foc"); + elm_slider_unit_format_set(sl, "%1.0f units"); + elm_slider_span_size_set(sl, 360); + elm_slider_min_max_set(sl, 1, 2000); + elm_slider_value_set(sl, focv); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sl); + evas_object_smart_callback_add(sl, "changed", _ch_foc, win); + evas_object_show(sl); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Z0"); + elm_slider_unit_format_set(sl, "%1.0f units"); + elm_slider_span_size_set(sl, 360); + elm_slider_min_max_set(sl, -2000, 2000); + elm_slider_value_set(sl, z0v); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sl); + evas_object_smart_callback_add(sl, "changed", _ch_z0, win); + evas_object_show(sl); + + evas_object_resize(win, 480, 480); + _cube_update(win, cube); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_actionslider.c b/src/bin/test_actionslider.c new file mode 100644 index 0000000..15454e5 --- /dev/null +++ b/src/bin/test_actionslider.c @@ -0,0 +1,175 @@ +#include +#include "tsuite.h" + +static void _pos_selected_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info) +{ + printf("Selection: %s\n", (char *)event_info); + printf("Label selected: %s\n", elm_actionslider_selected_label_get(obj)); +} + +static void +_position_change_magnetic_cb(void *data __UNUSED__, Evas_Object * obj, void *event_info) +{ + if (!strcmp((char *)event_info, "left")) + elm_actionslider_magnet_pos_set(obj, ELM_ACTIONSLIDER_LEFT); + else if (!strcmp((char *)event_info, "right")) + elm_actionslider_magnet_pos_set(obj, ELM_ACTIONSLIDER_RIGHT); +} + +static void +_magnet_enable_disable_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info) +{ + if (!strcmp((char *)event_info, "left")) + elm_actionslider_magnet_pos_set(obj, ELM_ACTIONSLIDER_CENTER); + else if (!strcmp((char *)event_info, "right")) + elm_actionslider_magnet_pos_set(obj, ELM_ACTIONSLIDER_NONE); +} + +enum _api_state +{ + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + switch(api->state) + { /* Put all api-changes under switch */ + case API_STATE_LAST: + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + a->state++; + set_api_state(a); + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_actionslider) +{ + Evas_Object *bg, *bx, *as; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, 0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + as = elm_actionslider_add(win); + evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0); + elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_RIGHT); + elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_RIGHT); + elm_object_part_text_set(as, "left", "Snooze"); + elm_object_part_text_set(as, "center", NULL); + elm_object_part_text_set(as, "right", "Stop"); + elm_actionslider_enabled_pos_set(as, ELM_ACTIONSLIDER_LEFT | + ELM_ACTIONSLIDER_RIGHT); + evas_object_smart_callback_add(as, "pos_changed", + _position_change_magnetic_cb, NULL); + evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL); + evas_object_show(as); + elm_box_pack_end(bx, as); + + as = elm_actionslider_add(win); + evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0); + elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_CENTER); + elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_CENTER); + elm_object_part_text_set(as, "left", "Snooze"); + elm_object_part_text_set(as, "center", NULL); + elm_object_part_text_set(as, "right", "Stop"); + elm_actionslider_enabled_pos_set(as, ELM_ACTIONSLIDER_LEFT | + ELM_ACTIONSLIDER_RIGHT); + evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL); + evas_object_show(as); + elm_box_pack_end(bx, as); + + as = elm_actionslider_add(win); + elm_object_style_set(as, "bar"); + evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0); + elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_LEFT); + elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_CENTER| + ELM_ACTIONSLIDER_RIGHT); + elm_actionslider_enabled_pos_set(as, ELM_ACTIONSLIDER_CENTER | + ELM_ACTIONSLIDER_RIGHT); + elm_object_part_text_set(as, "left", NULL); + elm_object_part_text_set(as, "center", "Accept"); + elm_object_part_text_set(as, "right", "Reject"); + evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL); + evas_object_show(as); + elm_box_pack_end(bx, as); + + as = elm_actionslider_add(win); + elm_object_style_set(as, "bar"); + evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0); + elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_LEFT); + elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_LEFT); + elm_object_part_text_set(as, "left", NULL); + elm_object_part_text_set(as, "center", "Accept"); + elm_object_part_text_set(as, "right", "Reject"); + elm_object_text_set(as, "Go"); + evas_object_smart_callback_add(as, "pos_changed", + _position_change_magnetic_cb, NULL); + evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL); + evas_object_show(as); + elm_box_pack_end(bx, as); + + + as = elm_actionslider_add(win); + evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0); + elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_LEFT); + elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_ALL); + elm_object_part_text_set(as, "left", "Left"); + elm_object_part_text_set(as, "center", "Center"); + elm_object_part_text_set(as, "right", "Right"); + elm_object_text_set(as, "Go"); + evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL); + evas_object_show(as); + elm_box_pack_end(bx, as); + + as = elm_actionslider_add(win); + evas_object_size_hint_weight_set(as, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0); + elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_CENTER); + elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_CENTER); + elm_object_part_text_set(as, "left", "Enable"); + elm_object_part_text_set(as, "center", "Magnet"); + elm_object_part_text_set(as, "right", "Disable"); + evas_object_smart_callback_add(as, "pos_changed", + _magnet_enable_disable_cb, NULL); + evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL); + evas_object_show(as); + elm_box_pack_end(bx, as); + + evas_object_resize(win, 320, 400); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_anchorblock.c b/src/bin/test_anchorblock.c new file mode 100644 index 0000000..ce21aeb --- /dev/null +++ b/src/bin/test_anchorblock.c @@ -0,0 +1,275 @@ +#include +#include "tsuite.h" + +static void +_print_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("bubble clicked\n"); +} + +static void +my_anchorblock_bt(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *av = data; + elm_anchorblock_hover_end(av); +} + +static void +my_anchorblock_anchor(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *av = data; + Elm_Entry_Anchorblock_Info *ei = event_info; + Evas_Object *bt, *bx; + + bt = elm_button_add(obj); + elm_object_text_set(bt, ei->name); + elm_hover_content_set(ei->hover, "middle", bt); + evas_object_show(bt); + + // hints as to where we probably should put hover contents (buttons etc.). + if (ei->hover_top) + { + bx = elm_box_add(obj); + bt = elm_button_add(obj); + elm_object_text_set(bt, "Top 1"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + bt = elm_button_add(obj); + elm_object_text_set(bt, "Top 2"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + bt = elm_button_add(obj); + elm_object_text_set(bt, "Top 3"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + elm_hover_content_set(ei->hover, "top", bx); + evas_object_show(bx); + } + if (ei->hover_bottom) + { + bt = elm_button_add(obj); + elm_object_text_set(bt, "Bot"); + elm_hover_content_set(ei->hover, "bottom", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + } + if (ei->hover_left) + { + bt = elm_button_add(obj); + elm_object_text_set(bt, "Left"); + elm_hover_content_set(ei->hover, "left", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + } + if (ei->hover_right) + { + bt = elm_button_add(obj); + elm_object_text_set(bt, "Right"); + elm_hover_content_set(ei->hover, "right", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + } +} + +static void +my_anchorblock_edge_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("left\n"); +} + +static void +my_anchorblock_edge_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("right\n"); +} + +static void +my_anchorblock_edge_top(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("top\n"); +} + +static void +my_anchorblock_edge_bottom(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("bottom\n"); +} + +static void +my_anchorblock_scroll(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Coord x, y, w, h, vw, vh; + + elm_scroller_region_get(obj, &x, &y, &w, &h); + elm_scroller_child_size_get(obj, &vw, &vh); + printf("scroll %ix%i +%i+%i in %ix%i\n", w, h, x, y, vw, vh); +} + +enum _api_state +{ + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + switch(api->state) + { /* Put all api-changes under switch */ + case API_STATE_LAST: + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + a->state++; + set_api_state(a); + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_anchorblock) +{ + Evas_Object *bg, *av, *sc, *bx, *bb, *ic; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, sc); + + evas_object_smart_callback_add(sc, "edge_left", my_anchorblock_edge_left, NULL); + evas_object_smart_callback_add(sc, "edge_right", my_anchorblock_edge_right, NULL); + evas_object_smart_callback_add(sc, "edge_top", my_anchorblock_edge_top, NULL); + evas_object_smart_callback_add(sc, "edge_bottom", my_anchorblock_edge_bottom, NULL); + evas_object_smart_callback_add(sc, "scroll", my_anchorblock_scroll, NULL); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); + + bb = elm_bubble_add(win); + elm_object_text_set(bb, "Message 3"); + elm_object_part_text_set(bb, "info", "10:32 4/11/2008"); + elm_bubble_icon_set(bb, ic); + evas_object_smart_callback_add(bb, "clicked", _print_clicked, NULL); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bb, EVAS_HINT_FILL, EVAS_HINT_FILL); + av = elm_anchorblock_add(win); + elm_anchorblock_hover_style_set(av, "popout"); + elm_anchorblock_hover_parent_set(av, win); + elm_object_text_set(av, + "Hi there. This is the most recent message in the " + "list of messages. It has one +61 432 1234 " + "(phone number) to click on."); + evas_object_smart_callback_add(av, "anchor,clicked", + my_anchorblock_anchor, av); + elm_object_content_set(bb, av); + evas_object_show(av); + elm_box_pack_end(bx, bb); + evas_object_show(bb); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + bb = elm_bubble_add(win); + elm_object_text_set(bb, "Message 2"); + elm_object_part_text_set(bb, "info", "7:16 27/10/2008"); + elm_bubble_icon_set(bb, ic); + evas_object_smart_callback_add(bb, "clicked", _print_clicked, NULL); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bb, EVAS_HINT_FILL, EVAS_HINT_FILL); + av = elm_anchorblock_add(win); + elm_anchorblock_hover_style_set(av, "popout"); + elm_anchorblock_hover_parent_set(av, win); + elm_object_text_set(av, + "Hey what are you doing? This is the second last message " + "Hi there. This is the most recent message in the " + "list. It's a longer one so it can wrap more and " + "contains a John contact " + "link in it to test popups on links. The idea is that " + "all SMS's are scanned for things that look like phone " + "numbers or names that are in your contacts list, and " + "if they are, they become clickable links that pop up " + "a menus of obvious actions to perform on this piece " + "of information. This of course can be later explicitly " + "done by links maybe running local apps or even being " + "web URL's too that launch the web browser and point it " + "to that URL. "); + evas_object_smart_callback_add(av, "anchor,clicked", my_anchorblock_anchor, av); + elm_object_content_set(bb, av); + evas_object_show(av); + elm_box_pack_end(bx, bb); + evas_object_show(bb); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); + + bb = elm_bubble_add(win); + elm_object_text_set(bb, "Message 1"); + elm_object_part_text_set(bb, "info", "20:47 18/6/2008"); + elm_bubble_icon_set(bb, ic); + evas_object_smart_callback_add(bb, "clicked", _print_clicked, NULL); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + av = elm_anchorblock_add(win); + elm_anchorblock_hover_style_set(av, "popout"); + elm_anchorblock_hover_parent_set(av, win); + elm_object_text_set(av, "This is a short message. "); + evas_object_smart_callback_add(av, "anchor,clicked", + my_anchorblock_anchor, av); + elm_object_content_set(bb, av); + evas_object_show(av); + elm_box_pack_end(bx, bb); + evas_object_show(bb); + + elm_object_content_set(sc, bx); + evas_object_show(bx); + + evas_object_show(sc); + + evas_object_resize(win, 320, 520); + + elm_object_focus_set(win, EINA_TRUE); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_anchorview.c b/src/bin/test_anchorview.c new file mode 100644 index 0000000..4037574 --- /dev/null +++ b/src/bin/test_anchorview.c @@ -0,0 +1,148 @@ +#include +#include "tsuite.h" + +static void +my_anchorview_bt(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *av = data; + elm_anchorview_hover_end(av); +} + +static void +my_anchorview_anchor(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *av = data; + Elm_Entry_Anchorview_Info *ei = event_info; + Evas_Object *bt, *bx; + + bt = elm_button_add(obj); + elm_object_text_set(bt, ei->name); + elm_hover_content_set(ei->hover, "middle", bt); + evas_object_show(bt); + + // hints as to where we probably should put hover contents (buttons etc.). + if (ei->hover_top) + { + bx = elm_box_add(obj); + bt = elm_button_add(obj); + elm_object_text_set(bt, "Top 1"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + bt = elm_button_add(obj); + elm_object_text_set(bt, "Top 2"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + bt = elm_button_add(obj); + elm_object_text_set(bt, "Top 3"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + elm_hover_content_set(ei->hover, "top", bx); + evas_object_show(bx); + } + if (ei->hover_bottom) + { + bt = elm_button_add(obj); + elm_object_text_set(bt, "Bot"); + elm_hover_content_set(ei->hover, "bottom", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + } + if (ei->hover_left) + { + bt = elm_button_add(obj); + elm_object_text_set(bt, "Left"); + elm_hover_content_set(ei->hover, "left", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + } + if (ei->hover_right) + { + bt = elm_button_add(obj); + elm_object_text_set(bt, "Right"); + elm_hover_content_set(ei->hover, "right", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + } +} + +enum _api_state +{ + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + switch(api->state) + { /* Put all api-changes under switch */ + case API_STATE_LAST: + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + a->state++; + set_api_state(a); + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_anchorview) +{ + Evas_Object *bg, *bx, *av; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); /* Resize BOX to size of window */ + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + av = elm_anchorview_add(win); + elm_anchorview_hover_style_set(av, "popout"); + elm_anchorview_hover_parent_set(av, win); + elm_object_text_set(av, + "This is an entry widget in this window that
" + "uses markup like this for styling and
" + "formatting like this, as well as
" + "links in the text, so enter text
" + "in here to edit it. By the way, links are
" + "called Anchors so you will need
" + "to refer to them this way. "); + evas_object_size_hint_weight_set(av, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(av, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(av, "anchor,clicked", my_anchorview_anchor, av); + elm_box_pack_end(bx, av); + evas_object_show(av); + evas_object_show(bx); + + evas_object_resize(win, 320, 300); + + elm_object_focus_set(win, EINA_TRUE); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_bg.c b/src/bin/test_bg.c new file mode 100644 index 0000000..e26b618 --- /dev/null +++ b/src/bin/test_bg.c @@ -0,0 +1,194 @@ +#include +#include "tsuite.h" + +static void +_cb_radio_changed(void *data, Evas_Object *obj, void *event __UNUSED__) +{ + Evas_Object *o_bg = data; + + elm_bg_option_set(o_bg, elm_radio_value_get((Evas_Object *)obj)); +} + +static void +_cb_overlay_changed(void *data, Evas_Object *obj, void *event __UNUSED__) +{ + Evas_Object *o_bg = data; + + if (elm_check_state_get(obj)) + { + Evas_Object *parent, *over; + char buff[PATH_MAX]; + + snprintf(buff, sizeof(buff), "%s/objects/test.edj", elm_app_data_dir_get()); + parent = elm_object_parent_widget_get(o_bg); + over = edje_object_add(evas_object_evas_get(parent)); + edje_object_file_set(over, buff, "bg_overlay"); + elm_object_content_set(o_bg, over); + } + else + elm_object_content_set(o_bg, NULL); +} + +static void +_cb_color_changed(void *data, Evas_Object *obj, void *event __UNUSED__) +{ + Evas_Object *o_bg = data; + double val = 0.0; + + val = elm_spinner_value_get(obj); + if (val == 1.0) + elm_bg_color_set(o_bg, 255, 255, 255); + else if (val == 2.0) + elm_bg_color_set(o_bg, 255, 0, 0); + else if (val == 3.0) + elm_bg_color_set(o_bg, 0, 0, 255); + else if (val == 4.0) + elm_bg_color_set(o_bg, 0, 255, 0); +} + +TEST_START(test_bg_plain) +{ + Evas_Object *bg; + + bg = elm_bg_add(win); + /* allow bg to expand in x & y */ + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + /* set size hints. a minimum size for the bg. this should propagate back + * to the window thus limiting its size based off the bg as the bg is one + * of the window's resize objects. */ + evas_object_size_hint_min_set(bg, 160, 160); + /* and set a maximum size. not needed very often. normally used together + * with evas_object_size_hint_min_set() at the same size to make a + * window not resizable */ + evas_object_size_hint_max_set(bg, 640, 640); + /* and now just resize the window to a size you want. normally widgets + * will determine the initial size though */ + evas_object_resize(win, 320, 320); + /* and show the window */ + evas_object_show(win); +} +TEST_END + +TEST_START(test_bg_image) +{ + Evas_Object *bg; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_bg_file_set(bg, buf, NULL); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + evas_object_size_hint_min_set(bg, 160, 160); + evas_object_size_hint_max_set(bg, 640, 640); + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + +TEST_START(test_bg_options) +{ + Evas_Object *bg; + Evas_Object *box, *hbox, *o_bg; + Evas_Object *rd, *rdg; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + box = elm_box_add(win); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, box); + evas_object_show(box); + + o_bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_bg_file_set(o_bg, buf, NULL); + evas_object_size_hint_weight_set(o_bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(o_bg, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, o_bg); + evas_object_show(o_bg); + + hbox = elm_box_add(win); + elm_box_horizontal_set(hbox, EINA_TRUE); + evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, ELM_BG_OPTION_CENTER); + elm_object_text_set(rd, "Center"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + rdg = rd; + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, ELM_BG_OPTION_SCALE); + elm_radio_group_add(rd, rdg); + elm_object_text_set(rd, "Scale"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, ELM_BG_OPTION_STRETCH); + elm_radio_group_add(rd, rdg); + elm_object_text_set(rd, "Stretch"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, ELM_BG_OPTION_TILE); + elm_radio_group_add(rd, rdg); + elm_object_text_set(rd, "Tile"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + elm_radio_value_set(rdg, ELM_BG_OPTION_SCALE); + + rd = elm_check_add(win); + elm_object_text_set(rd, "Show Overlay"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_overlay_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + /* color choices ... this is ghetto, but we don't have a 'colorpicker' + * widget yet :( */ + rd = elm_spinner_add(win); + elm_object_style_set(rd, "vertical"); + elm_spinner_min_max_set(rd, 1, 4); + elm_spinner_label_format_set(rd, "%.0f"); + elm_spinner_editable_set(rd, EINA_FALSE); + elm_spinner_special_value_add(rd, 1, "White"); + elm_spinner_special_value_add(rd, 2, "Red"); + elm_spinner_special_value_add(rd, 3, "Blue"); + elm_spinner_special_value_add(rd, 4, "Green"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_color_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + elm_box_pack_end(box, hbox); + evas_object_show(hbox); + + evas_object_size_hint_min_set(bg, 160, 160); + evas_object_size_hint_max_set(bg, 640, 640); + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_box.c b/src/bin/test_box.c new file mode 100644 index 0000000..e2db82a --- /dev/null +++ b/src/bin/test_box.c @@ -0,0 +1,393 @@ +#include +#include "tsuite.h" + +enum _api_state +{ + BOX_PACK_START, + BOX_PACK_BEFORE, + BOX_PACK_AFTER, + BOX_PADDING_SET, + BOX_ALIGN_SET, + BOX_HOMOGENEOUS_SET, + BOX_UNPACK_ALL, + BOX_CLEAR, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *items = elm_box_children_get(api->data); + if(!eina_list_count(items)) + return; + + /* use elm_box_children_get() to get list of children */ + switch(api->state) + { /* Put all api-changes under switch */ + case BOX_PACK_START: /* Move last item to begining */ + elm_box_unpack(api->data, eina_list_data_get(eina_list_last(items))); + elm_box_pack_start(api->data, eina_list_data_get(eina_list_last(items))); + break; + + case BOX_PACK_BEFORE: + if(eina_list_count(items) > 1) + { /* Put last item before the one preceeding it */ + elm_box_unpack(api->data, eina_list_data_get(eina_list_last(items))); + elm_box_pack_before(api->data, + eina_list_data_get(eina_list_last(items)), + eina_list_nth(items, eina_list_count(items)-2)); + } + break; + + case BOX_PACK_AFTER: + if(eina_list_count(items) > 1) + { /* Put item before last to last */ + elm_box_unpack(api->data, eina_list_nth(items, + eina_list_count(items)-2)); + elm_box_pack_after(api->data, + eina_list_nth(items, eina_list_count(items)-2), + eina_list_data_get(eina_list_last(items))); + } + break; + + case BOX_PADDING_SET: + elm_box_padding_set(api->data, 30, 15); + break; + + case BOX_ALIGN_SET: + elm_box_align_set(api->data, 0.25, 0.75); + break; + + case BOX_HOMOGENEOUS_SET: + elm_box_homogeneous_set(api->data, EINA_TRUE); + break; + + case BOX_UNPACK_ALL: + { + Eina_List *l; + Evas_Object *data; + elm_box_unpack_all(api->data); + EINA_LIST_REVERSE_FOREACH(items, l, data) + elm_box_pack_end(api->data, data); + } + break; + + case BOX_CLEAR: + elm_box_clear(api->data); + break; + + case API_STATE_LAST: + + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_box_vert) +{ + Evas_Object *bg, *bx, *bxx, *ic; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + bx = elm_box_add(win); + api->data = bx; + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/icon_01.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/icon_02.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.0, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/icon_03.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, EVAS_HINT_EXPAND, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + evas_object_show(win); +} +TEST_END + +static void +_del_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + elm_box_unpack(data, obj); + evas_object_move(obj, 0, 0); + evas_object_color_set(obj, 128, 64, 0, 128); +// evas_object_del(obj); +} + +TEST_START(test_box_vert2) +{ + Evas_Object *bg, *bx, *bt; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + elm_box_padding_set(bx, 10, 10); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 1"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_smart_callback_add(bt, "clicked", _del_cb, bx); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 2"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_smart_callback_add(bt, "clicked", _del_cb, bx); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 3"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_smart_callback_add(bt, "clicked", _del_cb, bx); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 4"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_smart_callback_add(bt, "clicked", _del_cb, bx); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 5"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_smart_callback_add(bt, "clicked", _del_cb, bx); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END + +TEST_START(test_box_horiz) +{ + Evas_Object *bg, *bx, *bxx, *ic; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + api->data = bx; + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/icon_01.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/icon_02.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/icon_03.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + evas_object_show(win); +} +TEST_END + +typedef struct +{ + Eina_List *transitions; + Evas_Object *box; + Evas_Object_Box_Layout last_layout; +} Transitions_Data; + +static void +_test_box_transition_change(void *data) +{ + Transitions_Data *tdata = data; + Elm_Box_Transition *layout_data; + Evas_Object_Box_Layout next_layout; + + if (!data) return; + next_layout = eina_list_data_get(tdata->transitions); + layout_data = elm_box_transition_new(2.0, tdata->last_layout, + NULL, NULL, next_layout, NULL, NULL, + _test_box_transition_change, tdata); + elm_box_layout_set(tdata->box, elm_box_layout_transition, layout_data, elm_box_transition_free); + tdata->last_layout = next_layout; + + tdata->transitions = eina_list_demote_list(tdata->transitions, tdata->transitions); +} + +static void +_win_del(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Transitions_Data *tdata = data; + if (!data) return; + free(tdata); +} + +void +test_box_transition(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win, *bg, *bx, *bt; + Transitions_Data *tdata; + + win = elm_win_add(NULL, "box-transition", ELM_WIN_BASIC); + elm_win_title_set(win, "Box Transition"); + elm_win_autodel_set(win, EINA_TRUE); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + + evas_object_show(bx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 1"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_smart_callback_add(bt, "clicked", _del_cb, bx); + elm_box_pack_end(bx, bt); + evas_object_resize(bt, 100, 100); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 2"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_smart_callback_add(bt, "clicked", _del_cb, bx); + elm_box_pack_end(bx, bt); + evas_object_resize(bt, 100, 100); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 3"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_smart_callback_add(bt, "clicked", _del_cb, bx); + elm_box_pack_end(bx, bt); + evas_object_resize(bt, 100, 100); + evas_object_show(bt); + + tdata = calloc(1, sizeof(Transitions_Data)); + tdata->box = bx; + tdata->last_layout = evas_object_box_layout_horizontal; + tdata->transitions = eina_list_append(tdata->transitions, + evas_object_box_layout_vertical); + tdata->transitions = eina_list_append(tdata->transitions, + evas_object_box_layout_horizontal); + tdata->transitions = eina_list_append(tdata->transitions, + evas_object_box_layout_stack); + tdata->transitions = eina_list_append(tdata->transitions, + evas_object_box_layout_homogeneous_vertical); + tdata->transitions = eina_list_append(tdata->transitions, + evas_object_box_layout_homogeneous_horizontal); + tdata->transitions = eina_list_append(tdata->transitions, + evas_object_box_layout_flow_vertical); + tdata->transitions = eina_list_append(tdata->transitions, + evas_object_box_layout_flow_horizontal); + tdata->transitions = eina_list_append(tdata->transitions, + evas_object_box_layout_stack); + + evas_object_resize(win, 300, 300); + evas_object_resize(bx, 300, 300); + evas_object_smart_callback_add(win, "delete,request", _win_del, tdata); + evas_object_show(win); + elm_box_layout_set(bx, evas_object_box_layout_horizontal, NULL, NULL); + _test_box_transition_change(tdata); +} diff --git a/src/bin/test_bubble.c b/src/bin/test_bubble.c new file mode 100644 index 0000000..fad2520 --- /dev/null +++ b/src/bin/test_bubble.c @@ -0,0 +1,155 @@ +#include +#include "tsuite.h" + +static void +_print_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("bubble clicked\n"); +} + +enum _api_state +{ + BUBBLE_SET_CORNER_1, + BUBBLE_SET_CORNER_2, + BUBBLE_SET_ICON_CONTENT, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *items = elm_box_children_get(api->data); + if(!eina_list_count(items)) + return; + + switch(api->state) + { /* Put all api-changes under switch */ + case BUBBLE_SET_CORNER_1: + elm_bubble_corner_set(eina_list_nth(items, 0), "bottom_left"); + elm_object_text_set(elm_object_content_get(eina_list_nth(items, 0)), + "Corner: base (bottom-left) - with icon"); + elm_bubble_corner_set(eina_list_nth(items, 1), "top_right"); + elm_object_text_set(elm_object_content_get(eina_list_nth(items, 1)), + "Corner: base (top-right) - no icon"); + break; + + case BUBBLE_SET_CORNER_2: + elm_bubble_corner_set(eina_list_nth(items, 0), "top_right"); + elm_object_text_set(elm_object_content_get(eina_list_nth(items, 0)), + "Corner: base (top-right) - with icon"); + elm_bubble_corner_set(eina_list_nth(items, 1), "bottom_left"); + elm_object_text_set(elm_object_content_get(eina_list_nth(items, 1)), + "Corner: base (bottom-left) - no icon"); + break; + + case BUBBLE_SET_ICON_CONTENT: + { + char buf[PATH_MAX]; + Evas_Object *ct, *ic = elm_icon_add(api->win); + + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + elm_object_content_set(eina_list_nth(items, 0), ic); + ct = elm_label_add(api->win); + elm_object_text_set(ct, "Using icon as top-bubble content"); + elm_object_content_set(eina_list_nth(items, 1), ct); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + evas_object_show(ic); + } + break; + + case API_STATE_LAST: + + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_bubble) +{ + Evas_Object *bg, *bx, *bxx, *ic, *bb, *ct; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + api->data = bx; + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); + + bb = elm_bubble_add(win); + elm_object_text_set(bb, "Message 1"); + elm_object_part_text_set(bb, "info", "Corner: bottom_right"); + elm_bubble_icon_set(bb, ic); + elm_bubble_corner_set(bb, "bottom_right"); + evas_object_smart_callback_add(bb, "clicked", _print_clicked, NULL); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + ct = elm_label_add(win); + elm_object_text_set(ct, + "\"The future of the art: R or G or B?\", by Rusty"); + elm_object_content_set(bb, ct); + + elm_box_pack_end(bx, bb); + evas_object_show(bb); + + bb = elm_bubble_add(win); + elm_object_text_set(bb, "Message 2"); + elm_object_part_text_set(bb, "info", "10:32 4/11/2008"); + evas_object_smart_callback_add(bb, "clicked", _print_clicked, NULL); + evas_object_size_hint_weight_set(bb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + ct = elm_label_add(win); + elm_object_text_set(ct, "Corner: base (top-left) - no icon"); + elm_object_content_set(bb, ct); + + elm_box_pack_end(bx, bb); + evas_object_show(bb); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_button.c b/src/bin/test_button.c new file mode 100644 index 0000000..74c7298 --- /dev/null +++ b/src/bin/test_button.c @@ -0,0 +1,206 @@ +#include +#include "tsuite.h" + +static void +_bt_repeated(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + static int count; + char buf[16]; + + snprintf(buf, sizeof(buf), "count=%d", count++); + if (count >= 10000) + count = 0; + elm_object_text_set(obj, buf); +} + +static void +_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + int param = (int)(data); + + printf("clicked event on Button:%d\n", param); +} + +static void +_bt_unpressed(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + int param = (int)(data); + + printf("unpressed event on Button:%d\n", param); +} + +enum _api_state +{ + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api __UNUSED__) +{ + return; +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_button) +{ + Evas_Object *bg, *bx, *bxx, *scr,*ic, *bt; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + scr = elm_scroller_add(win); + elm_scroller_bounce_set(scr, EINA_FALSE, EINA_TRUE); + elm_scroller_policy_set(scr, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + evas_object_show(scr); + evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(scr, bx); + api->data = bx; + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + bt = elm_button_add(win); + elm_object_text_set(bt, "Icon sized to button"); + elm_object_content_set(bt, ic); + evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)1); + evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)1); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); + + ic = elm_icon_add(bx); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + bt = elm_button_add(win); + elm_object_text_set(bt, "Icon no scale"); + elm_object_content_set(bt, ic); + evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)2); + evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)2); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + bt = elm_button_add(win); + elm_object_text_set(bt, "Disabled Button"); + elm_object_content_set(bt, ic); + elm_object_disabled_set(bt, 1); + evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)3); + evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)3); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + bt = elm_button_add(win); + elm_object_content_set(bt, ic); + elm_object_disabled_set(bt, 1); + evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)4); + evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)4); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Label Only"); + evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)5); + evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)5); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "repeated", _bt_repeated, NULL); + elm_button_autorepeat_set(bt, 1); + elm_button_autorepeat_initial_timeout_set(bt, 2.0); + elm_button_autorepeat_gap_timeout_set(bt, 0.5); + evas_object_show(bt); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + bt = elm_button_add(win); + elm_object_content_set(bt, ic); + evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)6); + evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)6); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); + + bt = elm_button_add(win); + elm_object_style_set(bt, "anchor"); + elm_object_text_set(bt, "Anchor style"); + evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)7); + evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)7); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + bt = elm_button_add(win); + elm_object_style_set(bt, "anchor"); + elm_object_content_set(bt, ic); + evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)8); + evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)8); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + bt = elm_button_add(win); + elm_object_access_info_set(bt, "This is some custom text describing this widget"); + elm_object_style_set(bt, "anchor"); + elm_object_content_set(bt, ic); + elm_object_disabled_set(bt, 1); + evas_object_smart_callback_add(bt, "clicked", _bt_clicked, (void *)9); + evas_object_smart_callback_add(bt, "unpressed", _bt_unpressed, (void *)9); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); +} +TEST_END diff --git a/src/bin/test_calendar.c b/src/bin/test_calendar.c new file mode 100644 index 0000000..8c5998b --- /dev/null +++ b/src/bin/test_calendar.c @@ -0,0 +1,306 @@ +#include +#include "tsuite.h" + +enum _api_state +{ + STATE_MARK_MONTHLY, + STATE_MARK_WEEKLY, + STATE_SUNDAY_HIGHLIGHT, + STATE_SELECT_DATE_DISABLED_WITH_MARKS, + STATE_SELECT_DATE_DISABLED_NO_MARKS, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *items = elm_box_children_get(api->data); + static Elm_Calendar_Mark *m = NULL; + if(!eina_list_count(items)) + return; + + switch(api->state) + { /* Put all api-changes under switch */ + case STATE_MARK_MONTHLY: + { + Evas_Object *cal = eina_list_nth(items, 0); + time_t sec_per_day = (60*60*24); + time_t sec_per_year = sec_per_day * 365; + time_t the_time = (sec_per_year * 41) + (sec_per_day * 9); /* Set date to DEC 31, 2010 */ + elm_calendar_min_max_year_set(cal, 2010, 2011); + m = elm_calendar_mark_add(cal, "checked", gmtime(&the_time), ELM_CALENDAR_MONTHLY); + elm_calendar_selected_time_set(cal, gmtime(&the_time)); + } + break; + case STATE_MARK_WEEKLY: + { + Evas_Object *cal = eina_list_nth(items, 0); + time_t sec_per_day = (60*60*24); + time_t sec_per_year = sec_per_day * 365; + time_t the_time = (sec_per_year * 41) + (sec_per_day * 4); /* Set date to DEC 26, 2010 */ + elm_calendar_mark_del(m); + m = elm_calendar_mark_add(cal, "checked", gmtime(&the_time), ELM_CALENDAR_WEEKLY); + elm_calendar_selected_time_set(cal, gmtime(&the_time)); + } + break; + case STATE_SUNDAY_HIGHLIGHT: + { + Evas_Object *cal = eina_list_nth(items, 0); + time_t sec_per_day = (60*60*24); + time_t sec_per_year = sec_per_day * 365; + time_t the_time = (sec_per_year * 41) + (sec_per_day * 3); /* Set date to DEC 25, 2010 */ + /* elm_calendar_mark_del(m); */ + m = elm_calendar_mark_add(cal, "holiday", gmtime(&the_time), ELM_CALENDAR_WEEKLY); + elm_calendar_selected_time_set(cal, gmtime(&the_time)); + } + break; + case STATE_SELECT_DATE_DISABLED_WITH_MARKS: + { + Evas_Object *cal = eina_list_nth(items, 0); + time_t sec_per_day = (60*60*24); + time_t sec_per_year = sec_per_day * 365; + time_t the_time = (sec_per_year * 41) + (sec_per_day * 10); /* Set date to JAN 01, 2011 */ + elm_calendar_day_selection_enabled_set(cal, EINA_FALSE); + elm_calendar_selected_time_set(cal, gmtime(&the_time)); + } + break; + case STATE_SELECT_DATE_DISABLED_NO_MARKS: + { + Evas_Object *cal = eina_list_nth(items, 0); + time_t sec_per_day = (60*60*24); + time_t sec_per_year = sec_per_day * 365; + time_t the_time = (sec_per_year * 41) + (sec_per_day * 40); /* Set date to FEB 01, 2011 */ + elm_calendar_marks_clear(cal); + elm_calendar_day_selection_enabled_set(cal, EINA_FALSE); + elm_calendar_selected_time_set(cal, gmtime(&the_time)); + } + break; + case API_STATE_LAST: + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +/* A simple test, just displaying calendar in it's default state */ +TEST_START(test_calendar) +{ + Evas_Object *bg, *bx, *bxx, *cal; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + api->data = bx; + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + cal = elm_calendar_add(win); + evas_object_size_hint_weight_set(cal, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, cal); + + time_t sec_per_day = (60*60*24); + time_t sec_per_year = sec_per_day * 365; + time_t the_time = (sec_per_year * 41) + (sec_per_day * 9); /* Set date to DEC 31, 2010 */ + elm_calendar_selected_time_set(cal, gmtime(&the_time)); + elm_calendar_min_max_year_set(cal, 2010, 2010); + + evas_object_show(cal); + + evas_object_show(win); +} +TEST_END + +void +_print_cal_info(Evas_Object *cal, Evas_Object *en) +{ + char info[1024]; + double interval; + int year_min, year_max; + Eina_Bool sel_enabled; + const char **wds; + struct tm stime; + + if (!elm_calendar_selected_time_get(cal, &stime)) + return; + + interval = elm_calendar_interval_get(cal); + elm_calendar_min_max_year_get(cal, &year_min, &year_max); + sel_enabled = elm_calendar_day_selection_enabled_get(cal); + wds = elm_calendar_weekdays_names_get(cal); + + snprintf(info, sizeof(info), + " Day: %i, Mon: %i, Year %i, WeekDay: %i
" + " Interval: %0.2f, Year_Min: %i, Year_Max %i, Sel Enabled : %i
" + " Weekdays: %s, %s, %s, %s, %s, %s, %s
", + stime.tm_mday, stime.tm_mon, stime.tm_year + 1900, stime.tm_wday, + interval, year_min, year_max, sel_enabled, + wds[0], wds[1], wds[2], wds[3], wds[4], wds[5], wds[6]); + + elm_entry_entry_set(en, info); +} + +static void +_print_cal_info_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + _print_cal_info(obj, data); +} + +static char * +_format_month_year(struct tm *stime) +{ + char buf[32]; + if (!strftime(buf, sizeof(buf), "%b %y", stime)) return NULL; + return strdup(buf); +} + +/* A test intended to cover all the calendar api and much use cases as + possible */ +TEST_START(test_calendar2) +{ + Evas_Object *bg, *bx, *bxh, *bxx, *cal, *cal2, *cal3, *en; + Elm_Calendar_Mark *mark; + struct tm selected_time; + time_t current_time; + const char *weekdays[] = + { + "Sunday", "Monday", "Tuesday", "Wednesday", + "Thursday", "Friday", "Saturday" + }; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, EINA_TRUE); /* NOT USED at the Moment */ + evas_object_show(api->bt); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + api->data = bx; + elm_box_pack_end(bxx, bx); + + bxh = elm_box_add(win); + elm_box_horizontal_set(bxh, EINA_TRUE); + evas_object_size_hint_weight_set(bxh, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bxh, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(bxh); + elm_box_pack_end(bx, bxh); + + cal = elm_calendar_add(win); + evas_object_size_hint_weight_set(cal, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(cal, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(cal); + elm_box_pack_end(bx, cal); + + cal2 = elm_calendar_add(win); + evas_object_size_hint_weight_set(cal2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(cal2, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_calendar_day_selection_enabled_set(cal2, EINA_FALSE); + evas_object_show(cal2); + elm_box_pack_end(bxh, cal2); + + cal3 = elm_calendar_add(win); + evas_object_size_hint_weight_set(cal3, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(cal3, EVAS_HINT_FILL, EVAS_HINT_FILL); + current_time = time(NULL) + 34 * 84600; + localtime_r(¤t_time, &selected_time); + elm_calendar_selected_time_set(cal3, &selected_time); + current_time = time(NULL) + 1 * 84600; + localtime_r(¤t_time, &selected_time); + elm_calendar_mark_add(cal3, "checked", &selected_time, ELM_CALENDAR_UNIQUE); + elm_calendar_marks_clear(cal3); + current_time = time(NULL); + localtime_r(¤t_time, &selected_time); + elm_calendar_mark_add(cal3, "checked", &selected_time, ELM_CALENDAR_DAILY); + elm_calendar_mark_add(cal3, "holiday", &selected_time, ELM_CALENDAR_DAILY); + elm_calendar_marks_draw(cal3); + evas_object_show(cal3); + elm_box_pack_end(bxh, cal3); + + en = elm_entry_add(win); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(en); + elm_box_pack_end(bx, en); + elm_entry_editable_set(en, EINA_FALSE); + evas_object_show(win); + + elm_calendar_min_max_year_set(cal3, -1, -1); + + elm_calendar_weekdays_names_set(cal, weekdays); + elm_calendar_interval_set(cal, 0.4); + elm_calendar_format_function_set(cal, _format_month_year); + elm_calendar_min_max_year_set(cal, 2010, 2020); + + current_time = time(NULL) + 4 * 84600; + localtime_r(¤t_time, &selected_time); + elm_calendar_mark_add(cal, "holiday", &selected_time, ELM_CALENDAR_ANNUALLY); + + current_time = time(NULL) + 1 * 84600; + localtime_r(¤t_time, &selected_time); + elm_calendar_mark_add(cal, "checked", &selected_time, ELM_CALENDAR_UNIQUE); + + current_time = time(NULL) - 363 * 84600; + localtime_r(¤t_time, &selected_time); + elm_calendar_mark_add(cal, "checked", &selected_time, ELM_CALENDAR_MONTHLY); + + current_time = time(NULL) - 5 * 84600; + localtime_r(¤t_time, &selected_time); + mark = elm_calendar_mark_add(cal, "holiday", &selected_time, + ELM_CALENDAR_WEEKLY); + + current_time = time(NULL) + 1 * 84600; + localtime_r(¤t_time, &selected_time); + elm_calendar_mark_add(cal, "holiday", &selected_time, ELM_CALENDAR_WEEKLY); + + elm_calendar_mark_del(mark); + elm_calendar_marks_draw(cal); + + _print_cal_info(cal, en); + evas_object_smart_callback_add(cal, "changed", _print_cal_info_cb, en); +} +TEST_END diff --git a/src/bin/test_check.c b/src/bin/test_check.c new file mode 100644 index 0000000..c7edca2 --- /dev/null +++ b/src/bin/test_check.c @@ -0,0 +1,76 @@ +#include +#include "tsuite.h" + +TEST_START(test_check) +{ + Evas_Object *bg, *bx, *ic, *ck; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + ck = elm_check_add(win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, EVAS_HINT_FILL, 0.5); + elm_object_text_set(ck, "Icon sized to check"); + elm_object_content_set(ck, ic); + elm_check_state_set(ck, 1); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + ck = elm_check_add(win); + elm_object_text_set(ck, "Icon no scale"); + elm_object_content_set(ck, ic); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + evas_object_show(ic); + + ck = elm_check_add(win); + elm_object_text_set(ck, "Label Only"); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + ck = elm_check_add(win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, EVAS_HINT_FILL, 0.5); + elm_object_text_set(ck, "Disabled check"); + elm_object_content_set(ck, ic); + elm_check_state_set(ck, 1); + elm_box_pack_end(bx, ck); + elm_object_disabled_set(ck, 1); + evas_object_show(ck); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + ck = elm_check_add(win); + elm_object_content_set(ck, ic); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + evas_object_show(ic); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_clock.c b/src/bin/test_clock.c new file mode 100644 index 0000000..0666887 --- /dev/null +++ b/src/bin/test_clock.c @@ -0,0 +1,239 @@ +#include +#include "tsuite.h" + +enum _api_state +{ + CLOCK_HIDE_SEC, + CLOCK_SHOW_AM_PM, + CLOCK_SHOW_SEC, + CLOCK_EDIT_MIN, + CLOCK_EDIT_HOUR, + CLOCK_EDIT_ALL, + CLOCK_EDIT_ALL_ARMY, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *items = elm_box_children_get(api->data); + Evas_Object *ck = eina_list_nth(items, 0); + if(!eina_list_count(items)) + return; + + /* use elm_box_children_get() to get list of children */ + switch(api->state) + { /* Put all api-changes under switch */ + case CLOCK_HIDE_SEC: + elm_clock_show_seconds_set(ck, EINA_FALSE); + break; + + case CLOCK_SHOW_AM_PM: + elm_clock_show_am_pm_set(ck, EINA_TRUE); + break; + + case CLOCK_SHOW_SEC: + elm_clock_show_seconds_set(ck, EINA_TRUE); + break; + + case CLOCK_EDIT_MIN: + elm_clock_edit_set(ck, ELM_CLOCK_MIN_DECIMAL | ELM_CLOCK_MIN_UNIT); + break; + + case CLOCK_EDIT_HOUR: + elm_clock_edit_set(ck, ELM_CLOCK_NONE); + elm_clock_edit_set(ck, ELM_CLOCK_HOUR_DECIMAL | ELM_CLOCK_HOUR_UNIT); + break; + + case CLOCK_EDIT_ALL: + elm_clock_edit_set(ck, ELM_CLOCK_ALL); + break; + + case CLOCK_EDIT_ALL_ARMY: + elm_clock_show_am_pm_set(ck, EINA_FALSE); + break; + + case API_STATE_LAST: + + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_clock) +{ + Evas_Object *bg, *bx, *bxx, *ck; + unsigned int digedit; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + api->data = bx; + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, EINA_TRUE); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + ck = elm_clock_add(win); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + ck = elm_clock_add(win); + elm_clock_show_am_pm_set(ck, 1); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + ck = elm_clock_add(win); + elm_clock_show_seconds_set(ck, 1); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + ck = elm_clock_add(win); + elm_clock_show_seconds_set(ck, 1); + elm_clock_show_am_pm_set(ck, 1); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + ck = elm_clock_add(win); + elm_clock_show_seconds_set(ck, 1); + elm_clock_show_am_pm_set(ck, 0); + elm_clock_time_set(ck, 23, 59, 57); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + ck = elm_clock_add(win); + elm_clock_edit_set(ck, 1); + elm_clock_show_seconds_set(ck, 1); + elm_clock_show_am_pm_set(ck, 1); + elm_clock_time_set(ck, 10, 11, 12); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + ck = elm_clock_add(win); + elm_clock_show_seconds_set(ck, 1); + elm_clock_edit_set(ck, 1); + digedit = ELM_CLOCK_HOUR_UNIT | ELM_CLOCK_MIN_UNIT | ELM_CLOCK_SEC_UNIT; + elm_clock_digit_edit_set(ck, digedit); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + evas_object_show(win); +} +TEST_END + +static void +_edit_bt_clicked(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *ck = data; + + if (!elm_clock_edit_get(ck)) { + elm_object_text_set(obj, "Done"); + elm_clock_edit_set(ck, 1); + return; + } + elm_object_text_set(obj, "Edit"); + elm_clock_edit_set(ck, 0); +} + +static void +_hmode_bt_clicked(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *ck = data; + + if (!elm_clock_show_am_pm_get(ck)) { + elm_object_text_set(obj, "24h"); + elm_clock_show_am_pm_set(ck, 1); + return; + } + elm_object_text_set(obj, "12h"); + elm_clock_show_am_pm_set(ck, 0); +} + +TEST_START(test_clock2) +{ + Evas_Object *bg, *bx, *bxx, *hbx, *ck, *bt; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + api->data = bx; + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + ck = elm_clock_add(win); + elm_clock_time_set(ck, 0, 15, 3); + elm_clock_digit_edit_set(ck, ELM_CLOCK_NONE); + elm_clock_show_seconds_set(ck, 1); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + hbx = elm_box_add(win); + evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(hbx, EINA_TRUE); + elm_box_pack_end(bx, hbx); + evas_object_show(hbx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Edit"); + evas_object_smart_callback_add(bt, "clicked", _edit_bt_clicked, ck); + elm_box_pack_end(hbx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "24h"); + evas_object_smart_callback_add(bt, "clicked", _hmode_bt_clicked, ck); + elm_box_pack_end(hbx, bt); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_colorselector.c b/src/bin/test_colorselector.c new file mode 100644 index 0000000..301d76d --- /dev/null +++ b/src/bin/test_colorselector.c @@ -0,0 +1,89 @@ +#include +#include "tsuite.h" + +static void +_colorselector_clicked_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *re = data; + int r, g, b, a; + + elm_colorselector_color_get(obj, &r, &g, &b, &a); + printf("Current Color [r=%d g=%d b=%d a=%d]\n",r, g, b, a); + + /* Fix Alpha pre multiplication by edje */ + r = (r * a) / 255; + g = (g * a) / 255; + b = (b * a) / 255; + + evas_object_color_set(re, r, g, b, a); +} + +TEST_START(test_colorselector) +{ + Evas_Object *bg, *bx, *cp, *fr, *ly, *re; + char buf[PATH_MAX]; + int r, g, b, a; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_color_set(bg, 255, 255, 255, 255); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fr = elm_frame_add(win); + evas_object_size_hint_weight_set(fr, 1.0, 0.5); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(fr, "Color View"); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/colorpreview.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "main"); + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(fr, ly); + evas_object_show(ly); + + re = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_show(re); + elm_object_part_content_set(ly, "ColorPreview", re); + + fr = elm_frame_add(win); + evas_object_size_hint_weight_set(fr, 1.0, 0); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0); + elm_object_text_set(fr, "Color Selector"); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + cp = elm_colorselector_add(win); + + a = 180; + r = 255; + g = 160; + b = 132; + + elm_colorselector_color_set(cp, r, g, b, a); + evas_object_size_hint_weight_set(cp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(cp, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_content_set(fr, cp); + evas_object_show(cp); + evas_object_smart_callback_add(cp, "changed", _colorselector_clicked_cb, re); + + elm_colorselector_color_get(cp, &r, &g, &b, &a); + /* Fix Alpha pre multiplication by edje */ + r = (r * a) / 255; + g = (g * a) / 255; + b = (b * a) / 255; + evas_object_color_set(re, r, g, b, a); + + evas_object_resize(win, 320, 480); + evas_object_show(win); + +} +TEST_END diff --git a/src/bin/test_conform.c b/src/bin/test_conform.c new file mode 100644 index 0000000..b2b9230 --- /dev/null +++ b/src/bin/test_conform.c @@ -0,0 +1,200 @@ +#include +#include "tsuite.h" + +TEST_START(test_conformant) +{ + Evas_Object *bg, *conform, *btn, *bx, *en; + + elm_win_conformant_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + conform = elm_conformant_add(win); + elm_win_resize_object_add(win, conform); + evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(conform); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_single_line_set(en, 1); + elm_entry_bounce_set(en, 1, 0); + elm_entry_entry_set(en, "This is the top entry here"); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + evas_object_show(en); + elm_box_pack_end(bx, en); + + btn = elm_button_add(win); + elm_object_text_set(btn, "Test Conformant"); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, btn); + evas_object_show(btn); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_single_line_set(en, 1); + elm_entry_bounce_set(en, 1, 0); + elm_entry_entry_set(en, "This is the middle entry here"); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + evas_object_show(en); + elm_box_pack_end(bx, en); + + btn = elm_button_add(win); + elm_object_text_set(btn, "Test Conformant"); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, btn); + evas_object_show(btn); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_bounce_set(en, 0, 1); + elm_entry_entry_set(en, + "This is a multi-line entry at the bottom
" + "This can contain more than 1 line of text and be " + "scrolled around to allow for entering of lots of " + "content. It is also to test to see that autoscroll " + "moves to the right part of a larger multi-line " + "text entry that is inside of a scroller than can be " + "scrolled around, thus changing the expected position " + "as well as cursor changes updating auto-scroll when " + "it is enabled."); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(en); + elm_box_pack_end(bx, en); + + elm_object_content_set(conform, bx); + evas_object_show(bx); + + evas_object_resize(win, 240, 240); + evas_object_show(win); +} +TEST_END + +static void +popobj(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__) +{ + elm_pager_content_pop(data); +} + +TEST_START(test_conformant2) +{ + Evas_Object *bg, *conform, *btn, *bx, *en, *pg; + + elm_win_conformant_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_single_line_set(en, 1); + elm_entry_bounce_set(en, 1, 0); + elm_entry_entry_set(en, "This is the top entry here"); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, en); + evas_object_show(en); + + btn = elm_button_add(win); + elm_object_focus_allow_set(btn, 0); + elm_object_text_set(btn, "Delete Below"); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, btn); + evas_object_show(btn); + + pg = elm_pager_add(win); + evas_object_size_hint_weight_set(pg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(pg, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, pg); + evas_object_show(pg); + + evas_object_smart_callback_add(btn, "clicked", popobj, pg); + + conform = elm_conformant_add(win); + evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_pager_content_push(pg, conform); + evas_object_show(conform); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_bounce_set(en, 0, 1); + elm_entry_entry_set(en, "This entry and button below get deleted."); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(en); + elm_box_pack_end(bx, en); + + btn = elm_button_add(win); + elm_object_focus_allow_set(btn, 0); + elm_object_text_set(btn, "Delete this bottom bit 1"); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, btn); + evas_object_show(btn); + + evas_object_smart_callback_add(btn, "clicked", popobj, pg); + + elm_object_content_set(conform, bx); + evas_object_show(bx); + + conform = elm_conformant_add(win); + evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_pager_content_push(pg, conform); + evas_object_show(conform); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_bounce_set(en, 0, 1); + elm_entry_entry_set(en, "This entry and button below get deleted."); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(en); + elm_box_pack_end(bx, en); + + btn = elm_button_add(win); + elm_object_focus_allow_set(btn, 0); + elm_object_text_set(btn, "Delete this bottom bit 2"); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, btn); + evas_object_show(btn); + + evas_object_smart_callback_add(btn, "clicked", popobj, pg); + + elm_object_content_set(conform, bx); + evas_object_show(bx); + + evas_object_resize(win, 240, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_ctxpopup.c b/src/bin/test_ctxpopup.c new file mode 100644 index 0000000..9757a4f --- /dev/null +++ b/src/bin/test_ctxpopup.c @@ -0,0 +1,240 @@ +#include +#include "tsuite.h" +static void +_dismissed(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + evas_object_del(obj); +} + +static void +_print_current_dir(Evas_Object *obj) +{ + Elm_Ctxpopup_Direction dir; + dir = elm_ctxpopup_direction_get(obj); + + switch(dir) + { + case ELM_CTXPOPUP_DIRECTION_LEFT: + printf("ctxpopup direction: left!\n"); + break; + case ELM_CTXPOPUP_DIRECTION_RIGHT: + printf("ctxpopup direction: right!\n"); + break; + case ELM_CTXPOPUP_DIRECTION_UP: + printf("ctxpopup direction: up!\n"); + break; + case ELM_CTXPOPUP_DIRECTION_DOWN: + printf("ctxpopup direction: down!\n"); + break; + case ELM_CTXPOPUP_DIRECTION_UNKNOWN: + printf("ctxpopup direction: unknow!\n"); + break; + } +} + +static void +_ctxpopup_item_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("ctxpopup item selected: %s\n", + elm_ctxpopup_item_label_get(event_info)); +} + +#define ITEM_NEW(_hov, _label, _icon) \ + if(_icon) \ + { \ + ic = elm_icon_add(obj); \ + elm_icon_standard_set(ic, _icon); \ + elm_icon_scale_set(ic, EINA_FALSE, EINA_FALSE); \ + } \ + else \ + ic = NULL; \ + it = elm_ctxpopup_item_append(_hov, _label, ic, _ctxpopup_item_cb, NULL); \ + +static void +_list_item_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *ctxpopup, *ic; + Elm_Object_Item *it; + Evas_Coord x,y; + + ctxpopup = elm_ctxpopup_add(obj); + evas_object_smart_callback_add(ctxpopup, + "dismissed", + _dismissed, + NULL); + + ITEM_NEW(ctxpopup, "Go to home folder", "home"); + ITEM_NEW(ctxpopup, "Save file", "file"); + ITEM_NEW(ctxpopup, "Delete file", "delete"); + ITEM_NEW(ctxpopup, "Navigate to folder", "folder"); + elm_object_item_disabled_set(it, EINA_TRUE); + ITEM_NEW(ctxpopup, "Edit entry", "edit"); + ITEM_NEW(ctxpopup, "Set date and time", "clock"); + elm_object_item_disabled_set(it, EINA_TRUE); + + evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y); + evas_object_size_hint_max_set(ctxpopup, 240, 240); + evas_object_move(ctxpopup, x, y); + evas_object_show(ctxpopup); + _print_current_dir(ctxpopup); +} + +static void +_list_item_cb2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *ctxpopup, *ic; + Elm_Object_Item *it; + Evas_Coord x,y; + + ctxpopup = elm_ctxpopup_add(obj); + evas_object_smart_callback_add(ctxpopup, + "dismissed", + _dismissed, + NULL); + + ITEM_NEW(ctxpopup, NULL, "home"); + ITEM_NEW(ctxpopup, NULL, "file"); + ITEM_NEW(ctxpopup, NULL, "delete"); + ITEM_NEW(ctxpopup, NULL, "folder"); + ITEM_NEW(ctxpopup, NULL, "edit"); + elm_object_item_disabled_set(it, EINA_TRUE); + ITEM_NEW(ctxpopup, NULL, "clock"); + + evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y); + evas_object_size_hint_max_set(ctxpopup, 240, 240); + evas_object_move(ctxpopup, x, y); + evas_object_show(ctxpopup); + _print_current_dir(ctxpopup); +} + +static void +_list_item_cb3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *ctxpopup, *ic; + Elm_Object_Item *it; + Evas_Coord x,y; + + ctxpopup = elm_ctxpopup_add(obj); + evas_object_smart_callback_add(ctxpopup, + "dismissed", + _dismissed, + NULL); + + ITEM_NEW(ctxpopup, "Eina", NULL); + ITEM_NEW(ctxpopup, "Eet", NULL); + ITEM_NEW(ctxpopup, "Evas", NULL); + ITEM_NEW(ctxpopup, "Ecore", NULL); + elm_object_item_disabled_set(it, EINA_TRUE); + ITEM_NEW(ctxpopup, "Embryo", NULL); + ITEM_NEW(ctxpopup, "Edje", NULL); + + evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y); + evas_object_move(ctxpopup, x, y); + evas_object_show(ctxpopup); + _print_current_dir(ctxpopup); +} + +static void +_list_item_cb4(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *ctxpopup, *ic; + Elm_Object_Item *it; + Evas_Coord x,y; + + ctxpopup = elm_ctxpopup_add(obj); + evas_object_smart_callback_add(ctxpopup, + "dismissed", + _dismissed, + NULL); + elm_ctxpopup_horizontal_set(ctxpopup, EINA_TRUE); + + ITEM_NEW(ctxpopup, NULL, "home"); + ITEM_NEW(ctxpopup, NULL, "file"); + ITEM_NEW(ctxpopup, NULL, "delete"); + ITEM_NEW(ctxpopup, NULL, "folder"); + ITEM_NEW(ctxpopup, NULL, "edit"); + ITEM_NEW(ctxpopup, NULL, "clock"); + + evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y); + evas_object_size_hint_max_set(ctxpopup, 240, 240); + evas_object_move(ctxpopup, x, y); + evas_object_show(ctxpopup); + _print_current_dir(ctxpopup); +} + + +static void +_list_item_cb5(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *ctxpopup, *btn, *sc, *bx; + Evas_Coord x,y; + + bx = elm_box_add(obj); + evas_object_size_hint_min_set(bx, 150, 150); + + sc = elm_scroller_add(bx); + elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE); + evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(sc); + + btn = elm_button_add(sc); + elm_object_text_set(btn, "Enlightenment"); + evas_object_size_hint_min_set(btn, 140, 140); + + elm_object_content_set(sc, btn); + + elm_box_pack_end(bx, sc); + + ctxpopup = elm_ctxpopup_add(obj); + evas_object_smart_callback_add(ctxpopup, + "dismissed", + _dismissed, + NULL); + elm_object_content_set(ctxpopup, bx); + + evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y); + evas_object_move(ctxpopup, x, y); + evas_object_show(ctxpopup); + _print_current_dir(ctxpopup); +} + + +static void _list_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + elm_list_item_selected_set(event_info, EINA_FALSE); +} + +TEST_START(test_ctxpopup) +{ + Evas_Object *bg, *list; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + list = elm_list_add(win); + elm_win_resize_object_add(win, list); + evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_list_mode_set(list, ELM_LIST_COMPRESS); + evas_object_smart_callback_add(list, "selected", _list_clicked, NULL); + +#undef ITEM_NEW + elm_list_item_append(list, "Ctxpopup with icons and labels", NULL, NULL, + _list_item_cb, NULL); + elm_list_item_append(list, "Ctxpopup with icons only", NULL, NULL, + _list_item_cb2, NULL); + elm_list_item_append(list, "Ctxpopup with labels only", NULL, NULL, + _list_item_cb3, NULL); + elm_list_item_append(list, "Ctxpopup at horizontal mode", NULL, NULL, + _list_item_cb4, NULL); + elm_list_item_append(list, "Ctxpopup with user content", NULL, NULL, + _list_item_cb5, NULL); + evas_object_show(list); + elm_list_go(list); + + evas_object_resize(win, 400, 400); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_cursor.c b/src/bin/test_cursor.c new file mode 100644 index 0000000..8ba3463 --- /dev/null +++ b/src/bin/test_cursor.c @@ -0,0 +1,450 @@ +#include +#include +#include "tsuite.h" + +typedef struct _Testitem +{ + Elm_Gengrid_Item *item; + const char *path; + int mode; + int onoff; +} Testitem; + +static Elm_Gengrid_Item_Class gic; + +char * +grd_lbl_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + const Testitem *ti = data; + char buf[256]; + snprintf(buf, sizeof(buf), "Photo %s", ti->path); + return strdup(buf); +} + +Evas_Object * +grd_content_get(void *data, Evas_Object *obj, const char *part) +{ + const Testitem *ti = data; + if (!strcmp(part, "elm.swallow.icon")) + { + Evas_Object *icon = elm_bg_add(obj); + elm_bg_file_set(icon, ti->path, NULL); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, + 1, 1); + evas_object_show(icon); + return icon; + } + return NULL; +} + +static Elm_Genlist_Item_Class itct; + +static void +glt_exp(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + Evas_Object *gl = elm_genlist_item_genlist_get(it); + int val = (int)(long)elm_genlist_item_data_get(it); + Elm_Genlist_Item *it1, *it2, *it3; + + val *= 10; + it1 = elm_genlist_item_append(gl, &itct, (void *)(long)(val + 1), it, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + it2 = elm_genlist_item_append(gl, &itct, (void *)(long)(val + 2), it, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + it3 = elm_genlist_item_append(gl, &itct, (void *)(long)(val + 3), it, + ELM_GENLIST_ITEM_SUBITEMS, NULL, NULL); + + elm_genlist_item_cursor_set(it1, ELM_CURSOR_HAND2); + elm_genlist_item_cursor_set(it2, ELM_CURSOR_HAND2); + elm_genlist_item_cursor_set(it3, ELM_CURSOR_HAND1); + +} + +static void +glt_con(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_subitems_clear(it); +} + +static void +glt_exp_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_expanded_set(it, 1); +} + +static void +glt_con_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_expanded_set(it, 0); +} + +char * +glt_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + char buf[256]; + snprintf(buf, sizeof(buf), "Item mode %i", (int)(long)data); + return strdup(buf); +} + +TEST_START(test_cursor) +{ + Evas_Object *bg, *bx, *bt, *list, *entry, *ck; + Elm_List_Item *lit; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + elm_object_cursor_set(bg, ELM_CURSOR_CIRCLE); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + ck = elm_clock_add(win); + elm_object_cursor_set(ck, ELM_CURSOR_CLOCK); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + bt = elm_button_add(win); + elm_object_cursor_set(bt, ELM_CURSOR_COFFEE_MUG); + elm_object_text_set(bt, "Coffee Mug"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_cursor_set(bt, ELM_CURSOR_CLOCK); + elm_object_text_set(bt, "Cursor unset"); + elm_object_cursor_unset(bt); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + list = elm_list_add(win); + elm_box_pack_end(bx, list); + evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_cursor_set(list, ELM_CURSOR_WATCH); + lit = elm_list_item_append(list, "watch over list | hand1", NULL, NULL, NULL, + NULL); + elm_list_item_cursor_set(lit, ELM_CURSOR_HAND1); + lit = elm_list_item_append(list, "watch over list | hand2", NULL, NULL, NULL, + NULL); + elm_list_item_cursor_set(lit, ELM_CURSOR_HAND2); + elm_list_go(list); + evas_object_show(list); + + entry = elm_entry_add(win); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_entry_set(entry, "Xterm cursor"); + elm_entry_single_line_set(entry, EINA_TRUE); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_fill_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, entry); + evas_object_show(entry); + elm_object_cursor_set(entry, ELM_CURSOR_XTERM); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END + +TEST_START(test_cursor2) +{ + Evas_Object *bg, *bx, *o, *grid, *gl; + Elm_Genlist_Item *it1, *it2, *it3; + Elm_Object_Item *tb_it; + Elm_List_Item *lit; + char buf[PATH_MAX]; + static Testitem ti[144]; + int i, n; + const char *img[9] = + { + "panel_01.jpg", + "plant_01.jpg", + "rock_01.jpg", + "rock_02.jpg", + "sky_01.jpg", + "sky_02.jpg", + "sky_03.jpg", + "sky_04.jpg", + "wood_01.jpg", + }; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + o = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(o, 0); + evas_object_size_hint_weight_set(o, 0.0, 0.0); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.0); + tb_it = elm_toolbar_item_append(o, NULL, "Bogosity", NULL, NULL); + elm_toolbar_item_cursor_set(tb_it, ELM_CURSOR_BOGOSITY); + tb_it = elm_toolbar_item_append(o, NULL, "Unset", NULL, NULL); + elm_toolbar_item_cursor_set(tb_it, ELM_CURSOR_BOGOSITY); + elm_toolbar_item_cursor_unset(tb_it); + tb_it = elm_toolbar_item_append(o, NULL, "Xterm", NULL, NULL); + elm_toolbar_item_cursor_set(tb_it, ELM_CURSOR_XTERM); + elm_box_pack_end(bx, o); + evas_object_show(o); + + o = elm_list_add(win); + elm_box_pack_end(bx, o); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + lit = elm_list_item_append(o, "cursor bogosity", NULL, NULL, NULL, NULL); + elm_list_item_cursor_set(lit, ELM_CURSOR_BOGOSITY); + lit = elm_list_item_append(o, "cursor unset", NULL, NULL, NULL, NULL); + elm_list_item_cursor_set(lit, ELM_CURSOR_BOGOSITY); + elm_list_item_cursor_unset(lit); + lit = elm_list_item_append(o, "cursor xterm", NULL, NULL, NULL, NULL); + elm_list_item_cursor_set(lit, ELM_CURSOR_XTERM); + elm_list_go(o); + evas_object_show(o); + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(gl); + + itct.item_style = "default"; + itct.func.text_get = glt_text_get; + + it1 = elm_genlist_item_append(gl, &itct, (void *) 1, NULL, + ELM_GENLIST_ITEM_SUBITEMS, NULL, NULL); + it2 = elm_genlist_item_append(gl, &itct, (void *) 2, NULL, + ELM_GENLIST_ITEM_SUBITEMS, NULL, NULL); + it3 = elm_genlist_item_append(gl, &itct, (void *) 3, NULL, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + + elm_genlist_item_cursor_set(it1, ELM_CURSOR_HAND1); + elm_genlist_item_cursor_set(it2, ELM_CURSOR_HAND1); + elm_genlist_item_cursor_set(it3, ELM_CURSOR_CROSS); + + evas_object_smart_callback_add(gl, "expand,request", glt_exp_req, gl); + evas_object_smart_callback_add(gl, "contract,request", glt_con_req, gl); + evas_object_smart_callback_add(gl, "expanded", glt_exp, gl); + evas_object_smart_callback_add(gl, "contracted", glt_con, gl); + + elm_box_pack_end(bx, gl); + + grid = elm_gengrid_add(win); + elm_gengrid_item_size_set(grid, 130, 130); + elm_gengrid_horizontal_set(grid, EINA_FALSE); + elm_gengrid_multi_select_set(grid, EINA_TRUE); + evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL); + + gic.item_style = "default"; + gic.func.text_get = grd_lbl_get; + gic.func.content_get = grd_content_get; + + n = 0; + for (i = 0; i < 3 * 3; i++) + { + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]); + n = (n + 1) % 9; + ti[i].mode = i; + ti[i].path = eina_stringshare_add(buf); + ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), NULL, NULL); + if (n % 2) + elm_gengrid_item_cursor_set(ti[i].item, ELM_CURSOR_HAND1); + else + elm_gengrid_item_cursor_set(ti[i].item, ELM_CURSOR_CLOCK); + if (!(i % 5)) + elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE); + } + elm_box_pack_end(bx, grid); + evas_object_show(grid); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END + +TEST_START(test_cursor3) +{ + Evas_Object *bg, *bx, *o; + Elm_List_Item *lit; + char buf[PATH_MAX]; + + snprintf(buf, sizeof(buf), "%s/objects/cursors.edj", elm_app_data_dir_get()); + elm_theme_extension_add(NULL, buf); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + o = elm_button_add(win); + elm_object_cursor_set(o, ELM_CURSOR_HAND1); + elm_object_cursor_engine_only_set(o, EINA_FALSE); + elm_object_text_set(o, "hand1"); + elm_box_pack_end(bx, o); + evas_object_show(o); + + o = elm_button_add(win); + elm_object_cursor_set(o, ELM_CURSOR_HAND2); + elm_object_text_set(o, "hand2 x"); + elm_box_pack_end(bx, o); + evas_object_show(o); + + o = elm_button_add(win); + elm_object_cursor_set(o, ELM_CURSOR_HAND2); + elm_object_cursor_engine_only_set(o, EINA_FALSE); + elm_object_text_set(o, "hand2"); + elm_box_pack_end(bx, o); + evas_object_show(o); + + o = elm_button_add(win); + elm_object_cursor_set(o, "hand3"); + elm_object_cursor_engine_only_set(o, EINA_FALSE); + elm_object_text_set(o, "hand3"); + elm_box_pack_end(bx, o); + evas_object_show(o); + + o = elm_button_add(win); + elm_object_cursor_set(o, "hand3"); + elm_object_cursor_engine_only_set(o, EINA_FALSE); + elm_object_cursor_style_set(o, "transparent"); + elm_object_text_set(o, "hand3 transparent"); + elm_box_pack_end(bx, o); + evas_object_show(o); + + o = elm_button_add(win); + elm_object_cursor_set(o, "hand3"); + elm_object_cursor_engine_only_set(o, EINA_FALSE); + elm_object_cursor_unset(o); + elm_object_text_set(o, "unset"); + elm_box_pack_end(bx, o); + evas_object_show(o); + + o = elm_button_add(win); + elm_object_cursor_set(o, "hand4"); + elm_object_text_set(o, "not existent"); + elm_box_pack_end(bx, o); + evas_object_show(o); + + elm_cursor_engine_only_set(0); + o = elm_button_add(win); + elm_object_cursor_set(o, "hand2"); + elm_object_text_set(o, "hand 2 engine only config false"); + elm_box_pack_end(bx, o); + evas_object_show(o); + + elm_cursor_engine_only_set(1); + o = elm_button_add(win); + elm_object_cursor_set(o, "hand2"); + elm_object_text_set(o, "hand 2 engine only config true"); + elm_box_pack_end(bx, o); + evas_object_show(o); + + o = elm_list_add(win); + elm_box_pack_end(bx, o); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + lit = elm_list_item_append(o, "cursor hand2 x", NULL, NULL, NULL, NULL); + elm_list_item_cursor_set(lit, ELM_CURSOR_HAND2); + lit = elm_list_item_append(o, "cursor hand2", NULL, NULL, NULL, NULL); + elm_list_item_cursor_set(lit, ELM_CURSOR_HAND2); + elm_list_item_cursor_engine_only_set(lit, EINA_FALSE); + lit = elm_list_item_append(o, "cursor hand3", NULL, NULL, NULL, NULL); + elm_list_item_cursor_set(lit, "hand3"); + elm_list_item_cursor_engine_only_set(lit, EINA_FALSE); + lit = elm_list_item_append(o, "cursor hand3 transparent", NULL, NULL, + NULL, NULL); + elm_list_item_cursor_set(lit, "hand3"); + elm_list_item_cursor_style_set(lit, "transparent"); + elm_list_item_cursor_engine_only_set(lit, EINA_FALSE); + elm_list_go(o); + evas_object_show(o); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END + +TEST_START(test_cursor4) +{ + Evas_Object *win, *bg, *bx, *ly, *bt; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "cursor layout", ELM_WIN_BASIC); + elm_win_title_set(win, "Cursor Layout"); + elm_win_autodel_set(win, EINA_TRUE); + + snprintf(buf, sizeof(buf), "%s/objects/cursors.edj", elm_app_data_dir_get()); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + ly = elm_layout_add(win); + elm_layout_file_set(ly, buf, "test/layout/events"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_cursor_set(ly, ELM_CURSOR_HAND1); + elm_box_pack_end(bx, ly); + evas_object_show(ly); + + ly = elm_layout_add(win); + elm_layout_file_set(ly, buf, "test/layout/noevents"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_cursor_set(ly, ELM_CURSOR_XTERM); + elm_layout_part_cursor_set(ly, "top-left", ELM_CURSOR_CROSS); + elm_layout_part_cursor_set(ly, "bottom-left", ELM_CURSOR_PIRATE); + elm_box_pack_end(bx, ly); + evas_object_show(ly); + + ly = elm_layout_add(win); + elm_layout_file_set(ly, buf, "test/layout/parts2"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_layout_part_cursor_set(ly, "top-left", ELM_CURSOR_CROSS); + elm_layout_part_cursor_set(ly, "bottom-left", ELM_CURSOR_PIRATE); + elm_layout_file_set(ly, buf, "test/layout/parts"); + elm_box_pack_end(bx, ly); + evas_object_show(ly); + + ly = elm_layout_add(win); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_layout_file_set(ly, buf, "test/layout/swallow"); + bt = elm_button_add(win); + elm_object_text_set(bt, "Cursor over obj"); + elm_object_part_content_set(ly, "swallow1", bt); + elm_object_cursor_set(bt, ELM_CURSOR_PIRATE); + bt = elm_button_add(win); + elm_object_text_set(bt, "Cursor over part"); + elm_object_part_content_set(ly, "swallow2", bt); + elm_layout_part_cursor_set(ly, "swallow2", ELM_CURSOR_PIRATE); + elm_box_pack_end(bx, ly); + evas_object_show(ly); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END \ No newline at end of file diff --git a/src/bin/test_diskselector.c b/src/bin/test_diskselector.c new file mode 100644 index 0000000..a513cef --- /dev/null +++ b/src/bin/test_diskselector.c @@ -0,0 +1,333 @@ +#include +#include +#include "tsuite.h" + +static void +_disk_sel(void *data __UNUSED__, Evas_Object * obj __UNUSED__, void *event_info) +{ + Elm_Diskselector_Item *it = event_info; + printf("Equinox: %s\n", elm_diskselector_item_label_get(it)); +} + +static void +_disk_next(void *data __UNUSED__, Evas_Object * obj __UNUSED__, void *event_info) +{ + Elm_Diskselector_Item *next, *prev, *it = event_info; + prev = elm_diskselector_item_prev_get(it); + next = elm_diskselector_item_next_get(it); + printf("Prev: %s, Next: %s\n", elm_diskselector_item_label_get(prev), + elm_diskselector_item_label_get(next)); +} + +static void +_print_disk_info_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Diskselector_Item *it = event_info; + printf("Selected label: %s\n", elm_diskselector_item_label_get(it)); +} + +static Evas_Object * +_disk_create(Evas_Object *win, Eina_Bool round) +{ + Elm_Diskselector_Item *it; + Evas_Object *di; + + di = elm_diskselector_add(win); + + elm_diskselector_item_append(di, "January", NULL, NULL, NULL); + elm_diskselector_item_append(di, "February", NULL, _disk_next, NULL); + elm_diskselector_item_append(di, "March", NULL, _disk_sel, NULL); + elm_diskselector_item_append(di, "April", NULL, NULL, NULL); + elm_diskselector_item_append(di, "May", NULL, NULL, NULL); + elm_diskselector_item_append(di, "June", NULL, NULL, NULL); + elm_diskselector_item_append(di, "July", NULL, NULL, NULL); + it = elm_diskselector_item_append(di, "August", NULL, NULL, NULL); + elm_diskselector_item_append(di, "September", NULL, _disk_sel, NULL); + elm_diskselector_item_append(di, "October", NULL, NULL, NULL); + elm_diskselector_item_append(di, "November", NULL, NULL, NULL); + elm_diskselector_item_append(di, "December", NULL, NULL, NULL); + + elm_diskselector_item_selected_set(it, EINA_TRUE); + elm_diskselector_round_set(di, round); + + return di; +} + +enum _api_state +{ + SCROLLER_POLICY_SET_ON, + SCROLLER_POLICY_SET_OFF, + BOUNCE_SET, + ITEM_LABEL_SET, + TOOLTIP_TEXT_SET, + ITEM_TOOLTIP_UNSET, + ITEM_CURSOR_SET, + ITEM_CURSOR_UNSET, + ITEM_ICON_SET, + SELECTED_SET, + ITEM_PREV_GET, + ITEM_DEL_NOT_SELECTED, + ITEM_DEL, /* delete when selected */ + CLEAR, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *disks = elm_box_children_get(api->data); + if(!eina_list_count(disks)) + return; + + switch(api->state) + { /* Put all api-changes under switch */ + case SCROLLER_POLICY_SET_ON: /* 0 */ + { /* Get first disk */ + Evas_Object *disk = eina_list_nth(disks, 0); + elm_diskselector_scroller_policy_set(disk, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); + } + break; + + case SCROLLER_POLICY_SET_OFF: /* 1 */ + { /* Get first disk */ + Evas_Object *disk = eina_list_nth(disks, 0); + elm_diskselector_scroller_policy_set(disk, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + } + break; + + case BOUNCE_SET: /* 2 */ + { /* Get second disk, cancel bounce */ + Evas_Object *disk = eina_list_nth(disks, 1); + elm_diskselector_bounce_set(disk, EINA_FALSE, EINA_FALSE); + } + break; + + case ITEM_LABEL_SET: /* 3 */ + elm_diskselector_item_label_set(elm_diskselector_selected_item_get(eina_list_nth(disks, 0)), "Label from API"); + break; + + case TOOLTIP_TEXT_SET: /* 4 */ + elm_diskselector_item_tooltip_text_set(elm_diskselector_selected_item_get(eina_list_nth(disks, 0)), "Tooltip from API"); + break; + + case ITEM_TOOLTIP_UNSET: /* 5 */ + elm_diskselector_item_tooltip_unset(elm_diskselector_selected_item_get(eina_list_nth(disks, 0))); + break; + + case ITEM_CURSOR_SET: /* 6 */ + elm_diskselector_item_cursor_set(elm_diskselector_selected_item_get(eina_list_nth(disks, 0)), ELM_CURSOR_HAND2); + break; + + case ITEM_CURSOR_UNSET: /* 7 */ + elm_diskselector_item_cursor_unset(elm_diskselector_selected_item_get(eina_list_nth(disks, 0))); + break; + + case ITEM_ICON_SET: /* 8 */ + { /* Set icon of selected item in first disk */ + char buf[PATH_MAX]; + Evas_Object *ic = elm_icon_add(elm_object_parent_widget_get(eina_list_nth(disks, 0))); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_diskselector_item_icon_set(elm_diskselector_selected_item_get(eina_list_nth(disks, 0)), ic); + evas_object_show(ic); + } + break; + + case SELECTED_SET: /* 9 */ + { /* Select NEXT item of first disk */ + elm_diskselector_item_selected_set(elm_diskselector_item_next_get(elm_diskselector_selected_item_get(eina_list_nth(disks, 0))), EINA_TRUE); + } + break; + + case ITEM_PREV_GET: /* 10 */ + { /* Select PREV item of first disk */ + elm_diskselector_item_selected_set(elm_diskselector_item_prev_get(elm_diskselector_selected_item_get(eina_list_nth(disks, 0))), EINA_TRUE); + } + break; + + case ITEM_DEL_NOT_SELECTED: /* 11 */ + { /* Remove selected item of first disk */ + elm_diskselector_item_del(elm_diskselector_item_prev_get(elm_diskselector_selected_item_get(eina_list_nth(disks, 0)))); + } + break; + + case ITEM_DEL: /* 12 */ + { /* Remove selected item of first disk */ + elm_diskselector_item_del(elm_diskselector_selected_item_get(eina_list_nth(disks, 0))); + } + break; + + case CLEAR: /* 13 */ + elm_diskselector_clear(eina_list_nth(disks, 0)); + break; + + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_diskselector) +{ + Evas_Object *bg, *bx, *bxx, *disk, *ic; + Elm_Diskselector_Item *it; + char buf[PATH_MAX]; + int idx = 0; + + char *month_list[] = { + "Jan", "Feb", "Mar", + "Apr", "May", "Jun", + "Jul", "Aug", "Sep", + "Oct", "Nov", "Dec" + }; + char date[3]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + api->data = bx; + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + disk = _disk_create(win, EINA_TRUE); + evas_object_size_hint_weight_set(disk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(disk, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, disk); + evas_object_show(disk); + evas_object_smart_callback_add(disk, "selected", _print_disk_info_cb, NULL); + it = elm_diskselector_selected_item_get(disk); + elm_diskselector_item_selected_set(it, EINA_FALSE); + + disk = _disk_create(win, EINA_FALSE); + evas_object_size_hint_weight_set(disk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(disk, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, disk); + evas_object_show(disk); + evas_object_smart_callback_add(disk, "selected", _print_disk_info_cb, NULL); + it = elm_diskselector_first_item_get(disk); + it = elm_diskselector_item_next_get(it); + elm_diskselector_item_selected_set(it, EINA_TRUE); + + disk = _disk_create(win, EINA_FALSE); + evas_object_size_hint_weight_set(disk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(disk, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, disk); + evas_object_show(disk); + evas_object_smart_callback_add(disk, "selected", _print_disk_info_cb, NULL); + elm_diskselector_side_label_length_set(disk, 4); + + disk = elm_diskselector_add(win); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 1, 1); + elm_diskselector_item_append(disk, "Sunday", ic, NULL, NULL); + elm_diskselector_item_append(disk, "Monday", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "Tuesday", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "Wednesday", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "Thursday", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "Friday", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "Saturday", NULL, NULL, NULL); + elm_diskselector_round_set(disk, EINA_TRUE); + evas_object_size_hint_weight_set(disk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(disk, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, disk); + evas_object_show(disk); + evas_object_smart_callback_add(disk, "selected", _print_disk_info_cb, NULL); + + disk = elm_diskselector_add(win); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 1, 1); + elm_diskselector_item_append(disk, "머리스타일", ic, NULL, NULL); + elm_diskselector_item_append(disk, "プロが伝授する", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "生上访要求政府", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "English", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "والشريعة", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "עִבְרִית", NULL, NULL, NULL); + elm_diskselector_item_append(disk, "Grüßen", NULL, NULL, NULL); + elm_diskselector_round_set(disk, EINA_TRUE); + evas_object_size_hint_weight_set(disk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(disk, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, disk); + evas_object_show(disk); + evas_object_smart_callback_add(disk, "selected", _print_disk_info_cb, NULL); + + // displayed item number setting example + disk = elm_diskselector_add(win); + elm_diskselector_display_item_num_set(disk, 5); + printf("Number of Items in DiskSelector : %d\n", elm_diskselector_display_item_num_get(disk)); + + for (idx = 0; idx < (int)(sizeof(month_list) / sizeof(month_list[0])); idx++) + { + it = elm_diskselector_item_append(disk, month_list[idx], NULL, NULL, NULL); + } + + elm_diskselector_item_selected_set(it, EINA_TRUE); + elm_diskselector_round_set(disk, EINA_TRUE); + evas_object_size_hint_weight_set(disk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(disk, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, disk); + evas_object_show(disk); + evas_object_smart_callback_add(disk, "selected", _print_disk_info_cb, NULL); + + // displayed item number setting example + disk = elm_diskselector_add(win); + elm_diskselector_display_item_num_set(disk, 7); + printf("Number of Items in DiskSelector : %d\n", elm_diskselector_display_item_num_get(disk)); + + for (idx = 1; idx < 31; idx++) + { + snprintf(date, sizeof(date), "%d", idx); + it = elm_diskselector_item_append(disk, date, NULL, NULL, NULL); + } + + elm_diskselector_item_selected_set(it, EINA_TRUE); + elm_diskselector_round_set(disk, EINA_TRUE); + evas_object_size_hint_weight_set(disk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(disk, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, disk); + evas_object_show(disk); + evas_object_smart_callback_add(disk, "selected", _print_disk_info_cb, NULL); + + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_entry.c b/src/bin/test_entry.c new file mode 100644 index 0000000..501805a --- /dev/null +++ b/src/bin/test_entry.c @@ -0,0 +1,1673 @@ +#include +#include "tsuite.h" + +static void +my_entry_bt_1(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_entry_set(en, ""); +} + +static void +my_entry_bt_2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + const char *s = elm_entry_entry_get(en); + printf("ENTRY:\n"); + if (s) printf("%s\n", s); + printf("ENTRY PLAIN UTF8:\n"); + if (s) + { + s = elm_entry_markup_to_utf8(s); + if (s) + { + printf("%s\n", s); + free((char *)s); + } + } +} + +static void +my_entry_bt_3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + const char *s = elm_entry_selection_get(en); + printf("SELECTION:\n"); + if (s) printf("%s\n", s); + printf("SELECTION PLAIN UTF8:\n"); + if (s) + { + s = elm_entry_markup_to_utf8(s); + if (s) + { + printf("%s\n", s); + free((char *)s); + } + } +} + +static void +my_entry_bt_4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_entry_insert(en, "Insert some BOLD text"); +} + +static void +my_entry_bt_5(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_scrollable_set(en, !elm_entry_scrollable_get(en)); +} + +static void +my_entry_bt_6(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + static Elm_Wrap_Type wr = ELM_WRAP_NONE; + + wr++; + if (wr == ELM_WRAP_LAST) wr = ELM_WRAP_NONE; + printf("wr: %i\n", wr); + elm_entry_line_wrap_set(en, wr); +} + +TEST_START(test_entry) +{ + Evas_Object *bg, *bx, *bx2, *bt, *en; + char buf[4096]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + en = elm_entry_add(win); + elm_entry_line_wrap_set(en, ELM_WRAP_NONE); + snprintf(buf, sizeof(buf), + "This is an entry widget in this window that
" + "uses markup like this for styling and
" + "formatting like this, as well as
" + "links in the text, so enter text
" + "in here to edit it. By the way, links are
" + "called Anchors so you will need
" + "to refer to them this way.
" + "
" + + "Also you can stick in items with (relsize + ascent): " + "" + " (full) " + "" + " (to the left)
" + + "Also (size + ascent): " + "" + " (full) " + "" + " (before this)
" + + "And as well (absize + ascent): " + "" + " (full) " + "" + " or even paths to image files on disk too like: " + "" + " ... end." + , elm_app_data_dir_get() + ); + elm_entry_entry_set(en, buf); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, en); + evas_object_show(en); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Clr"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_1, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Prnt"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_2, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Sel"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_3, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Ins"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_4, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Scrl"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_5, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Wr"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_6, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + elm_object_focus_set(en, EINA_TRUE); + evas_object_show(win); +} +TEST_END + +static void +my_scrolled_entry_bt_1(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_entry_set(en, ""); +} + +static void +my_scrolled_entry_bt_2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + const char *s = elm_entry_entry_get(en); + printf("ENTRY:\n"); + if (s) printf("%s\n", s); + printf("ENTRY PLAIN UTF8:\n"); + if (s) + { + s = elm_entry_markup_to_utf8(s); + if (s) + { + printf("%s\n", s); + free((char *)s); + } + } +} + +static void +my_scrolled_entry_bt_3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + const char *s = elm_entry_selection_get(en); + printf("SELECTION:\n"); + if (s) printf("%s\n", s); + printf("SELECTION PLAIN UTF8:\n"); + if (s) + { + s = elm_entry_markup_to_utf8(s); + if (s) + { + printf("%s\n", s); + free((char *)s); + } + } +} + +static void +my_scrolled_entry_bt_4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_entry_insert(en, "Insert some BOLD text"); +} + +static void +my_scrolled_entry_bt_5(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + const char *s = elm_entry_entry_get(en); + printf("PASSWORD: '%s'\n", s ? s : ""); +} + +static void +scrolled_anchor_test(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_entry_insert(en, "ANCHOR CLICKED"); +} + +TEST_START(test_entry_scrolled) +{ + Evas_Object *bg, *bx, *bx2, *bt, *en, *en_p, *sp; + static Elm_Entry_Filter_Accept_Set digits_filter_data, digits_filter_data2; + static Elm_Entry_Filter_Limit_Size limit_filter_data, limit_filter_data2; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + /* disabled entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_entry_set(en, "Disabled entry"); + elm_entry_single_line_set(en, 1); + elm_object_disabled_set(en, 1); + evas_object_show(en); + elm_box_pack_end(bx, en); + + /* password entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_password_set(en, 1); + elm_entry_single_line_set(en, 1); + elm_entry_entry_set(en, "Access denied, give up!"); + elm_object_disabled_set(en, 1); + evas_object_show(en); + elm_box_pack_end(bx, en); + + /* multi-line disable entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); + elm_object_disabled_set(en, 1); + elm_entry_context_menu_item_add(en, "Hello", NULL, ELM_ICON_NONE, NULL, NULL); + elm_entry_context_menu_item_add(en, "World", NULL, ELM_ICON_NONE, NULL, NULL); + elm_entry_entry_set(en, + "Multi-line disabled entry widget :)
" + "We can use markup like this for styling and
" + "formatting like this, as well as
" + "links in the text," + "but it won't be editable or clickable."); + evas_object_show(en); + elm_box_pack_end(bx, en); + + sp = elm_separator_add(win); + elm_separator_horizontal_set(sp, 1); + elm_box_pack_end(bx, sp); + evas_object_show(sp); + + /* Single line selected entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_entry_set(en, "This is a single line"); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_single_line_set(en, 1); + elm_entry_select_all(en); + evas_object_show(en); + elm_box_pack_end(bx, en); + + /* Only digits entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_entry_set(en, "01234"); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_single_line_set(en, 1); + evas_object_show(en); + elm_box_pack_end(bx, en); + + digits_filter_data.accepted = "0123456789"; + digits_filter_data.rejected = NULL; + elm_entry_text_filter_append(en, elm_entry_filter_accept_set, &digits_filter_data); + + /* No digits entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_entry_set(en, "No numbers here"); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_single_line_set(en, 1); + evas_object_show(en); + elm_box_pack_end(bx, en); + + digits_filter_data2.accepted = NULL; + digits_filter_data2.rejected = "0123456789"; + elm_entry_text_filter_append(en, elm_entry_filter_accept_set, &digits_filter_data2); + + /* Size limited entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_entry_set(en, "Just 20 chars"); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_single_line_set(en, 1); + evas_object_show(en); + elm_box_pack_end(bx, en); + + limit_filter_data.max_char_count = 20; + limit_filter_data.max_byte_count = 0; + elm_entry_text_filter_append(en, elm_entry_filter_limit_size, &limit_filter_data); + + /* Byte size limited entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_entry_set(en, "And now only 30 bytes"); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_single_line_set(en, 1); + evas_object_show(en); + elm_box_pack_end(bx, en); + + limit_filter_data2.max_char_count = 0; + limit_filter_data2.max_byte_count = 30; + elm_entry_text_filter_append(en, elm_entry_filter_limit_size, &limit_filter_data2); + + /* Single line password entry */ + en_p = elm_entry_add(win); + elm_entry_scrollable_set(en_p, EINA_TRUE); + evas_object_size_hint_weight_set(en_p, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en_p, EVAS_HINT_FILL, 0.5); + elm_entry_scrollbar_policy_set(en_p, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_entry_set(en_p, "Password here"); + elm_entry_single_line_set(en_p, 1); + elm_entry_password_set(en_p, 1); + evas_object_show(en_p); + elm_box_pack_end(bx, en_p); + + /* scrolled entry with icon/end widgets*/ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_single_line_set(en, 1); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + bt = elm_icon_add(win); + elm_icon_standard_set(bt, "home"); + evas_object_size_hint_min_set(bt, 48, 48); + evas_object_color_set(bt, 255, 0, 0, 128); + evas_object_show(bt); + elm_entry_icon_set(en, bt); + bt = elm_icon_add(win); + elm_icon_standard_set(bt, "delete"); + evas_object_color_set(bt, 255, 0, 0, 128); + evas_object_size_hint_min_set(bt, 48, 48); + evas_object_show(bt); + elm_entry_end_set(en, bt); + elm_entry_entry_set(en, "scrolled entry with icon and end objects"); + evas_object_show(en); + elm_box_pack_end(bx, en); + + /* markup scrolled entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); + elm_entry_entry_set(en, + "This is an entry widget in this window that
" + "uses markup like this for styling and
" + "formatting like this, as well as
" + "links in the text, so enter text
" + "in here to edit it. By them way, links are
" + "called Anchors so you will need
" + "to refer to them this way. At the end here is a really long " + "line to test line wrapping to see if it works. But just in " + "case this line is not long enough I will add more here to " + "really test it out, as Elementary really needs some " + "good testing to see if entry widgets work as advertised."); + evas_object_smart_callback_add(en, "anchor,clicked", scrolled_anchor_test, en); + evas_object_show(en); + elm_box_pack_end(bx, en); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Clear"); + evas_object_smart_callback_add(bt, "clicked", my_scrolled_entry_bt_1, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Print"); + evas_object_smart_callback_add(bt, "clicked", my_scrolled_entry_bt_2, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Print pwd"); + evas_object_smart_callback_add(bt, "clicked", my_scrolled_entry_bt_5, en_p); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Selection"); + evas_object_smart_callback_add(bt, "clicked", my_scrolled_entry_bt_3, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Insert"); + evas_object_smart_callback_add(bt, "clicked", my_scrolled_entry_bt_4, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 300); + + elm_object_focus_set(win, EINA_TRUE); + evas_object_show(win); +} +TEST_END + +static void +my_ent_bt_clr(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_entry_set(en, ""); +} + +static void +my_ent_bt_pri(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + const char *s = elm_entry_entry_get(en); + printf("ENTRY:\n"); + if (s) printf("%s\n", s); + printf("ENTRY PLAIN UTF8:\n"); + if (s) + { + s = elm_entry_markup_to_utf8(s); + if (s) + { + printf("%s\n", s); + free((char *)s); + } + } +} + +static void +my_ent_bt_sel(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + const char *s = elm_entry_selection_get(en); + printf("SELECTION:\n"); + if (s) printf("%s\n", s); + printf("SELECTION PLAIN UTF8:\n"); + if (s) + { + s = elm_entry_markup_to_utf8(s); + if (s) + { + printf("%s\n", s); + free((char *)s); + } + } +} + +static void +my_ent_bt_all(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_select_all(en); +} + +static void +my_ent_bt_non(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_select_none(en); +} + +static void +my_ent_bt_ins(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_entry_insert(en, "Insert text"); +} + +static void +my_ent_bt_lef(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_prev(en); +} + +static void +my_ent_bt_rig(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_next(en); +} + +static void +my_ent_bt_up_(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_up(en); +} + +static void +my_ent_bt_dow(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_down(en); +} + +static void +my_ent_bt_beg(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_begin_set(en); +} + +static void +my_ent_bt_end(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_end_set(en); +} + +static void +my_ent_bt_lbe(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_line_begin_set(en); +} + +static void +my_ent_bt_len(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_line_end_set(en); +} + +static void +my_ent_bt_sbe(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_selection_begin(en); +} + +static void +my_ent_bt_sen(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_cursor_selection_end(en); +} + +static void +my_ent_bt_fmt(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + printf("IS FORMAT: %i\n", + (int)elm_entry_cursor_is_format_get(en)); +} + +static void +my_ent_bt_vfm(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + printf("IS VISIBLE FORMAT %i\n", + (int)elm_entry_cursor_is_visible_format_get(en)); +} + +static void +my_ent_bt_chr(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + printf("CHAR '%s'\n", elm_entry_cursor_content_get(en)); +} + +static void +my_ent_bt_cut(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_selection_cut(en); +} + +static void +my_ent_bt_cop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_selection_copy(en); +} + +static void +my_ent_bt_pas(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_selection_paste(en); +} + +TEST_START(test_entry3) +{ + Evas_Object *bg, *bx, *bx2, *bt, *en; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + /* Single line selected entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_entry_set(en, "This is a single line"); + elm_entry_single_line_set(en, 1); + elm_box_pack_end(bx, en); + evas_object_show(en); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Clr"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_clr, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Pri"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_pri, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Sel"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_sel, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "All"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_all, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Non"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_non, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Ins"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_ins, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Lef"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_lef, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rig"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_rig, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Up "); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_up_, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Dow"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_dow, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Beg"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_beg, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "End"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_end, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "LBe"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_lbe, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "LEn"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_len, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "SBe"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_sbe, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "SEn"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_sen, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Fmt"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_fmt, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "VFm"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_vfm, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Chr"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_chr, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Cut"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_cut, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Cop"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_cop, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Pas"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_pas, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + /* markup scrolled entry */ + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_entry_set(en, + "This is an entry widget in this window that
" + "uses markup like this for styling and
" + "formatting like this, as well as
" + "links in the text, so enter text
" + "in here to edit it. By them way, links are
" + "called Anchors so you will need
" + "to refer to them this way. At the end here is a really long " + "line to test line wrapping to see if it works. But just in " + "case this line is not long enough I will add more here to " + "really test it out, as Elementary really needs some " + "good testing to see if entry widgets work as advertised." + ); + evas_object_smart_callback_add(en, "anchor,clicked", scrolled_anchor_test, en); + elm_box_pack_end(bx, en); + evas_object_show(en); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Clr"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_clr, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Pri"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_pri, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Sel"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_sel, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "All"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_all, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Non"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_non, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Ins"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_ins, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Lef"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_lef, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rig"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_rig, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Up "); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_up_, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Dow"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_dow, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Beg"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_beg, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "End"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_end, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "LBe"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_lbe, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "LEn"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_len, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "SBe"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_sbe, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "SEn"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_sen, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Fmt"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_fmt, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "VFm"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_vfm, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Chr"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_chr, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Cut"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_cut, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Cop"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_cop, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Pas"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_pas, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 480); + + elm_object_focus_set(win, EINA_TRUE); + evas_object_show(win); +} +TEST_END + +TEST_START(test_entry4) +{ + Evas_Object *bg, *ly, *en; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "layout"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, ly); + evas_object_show(ly); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_entry_set(en, "This is a single line"); + elm_entry_single_line_set(en, 1); + elm_object_part_content_set(ly, "element1", en); + evas_object_show(en); + + en = elm_entry_add(win); + elm_entry_line_wrap_set(en, ELM_WRAP_NONE); + elm_entry_entry_set(en, + "This is an entry widget
" + "that uses markup
" + "like this and has
" + "no scroller, so you can
" + "use it more flexibly."); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_part_content_set(ly, "element2", en); + evas_object_show(en); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_entry_set(en, + "This is an entry widget in this window that
" + "uses markup like this for styling and
" + "formatting like this, as well as
" + "links in the text, so enter text
" + "in here to edit it. By them way, links are
" + "called Anchors so you will need
" + "to refer to them this way. At the end here is a really long " + "line to test line wrapping to see if it works. But just in " + "case this line is not long enough I will add more here to " + "really test it out, as Elementary really needs some " + "good testing to see if entry widgets work as advertised." + ); + evas_object_smart_callback_add(en, "anchor,clicked", scrolled_anchor_test, en); + elm_object_part_content_set(ly, "element3", en); + evas_object_show(en); + + evas_object_show(win); +} +TEST_END + +TEST_START(test_entry5) +{ + Evas_Object *bg, *bx, *bx2, *bt, *en; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_line_wrap_set(en, ELM_WRAP_CHAR); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_entry_set(en, + "This is an entry widget in this window that " + "uses markup like this for styling and " + "formatting like this, as well as " + "to refer to them this way. At the end here is a really long " + "line to test line wrapping to see if it works. But just in " + "case this line is not long enough I will add more here to " + "really test it out, as Elementary really needs some " + "good testing to see if entry widgets work as advertised." + ); + evas_object_smart_callback_add(en, "anchor,clicked", scrolled_anchor_test, en); + elm_box_pack_end(bx, en); + evas_object_show(en); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Clr"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_clr, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Pri"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_pri, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Sel"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_sel, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "All"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_all, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Non"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_non, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Ins"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_ins, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Lef"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_lef, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rig"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_rig, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Up "); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_up_, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Dow"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_dow, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Beg"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_beg, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "End"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_end, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "LBe"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_lbe, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "LEn"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_len, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "SBe"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_sbe, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "SEn"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_sen, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Fmt"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_fmt, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "VFm"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_vfm, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Chr"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_chr, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Cut"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_cut, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Cop"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_cop, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Pas"); + evas_object_smart_callback_add(bt, "clicked", my_ent_bt_pas, en); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_propagate_events_set(bt, 0); + elm_object_focus_allow_set(bt, 0); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 480); + + elm_object_focus_set(win, EINA_TRUE); + evas_object_show(win); +} +TEST_END + +static void +_scrolled_entry_clear(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *en = data; + elm_entry_entry_set(en, ""); +} + +TEST_START(test_entry_notepad) +{ + Evas_Object *bg, *bx, *bx2, *bt, *np; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + np = elm_entry_add(win); + elm_entry_scrollable_set(np, EINA_TRUE); + elm_entry_file_set(np, "note.txt", ELM_TEXT_FORMAT_PLAIN_UTF8); + evas_object_size_hint_weight_set(np, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(np, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, np); + evas_object_show(np); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Clear"); + evas_object_smart_callback_add(bt, "clicked", _scrolled_entry_clear, np); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 300); + + elm_object_focus_set(win, EINA_TRUE); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_fileselector.c b/src/bin/test_fileselector.c new file mode 100644 index 0000000..61adb7c --- /dev/null +++ b/src/bin/test_fileselector.c @@ -0,0 +1,281 @@ +#include +#include "tsuite.h" + +static void +my_fileselector_done(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + /* event_info conatin the full path of the selected file + * or NULL if none is selected or cancel is pressed */ + const char *selected = event_info; + + if (selected) + printf("Selected file: %s\n", selected); +/* else test window deleted in tsuite_cleanup + evas_object_del(data); delete the test window */ +} + +static void +my_fileselector_selected(void *data __UNUSED__, + Evas_Object *obj, + void *event_info) +{ + /* event_info conatin the full path of the selected file */ + const char *selected = event_info; + printf("Selected file: %s\n", selected); + + /* or you can query the selection */ + printf("or: %s\n", elm_fileselector_selected_get(obj)); +} + +static void +_is_save_clicked(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs = data; + printf("Toggle Is save\n"); + if (elm_fileselector_is_save_get(fs)) + elm_fileselector_is_save_set(fs, EINA_FALSE); + else + elm_fileselector_is_save_set(fs, EINA_TRUE); +} + +static void +_folder_only_clicked(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs = data; + printf("Toggle Folder only\n"); + if (elm_fileselector_folder_only_get(fs)) + elm_fileselector_folder_only_set(fs, EINA_FALSE); + else + elm_fileselector_folder_only_set(fs, EINA_TRUE); +} + +static void +_expandable_clicked(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs = data; + printf("Toggle Expandable\n"); + if (elm_fileselector_expandable_get(fs)) + elm_fileselector_expandable_set(fs, EINA_FALSE); + else + elm_fileselector_expandable_set(fs, EINA_TRUE); +} + +static void +_sel_get_clicked(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs = data; + printf("Get Selected: %s\n", elm_fileselector_selected_get(fs)); +} + +static void +_path_get_clicked(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs = data; + printf("Get Path: %s\n", elm_fileselector_path_get(fs)); +} + +static void +_mode_cycle_clicked(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs = data; + Elm_Fileselector_Mode mode; + + mode = (elm_fileselector_mode_get(fs) + 1) % ELM_FILESELECTOR_LAST; + elm_fileselector_mode_set(fs, mode); + + printf("Setting mode to: %d\n", mode); +} + +enum _api_state +{ + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *items = elm_box_children_get(api->data); + if(!eina_list_count(items)) + return; + + /* Get first item of list of vbox children + Evas_Object *fs_bt = eina_list_nth(items, 0); */ + + /* use elm_box_children_get() to get list of children */ + switch(api->state) + { /* Put all api-changes under switch */ + case API_STATE_LAST: + + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +static void +create_dir_struct(void) +{ + FILE *fp; + mkdir("/tmp/test_fs_bt", S_IRWXU); + fp = fopen("/tmp/test_fs_bt/a_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs_bt/k_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs_bt/m_file.txt", "w"); + if (fp) fclose(fp); + + mkdir("/tmp/test_fs_bt/a_subdir", S_IRWXU); + fp = fopen("/tmp/test_fs_bt/a_subdir/d_sub_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs_bt/a_subdir/j_sub_file.txt", "w"); + if (fp) fclose(fp); +} + +TEST_START(test_fileselector) +{ + Evas_Object *fs, *bg, *vbox, *hbox, *bxx, *bt, *sep; + + /* Set the locale according to the system pref. + * If you dont do so the file selector will order the files list in + * a case sensitive manner + */ + setlocale(LC_ALL, ""); + + elm_need_ethumb(); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + vbox = elm_box_add(win); + api->data = vbox; +// elm_win_resize_object_add(win, vbox); + evas_object_size_hint_align_set(vbox, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(vbox); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, vbox); + + create_dir_struct(); /* Create a dir struct in /tmp */ + + fs = elm_fileselector_add(win); + /* enable the fs file name entry */ + elm_fileselector_is_save_set(fs, EINA_TRUE); + /* make the file list a tree with dir expandable in place */ + elm_fileselector_expandable_set(fs, EINA_FALSE); + /* start the fileselector in the test dir */ + elm_fileselector_path_set(fs, "/tmp/test_fs_bt"); + /* allow fs to expand in x & y */ + evas_object_size_hint_weight_set(fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(vbox, fs); + evas_object_show(fs); // TODO fix this is the widget + + /* the 'done' cb is called when the user press ok/cancel */ + evas_object_smart_callback_add(fs, "done", my_fileselector_done, win); + /* the 'selected' cb is called when the user click on a file/dir */ + evas_object_smart_callback_add(fs, "selected", my_fileselector_selected, + win); + + /* test buttons */ + sep = elm_separator_add(win); + elm_separator_horizontal_set(sep, EINA_TRUE); + elm_box_pack_end(vbox, sep); + evas_object_show(sep); + + hbox = elm_box_add(win); + elm_box_horizontal_set(hbox, EINA_TRUE); + elm_box_pack_end(vbox, hbox); + evas_object_show(hbox); + + bt = elm_check_add(win); + elm_object_text_set(bt, "is save"); + elm_check_state_set(bt, elm_fileselector_is_save_get(fs)); + evas_object_smart_callback_add(bt, "changed", _is_save_clicked, fs); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_check_add(win); + elm_object_text_set(bt, "folder only"); + elm_check_state_set(bt, elm_fileselector_folder_only_get(fs)); + evas_object_smart_callback_add(bt, "changed", _folder_only_clicked, fs); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_check_add(win); + elm_object_text_set(bt, "expandable"); + elm_check_state_set(bt, elm_fileselector_expandable_get(fs)); + evas_object_smart_callback_add(bt, "changed", _expandable_clicked, fs); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + hbox = elm_box_add(win); + elm_box_horizontal_set(hbox, EINA_TRUE); + elm_box_pack_end(vbox, hbox); + evas_object_show(hbox); + + bt = elm_button_add(win); + elm_object_text_set(bt, "selected get"); + evas_object_smart_callback_add(bt, "clicked", _sel_get_clicked, fs); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "path get"); + evas_object_smart_callback_add(bt, "clicked", _path_get_clicked, fs); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "mode cycle"); + evas_object_smart_callback_add(bt, "clicked", _mode_cycle_clicked, fs); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + evas_object_resize(win, 240, 400); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_fileselector_button.c b/src/bin/test_fileselector_button.c new file mode 100644 index 0000000..94584ad --- /dev/null +++ b/src/bin/test_fileselector_button.c @@ -0,0 +1,227 @@ +#include +#include "tsuite.h" + +static void +_file_chosen(void *data, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Evas_Object *entry = data; + const char *file = event_info; + if (file) + { + elm_entry_entry_set(entry, file); + printf("File chosen: %s\n", file); + } + else + printf("File selection canceled.\n"); +} + +static void +_inwin_mode_toggle(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs_bt = data; + Eina_Bool value = elm_fileselector_button_inwin_mode_get(fs_bt); + elm_fileselector_button_inwin_mode_set(fs_bt, !value); + printf("Inwin mode set to: %s\n", value ? "false" : "true"); +} + +static void +_current_sel_toggle(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs_bt = data; + Eina_Bool value = elm_fileselector_button_is_save_get(fs_bt); + elm_fileselector_button_is_save_set(fs_bt, !value); + printf("Current selection editable entry set to: %s\n", + value ? "false" : "true"); +} + +static void +_folder_only_toggle(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs_bt = data; + Eina_Bool value = elm_fileselector_button_folder_only_get(fs_bt); + elm_fileselector_button_folder_only_set(fs_bt, !value); + printf("Folder only flag set to: %s\n", value ? "false" : "true"); +} + +static void +_expandable_toggle(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs_bt = data; + Eina_Bool value = elm_fileselector_button_expandable_get(fs_bt); + elm_fileselector_button_expandable_set(fs_bt, !value); + printf("Expandable flag set to: %s\n", value ? "false" : "true"); +} + +enum _api_state +{ + ICON_UNSET, + WINDOW_TITLE_SET, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *items = elm_box_children_get(api->data); + if(!eina_list_count(items)) + return; + + /* Get first item of list of vbox children */ + Evas_Object *fs_bt = eina_list_nth(items, 0); + + /* use elm_box_children_get() to get list of children */ + switch(api->state) + { /* Put all api-changes under switch */ + case ICON_UNSET: + elm_fileselector_button_icon_unset(fs_bt); + break; + + case WINDOW_TITLE_SET: + elm_fileselector_button_window_title_set(fs_bt, "Custom title from API"); + break; + + case API_STATE_LAST: + + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +static void +create_dir_struct(void) +{ + FILE *fp; + mkdir("/tmp/test_fs_bt", S_IRWXU); + fp = fopen("/tmp/test_fs_bt/a_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs_bt/k_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs_bt/m_file.txt", "w"); + if (fp) fclose(fp); + + mkdir("/tmp/test_fs_bt/a_subdir", S_IRWXU); + fp = fopen("/tmp/test_fs_bt/a_subdir/d_sub_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs_bt/a_subdir/j_sub_file.txt", "w"); + if (fp) fclose(fp); +} + +TEST_START(test_fileselector_button) +{ + Evas_Object *bg, *vbox, *hbox, *bxx, *ic, *bt, *fs_bt, *en, *lb; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + vbox = elm_box_add(win); + api->data = vbox; + evas_object_show(vbox); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, vbox); + + create_dir_struct(); /* Create a dir struct in /tmp */ + /* file selector button */ + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "file"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + fs_bt = elm_fileselector_button_add(win); + elm_object_text_set(fs_bt, "Select a file"); + elm_fileselector_button_icon_set(fs_bt, ic); + elm_fileselector_button_path_set(fs_bt, "/tmp/test_fs_bt"); + + elm_box_pack_end(vbox, fs_bt); + evas_object_show(fs_bt); + evas_object_show(ic); + + /* attribute setting buttons */ + hbox = elm_box_add(win); + elm_box_horizontal_set(hbox, EINA_TRUE); + elm_box_pack_end(vbox, hbox); + evas_object_show(hbox); + + bt = elm_check_add(win); + elm_object_style_set(bt, "toggle"); + elm_object_text_set(bt, "current selection text entry"); + evas_object_smart_callback_add(bt, "changed", _current_sel_toggle, fs_bt); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_check_add(win); + elm_object_style_set(bt, "toggle"); + elm_object_text_set(bt, "Inwin mode"); + elm_check_state_set (bt, EINA_TRUE); + evas_object_smart_callback_add(bt, "changed", _inwin_mode_toggle, fs_bt); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_check_add(win); + elm_object_style_set(bt, "toggle"); + elm_object_text_set(bt, "Folder only mode"); + evas_object_smart_callback_add(bt, "changed", _folder_only_toggle, fs_bt); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_check_add(win); + elm_object_style_set(bt, "toggle"); + elm_object_text_set(bt, "Expandable mode"); + evas_object_smart_callback_add(bt, "changed", _expandable_toggle, fs_bt); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Last selection:"); + elm_box_pack_end(vbox, lb); + evas_object_show(lb); + + en = elm_entry_add(win); + elm_entry_line_wrap_set(en, ELM_WRAP_NONE); + elm_entry_editable_set(en, EINA_FALSE); + evas_object_smart_callback_add(fs_bt, "file,chosen", _file_chosen, en); + elm_box_pack_end(vbox, en); + evas_object_show(en); + + evas_object_resize(win, 400, 400); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_fileselector_entry.c b/src/bin/test_fileselector_entry.c new file mode 100644 index 0000000..535fa29 --- /dev/null +++ b/src/bin/test_fileselector_entry.c @@ -0,0 +1,236 @@ +#include +#include "tsuite.h" + +static void +_file_chosen(void *data, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Evas_Object *entry = data; + char *file = event_info; + elm_entry_entry_set(entry, file); + printf("File chosen: %s\n", file); +} + +static void +_inwin_mode_toggle(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs_en = data; + Eina_Bool value = elm_fileselector_entry_inwin_mode_get(fs_en); + elm_fileselector_entry_inwin_mode_set(fs_en, !value); + printf("Inwin mode set to: %s\n", value ? "false" : "true"); +} + +static void +_folder_only_toggle(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs_en = data; + Evas_Object *ic = elm_fileselector_entry_button_icon_get(fs_en); + Eina_Bool value = elm_fileselector_entry_folder_only_get(fs_en); + elm_fileselector_entry_folder_only_set(fs_en, !value); + printf("Folder only flag set to: %s\n", value ? "false" : "true"); + if (!value) + { + elm_icon_standard_set(ic, "folder"); + elm_object_text_set(fs_en, "Select a folder"); + } + else + { + elm_icon_standard_set(ic, "file"); + elm_object_text_set(fs_en, "Select a file"); + } +} + +static void +_expandable_toggle(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs_en = data; + Eina_Bool value = elm_fileselector_entry_expandable_get(fs_en); + elm_fileselector_entry_expandable_set(fs_en, !value); + printf("Expandable flag set to: %s\n", value ? "false" : "true"); +} + +static void +_disabled_toggle(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + Evas_Object *fs_en = data; + Eina_Bool value = elm_object_disabled_get(fs_en); + elm_object_disabled_set(fs_en, !value); + printf("Disabled flag set to: %s\n", value ? "false" : "true"); +} + +enum _api_state +{ + ICON_UNSET, + WINDOW_TITLE_SET, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *items = elm_box_children_get(api->data); + if(!eina_list_count(items)) + return; + + /* Get first item of list of vbox children */ + Evas_Object *fs_bt = eina_list_nth(items, 0); + + /* use elm_box_children_get() to get list of children */ + switch(api->state) + { /* Put all api-changes under switch */ + case ICON_UNSET: + elm_fileselector_entry_button_icon_unset(fs_bt); + break; + + case WINDOW_TITLE_SET: + elm_fileselector_entry_window_title_set(fs_bt, "Custom title from API"); + break; + + case API_STATE_LAST: + + break; + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +static void +create_dir_struct(void) +{ + FILE *fp; + mkdir("/tmp/test_fs_bt", S_IRWXU); + fp = fopen("/tmp/test_fs_bt/a_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs_bt/k_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs_bt/m_file.txt", "w"); + if (fp) fclose(fp); + + mkdir("/tmp/test_fs_bt/a_subdir", S_IRWXU); + fp = fopen("/tmp/test_fs_bt/a_subdir/d_sub_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs_bt/a_subdir/j_sub_file.txt", "w"); + if (fp) fclose(fp); +} + +TEST_START(test_fileselector_entry) +{ + Evas_Object *bg, *vbox, *hbox, *bxx, *ic, *bt, *fs_en, *en, *lb; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + vbox = elm_box_add(win); + evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + api->data = vbox; + evas_object_show(vbox); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, vbox); + + create_dir_struct(); /* Create a dir struct in /tmp */ + + /* file selector entry */ + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "file"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + fs_en = elm_fileselector_entry_add(win); + elm_fileselector_entry_path_set(fs_en, "/tmp/test_fs_bt"); + elm_object_text_set(fs_en, "Select a file"); + elm_fileselector_entry_button_icon_set(fs_en, ic); + evas_object_size_hint_weight_set(fs_en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(fs_en, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_box_pack_end(vbox, fs_en); + evas_object_show(fs_en); + evas_object_show(ic); + + /* attribute setting buttons */ + hbox = elm_box_add(win); + elm_box_horizontal_set(hbox, EINA_TRUE); + elm_box_pack_end(vbox, hbox); + evas_object_show(hbox); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Toggle inwin mode"); + evas_object_smart_callback_add(bt, "clicked", _inwin_mode_toggle, fs_en); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Toggle folder only mode"); + evas_object_smart_callback_add(bt, "clicked", _folder_only_toggle, fs_en); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Toggle expandable mode"); + evas_object_smart_callback_add(bt, "clicked", _expandable_toggle, fs_en); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Last selection:"); + elm_box_pack_end(vbox, lb); + evas_object_show(lb); + + hbox = elm_box_add(win); + elm_box_horizontal_set(hbox, EINA_TRUE); + elm_box_pack_end(vbox, hbox); + evas_object_show(hbox); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Toggle disabled"); + evas_object_smart_callback_add(bt, "clicked", _disabled_toggle, fs_en); + elm_box_pack_end(hbox, bt); + evas_object_show(bt); + + en = elm_entry_add(win); + elm_entry_line_wrap_set(en, ELM_WRAP_NONE); + elm_entry_editable_set(en, EINA_FALSE); + evas_object_smart_callback_add(fs_en, "file,chosen", _file_chosen, en); + elm_box_pack_end(vbox, en); + evas_object_show(en); + + evas_object_resize(win, 400, 500); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_flip.c b/src/bin/test_flip.c new file mode 100644 index 0000000..b449618 --- /dev/null +++ b/src/bin/test_flip.c @@ -0,0 +1,611 @@ +#include +#include "tsuite.h" + +void +my_fl_1(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_ROTATE_Y_CENTER_AXIS); +} + +void +my_fl_2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_ROTATE_X_CENTER_AXIS); +} + +void +my_fl_3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_ROTATE_XZ_CENTER_AXIS); +} + +void +my_fl_4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_ROTATE_YZ_CENTER_AXIS); +} + +void +my_fl_5(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_CUBE_LEFT); +} + +void +my_fl_6(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_CUBE_RIGHT); +} + +void +my_fl_7(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_CUBE_UP); +} + +void +my_fl_8(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_CUBE_DOWN); +} + +TEST_START(test_flip) +{ + Evas_Object *bg, *bx, *bx2, *fl, *o, *bt, *ly; + char buf[PATH_MAX]; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fl = elm_flip_add(win); + evas_object_size_hint_align_set(fl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, fl); + + o = elm_bg_add(win); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), "sky_01.jpg"); + elm_bg_file_set(o, buf, NULL); + elm_flip_content_front_set(fl, o); + evas_object_show(o); + + ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "layout"); + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_flip_content_back_set(fl, ly); + evas_object_show(ly); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 1"); + elm_object_part_content_set(ly, "element1", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 2"); + elm_object_part_content_set(ly, "element2", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 3"); + elm_object_part_content_set(ly, "element3", bt); + evas_object_show(bt); + + evas_object_show(fl); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + + bt = elm_button_add(win); + elm_object_text_set(bt, "1"); + evas_object_smart_callback_add(bt, "clicked", my_fl_1, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "2"); + evas_object_smart_callback_add(bt, "clicked", my_fl_2, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "3"); + evas_object_smart_callback_add(bt, "clicked", my_fl_3, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "4"); + evas_object_smart_callback_add(bt, "clicked", my_fl_4, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + + bt = elm_button_add(win); + elm_object_text_set(bt, "5"); + evas_object_smart_callback_add(bt, "clicked", my_fl_5, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "6"); + evas_object_smart_callback_add(bt, "clicked", my_fl_6, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "7"); + evas_object_smart_callback_add(bt, "clicked", my_fl_7, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "8"); + evas_object_smart_callback_add(bt, "clicked", my_fl_8, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END + +TEST_START(test_flip2) +{ + Evas_Object *bg, *bx, *bx2, *fl, *o, *bt, *tb, *li, *en; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), "sky_01.jpg"); + elm_bg_file_set(bg, buf, NULL); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fl = elm_flip_add(win); + evas_object_size_hint_align_set(fl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, fl); + + o = elm_box_add(win); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + tb = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(tb, 0); + evas_object_size_hint_weight_set(tb, 0.0, 0.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); + + elm_toolbar_item_append(tb, "arrow_left", "Hello", NULL, NULL); + elm_toolbar_item_append(tb, "arrow_right", "Out", NULL, NULL); + elm_toolbar_item_append(tb, "home", "There", NULL, NULL); + elm_toolbar_item_append(tb, "refresh", "World", NULL, NULL); + + elm_box_pack_end(o, tb); + evas_object_show(tb); + + li = elm_list_add(win); + evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_list_item_append(li, "This is a list", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Second item", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "3rd", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Fourth", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Number five is alive!", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "The quick brown fox jumps over the lazy dog", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Booyah", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "And another item", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "More of them", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Get with it", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + elm_box_pack_end(o, li); + evas_object_show(li); + + elm_flip_content_front_set(fl, o); + evas_object_show(o); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_line_wrap_set(en, ELM_WRAP_NONE); + snprintf(buf, sizeof(buf), + "This is an entry widget in this window that
" + "uses markup like this for styling and
" + "formatting like this, as well as
" + "links in the text, so enter text
" + "in here to edit it. By the way, links are
" + "called Anchors so you will need
" + "to refer to them this way.
" + "
" + + "Also you can stick in items with (relsize + ascent): " + "" + " (full) " + "" + " (to the left)
" + + "Also (size + ascent): " + "" + " (full) " + "" + " (before this)
" + + "And as well (absize + ascent): " + "" + " (full) " + "" + " or even paths to image files on disk too like: " + "" + " ... end." + , elm_app_data_dir_get() + ); + elm_entry_entry_set(en, buf); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_flip_content_back_set(fl, en); + evas_object_show(en); + + evas_object_show(fl); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + + bt = elm_button_add(win); + elm_object_text_set(bt, "1"); + evas_object_smart_callback_add(bt, "clicked", my_fl_1, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "2"); + evas_object_smart_callback_add(bt, "clicked", my_fl_2, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "3"); + evas_object_smart_callback_add(bt, "clicked", my_fl_3, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "4"); + evas_object_smart_callback_add(bt, "clicked", my_fl_4, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "5"); + evas_object_smart_callback_add(bt, "clicked", my_fl_5, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "6"); + evas_object_smart_callback_add(bt, "clicked", my_fl_6, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END + +TEST_START(test_flip3) +{ + Evas_Object *bg, *bx, *bx2, *fl, *fl_f, *fl_b, *o, *bt, *fr; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fl = elm_flip_add(win); + evas_object_size_hint_align_set(fl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, fl); + evas_object_show(fl); + + fr = elm_frame_add(win); + elm_object_text_set(fr, "Front"); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_flip_content_front_set(fl, fr); + evas_object_show(fr); + + fl_f = elm_flip_add(win); + evas_object_size_hint_align_set(fl_f, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fl_f, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(fr, fl_f); + evas_object_show(fl_f); + + o = elm_bg_add(win); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), "sky_01.jpg"); + elm_bg_file_set(o, buf, NULL); + elm_flip_content_front_set(fl_f, o); + evas_object_show(o); + + o = elm_bg_add(win); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), "sky_02.jpg"); + elm_bg_file_set(o, buf, NULL); + elm_flip_content_back_set(fl_f, o); + evas_object_show(o); + + fr = elm_frame_add(win); + elm_object_text_set(fr, "Back"); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_flip_content_back_set(fl, fr); + evas_object_show(fr); + + fl_b = elm_flip_add(win); + evas_object_size_hint_align_set(fl_b, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fl_b, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(fr, fl_b); + evas_object_show(fl_b); + + o = elm_bg_add(win); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), "sky_03.jpg"); + elm_bg_file_set(o, buf, NULL); + elm_flip_content_front_set(fl_b, o); + evas_object_show(o); + + o = elm_bg_add(win); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), "sky_04.jpg"); + elm_bg_file_set(o, buf, NULL); + elm_flip_content_back_set(fl_b, o); + evas_object_show(o); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Main Flip"); + evas_object_smart_callback_add(bt, "clicked", my_fl_6, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Front Flip"); + evas_object_smart_callback_add(bt, "clicked", my_fl_6, fl_f); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Back Flip"); + evas_object_smart_callback_add(bt, "clicked", my_fl_6, fl_b); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END + +static void +my_fl_go(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *fl = evas_object_data_get(win, "fl"); + elm_flip_go(fl, ELM_FLIP_PAGE_LEFT); +} + +static void +my_fl_ch(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *fl = evas_object_data_get(win, "fl"); + Evas_Object *rdg = evas_object_data_get(win, "rdg"); + elm_flip_interaction_set(fl, elm_radio_value_get(rdg)); +} + +TEST_START(test_flip4) +{ + Evas_Object *bg, *bx, *fl, *im, *li, *bt, *rd, *rdg; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fl = elm_flip_add(win); + evas_object_size_hint_align_set(fl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, fl); + evas_object_data_set(win, "fl", fl); + + elm_flip_interaction_set(fl, ELM_FLIP_INTERACTION_NONE); + elm_flip_interacton_direction_enabled_set(fl, ELM_FLIP_DIRECTION_UP, EINA_TRUE); + elm_flip_interacton_direction_enabled_set(fl, ELM_FLIP_DIRECTION_DOWN, EINA_TRUE); + elm_flip_interacton_direction_enabled_set(fl, ELM_FLIP_DIRECTION_LEFT, EINA_TRUE); + elm_flip_interacton_direction_enabled_set(fl, ELM_FLIP_DIRECTION_RIGHT, EINA_TRUE); + elm_flip_interacton_direction_hitsize_set(fl, ELM_FLIP_DIRECTION_UP, 0.25); + elm_flip_interacton_direction_hitsize_set(fl, ELM_FLIP_DIRECTION_DOWN, 0.25); + elm_flip_interacton_direction_hitsize_set(fl, ELM_FLIP_DIRECTION_LEFT, 0.25); + elm_flip_interacton_direction_hitsize_set(fl, ELM_FLIP_DIRECTION_RIGHT, 0.25); + evas_object_show(fl); + + im = evas_object_image_filled_add(evas_object_evas_get(win)); + evas_object_size_hint_weight_set(im, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + snprintf(buf, sizeof(buf), "%s/images/%s", + elm_app_data_dir_get(), "twofish.jpg"); + evas_object_image_file_set(im, buf, NULL); + elm_flip_content_front_set(fl, im); + evas_object_show(im); + +#if 0 + im = evas_object_image_filled_add(evas_object_evas_get(win)); + evas_object_size_hint_weight_set(im, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + snprintf(buf, sizeof(buf), "%s/images/%s", + elm_app_data_dir_get(), "sky_04.jpg"); + evas_object_image_file_set(im, buf, NULL); + elm_flip_content_back_set(fl, im); + evas_object_show(im); +#else + li = elm_list_add(win); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_list_item_append(li, "Item 0", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Item 1", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Item 2", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Item 3 (Which is very long just for testing purposes)", NULL, NULL, NULL, NULL); + elm_list_go(li); + elm_flip_content_back_set(fl, li); + evas_object_show(li); +#endif + + rd = elm_radio_add(win); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + elm_radio_state_value_set(rd, ELM_FLIP_INTERACTION_NONE); + elm_object_text_set(rd, "None"); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_smart_callback_add(rd, "changed", my_fl_ch, win); + rdg = rd; + evas_object_data_set(win, "rdg", rdg); + + rd = elm_radio_add(win); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + elm_radio_state_value_set(rd, ELM_FLIP_INTERACTION_ROTATE); + elm_object_text_set(rd, "Rotate"); + elm_radio_group_add(rd, rdg); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_smart_callback_add(rd, "changed", my_fl_ch, win); + + rd = elm_radio_add(win); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + elm_radio_state_value_set(rd, ELM_FLIP_INTERACTION_CUBE); + elm_object_text_set(rd, "Cube"); + elm_radio_group_add(rd, rdg); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_smart_callback_add(rd, "changed", my_fl_ch, win); + + rd = elm_radio_add(win); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + elm_radio_state_value_set(rd, ELM_FLIP_INTERACTION_PAGE); + elm_object_text_set(rd, "Page"); + elm_radio_group_add(rd, rdg); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_smart_callback_add(rd, "changed", my_fl_ch, win); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Go"); + evas_object_smart_callback_add(bt, "clicked", my_fl_go, win); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_flip_page.c b/src/bin/test_flip_page.c new file mode 100644 index 0000000..60034bf --- /dev/null +++ b/src/bin/test_flip_page.c @@ -0,0 +1,914 @@ +#include +#include "tsuite.h" + +typedef struct _State State; +typedef struct _Slice Slice; + +typedef struct _Vertex2 Vertex2; +typedef struct _Vertex3 Vertex3; + +struct _State +{ + Evas_Object *front, *back; + Evas_Coord down_x, down_y, x, y; + Eina_Bool down : 1; + Eina_Bool backflip : 1; + + Ecore_Animator *anim; + Ecore_Job *job; + Evas_Coord ox, oy, w, h; + int slices_w, slices_h; + Slice **slices, **slices2; + int dir; // 0 == left, 1 == right, 2 == up, 3 == down + int finish; +}; + +struct _Slice +{ + Evas_Object *obj; + // (0)---(1) + // | | + // | | + // (3)---(2) + double u[4], v[4], x[4], y[4], z[4]; +}; + +struct _Vertex2 +{ + double x, y; +}; + +struct _Vertex3 +{ + double x, y, z; +}; + +static State state = +{ + NULL, NULL, + 0, 0, 0, 0, + 0, + 0, + + NULL, + NULL, + 0, 0, 0, 0, + 0, 0, + NULL, NULL, + -1, + 0 +}; + +static Slice * +_slice_new(State *st __UNUSED__, Evas_Object *obj) +{ + Slice *sl; + + sl = calloc(1, sizeof(Slice)); + if (!sl) return NULL; + sl->obj = evas_object_image_add(evas_object_evas_get(obj)); + evas_object_image_smooth_scale_set(sl->obj, 0); + evas_object_pass_events_set(sl->obj, 1); + evas_object_image_source_set(sl->obj, obj); + return sl; +} + +static void +_slice_free(Slice *sl) +{ + evas_object_del(sl->obj); + free(sl); +} + +static void +_slice_apply(State *st, Slice *sl, + Evas_Coord x __UNUSED__, Evas_Coord y __UNUSED__, Evas_Coord w, Evas_Coord h __UNUSED__, + Evas_Coord ox, Evas_Coord oy, Evas_Coord ow, Evas_Coord oh) +{ + Evas_Map *m; + int i; + + m = evas_map_new(4); + if (!m) return; + evas_map_smooth_set(m, 0); + for (i = 0; i < 4; i++) + { + evas_map_point_color_set(m, i, 255, 255, 255, 255); + if (st->dir == 0) + { + int p[4] = { 0, 1, 2, 3 }; + evas_map_point_coord_set(m, i, ox + sl->x[p[i]], oy + sl->y[p[i]], sl->z[p[i]]); + evas_map_point_image_uv_set(m, i, sl->u[p[i]] , sl->v[p[i]]); + } + else if (st->dir == 1) + { + int p[4] = { 1, 0, 3, 2 }; + evas_map_point_coord_set(m, i, ox + (w - sl->x[p[i]]), oy + sl->y[p[i]], sl->z[p[i]]); + evas_map_point_image_uv_set(m, i, ow - sl->u[p[i]] , sl->v[p[i]]); + } + else if (st->dir == 2) + { + int p[4] = { 1, 0, 3, 2 }; + evas_map_point_coord_set(m, i, ox + sl->y[p[i]], oy + sl->x[p[i]], sl->z[p[i]]); + evas_map_point_image_uv_set(m, i, sl->v[p[i]] , sl->u[p[i]]); + } + else if (st->dir == 3) + { + int p[4] = { 0, 1, 2, 3 }; + evas_map_point_coord_set(m, i, ox + sl->y[p[i]], oy + (w - sl->x[p[i]]), sl->z[p[i]]); + evas_map_point_image_uv_set(m, i, sl->v[p[i]] , oh - sl->u[p[i]]); + } + } + evas_object_map_enable_set(sl->obj, EINA_TRUE); + evas_object_image_fill_set(sl->obj, 0, 0, ow, oh); + evas_object_map_set(sl->obj, m); + evas_map_free(m); +} + +static void +_slice_3d(State *st __UNUSED__, Slice *sl, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) +{ + Evas_Map *m = (Evas_Map *)evas_object_map_get(sl->obj); + int i; + + if (!m) return; + // vanishing point is center of page, and focal dist is 1024 + evas_map_util_3d_perspective(m, x + (w / 2), y + (h / 2), 0, 1024); + for (i = 0; i < 4; i++) + { + Evas_Coord x, y, z; + evas_map_point_coord_get(m, i, &x, &y, &z); + evas_map_point_coord_set(m, i, x, y, 0); + } + if (evas_map_util_clockwise_get(m)) evas_object_show(sl->obj); + else evas_object_hide(sl->obj); + evas_object_map_set(sl->obj, m); +} + +static void +_slice_light(State *st __UNUSED__, Slice *sl, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) +{ + Evas_Map *m = (Evas_Map *)evas_object_map_get(sl->obj); + int i; + + if (!m) return; + evas_map_util_3d_lighting(m, + // light position + // (centered over page 10 * h toward camera) + x + (w / 2) , y + (h / 2) , -10000, + 255, 255, 255, // light color + 0 , 0 , 0); // ambient minimum + // multiply brightness by 1.2 to make lightish bits all white so we dont + // add shading where we could otherwise be pure white + for (i = 0; i < 4; i++) + { + int r, g, b, a; + + evas_map_point_color_get(m, i, &r, &g, &b, &a); + r = (double)r * 1.2; if (r > 255) r = 255; + g = (double)g * 1.2; if (g > 255) g = 255; + b = (double)b * 1.2; if (b > 255) b = 255; + evas_map_point_color_set(m, i, r, g, b, a); + } + evas_object_map_set(sl->obj, m); +} + +static void +_slice_xyz(State *st __UNUSED__, Slice *sl, + double x1, double y1, double z1, + double x2, double y2, double z2, + double x3, double y3, double z3, + double x4, double y4, double z4) +{ + sl->x[0] = x1; sl->y[0] = y1; sl->z[0] = z1; + sl->x[1] = x2; sl->y[1] = y2; sl->z[1] = z2; + sl->x[2] = x3; sl->y[2] = y3; sl->z[2] = z3; + sl->x[3] = x4; sl->y[3] = y4; sl->z[3] = z4; +} + +static void +_slice_uv(State *st __UNUSED__, Slice *sl, + double u1, double v1, + double u2, double v2, + double u3, double v3, + double u4, double v4) +{ + sl->u[0] = u1; sl->v[0] = v1; + sl->u[1] = u2; sl->v[1] = v2; + sl->u[2] = u3; sl->v[2] = v3; + sl->u[3] = u4; sl->v[3] = v4; +} + +static void +_deform_point(Vertex2 *vi, Vertex3 *vo, double rho, double theta, double A) +{ + // ^Y + // | + // | X + // +----> + // theta == cone angle (0 -> PI/2) + // A == distance of cone apex from origin + // rho == angle of cone from vertical axis (...-PI/2 to PI/2...) + Vertex3 v1; + double d, r, b; + + d = sqrt((vi->x * vi->x) + pow(vi->y - A, 2)); + r = d * sin(theta); + b = asin(vi->x / d) / sin(theta); + + v1.x = r * sin(b); + v1.y = d + A - (r * (1 - cos(b)) * sin(theta)); + v1.z = r * (1 - cos(b)) * cos(theta); + + vo->x = (v1.x * cos(rho)) - (v1.z * sin(rho)); + vo->y = v1.y; + vo->z = (v1.x * sin(rho)) + (v1.z * cos(rho)); +} + +static void +_interp_point(Vertex3 *vi1, Vertex3 *vi2, Vertex3 *vo, double v) +{ + vo->x = (v * vi2->x) + ((1.0 - v) * vi1->x); + vo->y = (v * vi2->y) + ((1.0 - v) * vi1->y); + vo->z = (v * vi2->z) + ((1.0 - v) * vi1->z); +} + +static void +_state_slices_clear(State *st) +{ + int i, j, num; + + if (st->slices) + { + num = 0; + for (j = 0; j < st->slices_h; j++) + { + for (i = 0; i < st->slices_w; i++) + { + if (st->slices[num]) _slice_free(st->slices[num]); + if (st->slices2[num]) _slice_free(st->slices2[num]); + num++; + } + } + free(st->slices); + free(st->slices2); + st->slices = NULL; + st->slices2 = NULL; + } + st->slices_w = 0; + st->slices_h = 0; +} + +static int +_slice_obj_color_sum(Slice *s, int p, int *r, int *g, int *b, int *a) +{ + Evas_Map *m; + int rr = 0, gg = 0, bb = 0, aa = 0; + + if (!s) return 0; + m = (Evas_Map *)evas_object_map_get(s->obj); + if (!m) return 0; + evas_map_point_color_get(m, p, &rr, &gg, &bb, &aa); + *r += rr; *g += gg; *b += bb; *a += aa; + return 1; +} + +static void +_slice_obj_color_set(Slice *s, int p, int r, int g, int b, int a) +{ + Evas_Map *m; + + if (!s) return; + m = (Evas_Map *)evas_object_map_get(s->obj); + if (!m) return; + evas_map_point_color_set(m, p, r, g, b, a); + evas_object_map_set(s->obj, m); +} + +static void +_slice_obj_vert_color_merge(Slice *s1, int p1, Slice *s2, int p2, + Slice *s3, int p3, Slice *s4, int p4) +{ + int r = 0, g = 0, b = 0, a = 0, n = 0; + + n += _slice_obj_color_sum(s1, p1, &r, &g, &b, &a); + n += _slice_obj_color_sum(s2, p2, &r, &g, &b, &a); + n += _slice_obj_color_sum(s3, p3, &r, &g, &b, &a); + n += _slice_obj_color_sum(s4, p4, &r, &g, &b, &a); + + if (n < 1) return; + r /= n; g /= n; b /= n; a /= n; + + _slice_obj_color_set(s1, p1, r, g, b, a); + _slice_obj_color_set(s2, p2, r, g, b, a); + _slice_obj_color_set(s3, p3, r, g, b, a); + _slice_obj_color_set(s4, p4, r, g, b, a); +} + +static int +_state_update(State *st) +{ + Evas_Coord x1, y1, x2, y2, mx, my, dst, dx, dy; + Evas_Coord x, y, w, h, ox, oy, ow, oh; + int i, j, num, nn, jump, num2; + Slice *sl; + double b, minv = 0.0, minva, mgrad; + int gx, gy, gszw, gszh, gw, gh, col, row, nw, nh; + double rho, A, theta, perc, percm, n, rhol, Al, thetal; + Vertex3 *tvo, *tvol; + + st->backflip = 0; + + evas_object_geometry_get(st->front, &x, &y, &w, &h); + ox = x; oy = y; ow = w; oh = h; + x1 = st->down_x; + y1 = st->down_y; + x2 = st->x; + y2 = st->y; + + dx = x2 - x1; + dy = y2 - y1; + dst = sqrt((dx * dx) + (dy * dy)); + if (st->dir == -1) + { + if (dst < 20) // MAGIC: 20 == drag hysterisis + return 0; + } + if (st->dir == -1) + { + if ((x1 > (w / 2)) && (dx < 0) && (abs(dx) > abs(dy))) st->dir = 0; // left + else if ((x1 < (w / 2)) && (dx >= 0) && (abs(dx) > abs(dy))) st->dir = 1; // right + else if ((y1 > (h / 2)) && (dy < 0) && (abs(dy) >= abs(dx))) st->dir = 2; // up + else if ((y1 < (h / 2)) && (dy >= 0) && (abs(dy) >= abs(dx))) st->dir = 3; // down + if (st->dir == -1) return 0; + } + if (st->dir == 0) + { + // no nothing. left drag is standard + } + else if (st->dir == 1) + { + x1 = (w - 1) - x1; + x2 = (w - 1) - x2; + } + else if (st->dir == 2) + { + Evas_Coord tmp; + + tmp = x1; x1 = y1; y1 = tmp; + tmp = x2; x2 = y2; y2 = tmp; + tmp = w; w = h; h = tmp; + } + else if (st->dir == 3) + { + Evas_Coord tmp; + + tmp = x1; x1 = y1; y1 = tmp; + tmp = x2; x2 = y2; y2 = tmp; + tmp = w; w = h; h = tmp; + x1 = (w - 1) - x1; + x2 = (w - 1) - x2; + } + + if (x2 >= x1) x2 = x1 - 1; + mx = (x1 + x2) / 2; + my = (y1 + y2) / 2; + + if (mx < 0) mx = 0; + else if (mx >= w) mx = w - 1; + if (my < 0) my = 0; + else if (my >= h) my = h - 1; + + mgrad = (double)(y1 - y2) / (double)(x1 - x2); + + if (mx < 1) mx = 1; // quick hack to keep curl line visible + + if (mgrad == 0.0) // special horizontal case + mgrad = 0.001; // quick dirty hack for now + // else + { + minv = 1.0 / mgrad; + // y = (m * x) + b + b = my + (minv * mx); + } + if ((b >= -5) && (b <= (h + 5))) + { + if (minv > 0.0) // clamp to h + { + minv = (double)(h + 5 - my) / (double)(mx); + b = my + (minv * mx); + } + else // clamp to 0 + { + minv = (double)(-5 - my) / (double)(mx); + b = my + (minv * mx); + } + } + + perc = (double)x2 / (double)x1; + percm = (double)mx / (double)x1; + if (perc < 0.0) perc = 0.0; + else if (perc > 1.0) perc = 1.0; + if (percm < 0.0) percm = 0.0; + else if (percm > 1.0) percm = 1.0; + + minva = atan(minv) / (M_PI / 2); + if (minva < 0.0) minva = -minva; + + // A = apex of cone + if (b <= 0) A = b; + else A = h - b; + if (A < -(h * 20)) A = -h * 20; + //--// + Al = -5; + + // rho = is how much the page is turned + n = 1.0 - perc; + n = 1.0 - cos(n * M_PI / 2.0); + n = n * n; + rho = -(n * M_PI); + //--// + rhol = -(n * M_PI); + + // theta == curliness (how much page culrs in on itself + n = sin((1.0 - perc) * M_PI); + n = n * 1.2; + theta = 7.86 + n; + //--// + n = sin((1.0 - perc) * M_PI); + n = 1.0 - n; + n = n * n; + n = 1.0 - n; + thetal = 7.86 + n; + + nw = 16; + nh = 16; + if (nw < 1) nw = 1; + if (nh < 1) nh = 1; + gszw = w / nw; + gszh = h / nh; + if (gszw < 4) gszw = 4; + if (gszh < 4) gszh = 4; + + nw = (w + gszw - 1) / gszw; + nh = (h + gszh - 1) / gszh; + if ((st->slices_w != nw) || (st->slices_h != nh)) _state_slices_clear(st); + st->slices_w = nw; + st->slices_h = nh; + if (!st->slices) + { + st->slices = calloc(st->slices_w * st->slices_h, sizeof(Slice *)); + if (!st->slices) return 0; + st->slices2 = calloc(st->slices_w * st->slices_h, sizeof(Slice *)); + if (!st->slices2) + { + free(st->slices); + st->slices = NULL; + return 0; + } + } + + num = (st->slices_w + 1) * (st->slices_h + 1); + + tvo = alloca(sizeof(Vertex3) * num); + tvol = alloca(sizeof(Vertex3) * (st->slices_w + 1)); + + for (col = 0, gx = 0; gx <= (w + gszw - 1); gx += gszw, col++) + { + Vertex2 vil; + + vil.x = gx; + vil.y = h - gx; + _deform_point(&vil, &(tvol[col]), rhol, thetal, Al); + } + + n = minva * sin(perc * M_PI); + n = n * n; + + num = 0; + for (col = 0, gx = 0; gx <= (w + gszw - 1); gx += gszw, col++) + { + for (gy = 0; gy <= (h + gszh - 1); gy += gszh) + { + Vertex2 vi; + Vertex3 vo, tvo1; + + if (gx > w) vi.x = w; + else vi.x = gx; + if (gy > h) vi.y = h; + else vi.y = gy; + _deform_point(&vi, &vo, rho, theta, A); + tvo1 = tvol[col]; + if (gy > h) tvo1.y = h; + else tvo1.y = gy; + _interp_point(&vo, &tvo1, &(tvo[num]), n); + num++; + } + } + + jump = st->slices_h + 1; + for (col = 0, gx = 0; gx < w; gx += gszw, col++) + { + num = st->slices_h * col; + num2 = jump * col; + + gw = gszw; + if ((gx + gw) > w) gw = w - gx; + + for (row = 0, gy = 0; gy < h; gy += gszh, row++) + { + Vertex3 vo[4]; + + if (b > 0) nn = num + st->slices_h - row - 1; + else nn = num + row; + + gh = gszh; + if ((gy + gh) > h) gh = h - gy; + + vo[0] = tvo[num2 + row]; + vo[1] = tvo[num2 + row + jump]; + vo[2] = tvo[num2 + row + jump + 1]; + vo[3] = tvo[num2 + row + 1]; +#define SWP(a, b) do {typeof(a) vt; vt = (a); (a) = (b); (b) = vt;} while (0) + if (b > 0) + { + SWP(vo[0], vo[3]); + SWP(vo[1], vo[2]); + vo[0].y = h - vo[0].y; + vo[1].y = h - vo[1].y; + vo[2].y = h - vo[2].y; + vo[3].y = h - vo[3].y; + } + + // FRONT + sl = st->slices[nn]; + if (!sl) + { + sl = _slice_new(st, st->front); + st->slices[nn] = sl; + } + _slice_xyz(st, sl, + vo[0].x, vo[0].y, vo[0].z, + vo[1].x, vo[1].y, vo[1].z, + vo[2].x, vo[2].y, vo[2].z, + vo[3].x, vo[3].y, vo[3].z); + if (b <= 0) + _slice_uv(st, sl, + gx, gy, gx + gw, gy, + gx + gw, gy + gh, gx, gy + gh); + else + _slice_uv(st, sl, + gx, h - (gy + gh), gx + gw, h - (gy + gh), + gx + gw, h - gy, gx, h - gy); + + // BACK + sl = st->slices2[nn]; + if (!sl) + { + sl = _slice_new(st, st->back); + st->slices2[nn] = sl; + } + + _slice_xyz(st, sl, + vo[1].x, vo[1].y, vo[1].z, + vo[0].x, vo[0].y, vo[0].z, + vo[3].x, vo[3].y, vo[3].z, + vo[2].x, vo[2].y, vo[2].z); + if (st->backflip) + { + if (b <= 0) + _slice_uv(st, sl, + gx + gw, gy, gx, gy, + gx, gy + gh, gx + gw, gy + gh); + else + _slice_uv(st, sl, + gx + gw, h - (gy + gh), gx, h - (gy + gh), + gx, h - gy, gx + gw, h - gy); + } + else + { + if (b <= 0) + _slice_uv(st, sl, + w - (gx + gw), gy, w - (gx), gy, + w - (gx), gy + gh, w - (gx + gw), gy + gh); + else + _slice_uv(st, sl, + w - (gx + gw), h - (gy + gh), w - (gx), h - (gy + gh), + w - (gx), h - gy, w - (gx + gw), h - gy); + } + } + } + + num = 0; + for (j = 0; j < st->slices_h; j++) + { + for (i = 0; i < st->slices_w; i++) + { + _slice_apply(st, st->slices[num], x, y, w, h, ox, oy, ow, oh); + _slice_apply(st, st->slices2[num], x, y, w, h, ox, oy, ow, oh); + _slice_light(st, st->slices[num], ox, oy, ow, oh); + _slice_light(st, st->slices2[num], ox, oy, ow, oh); + num++; + } + } + + for (i = 0; i <= st->slices_w; i++) + { + num = i * st->slices_h; + for (j = 0; j <= st->slices_h; j++) + { + Slice *s[4]; + + s[0] = s[1] = s[2] = s[3] = NULL; + if ((i > 0) && (j > 0)) + s[0] = st->slices[num - 1 - st->slices_h]; + if ((i < st->slices_w) && (j > 0)) + s[1] = st->slices[num - 1]; + if ((i > 0) && (j < st->slices_h)) + s[2] = st->slices[num - st->slices_h]; + if ((i < st->slices_w) && (j < st->slices_h)) + s[3] = st->slices[num]; + if (st->dir == 0) + _slice_obj_vert_color_merge(s[0], 2, s[1], 3, + s[2], 1, s[3], 0); + else if (st->dir == 1) + _slice_obj_vert_color_merge(s[0], 3, s[1], 2, + s[2], 0, s[3], 1); + else if (st->dir == 2) + _slice_obj_vert_color_merge(s[0], 3, s[1], 2, + s[2], 0, s[3], 1); + else if (st->dir == 3) + _slice_obj_vert_color_merge(s[0], 2, s[1], 3, + s[2], 1, s[3], 0); + s[0] = s[1] = s[2] = s[3] = NULL; + if ((i > 0) && (j > 0)) + s[0] = st->slices2[num - 1 - st->slices_h]; + if ((i < st->slices_w) && (j > 0)) + s[1] = st->slices2[num - 1]; + if ((i > 0) && (j < st->slices_h)) + s[2] = st->slices2[num - st->slices_h]; + if ((i < st->slices_w) && (j < st->slices_h)) + s[3] = st->slices2[num]; + if (st->dir == 0) + _slice_obj_vert_color_merge(s[0], 3, s[1], 2, + s[2], 0, s[3], 1); + else if (st->dir == 1) + _slice_obj_vert_color_merge(s[0], 2, s[1], 3, + s[2], 1, s[3], 0); + else if (st->dir == 2) + _slice_obj_vert_color_merge(s[0], 2, s[1], 3, + s[2], 1, s[3], 0); + else if (st->dir == 3) + _slice_obj_vert_color_merge(s[0], 3, s[1], 2, + s[2], 0, s[3], 1); + num++; + } + } + + num = 0; + for (i = 0; i < st->slices_w; i++) + { + for (j = 0; j < st->slices_h; j++) + { + _slice_3d(st, st->slices[num], ox, oy, ow, oh); + _slice_3d(st, st->slices2[num], ox, oy, ow, oh); + num++; + } + } + + return 1; +} + +static void +_state_end(State *st) +{ + _state_slices_clear(st); +} + +static Eina_Bool +_state_anim(void *data, double pos) +{ + State *st = data; + double p; + + p = ecore_animator_pos_map(pos, ECORE_POS_MAP_ACCELERATE, 0.0, 0.0); + if (st->finish) + { + if (st->dir == 0) + st->x = st->ox * (1.0 - p); + else if (st->dir == 1) + st->x = st->ox + ((st->w - st->ox) * p); + else if (st->dir == 2) + st->y = st->oy * (1.0 - p); + else if (st->dir == 3) + st->y = st->oy + ((st->h - st->oy) * p); + } + else + { + if (st->dir == 0) + st->x = st->ox + ((st->w - st->ox) * p); + else if (st->dir == 1) + st->x = st->ox * (1.0 - p); + else if (st->dir == 2) + st->y = st->oy + ((st->h - st->oy) * p); + else if (st->dir == 3) + st->y = st->oy * (1.0 - p); + } + _state_update(st); + if (pos < 1.0) return EINA_TRUE; + evas_object_show(st->front); + evas_object_show(st->back); + _state_end(st); + st->anim = NULL; + return EINA_FALSE; +} + +static void +_update_curl_job(void *data) +{ + State *st = data; + st->job = NULL; + if (_state_update(st)) + { + evas_object_hide(st->front); + evas_object_hide(st->back); + } +} + +static void +im_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + State *st = &state; + Evas_Event_Mouse_Down *ev = event_info; + Evas_Coord x, y, w, h; + + if (ev->button != 1) return; + st->front = data; + st->back = evas_object_data_get(data, "im2"); + st->backflip = 1; + st->down = 1; + evas_object_geometry_get(st->front, &x, &y, &w, &h); + st->x = ev->canvas.x - x; + st->y = ev->canvas.y - y; + st->w = w; + st->h = h; + st->down_x = st->x; + st->down_y = st->y; + st->dir = -1; + if (_state_update(st)) + { + evas_object_hide(st->front); + evas_object_hide(st->back); + } +} + +static void +im_up_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + State *st = &state; + Evas_Event_Mouse_Up *ev = event_info; + Evas_Coord x, y, w, h; + double tm = 0.5; + + if (ev->button != 1) return; + st->down = 0; + evas_object_geometry_get(st->front, &x, &y, &w, &h); + st->x = ev->canvas.x - x; + st->y = ev->canvas.y - y; + st->w = w; + st->h = h; + st->ox = st->x; + st->oy = st->y; + if (st->job) + { + ecore_job_del(st->job); + st->job = NULL; + } + if (st->anim) ecore_animator_del(st->anim); + st->finish = 0; + if (st->dir == 0) + { + tm = (double)st->x / (double)st->w; + if (st->x < (st->w / 2)) st->finish = 1; + } + else if (st->dir == 1) + { + if (st->x > (st->w / 2)) st->finish = 1; + tm = 1.0 - ((double)st->x / (double)st->w); + } + else if (st->dir == 2) + { + if (st->y < (st->h / 2)) st->finish = 1; + tm = (double)st->y / (double)st->h; + } + else if (st->dir == 3) + { + if (st->y > (st->h / 2)) st->finish = 1; + tm = 1.0 - ((double)st->y / (double)st->h); + } + if (tm < 0.01) tm = 0.01; + else if (tm > 0.99) tm = 0.99; + if (!st->finish) tm = 1.0 - tm; + tm *= 0.5; + st->anim = ecore_animator_timeline_add(tm, _state_anim, st); + _state_anim(st, 0.0); +} + +static void +im_move_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + State *st = &state; + Evas_Event_Mouse_Move *ev = event_info; + Evas_Coord x, y, w, h; + + if (!st->down) return; + evas_object_geometry_get(st->front, &x, &y, &w, &h); + st->x = ev->cur.canvas.x - x; + st->y = ev->cur.canvas.y - y; + st->w = w; + st->h = h; + if (st->job) ecore_job_del(st->job); + st->job = ecore_job_add(_update_curl_job, st); +} + +TEST_START(test_flip_page) +{ + Evas_Object *bg, *im, *im2, *rc; + char buf[PATH_MAX]; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + im2 = evas_object_image_filled_add(evas_object_evas_get(win)); + snprintf(buf, sizeof(buf), "%s/images/%s", + elm_app_data_dir_get(), "sky_04.jpg"); + evas_object_image_file_set(im2, buf, NULL); + evas_object_move(im2, 40, 40); + evas_object_resize(im2, 400, 400); + evas_object_show(im2); + +#if 0 + im = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(im, buf, "layout"); +#else + im = evas_object_image_filled_add(evas_object_evas_get(win)); + snprintf(buf, sizeof(buf), "%s/images/%s", + elm_app_data_dir_get(), "twofish.jpg"); + evas_object_image_file_set(im, buf, NULL); +#endif + evas_object_move(im, 40, 40); + evas_object_resize(im, 400, 400); + evas_object_show(im); + + evas_object_data_set(im, "im2", im2); + + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rc, 0, 0, 0, 0); + evas_object_move(rc, 40, 340); + evas_object_resize(rc, 400, 100); + evas_object_show(rc); + + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_DOWN, im_down_cb, im); + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_UP, im_up_cb, im); + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_MOVE, im_move_cb, im); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rc, 0, 0, 0, 0); + evas_object_move(rc, 40, 40); + evas_object_resize(rc, 400, 100); + evas_object_show(rc); + + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_DOWN, im_down_cb, im); + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_UP, im_up_cb, im); + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_MOVE, im_move_cb, im); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rc, 0, 0, 0, 0); + evas_object_move(rc, 340, 40); + evas_object_resize(rc, 100, 400); + evas_object_show(rc); + + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_DOWN, im_down_cb, im); + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_UP, im_up_cb, im); + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_MOVE, im_move_cb, im); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rc, 0, 0, 0, 0); + evas_object_move(rc, 40, 40); + evas_object_resize(rc, 100, 400); + evas_object_show(rc); + + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_DOWN, im_down_cb, im); + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_UP, im_up_cb, im); + evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_MOVE, im_move_cb, im); + + evas_object_resize(win, 480, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_flipselector.c b/src/bin/test_flipselector.c new file mode 100644 index 0000000..bf97ec1 --- /dev/null +++ b/src/bin/test_flipselector.c @@ -0,0 +1,107 @@ +#include +#include "tsuite.h" + +void +_sel_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Flipselector_Item *it; + + it = event_info; + printf("label of selected item is: %s\n", elm_flipselector_item_label_get(it)); +} + +void +_unsel_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Elm_Flipselector_Item *it; + Evas_Object *fp = data; + it = elm_flipselector_selected_item_get(fp); + elm_flipselector_item_selected_set(it, EINA_FALSE); +} + +void +_third_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Elm_Flipselector_Item *it; + Evas_Object *fp = data; + it = elm_flipselector_first_item_get(fp); + it = elm_flipselector_item_next_get(it); + it = elm_flipselector_item_next_get(it); + elm_flipselector_item_selected_set(it, EINA_TRUE); +} + +void +_underflow_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("underflow!\n"); +} + +void +_overflow_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("overflow!\n"); +} + +TEST_START(test_flipselector) +{ + char buf[8]; + unsigned int i; + Evas_Object *bg, *bx, *fp, *bt; + static const char *lbl[] = { + "Elementary", + "Evas", + "Eina", + "Edje", + "Eet", + "Ecore", + "Efreet", + "Edbus" + }; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fp = elm_flipselector_add(win); + evas_object_size_hint_weight_set(fp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_smart_callback_add(fp, "selected", _sel_cb, NULL); + evas_object_smart_callback_add(fp, "underflowed", _overflow_cb, NULL); + evas_object_smart_callback_add(fp, "overflowed", _underflow_cb, NULL); + for (i = 0; i < sizeof(lbl)/sizeof(char *); i++) + elm_flipselector_item_append(fp, lbl[i], NULL, NULL); + elm_box_pack_end(bx, fp); + evas_object_show(fp); + + fp = elm_flipselector_add(win); + evas_object_smart_callback_add(fp, "underflowed", _overflow_cb, NULL); + evas_object_smart_callback_add(fp, "overflowed", _underflow_cb, NULL); + evas_object_size_hint_weight_set(fp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + for (i = 2099; i >= 1990; i--) + { + snprintf(buf, 8, "%d", i); + elm_flipselector_item_append(fp, buf, _sel_cb, NULL); + } + elm_box_pack_end(bx, fp); + evas_object_show(fp); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Select 2097"); + evas_object_smart_callback_add(bt, "clicked", _third_cb, fp); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Unselect year"); + evas_object_smart_callback_add(bt, "clicked", _unsel_cb, fp); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_floating.c b/src/bin/test_floating.c new file mode 100644 index 0000000..927a14e --- /dev/null +++ b/src/bin/test_floating.c @@ -0,0 +1,102 @@ +#include +#include "tsuite.h" + +typedef struct _Testitem +{ + Elm_Genlist_Item *item; + int mode; + int onoff; +} Testitem; + + +static Elm_Genlist_Item_Class itc1; +static char *glf_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + char buf[256]; + snprintf(buf, sizeof(buf), "Item # %i", (int)(long)data); + return strdup(buf); +} + +static Evas_Object *glf_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part __UNUSED__) +{ + char buf[PATH_MAX]; + Evas_Object *ic = elm_icon_add(obj); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + return ic; +} +static Eina_Bool glf_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + return EINA_FALSE; +} +static void glf_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__) +{ +} + +static void +gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n", data, obj, event_info); +} + +static Eina_Bool +anim(void *data) +{ + Evas_Object *gl = data; + Evas_Coord x, y; + + y = 0; + x = (sin(ecore_loop_time_get()) * 500); + evas_object_move(gl, x, y); + return ECORE_CALLBACK_RENEW; +} + +static void +_del(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Ecore_Animator *ani = data; + + ecore_animator_del(ani); +} + +TEST_START(test_floating) +{ + Evas_Object *bg, *gl; + int i; + Ecore_Animator *ani; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + gl = elm_genlist_add(win); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_move(gl, 800, 0); + evas_object_resize(gl, 480, 800); + evas_object_show(gl); + + itc1.item_style = "default"; + itc1.func.text_get = glf_text_get; + itc1.func.content_get = glf_content_get; + itc1.func.state_get = glf_state_get; + itc1.func.del = glf_del; + + for (i = 0; i < 20; i++) + { + elm_genlist_item_append(gl, &itc1, + (void *)(long)i/* item data */, + NULL/* parent */, + ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, + (void *)(long)(i * 10)/* func data */); + } + evas_object_resize(win, 480, 800); + evas_object_show(win); + + ani = ecore_animator_add(anim, gl); + evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _del, ani); +} +TEST_END diff --git a/src/bin/test_focus.c b/src/bin/test_focus.c new file mode 100644 index 0000000..0633d6b --- /dev/null +++ b/src/bin/test_focus.c @@ -0,0 +1,371 @@ +#include +#include "tsuite.h" + +static Eina_Bool +_event(void *data __UNUSED__, Evas_Object *obj __UNUSED__, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info) +{ + if (type == EVAS_CALLBACK_KEY_DOWN) + printf ("Key Down:"); + else if (type == EVAS_CALLBACK_KEY_UP) + printf ("Key Up:"); + else + return EINA_FALSE; + Evas_Event_Key_Down *ev = event_info; + printf("%s\n", ev->key); + + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + return EINA_TRUE; +} + +static void +_on_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *einfo __UNUSED__) +{ + //Evas_Event_Key_Down *event = einfo; + //printf("%s %p Key %s Parent %p\n", evas_object_type_get(obj), + // obj, event->keyname, evas_object_smart_parent_get(obj)); +} + +static void +_disable(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *bt = data; + elm_object_disabled_set(bt, EINA_TRUE); +} + +static void +_enable(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *bt = data; + elm_object_disabled_set(bt, EINA_FALSE); +} + +static inline void +my_show(Evas_Object *obj) +{ + evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN, + _on_key_down, NULL); + evas_object_show(obj); +} + +TEST_START(test_focus) +{ + unsigned int i, j; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + evas_object_resize(win, 800, 600); + elm_object_event_callback_add(win, _event, NULL); + my_show(win); + + { + Evas_Object *bg; + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + my_show(bg); + } + + Evas_Object *mainbx = elm_box_add(win); + elm_box_horizontal_set(mainbx, EINA_TRUE); + elm_win_resize_object_add(win, mainbx); + evas_object_size_hint_weight_set(mainbx, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + my_show(mainbx); + + { //First Col + Evas_Object *bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_box_pack_end(mainbx, bx); + my_show(bx); + + { + Evas_Object *lb = elm_label_add(win); + elm_object_text_set(lb, + "Use Tab, Shift+Tab, and
" + "Arrow Keys
" + ); + evas_object_size_hint_weight_set(lb, 0.0, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_box_pack_end(bx, lb); + my_show(lb); + } + + { + Evas_Object *tg = elm_check_add(win); + elm_object_style_set(tg, "toggle"); + elm_object_part_text_set(tg, "on", "Yes"); + elm_object_part_text_set(tg, "off", "No"); + elm_box_pack_end(bx, tg); + my_show(tg); + } + + { + Evas_Object *en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_entry_set(en, "This is a single line"); + elm_entry_single_line_set(en, 1); + elm_box_pack_end(bx, en); + my_show(en); + } + + { + Evas_Object *bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, 0.0, 0.0); + elm_box_pack_end(bx, bx2); + + for (i = 2; i; i--) + { + Evas_Object *bt; + bt = elm_button_add(win); + elm_object_text_set(bt, "Box"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + if (i%2) + elm_object_disabled_set(bt, EINA_TRUE); + elm_box_pack_end(bx2, bt); + my_show(bt); + } + + { + Evas_Object *sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_scroller_bounce_set(sc, 1, 1); + elm_scroller_content_min_limit(sc, 1, 1); + elm_box_pack_end(bx2, sc); + my_show(sc); + + { + Evas_Object *bt; + bt = elm_button_add(win); + elm_object_text_set(bt, "Scroller"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + elm_object_event_callback_add(bt, _event, NULL); + elm_object_content_set(sc, bt); + my_show(bt); + elm_object_event_callback_del(bt, _event, NULL); + } + } + + my_show(bx2); + } + + { + Evas_Object *bt; + bt = elm_button_add(win); + elm_object_text_set(bt, "Box"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + elm_box_pack_end(bx, bt); + my_show(bt); + } + + { + Evas_Object *bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, 0.0, 0.0); + elm_box_pack_end(bx, bx2); + my_show(bx2); + + for (i = 2; i; i--) + { + Evas_Object *bx3 = elm_box_add(win); + evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx3, 0.0, 0.0); + elm_box_pack_end(bx2, bx3); + my_show(bx3); + + for (j = 3; j; j--) + { + Evas_Object *bt; + bt = elm_button_add(win); + elm_object_text_set(bt, "Box"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + elm_box_pack_end(bx3, bt); + my_show(bt); + } + } + + { + Evas_Object *sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_scroller_bounce_set(sc, 0, 1); + elm_scroller_content_min_limit(sc, 1, 0); + elm_box_pack_end(bx2, sc); + my_show(sc); + + Evas_Object *bx3 = elm_box_add(win); + evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx3, 0.0, 0.0); + elm_object_content_set(sc, bx3); + my_show(bx3); + + for (i = 5; i; i--) + { + Evas_Object *bt; + bt = elm_button_add(win); + elm_object_text_set(bt, "BX Scroller"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + elm_box_pack_end(bx3, bt); + my_show(bt); + } + } + } + } + + {//Second Col + char buf[PATH_MAX]; + Evas_Object *ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "twolines"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_box_pack_end(mainbx, ly); + my_show(ly); + + { + Evas_Object *bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, 0.0, 0.0); + elm_object_part_content_set(ly, "element1", bx2); + my_show(bx2); + + for (i = 3; i; i--) + { + Evas_Object *bt; + bt = elm_button_add(win); + elm_object_text_set(bt, "Layout"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + elm_box_pack_end(bx2, bt); + my_show(bt); + elm_object_focus_custom_chain_prepend(bx2, bt, NULL); + } + } + + { + Evas_Object *bx2 = elm_box_add(win); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, 0.0, 0.0); + elm_object_part_content_set(ly, "element2", bx2); + my_show(bx2); + + { + Evas_Object *bt; + bt = elm_button_add(win); + elm_object_text_set(bt, "Disable"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_smart_callback_add(bt, "clicked", _disable, bt); + my_show(bt); + elm_object_focus_custom_chain_prepend(bx2, bt, NULL); + + Evas_Object *bt2; + bt2 = elm_button_add(win); + elm_object_text_set(bt2, "Enable"); + evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt2, 0.0, 0.0); + elm_box_pack_end(bx2, bt2); + evas_object_smart_callback_add(bt2, "clicked", _enable, bt); + my_show(bt2); + elm_object_focus_custom_chain_append(bx2, bt2, NULL); + } + + } + } + + {//Third Col + Evas_Object *bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_box_pack_end(mainbx, bx); + my_show(bx); + + { + Evas_Object *fr = elm_frame_add(win); + elm_object_text_set(fr, "Frame"); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + { + Evas_Object *tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(fr, tb); + my_show(tb); + for (j = 0; j < 1; j++) + for (i = 0; i < 2; i++) + { + Evas_Object *bt; + bt = elm_button_add(win); + elm_object_text_set(bt, "Table"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_table_pack(tb, bt, i, j, 1, 1); + my_show(bt); + } + } + } + + { + Evas_Object *fr = elm_bubble_add(win); + elm_object_text_set(fr, "Bubble"); + evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + { + Evas_Object *tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(fr, tb); + my_show(tb); + for (j = 0; j < 2; j++) + for (i = 0; i < 1; i++) + { + Evas_Object *bt; + bt = elm_button_add(win); + elm_object_text_set(bt, "Table"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_table_pack(tb, bt, i, j, 1, 1); + my_show(bt); + } + } + } + } +} +TEST_END diff --git a/src/bin/test_focus2.c b/src/bin/test_focus2.c new file mode 100644 index 0000000..d90a5e5 --- /dev/null +++ b/src/bin/test_focus2.c @@ -0,0 +1,148 @@ +#include +#include "tsuite.h" + +static void +_focus_in(void *data __UNUSED__, Evas *e __UNUSED__, void *event_info) +{ + const char *type = evas_object_type_get(event_info); + if ((type) && (!strcmp(type, "elm_widget"))) + type = elm_object_widget_type_get(event_info); + printf("Evas_Object focus in: %p %s\n", event_info, type); +} + +static void +_focus_out(void *data __UNUSED__, Evas *e __UNUSED__, void *event_info) +{ + const char *type = evas_object_type_get(event_info); + if ((type) && (!strcmp(type, "elm_widget"))) + type = elm_object_widget_type_get(event_info); + printf("Evas_Object focus out: %p %s\n", event_info, type); +} + +static void +_focus_obj(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *newfocus = data; + const char *type = evas_object_type_get(newfocus); + if ((type) && (!strcmp(type, "elm_widget"))) + type = elm_object_widget_type_get(newfocus); + printf("elm_object_focus_set(%p, EINA_TRUE) %s\n", newfocus, type); + elm_object_focus_set(newfocus, EINA_TRUE); +} + +static void +_focus_layout_part(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *ed = elm_layout_edje_get(data); + + Evas_Object *newfocus = (Evas_Object *)edje_object_part_object_get(ed, "sky"); + const char *type = evas_object_type_get(newfocus); + printf("evas_object_focus_set(%p, 1) %s\n", newfocus, type); + evas_object_focus_set(newfocus, EINA_TRUE);; +} + + +TEST_START(test_focus2) +{ + Evas_Object *bg, *bx, *ly, *bt, *en, *bt1; + char buf[PATH_MAX]; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + + evas_event_callback_add + (evas_object_evas_get(win), EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + _focus_in, NULL); + evas_event_callback_add + (evas_object_evas_get(win), EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT, + _focus_out, NULL); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + +#define PARENT bx /* this is broken, but should work */ +//#define PARENT win + + en = elm_entry_add(PARENT); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_entry_set(en, "Scrolled Entry that should get focus"); + elm_entry_single_line_set(en, 1); + evas_object_show(en); + elm_box_pack_end(bx, en); + + bt = elm_button_add(PARENT); + elm_object_text_set(bt, "Give focus to scrolled entry"); + evas_object_smart_callback_add(bt, "clicked", _focus_obj, en); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + ly = elm_layout_add(PARENT); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "layout"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, ly); + evas_object_show(ly); + + bt1 = bt = elm_button_add(ly); + elm_object_text_set(bt, "Button 1"); + elm_object_part_content_set(ly, "element1", bt); + + en = elm_entry_add(ly); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_entry_set(en, "Scrolled Entry that should get focus"); + elm_entry_single_line_set(en, 1); + elm_object_part_content_set(ly, "element2", en); + + bt = elm_button_add(ly); + elm_object_text_set(bt, "Button 2"); + elm_object_part_content_set(ly, "element3", bt); + + bt = elm_button_add(PARENT); + elm_object_text_set(bt, "Give focus to layout"); + evas_object_smart_callback_add(bt, "clicked", _focus_obj, ly); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(PARENT); + elm_object_text_set(bt, "Give focus to layout part"); + evas_object_smart_callback_add(bt, "clicked", _focus_layout_part, ly); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(PARENT); + elm_object_text_set(bt, "Give focus to layout 'Button 1'"); + evas_object_smart_callback_add(bt, "clicked", _focus_obj, bt1); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(PARENT); + elm_object_text_set(bt, "Give focus to layout 'Entry'"); + evas_object_smart_callback_add(bt, "clicked", _focus_obj, en); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_resize(win, 400, 400); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_focus3.c b/src/bin/test_focus3.c new file mode 100644 index 0000000..957c41d --- /dev/null +++ b/src/bin/test_focus3.c @@ -0,0 +1,107 @@ +/* Test for Focus Chain Linear*/ +#include +#include "tsuite.h" + +static Evas_Object *foc = NULL; + +static void +_foc(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + foc = obj; + printf("foc -> %p\n", foc); +} + +static void +_unfoc(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + foc = NULL; + printf("foc -> %p\n", foc); +} + +static void +_add(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *bx = data, *en; + + en = elm_entry_add(elm_object_top_widget_get(bx)); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_entry_set(en, "An entry"); + evas_object_smart_callback_add(en, "focused", _foc, NULL); + evas_object_smart_callback_add(en, "unfocused", _unfoc, NULL); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_single_line_set(en, 1); + elm_box_pack_start(bx, en); + evas_object_show(en); +} + +static void +_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + if (foc) evas_object_del(foc); +} + +static void +_hide(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + if (foc) evas_object_hide(foc); +} + +TEST_START(test_focus3) +{ + Evas_Object *bg, *bx, *bt, *en; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + evas_object_resize(win, 320, 480); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_entry_set(en, "An entry"); + evas_object_smart_callback_add(en, "focused", _foc, NULL); + evas_object_smart_callback_add(en, "unfocused", _unfoc, NULL); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_single_line_set(en, 1); + elm_box_pack_end(bx, en); + evas_object_show(en); + + bt = elm_button_add(win); + elm_object_focus_allow_set(bt, 0); + elm_object_text_set(bt, "Add"); + evas_object_smart_callback_add(bt, "clicked", _add, bx); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_focus_allow_set(bt, 0); + elm_object_text_set(bt, "Del"); + evas_object_smart_callback_add(bt, "clicked", _del, NULL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_focus_allow_set(bt, 0); + elm_object_text_set(bt, "Hide"); + evas_object_smart_callback_add(bt, "clicked", _hide, NULL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_gengrid.c b/src/bin/test_gengrid.c new file mode 100644 index 0000000..e61ed02 --- /dev/null +++ b/src/bin/test_gengrid.c @@ -0,0 +1,539 @@ +#include +#include "tsuite.h" + +typedef struct _Testitem +{ + Elm_Gengrid_Item *item; + const char *path; + int mode; + int onoff; +} Testitem; + +static const char *img[9] = +{ + "panel_01.jpg", + "plant_01.jpg", + "rock_01.jpg", + "rock_02.jpg", + "sky_01.jpg", + "sky_02.jpg", + "sky_03.jpg", + "sky_04.jpg", + "wood_01.jpg", +}; + +static Elm_Gengrid_Item_Class gic, ggic; + +static void +_horizontal_grid(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *grid = data; + elm_gengrid_horizontal_set(grid, elm_check_state_get(obj)); +} + +static void +grid_drag_up(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("Drag up: %p\n", event_info); +} + +static void +grid_drag_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("Drag right: %p\n", event_info); +} + +static void +grid_drag_down(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("Drag down: %p\n", event_info); +} + +static void +grid_drag_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("Drag left: %p\n", event_info); +} + +static void +grid_drag_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("Drag stop: %p\n", event_info); +} + +static void +grid_selected(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("Selected: %p\n", event_info); +} + +static void +grid_double_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("Double clicked: %p\n", event_info); +} + +static void +grid_longpress(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("longpress %p\n", event_info); +} + +static void +grid_moved(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("moved %p\n", event_info); +} + +static void +grid_item_check_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Testitem *ti = data; + ti->onoff = elm_check_state_get(obj); + printf("item %p onoff = %i\n", ti, ti->onoff); +} + +char * +grid_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + const Testitem *ti = data; + char buf[256]; + snprintf(buf, sizeof(buf), "Photo %s", ti->path); + return strdup(buf); +} + +Evas_Object * +grid_content_get(void *data, Evas_Object *obj, const char *part) +{ + const Testitem *ti = data; + if (!strcmp(part, "elm.swallow.icon")) + { + + Evas_Object *icon = elm_bg_add(obj); + elm_bg_file_set(icon, ti->path, NULL); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + evas_object_show(icon); + return icon; + } + else if (!strcmp(part, "elm.swallow.end")) + { + Evas_Object *ck; + ck = elm_check_add(obj); + evas_object_propagate_events_set(ck, 0); + elm_check_state_set(ck, ti->onoff); + evas_object_smart_callback_add(ck, "changed", grid_item_check_changed, data); + evas_object_show(ck); + return ck; + } + return NULL; +} + +Eina_Bool +grid_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + return EINA_FALSE; +} + +void +grid_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__) +{ +} + +static void +grid_sel(void *data, Evas_Object *obj, void *event_info) +{ + printf("sel item data [%p] on grid obj [%p], pointer [%p]\n", data, obj, event_info); +} + +enum _api_state +{ + GRID_ALIGN_SET, + GRID_BRING_IN, + GRID_NO_SELECT_MODE, + GRID_NO_BOUNCE, + GRID_PAGE_RELATIVE, + GRID_PAGE_SIZE, + GRID_TOOLTIP_SET_TEXT, + GRID_TOOLTIP_UNSET, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + Evas_Object *grid = api->data; + + /* use elm_box_children_get() to get list of children */ + switch(api->state) + { /* Put all api-changes under switch */ + case GRID_ALIGN_SET: /* 0 */ + elm_gengrid_align_set(grid, 0.2, 0.8); + break; + + case GRID_BRING_IN: /* 1 */ + elm_gengrid_item_bring_in(elm_gen_first_item_get(grid)); + break; + + case GRID_NO_SELECT_MODE: /* 2 */ + elm_gen_no_select_mode_set(grid, EINA_TRUE); + break; + + case GRID_NO_BOUNCE: /* 3 */ + elm_gen_bounce_set(grid, EINA_TRUE, EINA_FALSE); + break; + + case GRID_PAGE_RELATIVE: /* 4 */ + elm_gen_bounce_set(grid, EINA_TRUE, EINA_TRUE); + elm_gen_page_relative_set(grid, 0.5, 0.5); + break; + + case GRID_PAGE_SIZE: /* 5 */ + elm_gen_page_size_set(grid, 50, 25); + break; + + case GRID_TOOLTIP_SET_TEXT: /* 6 */ + { + Elm_Gengrid_Item *item = elm_gen_first_item_get(grid); + elm_gengrid_item_tooltip_text_set(item, "This is the first item"); + } + break; + + case GRID_TOOLTIP_UNSET: /* 7 */ + { + Elm_Gengrid_Item *item = elm_gen_first_item_get(grid); + elm_gengrid_item_tooltip_unset(item); + } + break; + + case API_STATE_LAST: + break; + + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_gengrid) +{ + Evas_Object *bg, *bxx, *grid; + static Testitem ti[144]; + int i, n; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + grid = elm_gengrid_add(win); + elm_gengrid_item_size_set(grid, 150, 150); + elm_gengrid_horizontal_set(grid, EINA_FALSE); + elm_gengrid_multi_select_set(grid, EINA_TRUE); + elm_gengrid_reorder_mode_set(grid, EINA_TRUE); + evas_object_smart_callback_add(grid, "selected", grid_selected, NULL); + evas_object_smart_callback_add(grid, "clicked,double", grid_double_clicked, NULL); + evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL); + evas_object_smart_callback_add(grid, "moved", grid_moved, NULL); + evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL); + evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL); + evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL); + evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL); + evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL); + evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL); + + api->data = grid; + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, grid); + + gic.item_style = "default"; + gic.func.text_get = grid_text_get; + gic.func.content_get = grid_content_get; + gic.func.state_get = grid_state_get; + gic.func.del = grid_del; + + n = 0; + for (i = 0; i < 12 * 12; i++) + { + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]); + n = (n + 1) % 9; + ti[i].mode = i; + ti[i].path = eina_stringshare_add(buf); + ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL); + if (!(i % 5)) + elm_gen_item_selected_set(ti[i].item, EINA_TRUE); + } + + evas_object_show(grid); + + evas_object_resize(win, 600, 600); + evas_object_show(win); +} +TEST_END + +static void +_before_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Testitem *ti; + Evas_Object *grid = data; + Elm_Gengrid_Item *sel; + char buf[PATH_MAX]; + + sel = elm_gengrid_selected_item_get(grid); + if (!sel) + return; + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]); + ti = malloc(sizeof(*ti)); + ti->mode = 0; + ti->path = eina_stringshare_add(buf); + ti->item = elm_gengrid_item_insert_before(grid, &gic, ti, sel, grid_sel, + NULL); +} + +static void +_after_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Testitem *ti; + Evas_Object *grid = data; + Elm_Gengrid_Item *sel; + char buf[PATH_MAX]; + + sel = elm_gengrid_selected_item_get(grid); + if (!sel) + return; + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]); + ti = malloc(sizeof(*ti)); + ti->mode = 0; + ti->path = eina_stringshare_add(buf); + ti->item = elm_gengrid_item_insert_after(grid, &gic, ti, sel, grid_sel, + NULL); +} + +static void +_delete_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *grid = data; + Eina_List *l, *l2, *l3; + Elm_Gengrid_Item *it; + + l = (Eina_List*)elm_gengrid_selected_items_get(grid); + if (!l) return; + EINA_LIST_FOREACH_SAFE(l, l2, l3, it) + elm_gengrid_item_del(it); +} + +static void +_prepend_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Testitem *ti; + Evas_Object *grid = data; + char buf[PATH_MAX]; + + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]); + ti = malloc(sizeof(*ti)); + ti->mode = 0; + ti->path = eina_stringshare_add(buf); + ti->item = elm_gengrid_item_prepend(grid, &gic, ti, grid_sel, NULL); +} + +static void +_append_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Testitem *ti; + Evas_Object *grid = data; + char buf[PATH_MAX]; + + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]); + ti = malloc(sizeof(*ti)); + ti->mode = 0; + ti->path = eina_stringshare_add(buf); + ti->item = elm_gengrid_item_append(grid, &gic, ti, grid_sel, NULL); +} + +static void +_size_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *grid = data; + int size = elm_spinner_value_get(obj); + elm_gengrid_item_size_set(grid, size, size); +} + +TEST_START(test_gengrid2) +{ + Evas_Object *bg, *grid, *bx, *hbx, *bt, *ck; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + grid = elm_gengrid_add(win); + elm_gengrid_item_size_set(grid, 150, 150); + elm_gengrid_horizontal_set(grid, EINA_FALSE); + elm_gengrid_multi_select_set(grid, EINA_FALSE); + evas_object_smart_callback_add(grid, "selected", grid_selected, NULL); + evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_min_set(grid, 600, 500); + elm_box_pack_end(bx, grid); + evas_object_show(grid); + + hbx = elm_box_add(win); + evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(hbx, EINA_TRUE); + elm_box_pack_end(bx, hbx); + evas_object_show(hbx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Append"); + evas_object_smart_callback_add(bt, "clicked", _append_bt_clicked, grid); + elm_box_pack_end(hbx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Prepend"); + evas_object_smart_callback_add(bt, "clicked", _prepend_bt_clicked, grid); + elm_box_pack_end(hbx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Insert before"); + evas_object_smart_callback_add(bt, "clicked", _before_bt_clicked, grid); + elm_box_pack_end(hbx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Insert after"); + evas_object_smart_callback_add(bt, "clicked", _after_bt_clicked, grid); + elm_box_pack_end(hbx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Delete"); + evas_object_smart_callback_add(bt, "clicked", _delete_bt_clicked, grid); + elm_box_pack_end(hbx, bt); + evas_object_show(bt); + + bt = elm_spinner_add(win); + elm_spinner_min_max_set(bt, 10, 1024); + elm_spinner_value_set(bt, 150); + elm_spinner_label_format_set(bt, "Item size: %.0f"); + evas_object_smart_callback_add(bt, "changed", _size_changed, grid); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(hbx, bt); + evas_object_show(bt); + + ck = elm_check_add(win); + elm_object_text_set(ck, "Horizontal Mode"); + evas_object_smart_callback_add(ck, "changed", _horizontal_grid, grid); + elm_box_pack_end(hbx, ck); + evas_object_show(ck); + + gic.item_style = "default"; + gic.func.text_get = grid_text_get; + gic.func.content_get = grid_content_get; + gic.func.state_get = grid_state_get; + gic.func.del = grid_del; + + evas_object_resize(win, 600, 600); + evas_object_show(win); +} +TEST_END + +TEST_START(test_gengrid3) +{ + Evas_Object *bg, *grid; + static Testitem ti[144]; + int i, n; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + grid = elm_gengrid_add(win); + elm_gengrid_item_size_set(grid, 150, 150); + elm_gengrid_group_item_size_set(grid, 31, 31); + //elm_gengrid_horizontal_set(grid, EINA_TRUE); + elm_gengrid_horizontal_set(grid, EINA_FALSE); + elm_gengrid_multi_select_set(grid, EINA_TRUE); + elm_gengrid_reorder_mode_set(grid, EINA_TRUE); + evas_object_smart_callback_add(grid, "selected", grid_selected, NULL); + evas_object_smart_callback_add(grid, "clicked,double", grid_double_clicked, NULL); + evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL); + evas_object_smart_callback_add(grid, "moved", grid_moved, NULL); + evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL); + evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL); + evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL); + evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL); + evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL); + evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + gic.item_style = "default"; + gic.func.text_get = grid_text_get; + gic.func.content_get = grid_content_get; + gic.func.state_get = grid_state_get; + gic.func.del = grid_del; + + ggic.item_style = "group_index"; + ggic.func.text_get = grid_text_get; + ggic.func.content_get = NULL; + ggic.func.state_get = NULL; + ggic.func.del = NULL; + + + n = 0; + for (i = 0; i < 12 * 12; i++) + { + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]); + n = (n + 1) % 9; + ti[i].mode = i; + ti[i].path = eina_stringshare_add(buf); + if (i == 0 || i == 18 || i == 53 || i == 100) + //if (i == 0 || i == 18) + ti[i].item = elm_gengrid_item_append(grid, &ggic, &(ti[i]), grid_sel, NULL); + else + ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL); + if (!(i % 5)) + elm_gen_item_selected_set(ti[i].item, EINA_TRUE); + } + + evas_object_show(grid); + elm_win_resize_object_add(win, grid); + + evas_object_resize(win, 600, 600); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_genlist.c b/src/bin/test_genlist.c new file mode 100644 index 0000000..f48f702 --- /dev/null +++ b/src/bin/test_genlist.c @@ -0,0 +1,1997 @@ +#include +#include +#include "tsuite.h" + +/* Hint: + * In this example some calls to elm_genlist_item_append() are used which give the + * value of an int as 'item data' and 'func data' after casting into (void*). For + * sure this works only on architectures where sizeof(int)==sizeof(void*). + * For real world usage you should hold a data structure or value in your + * application and then give only a pointer to this data as data pointer. + */ + +typedef struct _Testitem +{ + Elm_Genlist_Item *item; + int mode; + int onoff; +} Testitem; + + +static Elm_Genlist_Item_Class itc1; +char *gl_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + char buf[256]; + snprintf(buf, sizeof(buf), "Item # %i", (int)(long)data); + return strdup(buf); +} + +Evas_Object *gl_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part) +{ + char buf[PATH_MAX]; + Evas_Object *ic = elm_icon_add(obj); + if (!strcmp(part, "elm.swallow.end")) + snprintf(buf, sizeof(buf), "%s/images/bubble.png", elm_app_data_dir_get()); + else + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + return ic; +} +Eina_Bool gl_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + return EINA_FALSE; +} +void gl_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__) +{ +} + +static void +gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n", data, obj, event_info); +} + +static void +_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Evas_Object *gl = data; + Evas_Event_Mouse_Move *ev = event_info; + int where = 0; + Elm_Genlist_Item *gli; + gli = elm_genlist_at_xy_item_get(gl, ev->cur.canvas.x, ev->cur.canvas.y, &where); + if (gli) + printf("over %p, where %i\n", elm_genlist_item_data_get(gli), where); + else + printf("over none, where %i\n", where); +} + +static void +_bt50_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_genlist_item_bring_in(data); +} + +static void +_bt1500_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_genlist_item_middle_bring_in(data); +} + +static void +_gl_selected(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("selected: %p\n", event_info); +} + +static void +_gl_double_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("double clicked: %p\n", event_info); +} + +static void +_gl_longpress(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + printf("longpress %p\n", event_info); +} + +enum _api_state +{ + HORIZONTAL_SET, + NO_SELECT_MODE_SET, + COMPRESS_MODE_SET, + BOUNCE_SET, + HOMOGENEOUS_SET, + SCROLLER_POLICY_SET, + TOOLTIP_TEXT_SET, + ITEM_CURSOR_SET, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *items = elm_box_children_get(api->data); + if(!eina_list_count(items)) + return; + + Evas_Object *gl = eina_list_nth(items, 0); /* Genlist is the first item */ + /* use elm_box_children_get() to get list of children */ + switch(api->state) + {/* Put all api-changes under switch */ + case HORIZONTAL_SET: /* 0 */ + elm_genlist_horizontal_set(gl, ELM_LIST_LIMIT); + break; + + case NO_SELECT_MODE_SET: /* 1 */ + elm_gen_no_select_mode_set(gl, EINA_TRUE); + elm_genlist_horizontal_set(gl, ELM_LIST_SCROLL); /* Back to default */ + break; + + case COMPRESS_MODE_SET: /* 2 */ + elm_gen_no_select_mode_set(gl, EINA_FALSE); /* Back to default */ + elm_genlist_compress_mode_set(gl, EINA_TRUE); + break; + + case BOUNCE_SET: /* 3 */ + elm_gen_bounce_set(gl, EINA_FALSE, EINA_FALSE); + break; + + case HOMOGENEOUS_SET: /* 4 */ + elm_gen_bounce_set(gl, EINA_TRUE, EINA_TRUE); /* Back to default */ + elm_genlist_homogeneous_set(gl, EINA_TRUE); + break; + + case SCROLLER_POLICY_SET: /* 5 */ + elm_genlist_homogeneous_set(gl, EINA_FALSE); /* Back to default */ + elm_genlist_scroller_policy_set(gl, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); + break; + + case TOOLTIP_TEXT_SET: /* 6 */ + { + elm_genlist_item_tooltip_text_set(elm_gen_first_item_get(gl), "Tooltip text from API"); + elm_genlist_item_bring_in(elm_gen_first_item_get(gl)); + } + break; + + case ITEM_CURSOR_SET: /* 7 */ + elm_genlist_item_cursor_set(elm_gen_first_item_get(gl), ELM_CURSOR_HAND2); + break; + + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_genlist) +{ + Evas_Object *bg, *gl, *bt_50, *bt_1500, *bx, *bxx; + Evas_Object *over; + Elm_Genlist_Item *gli; + int i; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + api->data = bx; + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + gl = elm_genlist_add(win); + evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL); + evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL); + evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL); + // FIXME: This causes genlist to resize the horiz axis very slowly :( + // Reenable this and resize the window horizontally, then try to resize it back + //elm_genlist_horizontal_mode_set(gl, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, gl); + evas_object_show(gl); + + over = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(over, 0, 0, 0, 0); + evas_object_event_callback_add(over, EVAS_CALLBACK_MOUSE_MOVE, _move, gl); + evas_object_repeat_events_set(over, 1); + evas_object_show(over); + evas_object_size_hint_weight_set(over, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, over); + + itc1.item_style = "default"; + itc1.func.text_get = gl_text_get; + itc1.func.content_get = gl_content_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + bt_50 = elm_button_add(win); + elm_object_text_set(bt_50, "Go to 50"); + evas_object_show(bt_50); + elm_box_pack_end(bx, bt_50); + + bt_1500 = elm_button_add(win); + elm_object_text_set(bt_1500, "Go to 1500"); + evas_object_show(bt_1500); + elm_box_pack_end(bx, bt_1500); + + for (i = 0; i < 2000; i++) + { + gli = elm_genlist_item_append(gl, &itc1, + (void *)(long)i/* item data */, + NULL/* parent */, + ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, + (void *)(long)(i * 10)/* func data */); + if (i == 50) + evas_object_smart_callback_add(bt_50, "clicked", _bt50_cb, gli); + else if (i == 1500) + evas_object_smart_callback_add(bt_1500, "clicked", _bt1500_cb, gli); + } + evas_object_resize(win, 480, 800); + evas_object_show(win); +} +TEST_END + +/*************/ + +static void +my_gl_clear(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *gl = data; + elm_genlist_clear(gl); +} + +static void +my_gl_add(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *gl = data; + static int i = 0; + + itc1.item_style = "default"; + itc1.func.text_get = gl_text_get; + itc1.func.content_get = gl_content_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + elm_genlist_item_append(gl, &itc1, + (void *)(long)i/* item data */, + NULL/* parent */, + ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, + (void *)(long)(i * 10)/* func data */); + i++; +} + +static void +my_gl_insert_before(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *gl = data; + static int i = 0; + Elm_Genlist_Item *gli_selected; + + itc1.item_style = "default"; + itc1.func.text_get = gl_text_get; + itc1.func.content_get = gl_content_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + gli_selected = elm_genlist_selected_item_get(gl); + if(!gli_selected) + { + printf("no item selected\n"); + return ; + } + + elm_genlist_item_insert_before(gl, &itc1, + (void *)(long)i/* item data */, + NULL/* parent */, + gli_selected /* item before */, + ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, + (void *)(long)(i * 10)/* func data */); + i++; +} + +static void +my_gl_insert_after(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *gl = data; + static int i = 0; + Elm_Genlist_Item *gli_selected; + + itc1.item_style = "default"; + itc1.func.text_get = gl_text_get; + itc1.func.content_get = gl_content_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + gli_selected = elm_genlist_selected_item_get(gl); + if(!gli_selected) + { + printf("no item selected\n"); + return ; + } + + elm_genlist_item_insert_after(gl, &itc1, + (void *)(long)i/* item data */, + NULL/* parent */, + gli_selected /* item after */, + ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, + (void *)(long)(i * 10)/* func data */); + i++; +} + +static void +my_gl_del(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *gl = data; + Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl); + if (!gli) + { + printf("no item selected\n"); + return; + } + elm_genlist_item_del(gli); +} + +static void +my_gl_disable(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *gl = data; + Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl); + if (!gli) + { + printf("no item selected\n"); + return; + } + elm_genlist_item_disabled_set(gli, 1); + elm_genlist_item_selected_set(gli, 0); + elm_genlist_item_update(gli); +} + +static void +my_gl_update_all(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *gl = data; + int i = 0; + Elm_Genlist_Item *it = elm_genlist_first_item_get(gl); + while (it) + { + elm_genlist_item_update(it); + printf("%i\n", i); + i++; + it = elm_genlist_item_next_get(it); + } +} + +static void +my_gl_first(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *gl = data; + Elm_Genlist_Item *gli = elm_genlist_first_item_get(gl); + if (!gli) return; + elm_genlist_item_show(gli); + elm_genlist_item_selected_set(gli, 1); +} + +static void +my_gl_last(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *gl = data; + Elm_Genlist_Item *gli = elm_genlist_last_item_get(gl); + if (!gli) return; + elm_genlist_item_show(gli); + elm_genlist_item_selected_set(gli, 1); +} + +static Eina_Bool +my_gl_flush_delay(void *data __UNUSED__) +{ + elm_all_flush(); + return ECORE_CALLBACK_CANCEL; +} + +static void +my_gl_flush(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + ecore_timer_add(1.2, my_gl_flush_delay, NULL); +} + +TEST_START(test_genlist2) +{ + Evas_Object *bg, *gl, *bx, *bx2, *bx3, *bt; + Elm_Genlist_Item *gli[10]; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_bg_file_set(bg, buf, NULL); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(gl); + + itc1.item_style = "default"; + itc1.func.text_get = gl_text_get; + itc1.func.content_get = gl_content_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + gli[0] = elm_genlist_item_append(gl, &itc1, + (void *)1001/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1001/* func data */); + gli[1] = elm_genlist_item_append(gl, &itc1, + (void *)1002/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1002/* func data */); + gli[2] = elm_genlist_item_append(gl, &itc1, + (void *)1003/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1003/* func data */); + gli[3] = elm_genlist_item_prepend(gl, &itc1, + (void *)1004/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1004/* func data */); + gli[4] = elm_genlist_item_prepend(gl, &itc1, + (void *)1005/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + (void *)1005/* func data */); + gli[5] = elm_genlist_item_insert_before(gl, &itc1, + (void *)1006/* item data */, NULL/* parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, (void *)1006/* func data */); + gli[6] = elm_genlist_item_insert_after(gl, &itc1, + (void *)1007/* item data */, NULL/* parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, (void *)1007/* func data */); + + elm_box_pack_end(bx, gl); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "/\\"); + evas_object_smart_callback_add(bt, "clicked", my_gl_first, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "\\/"); + evas_object_smart_callback_add(bt, "clicked", my_gl_last, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "#"); + evas_object_smart_callback_add(bt, "clicked", my_gl_disable, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "U"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update_all, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "X"); + evas_object_smart_callback_add(bt, "clicked", my_gl_clear, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "+"); + evas_object_smart_callback_add(bt, "clicked", my_gl_add, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "-"); + evas_object_smart_callback_add(bt, "clicked", my_gl_del, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx3 = elm_box_add(win); + elm_box_horizontal_set(bx3, EINA_TRUE); + elm_box_homogeneous_set(bx3, EINA_TRUE); + evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "+ before"); + evas_object_smart_callback_add(bt, "clicked", my_gl_insert_before, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx3, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "+ after"); + evas_object_smart_callback_add(bt, "clicked", my_gl_insert_after, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx3, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Flush"); + evas_object_smart_callback_add(bt, "clicked", my_gl_flush, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx3, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx3); + evas_object_show(bx3); + + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + +/*************/ + +static Elm_Genlist_Item_Class itc2; +char *gl2_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + const Testitem *tit = data; + char buf[256]; + snprintf(buf, sizeof(buf), "Item mode %i", tit->mode); + return strdup(buf); +} +Evas_Object *gl2_content_get(void *data, Evas_Object *obj, const char *part) +{ + const Testitem *tit = data; + char buf[PATH_MAX]; + Evas_Object *ic = elm_icon_add(obj); + if (!strcmp(part, "elm.swallow.icon")) + { + if (!(tit->mode & 0x3)) + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + else if ((tit->mode & 0x3) == 1) + snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get()); + else if ((tit->mode & 0x3) == 2) + snprintf(buf, sizeof(buf), "%s/images/panel_01.jpg", elm_app_data_dir_get()); + else if ((tit->mode & 0x3) == 3) + snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + } + else if (!strcmp(part, "elm.swallow.end")) + { + if (!(tit->mode & 0x3)) + snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", elm_app_data_dir_get()); + else if ((tit->mode & 0x3) == 1) + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get()); + else if ((tit->mode & 0x3) == 2) + snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", elm_app_data_dir_get()); + else if ((tit->mode & 0x3) == 3) + snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + } + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + return ic; +} +Eina_Bool gl2_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + return EINA_FALSE; +} +void gl2_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__) +{ +} + +static void +my_gl_update(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Testitem *tit = data; + tit->mode++; + elm_genlist_item_update(tit->item); +} + +static void +my_gl_labels_update(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Testitem *tit = data; + tit->mode++; + elm_genlist_item_fields_update(tit->item, "*", ELM_GENLIST_ITEM_FIELD_LABEL); +} + +static void +my_gl_contents_update(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Testitem *tit = data; + tit->mode++; + elm_genlist_item_fields_update(tit->item, "*", ELM_GENLIST_ITEM_FIELD_CONTENT); +} + +TEST_START(test_genlist3) +{ + Evas_Object *bg, *gl, *bx, *bx2, *bt; + static Testitem tit[3]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(gl); + + itc2.item_style = "default"; + itc2.func.text_get = gl2_text_get; + itc2.func.content_get = gl2_content_get; + itc2.func.state_get = gl2_state_get; + itc2.func.del = gl2_del; + + tit[0].mode = 0; + tit[0].item = elm_genlist_item_append(gl, &itc2, + &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + tit[1].mode = 1; + tit[1].item = elm_genlist_item_append(gl, &itc2, + &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + tit[2].mode = 2; + tit[2].item = elm_genlist_item_append(gl, &itc2, + &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + + elm_box_pack_end(bx, gl); + evas_object_show(bx); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[1]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "labels"); + evas_object_smart_callback_add(bt, "clicked", my_gl_labels_update, &(tit[1])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "contents"); + evas_object_smart_callback_add(bt, "clicked", my_gl_contents_update, &(tit[2])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + +/*************/ + +static void +my_gl_item_check_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Testitem *tit = data; + tit->onoff = elm_check_state_get(obj); + printf("item %p onoff = %i\n", tit, tit->onoff); +} + +static Elm_Genlist_Item_Class itc3; +char *gl3_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + const Testitem *tit = data; + char buf[256]; + snprintf(buf, sizeof(buf), "Item mode %i", tit->mode); + return strdup(buf); +} +Evas_Object *gl3_content_get(void *data, Evas_Object *obj, const char *part) +{ + const Testitem *tit = data; + if (!strcmp(part, "elm.swallow.icon")) + { + Evas_Object *lb; + + lb = elm_label_add(obj); + elm_label_line_wrap_set(lb, ELM_WRAP_CHAR); + elm_label_wrap_width_set(lb, 201); + elm_object_text_set(lb, "ashj ascjscjh n asjkl hcjlh ls hzshnn zjh sh zxjcjsnd h dfw sdv edev efe fwefvv vsd cvs ws wf fvwf wd fwe f we wef we wfe rfwewef wfv wswf wefg sdfws w wsdcfwcf wsc vdv sdsd sdcd cv wsc sdcv wsc d sdcdcsd sdcdsc wdvd sdcsd wscxcv wssvd sd"); + return lb; + } + else if (!strcmp(part, "elm.swallow.end")) + { + Evas_Object *ck; + ck = elm_check_add(obj); + evas_object_propagate_events_set(ck, EINA_FALSE); + elm_check_state_set(ck, tit->onoff); + evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed, data); + return ck; + } + return NULL; +} +Eina_Bool gl3_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + return EINA_FALSE; +} +void gl3_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__) +{ +} + +TEST_START(test_genlist4) +{ + Evas_Object *bg, *gl, *bx, *bx2, *bt; + static Testitem tit[3]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + elm_genlist_height_for_width_mode_set(gl, EINA_TRUE); + elm_genlist_multi_select_set(gl, 1); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(gl); + + itc3.item_style = "default"; + itc3.func.text_get = gl3_text_get; + itc3.func.content_get = gl3_content_get; + itc3.func.state_get = gl3_state_get; + itc3.func.del = gl3_del; + + tit[0].mode = 0; + tit[0].item = elm_genlist_item_append(gl, &itc3, + &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + tit[1].mode = 1; + tit[1].item = elm_genlist_item_append(gl, &itc3, + &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + tit[2].mode = 2; + tit[2].item = elm_genlist_item_append(gl, &itc3, + &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + + elm_box_pack_end(bx, gl); + evas_object_show(bx); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[1]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[2]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[3]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + + +/*************/ +static void +my_gl_item_check_changed2(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Testitem *tit = data; + tit->onoff = elm_check_state_get(obj); + printf("item %p onoff = %i\n", tit, tit->onoff); +} + +static Elm_Genlist_Item_Class itc5; +char *gl5_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part) +{ + const Testitem *tit = data; + char buf[256]; + if (!strcmp(part, "elm.text")) + { + snprintf(buf, sizeof(buf), "Item mode %i", tit->mode); + } + else if (!strcmp(part, "elm.text.sub")) + { + snprintf(buf, sizeof(buf), "%i bottles on the wall", tit->mode); + } + return strdup(buf); +} +Evas_Object *gl5_content_get(void *data, Evas_Object *obj, const char *part) +{ + const Testitem *tit = data; + char buf[PATH_MAX]; + if (!strcmp(part, "elm.swallow.icon")) + { + Evas_Object *bx = elm_box_add(obj); + Evas_Object *ic; + elm_box_horizontal_set(bx, EINA_TRUE); + ic = elm_icon_add(obj); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_show(ic); + elm_box_pack_end(bx, ic); + ic = elm_icon_add(obj); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_show(ic); + elm_box_pack_end(bx, ic); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + return bx; + } + else if (!strcmp(part, "elm.swallow.end")) + { + Evas_Object *ck; + ck = elm_check_add(obj); + evas_object_propagate_events_set(ck, EINA_FALSE); + elm_check_state_set(ck, tit->onoff); + evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed2, data); + evas_object_show(ck); + return ck; + } + return NULL; +} +Eina_Bool gl5_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + return EINA_FALSE; +} +void gl5_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__) +{ +} + +static void +item_drag_up(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("drag up\n"); +} + +static void +item_drag_down(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("drag down\n"); +} + +static void +item_drag_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("drag left\n"); +} + +static void +item_drag_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("drag right\n"); +} + +static void +scroll_top(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("Top edge!\n"); +} + +static void +scroll_bottom(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("Bottom edge!\n"); +} + +static void +scroll_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("Left edge!\n"); +} + +static void +scroll_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("Right edge!\n"); +} + +static void +item_drag(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("drag\n"); +} + +static void +item_drag_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("drag stop\n"); +} + +static void +item_longpress(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("longpress\n"); +} + +TEST_START(test_genlist5) +{ + Evas_Object *bg, *gl, *bx, *bx2, *bt; + static Testitem tit[3]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + elm_genlist_always_select_mode_set(gl, 1); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(gl); + itc5.item_style = "double_label"; + itc5.func.text_get = gl5_text_get; + itc5.func.content_get = gl5_content_get; + itc5.func.state_get = gl5_state_get; + itc5.func.del = gl5_del; + + tit[0].mode = 0; + tit[0].item = elm_genlist_item_append(gl, &itc5, + &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + tit[1].mode = 1; + tit[1].item = elm_genlist_item_append(gl, &itc5, + &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + tit[2].mode = 2; + tit[2].item = elm_genlist_item_append(gl, &itc5, + &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */, + NULL/* func data */); + + elm_box_pack_end(bx, gl); + evas_object_show(bx); + + evas_object_smart_callback_add(gl, "drag,start,up", item_drag_up, NULL); + evas_object_smart_callback_add(gl, "drag,start,down", item_drag_down, NULL); + evas_object_smart_callback_add(gl, "drag,start,left", item_drag_left, NULL); + evas_object_smart_callback_add(gl, "drag,start,right", item_drag_right, NULL); + evas_object_smart_callback_add(gl, "scroll,edge,top", scroll_top, NULL); + evas_object_smart_callback_add(gl, "scroll,edge,bottom", scroll_bottom, NULL); + evas_object_smart_callback_add(gl, "scroll,edge,left", scroll_left, NULL); + evas_object_smart_callback_add(gl, "scroll,edge,right", scroll_right, NULL); + evas_object_smart_callback_add(gl, "drag", item_drag, NULL); + evas_object_smart_callback_add(gl, "drag,stop", item_drag_stop, NULL); + evas_object_smart_callback_add(gl, "longpressed", item_longpress, NULL); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[1]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[2]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[3]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + +/*************/ + +static Elm_Genlist_Item_Class itc4; + +static void +gl4_sel(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = (Elm_Genlist_Item *)event_info; + int depth = 0; + + depth = elm_genlist_item_expanded_depth_get(it); + printf("expanded depth for selected item is %d\n", depth); + +} +static void +gl4_exp(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + Evas_Object *gl = elm_genlist_item_genlist_get(it); + int val = (int)(long)elm_genlist_item_data_get(it); + val *= 10; + elm_genlist_item_append(gl, &itc4, + (void *)(long)(val + 1)/* item data */, it/* parent */, + ELM_GENLIST_ITEM_NONE, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc4, + (void *)(long)(val + 2)/* item data */, it/* parent */, + ELM_GENLIST_ITEM_NONE, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc4, + (void *)(long)(val + 3)/* item data */, it/* parent */, + ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */, + NULL/* func data */); +} +static void +gl4_con(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_subitems_clear(it); +} + +static void +gl4_exp_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_expanded_set(it, 1); +} +static void +gl4_con_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_expanded_set(it, 0); +} + +char *gl4_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + char buf[256]; + snprintf(buf, sizeof(buf), "Item mode %i", (int)(long)data); + return strdup(buf); +} +Evas_Object *gl4_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part) +{ + char buf[PATH_MAX]; + if (!strcmp(part, "elm.swallow.icon")) + { + Evas_Object *ic = elm_icon_add(obj); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + evas_object_show(ic); + return ic; + } + else if (!strcmp(part, "elm.swallow.end")) + { + Evas_Object *ck; + ck = elm_check_add(obj); + evas_object_propagate_events_set(ck, EINA_FALSE); + evas_object_show(ck); + return ck; + } + return NULL; +} +Eina_Bool gl4_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + return EINA_FALSE; +} +void gl4_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__) +{ +} + +TEST_START(test_genlist6) +{ + Evas_Object *bg, *gl, *bx, *bx2, *bt; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(gl); + + itc4.item_style = "default"; + itc4.func.text_get = gl4_text_get; + itc4.func.content_get = gl4_content_get; + itc4.func.state_get = gl4_state_get; + itc4.func.del = gl4_del; + + elm_genlist_item_append(gl, &itc4, + (void *)1/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc4, + (void *)2/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc4, + (void *)3/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */, + NULL/* func data */); + + evas_object_smart_callback_add(gl, "expand,request", gl4_exp_req, gl); + evas_object_smart_callback_add(gl, "contract,request", gl4_con_req, gl); + evas_object_smart_callback_add(gl, "expanded", gl4_exp, gl); + evas_object_smart_callback_add(gl, "contracted", gl4_con, gl); + + elm_box_pack_end(bx, gl); + evas_object_show(bx); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[1]"); + // evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[2]"); + // evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "[3]"); + // evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2])); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + +/*************/ + +struct genlist7_data +{ + Evas_Object *win, *pager; +}; + +static Elm_Genlist_Item_Class itc7; +static void +gl_sel7(void *data, Evas_Object *obj, void *event_info) +{ + if (!event_info) return; + elm_genlist_item_item_class_update(event_info, &itc7); + printf("sel item data [%p] on genlist obj [%p], item pointer [%p], new item style [%s] \n", data, obj, event_info, itc7.item_style); +} + +static void +test_genlist7_back_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + struct genlist7_data *info = data; + if (!info) return; + + elm_pager_content_pop(info->pager); +} + +static void +test_genlist7_swipe(void *data, Evas_Object *obj __UNUSED__, void *event_info) +{ + struct genlist7_data *info = data; + Evas_Object *box, *entry, *button; + char item_data[] = "Just a simple test"; + + if ((!event_info) || (!data)) return; + + box = elm_box_add(info->win); + elm_box_homogeneous_set(box, EINA_FALSE); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + entry = elm_entry_add(info->win); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_editable_set(entry, EINA_FALSE); + elm_entry_entry_set(entry, item_data); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(entry); + + button = elm_button_add(info->win); + elm_object_text_set(button, "back"); + evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0); + evas_object_smart_callback_add(button, "clicked", test_genlist7_back_cb, + info); + evas_object_show(button); + + elm_box_pack_start(box, entry); + elm_box_pack_end(box, button); + + elm_pager_content_push(info->pager, box); +} + +TEST_START(test_genlist7) +{ + Evas_Object *bg, *gl, *pager; + static struct genlist7_data info; + static Testitem tit[3]; + + info.win = win; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + pager = elm_pager_add(win); + elm_win_resize_object_add(win, pager); + evas_object_size_hint_weight_set(pager, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(pager, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(pager); + info.pager = pager; + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_smart_callback_add(gl, "swipe", test_genlist7_swipe, &info); + evas_object_show(gl); + elm_pager_content_push(pager, gl); + + itc2.item_style = "default"; + itc2.func.text_get = gl2_text_get; + itc2.func.content_get = gl2_content_get; + itc2.func.state_get = gl2_state_get; + itc2.func.del = gl2_del; + + itc7.item_style = "double_label"; + itc7.func.text_get = gl5_text_get; + itc7.func.content_get = gl5_content_get; + itc7.func.state_get = gl5_state_get; + itc7.func.del = gl5_del; + + tit[0].mode = 0; + tit[0].item = elm_genlist_item_append(gl, &itc2, + &(tit[0])/* item data */, NULL/* parent */, + ELM_GENLIST_ITEM_NONE, gl_sel7/* func */, + NULL/* func data */); + tit[1].mode = 1; + tit[1].item = elm_genlist_item_append(gl, &itc2, + &(tit[1])/* item data */, NULL/* parent */, + ELM_GENLIST_ITEM_NONE, gl_sel7/* func */, + NULL/* func data */); + tit[2].mode = 2; + tit[2].item = elm_genlist_item_append(gl, &itc2, + &(tit[2])/* item data */, NULL/* parent */, + ELM_GENLIST_ITEM_NONE, gl_sel7/* func */, + NULL/* func data */); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + +/*************/ + +static Elm_Genlist_Item_Class itc_group; +char *gl8_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + char buf[256]; + snprintf(buf, sizeof(buf), "Group Index # %i (Item # %i)", (int)((long)data / 10), (int)(long)data); + return strdup(buf); +} + +static void +_bt_show_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_genlist_item_top_show(data); + //elm_genlist_item_show(data); + //elm_genlist_item_middle_show(data); +} +static void +_bt_bring_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_genlist_item_top_bring_in(data); + //elm_genlist_item_bring_in(data); + //elm_genlist_item_middle_bring_in(data); +} + +TEST_START(test_genlist8) +{ + Evas_Object *bg, *gl, *bt[8], *bx, *bx2, *bx3; + Elm_Genlist_Item *gli = NULL, *git = NULL; + int i, bt_num; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL); + evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL); + evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, gl); + evas_object_show(gl); + + itc1.item_style = "default"; + itc1.func.text_get = gl_text_get; + itc1.func.content_get = gl_content_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + itc_group.item_style = "group_index"; + itc_group.func.text_get = gl8_text_get; + itc_group.func.content_get = NULL; + itc_group.func.state_get = NULL; + itc_group.func.del = gl_del; + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt_num = 0; + bt[bt_num] = elm_button_add(win); + elm_object_text_set(bt[bt_num], "Show 0"); + evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0); + evas_object_show(bt[bt_num]); + elm_box_pack_end(bx2, bt[bt_num]); + + bt[++bt_num] = elm_button_add(win); + elm_object_text_set(bt[bt_num], "Show 26"); + evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0); + evas_object_show(bt[bt_num]); + elm_box_pack_end(bx2, bt[bt_num]); + + bt[++bt_num] = elm_button_add(win); + elm_object_text_set(bt[bt_num], "Show 101"); + evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0); + evas_object_show(bt[bt_num]); + elm_box_pack_end(bx2, bt[bt_num]); + + bt[++bt_num] = elm_button_add(win); + elm_object_text_set(bt[bt_num], "Show 480"); + evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0); + evas_object_show(bt[bt_num]); + elm_box_pack_end(bx2, bt[bt_num]); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx3 = elm_box_add(win); + elm_box_horizontal_set(bx3, EINA_TRUE); + elm_box_homogeneous_set(bx3, EINA_TRUE); + evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt[++bt_num] = elm_button_add(win); + elm_object_text_set(bt[bt_num], "Bring top 0"); + evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0); + evas_object_show(bt[bt_num]); + elm_box_pack_end(bx3, bt[bt_num]); + + bt[++bt_num] = elm_button_add(win); + elm_object_text_set(bt[bt_num], "Bring top 31"); + evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0); + evas_object_show(bt[bt_num]); + elm_box_pack_end(bx3, bt[bt_num]); + + bt[++bt_num] = elm_button_add(win); + elm_object_text_set(bt[bt_num], "Bring top 239"); + evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0); + evas_object_show(bt[bt_num]); + elm_box_pack_end(bx3, bt[bt_num]); + + bt[++bt_num] = elm_button_add(win); + elm_object_text_set(bt[bt_num], "Bring top 477"); + evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0); + evas_object_show(bt[bt_num]); + elm_box_pack_end(bx3, bt[bt_num]); + + elm_box_pack_end(bx, bx3); + evas_object_show(bx3); + + for (i = 0; i < 500; i++) + { + if (!(i % 10)) + { + gli = git = elm_genlist_item_append(gl, &itc_group, + (void *)(long)i/* item data */, + NULL/* parent */, + ELM_GENLIST_ITEM_GROUP, + gl_sel/* func */, + (void *)(long)(i * 10)/* func data */); + elm_genlist_item_display_only_set(git, EINA_TRUE); + } + else if (git) + { + gli = elm_genlist_item_append(gl, &itc1, + (void *)(long)i/* item data */, + git/* parent */, + ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, + (void *)(long)(i * 10)/* func data */); + } + switch (i) + { + case 0: + evas_object_smart_callback_add(bt[0], "clicked", _bt_show_cb, gli); + evas_object_smart_callback_add(bt[4], "clicked", _bt_bring_cb, gli); + break; + case 26: + evas_object_smart_callback_add(bt[1], "clicked", _bt_show_cb, gli); + break; + case 31: + evas_object_smart_callback_add(bt[5], "clicked", _bt_bring_cb, gli); + break; + case 101: + evas_object_smart_callback_add(bt[2], "clicked", _bt_show_cb, gli); + break; + case 239: + evas_object_smart_callback_add(bt[6], "clicked", _bt_bring_cb, gli); + break; + case 477: + evas_object_smart_callback_add(bt[7], "clicked", _bt_bring_cb, gli); + break; + case 480: + evas_object_smart_callback_add(bt[3], "clicked", _bt_show_cb, gli); + break; + } + } + + evas_object_resize(win, 480, 800); + evas_object_show(win); +} +TEST_END + +/*************/ + +static void +gl9_exp(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + Evas_Object *gl = elm_genlist_item_genlist_get(it); + int val = (int)(long)elm_genlist_item_data_get(it); + val *= 10; + elm_genlist_item_append(gl, &itc1, + (void *)(long)(val + 1)/* item data */, it/* parent */, + ELM_GENLIST_ITEM_NONE, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc1, + (void *)(long)(val + 2)/* item data */, it/* parent */, + ELM_GENLIST_ITEM_NONE, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc1, + (void *)(long)(val + 3)/* item data */, it/* parent */, + ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */, + NULL/* func data */); +} +static void +gl9_con(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_subitems_clear(it); +} + +static void +gl9_exp_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_expanded_set(it, EINA_TRUE); +} +static void +gl9_con_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_expanded_set(it, EINA_FALSE); +} + +TEST_START(test_genlist9) +{ + Evas_Object *bg, *gl, *bx; + Elm_Genlist_Item *git; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL); + evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL); + evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, gl); + evas_object_show(gl); + + itc1.item_style = "default"; + itc1.func.text_get = gl_text_get; + itc1.func.content_get = gl_content_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + itc_group.item_style = "group_index"; + itc_group.func.text_get = gl8_text_get; + itc_group.func.content_get = NULL; + itc_group.func.state_get = NULL; + itc_group.func.del = gl_del; + + git = elm_genlist_item_append(gl, &itc_group, + (void *)0/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_GROUP, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_display_only_set(git, EINA_TRUE); + elm_genlist_item_append(gl, &itc1, + (void *)1/* item data */, git/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc1, + (void *)2/* item data */, git/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc1, + (void *)3/* item data */, git/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */, + NULL/* func data */); + git = elm_genlist_item_append(gl, &itc_group, + (void *)4/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_GROUP, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_display_only_set(git, EINA_TRUE); + elm_genlist_item_append(gl, &itc1, + (void *)5/* item data */, git/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc1, + (void *)6/* item data */, git/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */, + NULL/* func data */); + elm_genlist_item_append(gl, &itc1, + (void *)7/* item data */, git/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */, + NULL/* func data */); + + evas_object_smart_callback_add(gl, "expand,request", gl9_exp_req, gl); + evas_object_smart_callback_add(gl, "contract,request", gl9_con_req, gl); + evas_object_smart_callback_add(gl, "expanded", gl9_exp, gl); + evas_object_smart_callback_add(gl, "contracted", gl9_con, gl); + + evas_object_resize(win, 480, 800); + evas_object_show(win); +} +TEST_END + +/*************/ + +static Elm_Genlist_Item_Class itc10; +static char *mode_type[] = { "slide", "rotate" }; +char *gl10_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part) +{ + char buf[256]; + if (!strcmp(part, "elm.text.mode")) + snprintf(buf, sizeof(buf), "Mode # %i", (int)(long)data); + else + snprintf(buf, sizeof(buf), "Item # %i", (int)(long)data); + return strdup(buf); +} + +Evas_Object *gl10_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part) +{ + char buf[PATH_MAX]; + Evas_Object *ic = elm_icon_add(obj); + if (!strcmp(part, "elm.swallow.end")) + snprintf(buf, sizeof(buf), "%s/images/bubble.png", elm_app_data_dir_get()); + else + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + return ic; +} +static void +_gl_sel10(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + if (!data) return; + int v = elm_radio_value_get(data); + if (v == 1) + elm_genlist_item_mode_set(event_info, mode_type[v], EINA_TRUE); +} + +static void +_my_gl_mode_right(void *data, Evas_Object *obj __UNUSED__, void *event_info) +{ + if (!data) return; + int v = elm_radio_value_get(data); + if (v == 0) + elm_genlist_item_mode_set(event_info, mode_type[v], EINA_TRUE); +} + +static void +_my_gl_mode_left(void *data, Evas_Object *obj __UNUSED__, void *event_info) +{ + if (!data) return; + int v = elm_radio_value_get(data); + if (v == 0) + elm_genlist_item_mode_set(event_info, mode_type[v], EINA_FALSE); +} + +static void +_my_gl_mode_cancel(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + fprintf(stderr, "drag\n"); + if (!data) return; + int v = elm_radio_value_get(data); + Elm_Genlist_Item *it = (Elm_Genlist_Item *)elm_genlist_mode_item_get(obj); + if (it) + elm_genlist_item_mode_set(it, mode_type[v], EINA_FALSE); +} + +TEST_START(test_genlist10) +{ + Evas_Object *bg, *fr, *lb, *bx, *bx2, *bx3, *rd, *rdg, *gl; + int i; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fr = elm_frame_add(win); + elm_object_text_set(fr, "Mode Type"); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + bx2 = elm_box_add(win); + elm_object_content_set(fr, bx2); + evas_object_show(bx2); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "Sweep genlist items to the right.
" + "Test this by changing Mode Type to Slide or Rotate."); + elm_box_pack_end(bx2, lb); + evas_object_show(lb); + + bx3 = elm_box_add(win); + elm_box_horizontal_set(bx3, EINA_TRUE); + elm_box_pack_end(bx2, bx3); + evas_object_show(bx3); + + rd = elm_radio_add(win); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_radio_state_value_set(rd, 0); + elm_object_text_set(rd, "Slide "); + evas_object_show(rd); + elm_box_pack_end(bx3, rd); + rdg = rd; + + rd = elm_radio_add(win); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_radio_state_value_set(rd, 1); + elm_object_text_set(rd, "Rotate"); + elm_radio_group_add(rd, rdg); + evas_object_show(rd); + elm_box_pack_end(bx3, rd); + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_smart_callback_add(gl, "drag,start,right", _my_gl_mode_right, rdg); + evas_object_smart_callback_add(gl, "drag,start,left", _my_gl_mode_left, rdg); + evas_object_smart_callback_add(gl, "drag,start,up", _my_gl_mode_cancel, rdg); + evas_object_smart_callback_add(gl, "drag,start,down", _my_gl_mode_cancel, rdg); + evas_object_show(gl); + + itc10.item_style = "default"; + itc10.func.text_get = gl10_text_get; + itc10.func.content_get = gl10_content_get; + itc10.func.state_get = gl_state_get; + itc10.func.del = gl_del; + elm_genlist_mode_item_style_set(gl, "mode"); + + for (i = 0; i < 50; i++) + elm_genlist_item_append(gl, + &itc10, + (void *)(1000 + i)/* item data */, + NULL/* parent */, + ELM_GENLIST_ITEM_NONE/* flags */, + _gl_sel10/* func */, + rdg/* func data */); + + elm_box_pack_end(bx, gl); + + evas_object_resize(win, 520, 520); + evas_object_show(win); +} +TEST_END + +/*************/ + +static void +_reorder_tg_changed_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + elm_genlist_reorder_mode_set(data, elm_check_state_get(obj)); +} + +/** + * gl_moved is called after an item was reordered. + * This is only called when reorder mode is enabled. + * + * @param data : the genlist object passed as data. + * @param obj : the genlist object. + * @param item : the moved item. + * + * If the move_after is true, + * the item(*item) had been moved after the given relative item(*rel_item) in list. + * If the move_after is false, + * the item(*item) had been moved before the given relative item(*rel_item) in list. + * + */ +static void gl_moved(Evas_Object *obj __UNUSED__, Elm_Genlist_Item *item __UNUSED__, Elm_Genlist_Item *rel_item __UNUSED__, Eina_Bool move_after __UNUSED__) +{ + // if needed, add application logic. +} + +TEST_START(test_genlist11) +{ + Evas_Object *bg, *fr, *lb, *bx, *tg, *gl; + int i; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fr = elm_frame_add(win); + + elm_object_text_set(fr, "Reorder Mode"); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "Enable reorder mode if you want to move item.
" + "Then long press and drag item."); + elm_object_content_set(fr, lb); + evas_object_show(lb); + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(gl); + + tg = elm_check_add(win); + elm_object_style_set(tg, "toggle"); + elm_object_text_set(tg, "Reorder Mode:"); + elm_check_state_set(tg, elm_mirrored_get()); + evas_object_smart_callback_add(tg, "changed", _reorder_tg_changed_cb, gl); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + + itc1.item_style = "default"; + itc1.func.text_get = gl_text_get; + itc1.func.content_get = gl_content_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + evas_object_smart_callback_add(gl, "moved", (Evas_Smart_Cb)gl_moved, gl); + + for (i = 0; i < 50; i++) + elm_genlist_item_append(gl, + &itc1, + (void *)(1 + i)/* item data */, + NULL/* parent */, + ELM_GENLIST_ITEM_NONE/* flags */, + NULL/* func */, + NULL/* func data */); + + elm_box_pack_end(bx, gl); + + evas_object_resize(win, 400, 500); + evas_object_show(win); +} +TEST_END + +char *gl12_text_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + return strdup("Enlightenment is not just a window manager for Linux/X11 and others, but also a whole suite of libraries to help you create beautiful user interfaces with much less work than doing it the old fashioned way and fighting with traditional toolkits, not to mention a traditional window manager. It covers uses from small mobile devices like phones all the way to powerful multi-core desktops (which are the primary development environment)."); +} + +TEST_START(test_genlist12) +{ + Evas_Object *bg, *bx, *gl; + int i; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_genlist_add(win); + elm_genlist_height_for_width_mode_set(gl, EINA_TRUE); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, gl); + evas_object_show(gl); + + itc1.item_style = "message"; + itc1.func.text_get = gl12_text_get; + itc1.func.content_get = gl_content_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + for (i = 0; i < 1000; i++) + { + elm_genlist_item_append(gl, &itc1, + (void *)(long)i/* item data */, + NULL/* parent */, + ELM_GENLIST_ITEM_NONE, + gl_sel/* func */, + (void *)(long)(i * 10)/* func data */); + } + + evas_object_resize(win, 400, 500); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_glview.c b/src/bin/test_glview.c new file mode 100644 index 0000000..cfe4d18 --- /dev/null +++ b/src/bin/test_glview.c @@ -0,0 +1,626 @@ +#include +#include "tsuite.h" + +#ifndef M_PI +#define M_PI 3.14159265 +#endif + +typedef struct _Gear Gear; +typedef struct _GLData GLData; +struct _Gear +{ + GLfloat *vertices; + GLuint vbo; + int count; +}; + +// GL related data here.. +struct _GLData +{ + Evas_GL_API *glapi; + GLuint program; + GLuint vtx_shader; + GLuint fgmt_shader; + int initialized : 1; + int mouse_down : 1; + + // Gear Stuff + GLfloat view_rotx; + GLfloat view_roty; + GLfloat view_rotz; + + Gear *gear1; + Gear *gear2; + Gear *gear3; + + GLfloat angle; + + GLuint proj_location; + GLuint light_location; + GLuint color_location; + + GLfloat proj[16]; + GLfloat light[3]; +}; + +static void gears_init(GLData *gld); +static void free_gear(Gear *gear); +static void gears_reshape(GLData *gld, int width, int height); +static void render_gears(GLData *gld); + +//--------------------------------// +// Gear Stuff.... +static GLfloat * +vert(GLfloat *p, GLfloat x, GLfloat y, GLfloat z, GLfloat *n) +{ + p[0] = x; + p[1] = y; + p[2] = z; + p[3] = n[0]; + p[4] = n[1]; + p[5] = n[2]; + + return p + 6; +} + +/* Draw a gear wheel. You'll probably want to call this function when + * building a display list since we do a lot of trig here. + * + * Input: inner_radius - radius of hole at center + * outer_radius - radius at center of teeth + * width - width of gear + * teeth - number of teeth + * tooth_depth - depth of tooth + */ +static Gear * +make_gear(GLData *gld, GLfloat inner_radius, GLfloat outer_radius, GLfloat width, + GLint teeth, GLfloat tooth_depth) +{ + GLint i; + GLfloat r0, r1, r2; + GLfloat da; + GLfloat *v; + Gear *gear; + double s[5], c[5]; + GLfloat normal[3]; + const int tris_per_tooth = 20; + Evas_GL_API *gl = gld->glapi; + + gear = (Gear*)malloc(sizeof(Gear)); + if (gear == NULL) + return NULL; + + r0 = inner_radius; + r1 = outer_radius - tooth_depth / 2.0; + r2 = outer_radius + tooth_depth / 2.0; + + da = 2.0 * M_PI / teeth / 4.0; + + gear->vertices = calloc(teeth * tris_per_tooth * 3 * 6, + sizeof *gear->vertices); + s[4] = 0; + c[4] = 1; + v = gear->vertices; + for (i = 0; i < teeth; i++) + { + s[0] = s[4]; + c[0] = c[4]; + s[1] = sin(i * 2.0 * M_PI / teeth + da); + c[1] = cos(i * 2.0 * M_PI / teeth + da); + s[2] = sin(i * 2.0 * M_PI / teeth + da * 2); + c[2] = cos(i * 2.0 * M_PI / teeth + da * 2); + s[3] = sin(i * 2.0 * M_PI / teeth + da * 3); + c[3] = cos(i * 2.0 * M_PI / teeth + da * 3); + s[4] = sin(i * 2.0 * M_PI / teeth + da * 4); + c[4] = cos(i * 2.0 * M_PI / teeth + da * 4); + + normal[0] = 0.0; + normal[1] = 0.0; + normal[2] = 1.0; + + v = vert(v, r2 * c[1], r2 * s[1], width * 0.5, normal); + + v = vert(v, r2 * c[1], r2 * s[1], width * 0.5, normal); + v = vert(v, r2 * c[2], r2 * s[2], width * 0.5, normal); + v = vert(v, r1 * c[0], r1 * s[0], width * 0.5, normal); + v = vert(v, r1 * c[3], r1 * s[3], width * 0.5, normal); + v = vert(v, r0 * c[0], r0 * s[0], width * 0.5, normal); + v = vert(v, r1 * c[4], r1 * s[4], width * 0.5, normal); + v = vert(v, r0 * c[4], r0 * s[4], width * 0.5, normal); + + v = vert(v, r0 * c[4], r0 * s[4], width * 0.5, normal); + v = vert(v, r0 * c[0], r0 * s[0], width * 0.5, normal); + v = vert(v, r0 * c[4], r0 * s[4], -width * 0.5, normal); + v = vert(v, r0 * c[0], r0 * s[0], -width * 0.5, normal); + + normal[0] = 0.0; + normal[1] = 0.0; + normal[2] = -1.0; + + v = vert(v, r0 * c[4], r0 * s[4], -width * 0.5, normal); + + v = vert(v, r0 * c[4], r0 * s[4], -width * 0.5, normal); + v = vert(v, r1 * c[4], r1 * s[4], -width * 0.5, normal); + v = vert(v, r0 * c[0], r0 * s[0], -width * 0.5, normal); + v = vert(v, r1 * c[3], r1 * s[3], -width * 0.5, normal); + v = vert(v, r1 * c[0], r1 * s[0], -width * 0.5, normal); + v = vert(v, r2 * c[2], r2 * s[2], -width * 0.5, normal); + v = vert(v, r2 * c[1], r2 * s[1], -width * 0.5, normal); + + v = vert(v, r1 * c[0], r1 * s[0], width * 0.5, normal); + + v = vert(v, r1 * c[0], r1 * s[0], width * 0.5, normal); + v = vert(v, r1 * c[0], r1 * s[0], -width * 0.5, normal); + v = vert(v, r2 * c[1], r2 * s[1], width * 0.5, normal); + v = vert(v, r2 * c[1], r2 * s[1], -width * 0.5, normal); + v = vert(v, r2 * c[2], r2 * s[2], width * 0.5, normal); + v = vert(v, r2 * c[2], r2 * s[2], -width * 0.5, normal); + v = vert(v, r1 * c[3], r1 * s[3], width * 0.5, normal); + v = vert(v, r1 * c[3], r1 * s[3], -width * 0.5, normal); + v = vert(v, r1 * c[4], r1 * s[4], width * 0.5, normal); + v = vert(v, r1 * c[4], r1 * s[4], -width * 0.5, normal); + + v = vert(v, r1 * c[4], r1 * s[4], -width * 0.5, normal); + } + + gear->count = (v - gear->vertices) / 6; + + gl->glGenBuffers(1, &gear->vbo); + gl->glBindBuffer(GL_ARRAY_BUFFER, gear->vbo); + gl->glBufferData(GL_ARRAY_BUFFER, gear->count * 6 * 4, + gear->vertices, GL_STATIC_DRAW); + + + return gear; +} + +static void +free_gear(Gear *gear) +{ + free(gear->vertices); + free(gear); + gear = NULL; +} + +static void +multiply(GLfloat *m, const GLfloat *n) +{ + GLfloat tmp[16]; + const GLfloat *row, *column; + div_t d; + int i, j; + + for (i = 0; i < 16; i++) + { + tmp[i] = 0; + d = div(i, 4); + row = n + d.quot * 4; + column = m + d.rem; + for (j = 0; j < 4; j++) + tmp[i] += row[j] * column[j * 4]; + } + memcpy(m, &tmp, sizeof tmp); +} + +static void +rotate(GLfloat *m, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) +{ + double s, c; + + s = sin(angle); + c = cos(angle); + GLfloat r[16] = + { + x * x * (1 - c) + c, y * x * (1 - c) + z * s, x * z * (1 - c) - y * s, 0, + x * y * (1 - c) - z * s, y * y * (1 - c) + c, y * z * (1 - c) + x * s, 0, + x * z * (1 - c) + y * s, y * z * (1 - c) - x * s, z * z * (1 - c) + c, 0, + 0, 0, 0, 1 + }; + + multiply(m, r); +} + +static void +translate(GLfloat *m, GLfloat x, GLfloat y, GLfloat z) +{ + GLfloat t[16] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, z, 1 }; + + multiply(m, t); +} + +static void +draw_gear(GLData *gld, Gear *gear, GLfloat *m, + GLfloat x, GLfloat y, GLfloat angle, const GLfloat *color) +{ + Evas_GL_API *gl = gld->glapi; + GLfloat tmp[16]; + + memcpy(tmp, m, sizeof tmp); + translate(tmp, x, y, 0); + rotate(tmp, 2 * M_PI * angle / 360.0, 0, 0, 1); + gl->glUniformMatrix4fv(gld->proj_location, 1, GL_FALSE, tmp); + gl->glUniform3fv(gld->light_location, 1, gld->light); + gl->glUniform4fv(gld->color_location, 1, color); + + gl->glBindBuffer(GL_ARRAY_BUFFER, gear->vbo); + + gl->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, + 6 * sizeof(GLfloat), NULL); + gl->glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, + 6 * sizeof(GLfloat), (GLfloat *) 0 + 3); + gl->glEnableVertexAttribArray(0); + gl->glEnableVertexAttribArray(1); + gl->glDrawArrays(GL_TRIANGLE_STRIP, 0, gear->count); +} + +static void +gears_draw(GLData *gld) +{ + Evas_GL_API *gl = gld->glapi; + + static const GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 }; + static const GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 }; + static const GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 }; + GLfloat m[16]; + + gl->glClearColor(0.8, 0.8, 0.1, 0.5); + gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + memcpy(m, gld->proj, sizeof m); + rotate(m, 2 * M_PI * gld->view_rotx / 360.0, 1, 0, 0); + rotate(m, 2 * M_PI * gld->view_roty / 360.0, 0, 1, 0); + rotate(m, 2 * M_PI * gld->view_rotz / 360.0, 0, 0, 1); + + draw_gear(gld, gld->gear1, m, -3.0, -2.0, gld->angle, red); + draw_gear(gld, gld->gear2, m, 3.1, -2.0, -2 * gld->angle - 9.0, green); + draw_gear(gld, gld->gear3, m, -3.1, 4.2, -2 * gld->angle - 25.0, blue); +} + +static void render_gears(GLData *gld) +{ + gears_draw(gld); + + gld->angle += 2.0; +} + +/* new window size or exposure */ +static void +gears_reshape(GLData *gld, int width, int height) +{ + Evas_GL_API *gl = gld->glapi; + + GLfloat ar, m[16] = { + 1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 0.1, 0.0, + 0.0, 0.0, 0.0, 1.0 + }; + + if (width < height) + ar = width; + else + ar = height; + + m[0] = 0.1 * ar / width; + m[5] = 0.1 * ar / height; + memcpy(gld->proj, m, sizeof gld->proj); + gl->glViewport(0, 0, (GLint) width, (GLint) height); +} + +static const char vertex_shader[] = + "uniform mat4 proj;\n" + "attribute vec4 position;\n" + "attribute vec4 normal;\n" + "varying vec3 rotated_normal;\n" + "varying vec3 rotated_position;\n" + "vec4 tmp;\n" + "void main()\n" + "{\n" + " gl_Position = proj * position;\n" + " rotated_position = gl_Position.xyz;\n" + " tmp = proj * normal;\n" + " rotated_normal = tmp.xyz;\n" + "}\n"; + + static const char fragment_shader[] = + "#ifdef GL_ES\n" + "precision mediump float;\n" + "#endif\n" + "uniform vec4 color;\n" + "uniform vec3 light;\n" + "varying vec3 rotated_normal;\n" + "varying vec3 rotated_position;\n" + "vec3 light_direction;\n" + "vec4 white = vec4(0.5, 0.5, 0.5, 1.0);\n" + "void main()\n" + "{\n" + " light_direction = normalize(light - rotated_position);\n" + " gl_FragColor = color + white * dot(light_direction, rotated_normal);\n" + "}\n"; + + +static void +gears_init(GLData *gld) +{ + Evas_GL_API *gl = gld->glapi; + + const char *p; + char msg[512]; + + gl->glEnable(GL_CULL_FACE); + gl->glEnable(GL_DEPTH_TEST); + + p = vertex_shader; + gld->vtx_shader = gl->glCreateShader(GL_VERTEX_SHADER); + gl->glShaderSource(gld->vtx_shader, 1, &p, NULL); + gl->glCompileShader(gld->vtx_shader); + gl->glGetShaderInfoLog(gld->vtx_shader, sizeof msg, NULL, msg); + printf("vertex shader info: %s\n", msg); + + p = fragment_shader; + gld->fgmt_shader = gl->glCreateShader(GL_FRAGMENT_SHADER); + gl->glShaderSource(gld->fgmt_shader, 1, &p, NULL); + gl->glCompileShader(gld->fgmt_shader); + gl->glGetShaderInfoLog(gld->fgmt_shader, sizeof msg, NULL, msg); + printf("fragment shader info: %s\n", msg); + + gld->program = gl->glCreateProgram(); + gl->glAttachShader(gld->program, gld->vtx_shader); + gl->glAttachShader(gld->program, gld->fgmt_shader); + gl->glBindAttribLocation(gld->program, 0, "position"); + gl->glBindAttribLocation(gld->program, 1, "normal"); + + gl->glLinkProgram(gld->program); + gl->glGetProgramInfoLog(gld->program, sizeof msg, NULL, msg); + printf("info: %s\n", msg); + + gl->glUseProgram(gld->program); + gld->proj_location = gl->glGetUniformLocation(gld->program, "proj"); + gld->light_location = gl->glGetUniformLocation(gld->program, "light"); + gld->color_location = gl->glGetUniformLocation(gld->program, "color"); + + /* make the gears */ + gld->gear1 = make_gear(gld, 1.0, 4.0, 1.0, 20, 0.7); + gld->gear2 = make_gear(gld, 0.5, 2.0, 2.0, 10, 0.7); + gld->gear3 = make_gear(gld, 1.3, 2.0, 0.5, 10, 0.7); +} + + +static void +gldata_init(GLData *gld) +{ + gld->initialized = 0; + gld->mouse_down = 0; + + gld->view_rotx = -20.0; + gld->view_roty = -30.0; + gld->view_rotz = 0.0; + gld->angle = 0.0; + + gld->light[0] = 1.0; + gld->light[1] = 1.0; + gld->light[2] = -5.0; +} + + +//-------------------------// + +static void +_init_gl(Evas_Object *obj) +{ + GLData *gld = evas_object_data_get(obj, "gld"); + + gears_init(gld); +} + +static void +_del_gl(Evas_Object *obj) +{ + GLData *gld = evas_object_data_get(obj, "gld"); + if (!gld) + { + printf("Unable to get GLData. \n"); + return; + } + Evas_GL_API *gl = gld->glapi; + + gl->glDeleteShader(gld->vtx_shader); + gl->glDeleteShader(gld->fgmt_shader); + gl->glDeleteProgram(gld->program); + gl->glDeleteBuffers(1, &gld->gear1->vbo); + gl->glDeleteBuffers(1, &gld->gear2->vbo); + gl->glDeleteBuffers(1, &gld->gear3->vbo); + + free_gear(gld->gear1); + free_gear(gld->gear2); + free_gear(gld->gear3); + + evas_object_data_del((Evas_Object*)obj, "..gld"); + free(gld); +} + + +static void +_resize_gl(Evas_Object *obj) +{ + int w, h; + GLData *gld = evas_object_data_get(obj, "gld"); + + elm_glview_size_get(obj, &w, &h); + + // GL Viewport stuff. you can avoid doing this if viewport is all the + // same as last frame if you want + gears_reshape(gld, w,h); +} + + + +static void +_draw_gl(Evas_Object *obj) +{ + Evas_GL_API *gl = elm_glview_gl_api_get(obj); + GLData *gld = evas_object_data_get(obj, "gld"); + if (!gld) return; + + render_gears(gld); + gl->glFinish(); +} + +static Eina_Bool +_anim(void *data) +{ + elm_glview_changed_set(data); + return EINA_TRUE; +} + +static void +_on_done(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_del((Evas_Object*)data); +} + + +static void +_del(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Ecore_Animator *ani = evas_object_data_get(obj, "ani"); + ecore_animator_del(ani); +} + + +static void +_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Key_Down *ev; + ev = (Evas_Event_Key_Down *)event_info; + GLData *gld = evas_object_data_get(obj, "gld"); + + if (strcmp(ev->keyname, "Left") == 0) + { + gld->view_roty += 5.0; + return; + } + + if (strcmp(ev->keyname, "Right") == 0) + { + gld->view_roty -= 5.0; + return; + } + + if (strcmp(ev->keyname, "Up") == 0) + { + gld->view_rotx += 5.0; + return; + } + + if (strcmp(ev->keyname, "Down") == 0) + { + gld->view_rotx -= 5.0; + return; + } + if ((strcmp(ev->keyname, "Escape") == 0) || + (strcmp(ev->keyname, "Return") == 0)) + { + //_on_done(data, obj, event_info); + return; + } +} + +static void +_mouse_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + GLData *gld = evas_object_data_get(obj, "gld"); + gld->mouse_down = 1; +} + +static void +_mouse_move(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Event_Mouse_Move *ev; + ev = (Evas_Event_Mouse_Move *)event_info; + GLData *gld = evas_object_data_get(obj, "gld"); + float dx = 0, dy = 0; + + if (gld->mouse_down) + { + dx = ev->cur.canvas.x - ev->prev.canvas.x; + dy = ev->cur.canvas.y - ev->prev.canvas.y; + + gld->view_roty += -1.0 * dx; + gld->view_rotx += -1.0 * dy; + } +} + +static void +_mouse_up(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + GLData *gld = evas_object_data_get(obj, "gld"); + gld->mouse_down = 0; +} + +TEST_START(test_glview) +{ + Evas_Object *bg, *bx, *bt, *gl; + Ecore_Animator *ani; + GLData *gld = NULL; + + // alloc a data struct to hold our relevant gl info in + if (!(gld = calloc(1, sizeof(GLData)))) return; + gldata_init(gld); + + // new window - do the usual and give it a name, title and delete handler + + // add a standard bg + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + // Add a GLView + gl = elm_glview_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_glview_mode_set(gl, ELM_GLVIEW_ALPHA|ELM_GLVIEW_DEPTH); + elm_glview_resize_policy_set(gl, ELM_GLVIEW_RESIZE_POLICY_RECREATE); + elm_glview_render_policy_set(gl, ELM_GLVIEW_RENDER_POLICY_ALWAYS); + elm_glview_init_func_set(gl, _init_gl); + elm_glview_del_func_set(gl, _del_gl); + elm_glview_resize_func_set(gl, _resize_gl); + elm_glview_render_func_set(gl, (Elm_GLView_Func_Cb)_draw_gl); + elm_box_pack_end(bx, gl); + evas_object_show(gl); + + // Add Mouse/Key Event Callbacks + elm_object_focus_set(gl, EINA_TRUE); + evas_object_event_callback_add(gl, EVAS_CALLBACK_KEY_DOWN, _key_down, gl); + evas_object_event_callback_add(gl, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, gl); + evas_object_event_callback_add(gl, EVAS_CALLBACK_MOUSE_UP, _mouse_up, gl); + evas_object_event_callback_add(gl, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move, gl); + + + // Animator and other vars + ani = ecore_animator_add(_anim, gl); + gld->glapi = elm_glview_gl_api_get(gl); + evas_object_data_set(gl, "ani", ani); + evas_object_data_set(gl, "gld", gld); + evas_object_event_callback_add(gl, EVAS_CALLBACK_DEL, _del, gl); + + + /* add an ok button */ + bt = elm_button_add(win); + elm_object_text_set(bt, "OK"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_smart_callback_add(bt, "clicked", _on_done, win); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_glview_simple.c b/src/bin/test_glview_simple.c new file mode 100644 index 0000000..85d3cb1 --- /dev/null +++ b/src/bin/test_glview_simple.c @@ -0,0 +1,282 @@ +#include +#include "tsuite.h" + +typedef struct _GLData GLData; + +// GL related data here.. +struct _GLData +{ + Evas_GL_API *glapi; + GLuint program; + GLuint vtx_shader; + GLuint fgmt_shader; + GLuint vbo; + int initialized : 1; +}; + + +static float red = 1.0; + +//--------------------------------// +static GLuint +load_shader( GLData *gld, GLenum type, const char *shader_src ) +{ + Evas_GL_API *gl = gld->glapi; + GLuint shader; + GLint compiled; + + // Create the shader object + shader = gl->glCreateShader(type); + if (shader==0) + return 0; + + // Load/Compile shader source + gl->glShaderSource(shader, 1, &shader_src, NULL); + gl->glCompileShader(shader); + gl->glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); + + if (!compiled) + { + GLint info_len = 0; + gl->glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_len); + if (info_len > 1) + { + char* info_log = malloc(sizeof(char) * info_len); + + gl->glGetShaderInfoLog(shader, info_len, NULL, info_log); + printf("Error compiling shader:\n%s\n======\n%s\n======\n", info_log, shader_src ); + free(info_log); + } + gl->glDeleteShader(shader); + return 0; + } + + return shader; +} + +// Initialize the shader and program object +static int +init_shaders(GLData *gld) +{ + Evas_GL_API *gl = gld->glapi; + GLbyte vShaderStr[] = + "attribute vec4 vPosition; \n" + "void main() \n" + "{ \n" + " gl_Position = vPosition; \n" + "} \n"; + + GLbyte fShaderStr[] = + "#ifdef GL_ES \n" + "precision mediump float; \n" + "#endif \n" + "void main() \n" + "{ \n" + " gl_FragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 );\n" + "} \n"; + + GLint linked; + + // Load the vertex/fragment shaders + gld->vtx_shader = load_shader(gld, GL_VERTEX_SHADER, (const char*)vShaderStr); + gld->fgmt_shader = load_shader(gld, GL_FRAGMENT_SHADER, (const char*)fShaderStr); + + // Create the program object + gld->program = gl->glCreateProgram( ); + if (gld->program==0) + return 0; + + gl->glAttachShader(gld->program, gld->vtx_shader); + gl->glAttachShader(gld->program, gld->fgmt_shader); + + gl->glBindAttribLocation(gld->program, 0, "vPosition"); + gl->glLinkProgram(gld->program); + gl->glGetProgramiv(gld->program, GL_LINK_STATUS, &linked); + + if (!linked) + { + GLint info_len = 0; + gl->glGetProgramiv(gld->program, GL_INFO_LOG_LENGTH, &info_len); + if (info_len > 1) + { + char* info_log = malloc(sizeof(char) * info_len); + + gl->glGetProgramInfoLog(gld->program, info_len, NULL, info_log); + printf("Error linking program:\n%s\n", info_log); + free(info_log); + } + gl->glDeleteProgram(gld->program); + return 0; + } + return 1; +} + + + +// Callbacks +static void +_init_gl(Evas_Object *obj) +{ + GLData *gld = evas_object_data_get(obj, "gld"); + Evas_GL_API *gl = gld->glapi; + GLfloat vVertices[] = { 0.0f, 0.5f, 0.0f, + -0.5f, -0.5f, 0.0f, + 0.5f, -0.5f, 0.0f }; + + if (!init_shaders(gld)) + { + printf("Error Initializing Shaders\n"); + return; + } + + gl->glGenBuffers(1, &gld->vbo); + gl->glBindBuffer(GL_ARRAY_BUFFER, gld->vbo); + gl->glBufferData(GL_ARRAY_BUFFER, 3 * 3 * 4, vVertices, GL_STATIC_DRAW); +} + +static void +_del_gl(Evas_Object *obj) +{ + GLData *gld = evas_object_data_get(obj, "gld"); + if (!gld) + { + printf("Unable to get GLData. \n"); + return; + } + Evas_GL_API *gl = gld->glapi; + + gl->glDeleteShader(gld->vtx_shader); + gl->glDeleteShader(gld->fgmt_shader); + gl->glDeleteProgram(gld->program); + gl->glDeleteBuffers(1, &gld->vbo); + + evas_object_data_del((Evas_Object*)obj, "..gld"); + free(gld); +} + + +static void +_resize_gl(Evas_Object *obj) +{ + int w, h; + GLData *gld = evas_object_data_get(obj, "gld"); + Evas_GL_API *gl = gld->glapi; + + elm_glview_size_get(obj, &w, &h); + + // GL Viewport stuff. you can avoid doing this if viewport is all the + // same as last frame if you want + gl->glViewport(0, 0, w, h); +} + + + +static void +_draw_gl(Evas_Object *obj) +{ + Evas_GL_API *gl = elm_glview_gl_api_get(obj); + GLData *gld = evas_object_data_get(obj, "gld"); + if (!gld) return; + int w, h; + + elm_glview_size_get(obj, &w, &h); + + gl->glViewport(0, 0, w, h); + gl->glClearColor(red,0.8,0.3,1); + gl->glClear(GL_COLOR_BUFFER_BIT); + + // Draw a Triangle + gl->glEnable(GL_BLEND); + + gl->glUseProgram(gld->program); + + gl->glBindBuffer(GL_ARRAY_BUFFER, gld->vbo); + gl->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, + 0, 0); + gl->glEnableVertexAttribArray(0); + + gl->glDrawArrays(GL_TRIANGLES, 0, 3); + + // Optional - Flush the GL pipeline + gl->glFinish(); + + red -= 0.1; + if (red < 0.0) red = 1.0; +} + +static Eina_Bool +_anim(void *data) +{ + elm_glview_changed_set(data); + return EINA_TRUE; +} + +static void +_on_done(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_del((Evas_Object*)data); +} + + +static void +_del(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Ecore_Animator *ani = evas_object_data_get(obj, "ani"); + ecore_animator_del(ani); +} + + +TEST_START(test_glview_simple) +{ + Evas_Object *bg, *bx, *bt, *gl; + Ecore_Animator *ani; + GLData *gld = NULL; + + if (!(gld = calloc(1, sizeof(GLData)))) return; + + // Set the engine to opengl_x11 + elm_engine_set("opengl_x11"); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + gl = elm_glview_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_glview_mode_set(gl, ELM_GLVIEW_ALPHA | ELM_GLVIEW_DEPTH); + elm_glview_resize_policy_set(gl, ELM_GLVIEW_RESIZE_POLICY_RECREATE); + elm_glview_render_policy_set(gl, ELM_GLVIEW_RENDER_POLICY_ON_DEMAND); + elm_glview_init_func_set(gl, _init_gl); + elm_glview_del_func_set(gl, _del_gl); + elm_glview_resize_func_set(gl, _resize_gl); + elm_glview_render_func_set(gl, _draw_gl); + elm_box_pack_end(bx, gl); + evas_object_show(gl); + + elm_object_focus_set(gl, EINA_TRUE); + + ani = ecore_animator_add(_anim, gl); + gld->glapi = elm_glview_gl_api_get(gl); + evas_object_data_set(gl, "ani", ani); + evas_object_data_set(gl, "gld", gld); + evas_object_event_callback_add(gl, EVAS_CALLBACK_DEL, _del, gl); + + bt = elm_button_add(win); + elm_object_text_set(bt, "OK"); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_smart_callback_add(bt, "clicked", _on_done, win); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_grid.c b/src/bin/test_grid.c new file mode 100644 index 0000000..b024e1e --- /dev/null +++ b/src/bin/test_grid.c @@ -0,0 +1,176 @@ +#include +#include "tsuite.h" + +static void +_ch_grid(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + int x, y, w, h; + + elm_grid_pack_get(obj, &x, &y, &w, &h); + elm_grid_pack_set(obj, x - 1, y - 1, w + 2, h + 2); +} + +struct _Api_Data +{ + Evas_Object *grid; + Evas_Object *child; +}; +typedef struct _Api_Data Api_Data; + +enum _api_state +{ + GRID_PACK_SET, + GRID_UNPACK, + GRID_SIZE, + GRID_CLEAR, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + Api_Data *dt = api->data; + int w, h; + + switch(api->state) + { /* Put all api-changes under switch */ + case GRID_PACK_SET: /* 0 */ + elm_grid_pack_set(dt->child, 5, 15, 60, 40); + break; + + case GRID_UNPACK: /* 1 */ + elm_grid_unpack(dt->grid, dt->child); + evas_object_del(dt->child); + break; + + case GRID_SIZE: /* 2 */ + elm_grid_size_get(dt->grid, &w, &h); + printf("size w=<%d> h=<%d>\n", w, h); + w = h = 100; /* grid size returns wrong values */ + w += 30; + h += 10; + + elm_grid_size_set(dt->grid, w, h); + break; + + case GRID_CLEAR: /* 3 */ + elm_grid_clear(dt->grid, EINA_TRUE); + break; + + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_grid) +{ + Evas_Object *bg, *gd, *bt, *rc, *en; + Api_Data *dt = malloc(sizeof(Api_Data)); + api->data = dt; + api->free_data = EINA_TRUE; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + gd = elm_grid_add(win); + elm_grid_size_set(gd, 100, 100); + elm_win_resize_object_add(win, gd); + evas_object_size_hint_weight_set(gd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + dt->grid = gd; + evas_object_show(gd); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_entry_set(en, "Entry text"); + elm_entry_single_line_set(en, 1); + elm_grid_pack(gd, en, 50, 10, 40, 10); + evas_object_show(en); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_entry_set(en, "Entry text 2"); + elm_entry_single_line_set(en, 1); + elm_grid_pack(gd, en, 60, 20, 30, 10); + evas_object_show(en); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_grid_pack(gd, api->bt, 30, 0, 40, 10); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button"); + elm_grid_pack(gd, bt, 0, 0, 20, 20); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button"); + elm_grid_pack(gd, bt, 10, 10, 40, 20); + dt->child = bt; + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button"); + elm_grid_pack(gd, bt, 10, 30, 20, 50); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button"); + elm_grid_pack(gd, bt, 80, 80, 20, 20); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Change"); + elm_grid_pack(gd, bt, 40, 40, 20, 20); + evas_object_smart_callback_add(bt, "clicked", _ch_grid, gd); + evas_object_show(bt); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rc, 128, 0, 0, 128); + elm_grid_pack(gd, rc, 40, 70, 20, 10); + evas_object_show(rc); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rc, 0, 128, 0, 128); + elm_grid_pack(gd, rc, 60, 70, 10, 10); + evas_object_show(rc); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rc, 0, 0, 128, 128); + elm_grid_pack(gd, rc, 40, 80, 10, 10); + evas_object_show(rc); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rc, 128, 0, 128, 128); + elm_grid_pack(gd, rc, 50, 80, 10, 10); + evas_object_show(rc); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rc, 128, 64, 0, 128); + elm_grid_pack(gd, rc, 60, 80, 10, 10); + evas_object_show(rc); + + evas_object_resize(win, 480, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_hover.c b/src/bin/test_hover.c new file mode 100644 index 0000000..74cd9ec --- /dev/null +++ b/src/bin/test_hover.c @@ -0,0 +1,162 @@ +#include +#include "tsuite.h" +static void +my_hover_bt(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *hv = data; + + evas_object_show(hv); +} + +TEST_START(test_hover) +{ + Evas_Object *bg, *bx, *bt, *hv, *ic; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + hv = elm_hover_add(win); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button"); + evas_object_smart_callback_add(bt, "clicked", my_hover_bt, hv); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_hover_parent_set(hv, win); + elm_hover_target_set(hv, bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Popup"); + elm_hover_content_set(hv, "middle", bt); + evas_object_show(bt); + + bx = elm_box_add(win); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Top 1"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + bt = elm_button_add(win); + elm_object_text_set(bt, "Top 2"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + bt = elm_button_add(win); + elm_object_text_set(bt, "Top 3"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_show(bx); + elm_hover_content_set(hv, "top", bx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Bottom"); + elm_hover_content_set(hv, "bottom", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Left"); + elm_hover_content_set(hv, "left", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Right"); + elm_hover_content_set(hv, "right", bt); + evas_object_show(bt); + + evas_object_size_hint_min_set(bg, 160, 160); + evas_object_size_hint_max_set(bg, 640, 640); + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + +TEST_START(test_hover2) +{ + Evas_Object *bg, *bx, *bt, *hv, *ic; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + hv = elm_hover_add(win); + elm_object_style_set(hv, "popout"); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button"); + evas_object_smart_callback_add(bt, "clicked", my_hover_bt, hv); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_hover_parent_set(hv, win); + elm_hover_target_set(hv, bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Popup"); + elm_hover_content_set(hv, "middle", bt); + evas_object_show(bt); + + bx = elm_box_add(win); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + bt = elm_button_add(win); + elm_object_text_set(bt, "Top 1"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + bt = elm_button_add(win); + elm_object_text_set(bt, "Top 2"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + bt = elm_button_add(win); + elm_object_text_set(bt, "Top 3"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(bx); + elm_hover_content_set(hv, "top", bx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Bot"); + elm_hover_content_set(hv, "bottom", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Left"); + elm_hover_content_set(hv, "left", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Right"); + elm_hover_content_set(hv, "right", bt); + evas_object_show(bt); + + evas_object_size_hint_min_set(bg, 160, 160); + evas_object_size_hint_max_set(bg, 640, 640); + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_hoversel.c b/src/bin/test_hoversel.c new file mode 100644 index 0000000..1f1d3ca --- /dev/null +++ b/src/bin/test_hoversel.c @@ -0,0 +1,190 @@ +#include +#include "tsuite.h" +enum _api_state +{ + HOVERSEL_HORIZ, + HOVERSEL_END, + HOVERSEL_LABAL_SET, + HOVERSEL_ICON_UNSET, + HOVERSEL_CLEAR_OPEN, + HOVERSEL_CLEAR, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + const Eina_List *items = elm_box_children_get(api->data); + if(!eina_list_count(items)) + return; + + /* use elm_box_children_get() to get list of children */ + switch(api->state) + { /* Put all api-changes under switch */ + case HOVERSEL_HORIZ: /* Make first hover horiz (0) */ + elm_hoversel_horizontal_set(eina_list_nth(items, 0), EINA_TRUE); + elm_hoversel_hover_begin(eina_list_nth(items, 0)); + break; + + case HOVERSEL_END: /* Make first hover horiz (1) */ + elm_hoversel_hover_begin(eina_list_nth(items, 1)); + elm_hoversel_hover_end(eina_list_nth(items, 1)); + break; + + case HOVERSEL_LABAL_SET: /* set second hover label (2) */ + elm_object_text_set(eina_list_nth(items, 1), "Label from API"); + break; + + case HOVERSEL_ICON_UNSET: /* 3 */ + elm_object_text_set(eina_list_nth(items, 5), "Label only"); + elm_hoversel_icon_unset(eina_list_nth(items, 5)); + break; + + case HOVERSEL_CLEAR_OPEN: /* 4 */ + elm_hoversel_hover_begin(eina_list_nth(items, 1)); + elm_hoversel_clear(eina_list_nth(items, 1)); + break; + + case HOVERSEL_CLEAR: /* 5 */ + elm_hoversel_clear(eina_list_nth(items, 0)); + break; + + case API_STATE_LAST: + break; + + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_hoversel) +{ + Evas_Object *bg, *bx, *bxx, *bt, *ic; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + api->data = bx; + evas_object_show(bx); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, bx); + + bt = elm_hoversel_add(win); +// FIXME: need to add horizontal hoversel theme to default some day +// elm_hoversel_horizontal_set(bt, 1); + elm_hoversel_hover_parent_set(bt, win); + elm_object_text_set(bt, "Labels"); + elm_hoversel_item_add(bt, "Item 1", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 2", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4 - Long Label Here", NULL, ELM_ICON_NONE, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_object_text_set(bt, "Some Icons"); + elm_hoversel_item_add(bt, "Item 1", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 2", NULL, ELM_ICON_NONE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", "home", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4", "close", ELM_ICON_STANDARD, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_object_text_set(bt, "All Icons"); + elm_hoversel_item_add(bt, "Item 1", "apps", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 2", "arrow_down", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", "home", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4", "close", ELM_ICON_STANDARD, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_object_text_set(bt, "All Icons"); + elm_hoversel_item_add(bt, "Item 1", "apps", ELM_ICON_STANDARD, NULL, NULL); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get()); + elm_hoversel_item_add(bt, "Item 2", buf, ELM_ICON_FILE, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", "home", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4", "close", ELM_ICON_STANDARD, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_object_text_set(bt, "Disabled Hoversel"); + elm_hoversel_item_add(bt, "Item 1", "apps", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 2", "close", ELM_ICON_STANDARD, NULL, NULL); + elm_object_disabled_set(bt, 1); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(bt, win); + elm_object_text_set(bt, "Icon + Label"); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_hoversel_icon_set(bt, ic); + evas_object_show(ic); + + elm_hoversel_item_add(bt, "Item 1", "apps", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 2", "arrow_down", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 3", "home", ELM_ICON_STANDARD, NULL, NULL); + elm_hoversel_item_add(bt, "Item 4", "close", ELM_ICON_STANDARD, NULL, NULL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_resize(win, 320, 300); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_icon.c b/src/bin/test_icon.c new file mode 100644 index 0000000..66785cf --- /dev/null +++ b/src/bin/test_icon.c @@ -0,0 +1,31 @@ +#include +#include "tsuite.h" + +static void +icon_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("clicked!\n"); +} + +TEST_START(test_icon) +{ + Evas_Object *ic; + char buf[PATH_MAX]; + + elm_win_alpha_set(win, 1); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + elm_icon_no_scale_set(ic, 1); + evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(ic, 0.5, 0.5); + elm_win_resize_object_add(win, ic); + evas_object_show(ic); + + evas_object_smart_callback_add(ic, "clicked", icon_clicked, NULL); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_icon_desktops.c b/src/bin/test_icon_desktops.c new file mode 100644 index 0000000..1746f07 --- /dev/null +++ b/src/bin/test_icon_desktops.c @@ -0,0 +1,98 @@ +#include +#include "tsuite.h" +static Elm_Genlist_Item_Class it_desk; + +static char * +desk_gl_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ +#ifdef ELM_EFREET + Efreet_Desktop *d = (Efreet_Desktop *)data; + return strdup(d->name); +#else + return NULL; + (void)data; +#endif +} +static Evas_Object * +desk_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ +#ifdef ELM_EFREET + Efreet_Desktop *d = (Efreet_Desktop *)data; + Evas_Object *ic; + + ic = elm_icon_add(obj); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + if (!(!strcmp(part, "elm.swallow.icon"))) return ic; + if (!d->icon) return ic; + elm_icon_standard_set(ic, d->icon); + return ic; +#else + return NULL; + (void)data; + (void)obj; + (void)part; +#endif +} +static void +desk_gl_del(void *data, Evas_Object *obj __UNUSED__) +{ +#ifdef ELM_EFREET + Efreet_Desktop *d = (Efreet_Desktop *)data; + efreet_desktop_free(d); +#else + return; + (void)data; +#endif +} + +#ifdef ELM_EFREET +static void +desktop_sel(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("sel\n"); +} +#endif + +TEST_START(test_icon_desktops) +{ + Evas_Object *bg, *gl; +#ifdef ELM_EFREET + Eina_List *desktops; +#endif + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + it_desk.item_style = "default"; + it_desk.func.label_get = desk_gl_label_get; + it_desk.func.content_get = desk_gl_content_get; + it_desk.func.state_get = NULL; + it_desk.func.del = desk_gl_del; + + gl = elm_genlist_add(win); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, gl); + evas_object_show(gl); + +#ifdef ELM_EFREET + if (elm_need_efreet()) + { + desktops = efreet_util_desktop_name_glob_list("*"); + if (desktops) + { + Efreet_Desktop *d; + + EINA_LIST_FREE(desktops, d) + elm_genlist_item_append(gl, &it_desk, d, + NULL, ELM_GENLIST_ITEM_NONE, + desktop_sel, NULL); + } + } +#endif + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_index.c b/src/bin/test_index.c new file mode 100644 index 0000000..3e3ead9 --- /dev/null +++ b/src/bin/test_index.c @@ -0,0 +1,349 @@ +#include +#include "tsuite.h" + +static Elm_Genlist_Item_Class itci; +char *gli_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__) +{ + char buf[256]; + int j = (long)data; + snprintf(buf, sizeof(buf), "%c%c", + 'A' + ((j >> 4) & 0xf), + 'a' + ((j ) & 0xf) + ); + return strdup(buf); +} + +void +index_changed2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + // called on a change but delayed in case multiple changes happen in a + // short timespan + elm_genlist_item_top_bring_in(event_info); +} + +void +index_changed(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + // this is calld on every change, no matter how often + // elm_genlist_item_bring_in(event_info); +} + +void +index_selected(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + // called on final select + elm_genlist_item_top_bring_in(event_info); +} + +struct _Idx_Data_Type +{ + Evas_Object *id; /* Pointer to Index */ + void *item; /* Item we use for search */ +}; +typedef struct _Idx_Data_Type Idx_Data_Type; + +enum _api_state +{ + INDEX_LEVEL_SET, + INDEX_ACTIVE_SET, + INDEX_APPEND_RELATIVE, + INDEX_PREPEND, + INDEX_ITEM_DEL, + INDEX_ITEM_FIND, + INDEX_CLEAR, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + Idx_Data_Type *d = api->data; + switch(api->state) + { /* Put all api-changes under switch */ + case INDEX_LEVEL_SET: /* 0 */ + elm_index_active_set(d->id, EINA_TRUE); + elm_index_item_level_set(d->id, (elm_index_item_level_get(d->id) ? 0 : 1)); + break; + + case INDEX_ACTIVE_SET: /* 1 */ + elm_index_active_set(d->id, EINA_FALSE); + break; + + case INDEX_APPEND_RELATIVE: /* 2 */ + elm_index_item_append_relative(d->id, "W", d->item, d->item); + break; + + case INDEX_PREPEND: /* 3 */ + elm_index_item_prepend(d->id, "D", d->item); + break; + + case INDEX_ITEM_DEL: /* 4 */ + elm_index_item_del(d->id, d->item); + break; + + case INDEX_ITEM_FIND: /* 5 */ + { + Elm_Index_Item *i = elm_index_item_find(d->id, d->item); + if(i) + { + printf("Item Find - Found Item.\n"); + elm_index_item_del(d->id, i); + } + } + break; + + case INDEX_CLEAR: /* 6 */ + elm_index_item_clear(d->id); + break; + + case API_STATE_LAST: + break; + + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_index) +{ + Evas_Object *bg, *bxx, *gl, *id; + Elm_Genlist_Item *it; + int i, j; + Idx_Data_Type *dt = malloc(sizeof(Idx_Data_Type)); + api->data = dt; + api->free_data = EINA_TRUE; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + gl = elm_genlist_add(win); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(gl); + + dt->id = id = elm_index_add(win); + evas_object_size_hint_weight_set(id, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(id, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, id); + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, gl); + + evas_object_show(id); + + itci.item_style = "default"; + itci.func.text_get = gli_text_get; + itci.func.content_get = NULL; + itci.func.state_get = NULL; + itci.func.del = NULL; + + j = 0; + for (i = 0; i < 100; i++) + { + it = elm_genlist_item_append(gl, &itci, + (void *)(long)j/* item data */, + NULL/* parent */, ELM_GENLIST_ITEM_NONE, + NULL/* func */, NULL/* func data */); + if (!(j & 0xf)) + { + char buf[32]; + + snprintf(buf, sizeof(buf), "%c", 'A' + ((j >> 4) & 0xf)); + elm_index_item_append(id, buf, it); + } + j += 2; + } + evas_object_smart_callback_add(id, "delay,changed", index_changed2, NULL); + evas_object_smart_callback_add(id, "changed", index_changed, NULL); + evas_object_smart_callback_add(id, "selected", index_selected, NULL); + elm_index_item_go(id, 0); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END + +/***********/ + +typedef struct _Test_Index2_Elements +{ + Evas_Object *entry, *lst, *id; +} Test_Index2_Elements; + +void +test_index2_del(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + /* FIXME it won't be called if elm_test main window is closed */ + free(data); +} + +int +test_index2_cmp(const void *data1, const void *data2) +{ + const char *label1, *label2; + const Elm_List_Item *it1 = data1; + const Elm_List_Item *it2 = data2; + + label1 = elm_list_item_label_get(it1); + label2 = elm_list_item_label_get(it2); + + return strcasecmp(label1, label2); +} + +int +test_index2_icmp(const void *data1, const void *data2) +{ + const char *label1, *label2; + const Elm_Index_Item *it1 = data1; + const Elm_Index_Item *it2 = data2; + + label1 = elm_index_item_letter_get(it1); + label2 = elm_index_item_letter_get(it2); + + return strcasecmp(label1, label2); +} + +void +test_index2_it_add(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Test_Index2_Elements *gui = data; + Elm_List_Item *it; + const char *label; + char letter[2]; + + label = elm_entry_entry_get(gui->entry); + snprintf(letter, sizeof(letter), "%c", label[0]); + it = elm_list_item_sorted_insert(gui->lst, label, NULL, NULL, NULL, NULL, + test_index2_cmp); + elm_index_item_sorted_insert(gui->id, letter, it, test_index2_icmp, + test_index2_cmp); + elm_list_go(gui->lst); + /* FIXME it's not showing the recently added item */ + elm_list_item_show(it); +} + +void +test_index2_it_del(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Test_Index2_Elements *gui = data; + const char *label, *label_next; + Elm_List_Item *it, *it_next; + + it = elm_list_selected_item_get(obj); + it_next = elm_list_item_next(it); + + if (!it_next) + { + elm_index_item_del(gui->id, it); + elm_list_item_del(it); + return; + } + + label = elm_list_item_label_get(it); + label_next = elm_list_item_label_get(it_next); + + if (label[0] == label_next[0]) + { + Elm_Index_Item *iit; + iit = elm_index_item_find(gui->id, it); + elm_index_item_data_set(iit, it_next); + } + else + elm_index_item_del(gui->id, it); + + elm_list_item_del(it); +} + +void +test_index2_id_changed(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + elm_list_item_show(event_info); +} + +TEST_START(test_index2) +{ + Evas_Object *bg, *box, *bt; + Test_Index2_Elements *gui; + + gui = malloc(sizeof(*gui)); + + evas_object_smart_callback_add(win, "delete-request", test_index2_del, gui); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + box = elm_box_add(win); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, box); + evas_object_show(box); + + gui->id = elm_index_add(win); + evas_object_size_hint_weight_set(gui->id, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, gui->id); + evas_object_smart_callback_add(gui->id, "delay,changed", + test_index2_id_changed, NULL); + evas_object_show(gui->id); + + gui->entry = elm_entry_add(win); + elm_entry_scrollable_set(gui->entry, EINA_TRUE); + elm_entry_entry_set(gui->entry, "Label"); + elm_entry_single_line_set(gui->entry, EINA_TRUE); + evas_object_size_hint_weight_set(gui->entry, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_fill_set(gui->entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, gui->entry); + evas_object_show(gui->entry); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Add"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, bt); + evas_object_smart_callback_add(bt, "clicked", test_index2_it_add, gui); + evas_object_show(bt); + + gui->lst = elm_list_add(win); + elm_box_pack_end(box, gui->lst); + evas_object_size_hint_weight_set(gui->lst, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(gui->lst, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(gui->lst, "selected", test_index2_it_del, + gui); + elm_list_go(gui->lst); + evas_object_show(gui->lst); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_inwin.c b/src/bin/test_inwin.c new file mode 100644 index 0000000..476324c --- /dev/null +++ b/src/bin/test_inwin.c @@ -0,0 +1,114 @@ +#include +#include "tsuite.h" + +enum _api_state +{ + CONTENT_UNSET, + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ + Evas_Object *t; + switch(api->state) + { + case CONTENT_UNSET: + t = elm_win_inwin_content_unset(api->data); + evas_object_del(t); + t = elm_label_add(elm_object_parent_widget_get(api->data)); + elm_object_text_set(t, "Content was unset.
DONE!"); + elm_win_inwin_content_set(api->data, t); + evas_object_show(t); + + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_inwin) +{ + Evas_Object *bg, *bxx, *inwin, *lb; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + inwin = elm_win_inwin_add(win); + api->data = inwin; + evas_object_show(inwin); + + bxx = elm_box_add(inwin); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + api->bt = elm_button_add(inwin); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This is an \"inwin\" - a window in a
" + "window. This is handy for quick popups
" + "you want centered, taking over the window
" + "until dismissed somehow. Unlike hovers they
" + "don't hover over their target."); + elm_box_pack_end(bxx, lb); + elm_win_inwin_content_set(inwin, bxx); + evas_object_show(lb); + + evas_object_resize(win, 320, 240); + evas_object_show(win); +} +TEST_END + +TEST_START(test_inwin2) +{ + Evas_Object *bg, *inwin, *lb; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + inwin = elm_win_inwin_add(win); + elm_object_style_set(inwin, "minimal_vertical"); + evas_object_show(inwin); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This is an \"inwin\" - a window in a
" + "window. This is handy for quick popups
" + "you want centered, taking over the window
" + "until dismissed somehow. Unlike hovers they
" + "don't hover over their target.
" + "
" + "This inwin style compacts itself vertically
" + "to the size of its contents minimum size."); + elm_win_inwin_content_set(inwin, lb); + evas_object_show(lb); + + evas_object_resize(win, 320, 240); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_label.c b/src/bin/test_label.c new file mode 100644 index 0000000..e7228a8 --- /dev/null +++ b/src/bin/test_label.c @@ -0,0 +1,68 @@ +#include +#include "tsuite.h" +TEST_START(test_label) +{ + Evas_Object *bg, *bx, *lb; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This is a small label" + ); + evas_object_size_hint_weight_set(lb, 0.0, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This is a larger label with newlines
" + "to make it bigger, bit it won't expand or wrap
" + "just be a block of text that can't change its
" + "formatting as it's fixed based on text
" + ); + evas_object_size_hint_weight_set(lb, 0.0, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + lb = elm_label_add(win); + elm_label_line_wrap_set(lb, ELM_WRAP_CHAR); + elm_object_text_set(lb, + "" + "This is more text designed to line-wrap here as " + "This object is resized horizontally. As it is " + "resized vertically though, nothing should change. " + "The amount of space allocated vertically should " + "change as horizontal size changes." + "" + ); + evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This small label set to wrap" + ); + evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + evas_object_resize(win, 320, 300); + + evas_object_show(bx); + evas_object_show(win); + elm_win_resize_object_add(win, bx); +} +TEST_END diff --git a/src/bin/test_launcher.c b/src/bin/test_launcher.c new file mode 100644 index 0000000..4705765 --- /dev/null +++ b/src/bin/test_launcher.c @@ -0,0 +1,906 @@ +#include +#include "tsuite.h" + +static void +mode_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *mb; + Eina_List *mbs, *l; + + mbs = evas_object_data_get(win, "mbs"); + EINA_LIST_FOREACH(mbs, l, mb) + { + if (elm_mapbuf_enabled_get(mb)) + elm_mapbuf_enabled_set(mb, 0); + else + elm_mapbuf_enabled_set(mb, 1); + } +} + +static void +full_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + elm_win_fullscreen_set(win, !elm_win_fullscreen_get(win)); +} + +static void +alpha_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *mb; + Eina_List *mbs, *l; + + mbs = evas_object_data_get(win, "mbs"); + EINA_LIST_FOREACH(mbs, l, mb) + { + elm_mapbuf_alpha_set(mb, elm_check_state_get(obj)); + } +} + +static void +smooth_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *mb; + Eina_List *mbs, *l; + + mbs = evas_object_data_get(win, "mbs"); + EINA_LIST_FOREACH(mbs, l, mb) + { + elm_mapbuf_smooth_set(mb, elm_check_state_get(obj)); + } +} + +static void +close_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_del(data); +} + +static Eina_Bool +tim_cb(void *data) +{ + Evas_Object *tb, *sc, *mb; + Eina_List *list, *l; + + evas_object_data_del(data, "timer"); + tb = evas_object_data_get(data, "tb"); + sc = evas_object_data_get(data, "sc"); + elm_object_scroll_freeze_push(sc); + evas_object_data_set(data, "dragging", (void *)(long)(1)); + evas_object_color_set(data, 255, 255, 255, 255); + list = (Eina_List *)evas_object_data_get + (elm_object_top_widget_get(data), "mbs"); + EINA_LIST_FOREACH(list, l, mb) + evas_object_color_set(mb, 128, 128, 128, 128); + elm_table_unpack(tb, data); + return EINA_FALSE; +} + +static void +ic_del_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Ecore_Timer *tim; + + tim = evas_object_data_get(obj, "timer"); + if (tim) + { + evas_object_data_del(obj, "timer"); + ecore_timer_del(tim); + } +} + +static void +ic_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ev = event_info; + Ecore_Timer *tim; + Evas_Coord x, y, w, h; + + evas_object_color_set(data, 128, 0, 0, 128); + + tim = evas_object_data_get(obj, "timer"); + if (tim) evas_object_data_del(obj, "timer"); + tim = ecore_timer_add(1.0, tim_cb, obj); + evas_object_data_set(obj, "timer", tim); + + evas_object_geometry_get(data, &x, &y, &w, &h); + evas_object_data_set(obj, "x", (void *)(long)(ev->canvas.x)); + evas_object_data_set(obj, "y", (void *)(long)(ev->canvas.y)); + evas_object_data_set(obj, "px", (void *)(long)(x)); + evas_object_data_set(obj, "py", (void *)(long)(y)); + + if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) + { + printf("double click %p\n", obj); + } +} + +static void +ic_up_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Up *ev = event_info; + Ecore_Timer *tim; + + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; + evas_object_color_set(data, 255, 255, 255, 255); + tim = evas_object_data_get(obj, "timer"); + if (tim) + { + evas_object_data_del(obj, "timer"); + ecore_timer_del(tim); + } + if (evas_object_data_get(obj, "dragging")) + { + Evas_Object *tb, *sc, *mb; + Eina_List *list, *l; + int tbx, tby; + + evas_object_data_del(obj, "dragging"); + tb = evas_object_data_get(obj, "tb"); + sc = evas_object_data_get(obj, "sc"); + elm_object_scroll_freeze_pop(sc); + tbx = (int)(long)evas_object_data_get(obj, "tbx"); + tby = (int)(long)evas_object_data_get(obj, "tby"); + elm_table_pack(tb, obj, tbx, tby, 1, 1); + list = (Eina_List *)evas_object_data_get + (elm_object_top_widget_get(obj), "mbs"); + EINA_LIST_FOREACH(list, l, mb) + evas_object_color_set(mb, 255, 255, 255, 255); + } +} + +static void +ic_move_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ev = event_info; + if (evas_object_data_get(obj, "dragging")) + { + Evas_Coord x, y, px, py; + + x = (Evas_Coord)(long)evas_object_data_get(obj, "x"); + y = (Evas_Coord)(long)evas_object_data_get(obj, "y"); + px = (Evas_Coord)(long)evas_object_data_get(obj, "px"); + py = (Evas_Coord)(long)evas_object_data_get(obj, "py"); + evas_object_move(obj, + px + ev->cur.canvas.x - x, + py + ev->cur.canvas.y - y); + } + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + { + Ecore_Timer *tim; + + tim = evas_object_data_get(obj, "timer"); + if (tim) + { + evas_object_data_del(obj, "timer"); + ecore_timer_del(tim); + } + evas_object_color_set(data, 255, 255, 255, 255); + return; + } +} + +TEST_START(test_launcher) +{ + Evas_Object *bg, *sc, *tb, *pad, *bt, *ic, *lb, *tb2, *mb, *ck, *bx, *bx2; + int i, j, k, n, m; + char buf[PATH_MAX]; + const char *names[] = + { + "Hello", "World", "Spam", "Egg", + "Ham", "Good", "Bad", "Milk", + "Smell", "Of", "Sky", "Gold", + "Hole", "Pig", "And", "Calm" + }; + Eina_List *mbs = NULL; + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", elm_app_data_dir_get()); + elm_bg_file_set(bg, buf, NULL); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_box_homogeneous_set(bx, EINA_TRUE); + elm_box_horizontal_set(bx, EINA_TRUE); + + sc = elm_scroller_add(win); + elm_scroller_bounce_set(sc, 1, 0); + elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + + n = 0; m = 0; + for (k = 0 ; k < 8; k++) + { + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, 0.0, 0.0); + evas_object_size_hint_align_set(tb, 0.5, 0.5); + + pad = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(pad, 470, 4); + evas_object_size_hint_weight_set(pad, 0.0, 0.0); + evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, pad, 1, 0, 5, 1); + + pad = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(pad, 470, 4); + evas_object_size_hint_weight_set(pad, 0.0, 0.0); + evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, pad, 1, 11, 5, 1); + + pad = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(pad, 4, 4); + evas_object_size_hint_weight_set(pad, 0.0, 0.0); + evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, pad, 0, 1, 1, 10); + + pad = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(pad, 4, 4); + evas_object_size_hint_weight_set(pad, 0.0, 0.0); + evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, pad, 6, 1, 1, 10); + + mb = elm_mapbuf_add(win); + elm_object_content_set(mb, tb); + evas_object_show(tb); + + for (j = 0; j < 5; j++) + { + for (i = 0; i < 5; i++) + { + ic = elm_icon_add(win); + elm_object_scale_set(ic, 0.5); + snprintf(buf, sizeof(buf), "%s/images/icon_%02i.png", elm_app_data_dir_get(), n); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_table_pack(tb, ic, 1 + i, 1 + (j * 2), 1, 1); + evas_object_show(ic); + + lb = elm_label_add(win); + elm_object_style_set(lb, "marker"); + elm_object_text_set(lb, names[m]); + evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(lb, 0.5, 0.5); + elm_table_pack(tb, lb, 1 + i, 1 + (j * 2) + 1, 1, 1); + evas_object_show(lb); + + evas_object_event_callback_add(ic, EVAS_CALLBACK_DEL, ic_del_cb, ic); + + evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_DOWN, ic_down_cb, ic); + evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_UP, ic_up_cb, ic); + evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_MOVE, ic_move_cb, ic); + + evas_object_data_set(ic, "lb", lb); + evas_object_data_set(ic, "tb", tb); + evas_object_data_set(ic, "sc", sc); + evas_object_data_set(ic, "bx", bx); + evas_object_data_set(ic, "mb", mb); + evas_object_data_set(ic, "tbx", (void *)(long)(1 + i)); + evas_object_data_set(ic, "tby", (void *)(long)(1 + (j * 2))); + + n++; if (n > 23) n = 0; + m++; if (m > 15) m = 0; + } + } + + elm_box_pack_end(bx, mb); + evas_object_show(mb); + + mbs = eina_list_append(mbs, mb); + } + + // fixme: free mbs + evas_object_data_set(win, "mbs", mbs); + + bx2 = elm_box_add(win); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(bx2, EINA_FALSE); + elm_win_resize_object_add(win, bx2); + evas_object_show(bx2); + + elm_object_content_set(sc, bx); + evas_object_show(bx); + + elm_scroller_page_relative_set(sc, 1.0, 1.0); + evas_object_show(sc); + + tb2 = elm_table_add(win); + evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_fill_set(tb2, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx2, tb2); + + elm_box_pack_end(bx2, sc); + + ck = elm_check_add(win); + elm_object_text_set(ck, "Map"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", mode_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.05, 0.99); + elm_table_pack(tb2, ck, 0, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "A"); + elm_check_state_set(ck, 1); + evas_object_smart_callback_add(ck, "changed", alpha_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.20, 0.99); + elm_table_pack(tb2, ck, 1, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "Smo"); + elm_check_state_set(ck, 1); + evas_object_smart_callback_add(ck, "changed", smooth_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.40, 0.99); + elm_table_pack(tb2, ck, 2, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "FS"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", full_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.5, 0.99); + elm_table_pack(tb2, ck, 3, 0, 1, 1); + evas_object_show(ck); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", close_cb, win); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.95, 0.99); + elm_table_pack(tb2, bt, 4, 0, 1, 1); + evas_object_show(bt); + + evas_object_show(tb2); + + evas_object_resize(win, 480, 800); + evas_object_show(win); +} +TEST_END + +TEST_START(test_launcher2) +{ + Evas_Object *bg, *sc, *bt, *tb2, *mb, *ck, *bx, *ly; + int k; + char buf[PATH_MAX]; + Eina_List *mbs = NULL; + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", elm_app_data_dir_get()); + elm_bg_file_set(bg, buf, NULL); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_box_homogeneous_set(bx, EINA_TRUE); + elm_box_horizontal_set(bx, EINA_TRUE); + + for (k = 0 ; k < 8; k++) + { + ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "layout"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 1"); + elm_object_part_content_set(ly, "element1", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 2"); + elm_object_part_content_set(ly, "element2", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 3"); + elm_object_part_content_set(ly, "element3", bt); + evas_object_show(bt); + + mb = elm_mapbuf_add(win); + elm_object_content_set(mb, ly); + evas_object_show(ly); + + elm_box_pack_end(bx, mb); + evas_object_show(mb); + + mbs = eina_list_append(mbs, mb); + } + + // fixme: free mbs + evas_object_data_set(win, "mbs", mbs); + + sc = elm_scroller_add(win); + elm_scroller_bounce_set(sc, 1, 0); + elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, sc); + + elm_object_content_set(sc, bx); + evas_object_show(bx); + + elm_scroller_page_relative_set(sc, 1.0, 1.0); + evas_object_show(sc); + + tb2 = elm_table_add(win); + evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, tb2); + + ck = elm_check_add(win); + elm_object_text_set(ck, "Map"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", mode_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.05, 0.99); + elm_table_pack(tb2, ck, 0, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "A"); + elm_check_state_set(ck, 1); + evas_object_smart_callback_add(ck, "changed", alpha_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.20, 0.99); + elm_table_pack(tb2, ck, 1, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "Smo"); + elm_check_state_set(ck, 1); + evas_object_smart_callback_add(ck, "changed", smooth_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.40, 0.99); + elm_table_pack(tb2, ck, 2, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "FS"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", full_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.5, 0.99); + elm_table_pack(tb2, ck, 3, 0, 1, 1); + evas_object_show(ck); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", close_cb, win); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.95, 0.99); + elm_table_pack(tb2, bt, 4, 0, 1, 1); + evas_object_show(bt); + + evas_object_show(tb2); + + evas_object_resize(win, 480, 800); + evas_object_show(win); +} +TEST_END + +static void +l3_mode_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *mb; + Eina_List *mbs, *l; + + mbs = evas_object_data_get(win, "mbs"); + EINA_LIST_FOREACH(mbs, l, mb) + { + if (elm_mapbuf_enabled_get(mb)) + elm_mapbuf_enabled_set(mb, 0); + else + elm_mapbuf_enabled_set(mb, 1); + } +} + +static void +l3_full_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + elm_win_fullscreen_set(win, !elm_win_fullscreen_get(win)); +} + +static void +l3_alpha_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *mb; + Eina_List *mbs, *l; + + mbs = evas_object_data_get(win, "mbs"); + EINA_LIST_FOREACH(mbs, l, mb) + { + elm_mapbuf_alpha_set(mb, elm_check_state_get(obj)); + } +} + +static void +l3_smooth_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *mb; + Eina_List *mbs, *l; + + mbs = evas_object_data_get(win, "mbs"); + EINA_LIST_FOREACH(mbs, l, mb) + { + elm_mapbuf_smooth_set(mb, elm_check_state_get(obj)); + } +} + +static void +l3_hidden_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *mb; + Eina_List *mbs, *l; + + mbs = evas_object_data_get(win, "mbs"); + EINA_LIST_FOREACH(mbs, l, mb) + { + if (evas_object_visible_get(mb)) evas_object_hide(mb); + else evas_object_show(mb); + } +} + +static void +l3_close_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_del(data); +} + +static Eina_Bool +l3_tim_cb(void *data) +{ + Evas_Object *ly, *ly2, *sc, *mb; + Eina_List *list, *l; + char buf[256]; + int slx, sly; + + evas_object_data_del(data, "timer"); + ly = evas_object_data_get(data, "ly"); + ly2 = evas_object_data_get(data, "ly2"); + sc = evas_object_data_get(data, "sc"); + elm_object_scroll_freeze_push(sc); + evas_object_data_set(data, "dragging", (void *)(long)1); + evas_object_color_set(data, 255, 255, 255, 255); + list = (Eina_List *)evas_object_data_get + (elm_object_top_widget_get(data), "mbs"); + EINA_LIST_FOREACH(list, l, mb) + evas_object_color_set(mb, 128, 128, 128, 128); + slx = (int)(long)evas_object_data_get(data, "slx"); + sly = (int)(long)evas_object_data_get(data, "sly"); + snprintf(buf, sizeof(buf), "slot.%i.%i", slx, sly); + elm_object_content_part_unset(ly, buf); + edje_object_signal_emit(elm_layout_edje_get(ly2), "drag", "app"); + return EINA_FALSE; +} + +static void +l3_ic_del_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Ecore_Timer *tim; + + tim = evas_object_data_get(obj, "timer"); + if (tim) + { + evas_object_data_del(obj, "timer"); + ecore_timer_del(tim); + } +} + +static void +l3_ic_down_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ev = event_info; + Ecore_Timer *tim; + Evas_Coord x, y, w, h; + Evas_Object *ly2; + + tim = evas_object_data_get(obj, "timer"); + if (tim) evas_object_data_del(obj, "timer"); + tim = ecore_timer_add(1.0, l3_tim_cb, obj); + evas_object_data_set(obj, "timer", tim); + + ly2 = evas_object_data_get(obj, "ly2"); + evas_object_geometry_get(ly2, &x, &y, &w, &h); + evas_object_data_set(obj, "x", (void *)(long)(ev->canvas.x)); + evas_object_data_set(obj, "y", (void *)(long)(ev->canvas.y)); + evas_object_data_set(obj, "px", (void *)(long)(x)); + evas_object_data_set(obj, "py", (void *)(long)(y)); + + edje_object_signal_emit(elm_layout_edje_get(ly2), "click", "app"); + + if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) + { + printf("double click %p\n", obj); + } +} + +static void +l3_ic_up_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Up *ev = event_info; + Ecore_Timer *tim; + Evas_Object *ly2; + + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; + + ly2 = evas_object_data_get(obj, "ly2"); + tim = evas_object_data_get(obj, "timer"); + if (tim) + { + evas_object_data_del(obj, "timer"); + ecore_timer_del(tim); + } + if (evas_object_data_get(obj, "dragging")) + { + Evas_Object *ly, *sc, *mb; + Eina_List *list, *l; + int slx, sly; + char buf[256]; + + evas_object_data_del(obj, "dragging"); + ly = evas_object_data_get(obj, "ly"); + sc = evas_object_data_get(obj, "sc"); + elm_object_scroll_freeze_pop(sc); + slx = (int)(long)evas_object_data_get(obj, "slx"); + sly = (int)(long)evas_object_data_get(obj, "sly"); + snprintf(buf, sizeof(buf), "slot.%i.%i", slx, sly); + elm_object_part_content_set(ly, buf, ly2); + list = (Eina_List *)evas_object_data_get + (elm_object_top_widget_get(obj), "mbs"); + EINA_LIST_FOREACH(list, l, mb) + evas_object_color_set(mb, 255, 255, 255, 255); + edje_object_signal_emit(elm_layout_edje_get(ly2), "drop", "app"); + } + else + edje_object_signal_emit(elm_layout_edje_get(ly2), "unclick", "app"); +} + +static void +l3_ic_move_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ev = event_info; + Evas_Object *ly2; + + ly2 = evas_object_data_get(obj, "ly2"); + + if (evas_object_data_get(obj, "dragging")) + { + Evas_Coord x, y, px, py; + + x = (Evas_Coord)(long)evas_object_data_get(obj, "x"); + y = (Evas_Coord)(long)evas_object_data_get(obj, "y"); + px = (Evas_Coord)(long)evas_object_data_get(obj, "px"); + py = (Evas_Coord)(long)evas_object_data_get(obj, "py"); + evas_object_move(ly2, + px + ev->cur.canvas.x - x, + py + ev->cur.canvas.y - y); + } + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + { + Ecore_Timer *tim; + + tim = evas_object_data_get(obj, "timer"); + if (tim) + { + evas_object_data_del(obj, "timer"); + ecore_timer_del(tim); + } + edje_object_signal_emit(elm_layout_edje_get(ly2), "cancel", "app"); + return; + } +} + +TEST_START(test_launcher3) +{ + Evas_Object *bg, *sc, *tb, *pad, *bt, *ic, *tb2, *mb, *ck, *bx, *bx2, *ly, *ly2; + int i, j, k, n, m; + char buf[PATH_MAX]; + const char *names[] = + { + "Hello", "World", "Spam", "Egg", + "Ham", "Good", "Bad", "Milk", + "Smell", "Of", "Sky", "Gold", + "Hole", "Pig", "And", "Calm" + }; + Eina_List *mbs = NULL; + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", elm_app_data_dir_get()); + elm_bg_file_set(bg, buf, NULL); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_homogeneous_set(bx, EINA_TRUE); + elm_box_horizontal_set(bx, EINA_TRUE); + + sc = elm_scroller_add(win); + elm_scroller_bounce_set(sc, 1, 0); + elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + + n = 0; m = 0; + for (k = 0 ; k < 8; k++) + { + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + pad = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(pad, 450, 10); + elm_table_pack(tb, pad, 1, 0, 1, 1); + + pad = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(pad, 450, 10); + elm_table_pack(tb, pad, 1, 2, 1, 1); + + pad = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(pad, 10, 450); + elm_table_pack(tb, pad, 0, 1, 1, 1); + + pad = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(pad, 10, 450); + elm_table_pack(tb, pad, 2, 1, 1, 1); + + mb = elm_mapbuf_add(win); + mbs = eina_list_append(mbs, mb); + + elm_object_content_set(mb, tb); + evas_object_show(tb); + elm_box_pack_end(bx, mb); + evas_object_show(mb); + + ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "launcher_page"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, ly, 1, 1, 1, 1); + evas_object_show(ly); + + for (j = 0; j < 4; j++) + { + for (i = 0; i < 4; i++) + { + ly2 = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly2, buf, "launcher_icon"); + evas_object_size_hint_weight_set(ly2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ly2, EVAS_HINT_FILL, EVAS_HINT_FILL); + edje_object_part_text_set(elm_layout_edje_get(ly2), "label", names[m]); + + ic = elm_icon_add(win); + elm_object_scale_set(ic, 0.5); + snprintf(buf, sizeof(buf), "%s/images/icon_%02i.png", elm_app_data_dir_get(), n); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_object_part_content_set(ly2, "slot", ic); + evas_object_show(ic); + + evas_object_event_callback_add(ic, EVAS_CALLBACK_DEL, l3_ic_del_cb, ic); + + evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_DOWN, l3_ic_down_cb, ic); + evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_UP, l3_ic_up_cb, ic); + evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_MOVE, l3_ic_move_cb, ic); + + evas_object_data_set(ic, "ly", ly); + evas_object_data_set(ic, "ly2", ly2); + evas_object_data_set(ic, "sc", sc); + evas_object_data_set(ic, "bx", bx); + evas_object_data_set(ic, "mb", mb); + evas_object_data_set(ic, "slx", (void *)(long)(i)); + evas_object_data_set(ic, "sly", (void *)(long)(j)); + + snprintf(buf, sizeof(buf), "slot.%i.%i", i, j); + elm_object_part_content_set(ly, buf, ly2); + evas_object_show(ly2); + + n++; if (n > 23) n = 0; + m++; if (m > 15) m = 0; + } + } + } + + // fixme: free mbs + evas_object_data_set(win, "mbs", mbs); + + bx2 = elm_box_add(win); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(bx2, EINA_FALSE); + elm_win_resize_object_add(win, bx2); + evas_object_show(bx2); + + elm_object_content_set(sc, bx); + evas_object_show(bx); + + elm_scroller_page_relative_set(sc, 1.0, 1.0); + evas_object_show(sc); + + tb2 = elm_table_add(win); + evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_fill_set(tb2, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx2, tb2); + + elm_box_pack_end(bx2, sc); + + ck = elm_check_add(win); + elm_object_text_set(ck, "Map"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", l3_mode_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.05, 0.99); + elm_table_pack(tb2, ck, 0, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "A"); + elm_check_state_set(ck, 1); + evas_object_smart_callback_add(ck, "changed", l3_alpha_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.20, 0.99); + elm_table_pack(tb2, ck, 1, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "Smo"); + elm_check_state_set(ck, 1); + evas_object_smart_callback_add(ck, "changed", l3_smooth_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.40, 0.99); + elm_table_pack(tb2, ck, 2, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "FS"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", l3_full_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.5, 0.99); + elm_table_pack(tb2, ck, 3, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_object_text_set(ck, "Hid"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", l3_hidden_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.5, 0.99); + elm_table_pack(tb2, ck, 4, 0, 1, 1); + evas_object_show(ck); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", l3_close_cb, win); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.95, 0.99); + elm_table_pack(tb2, bt, 5, 0, 1, 1); + evas_object_show(bt); + + evas_object_show(tb2); + + evas_object_resize(win, 480, 800); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_layout.c b/src/bin/test_layout.c new file mode 100644 index 0000000..e731a24 --- /dev/null +++ b/src/bin/test_layout.c @@ -0,0 +1,74 @@ +#include +#include +#include "tsuite.h" +static void +_clicked_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + elm_object_part_text_set(data, "text", elm_object_text_get(obj)); +} + +TEST_START(test_layout) +{ + Evas_Object *bg, *box, *ly, *bt; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + box = elm_box_add(win); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, box); + evas_object_show(box); + + ly = elm_layout_add(win); + elm_layout_theme_set(ly, "layout", "application", "titlebar"); + elm_object_text_set(ly, "Some title"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, ly); + evas_object_show(ly); + + bt = elm_icon_add(win); + elm_icon_standard_set(bt, "chat"); + evas_object_size_hint_min_set(bt, 20, 20); + elm_layout_icon_set(ly, bt); + + bt = elm_icon_add(win); + elm_icon_standard_set(bt, "close"); + evas_object_size_hint_min_set(bt, 20, 20); + elm_layout_end_set(ly, bt); + + ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "layout"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(box, ly); + //elm_win_resize_object_add(win, ly); + evas_object_show(ly); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 1"); + elm_object_part_content_set(ly, "element1", bt); + evas_object_smart_callback_add(bt, "clicked", _clicked_cb, ly); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 2"); + elm_object_part_content_set(ly, "element2", bt); + evas_object_smart_callback_add(bt, "clicked", _clicked_cb, ly); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 3"); + elm_object_part_content_set(ly, "element3", bt); + evas_object_smart_callback_add(bt, "clicked", _clicked_cb, ly); + evas_object_show(bt); + + elm_layout_part_cursor_set(ly, "text", ELM_CURSOR_WATCH); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_list.c b/src/bin/test_list.c new file mode 100644 index 0000000..918cd89 --- /dev/null +++ b/src/bin/test_list.c @@ -0,0 +1,1000 @@ +#include +#include +#include "tsuite.h" +static void +my_show_it(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + elm_list_item_show(data); +} + +static void +scroll_top(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + printf("Top edge!\n"); +} + +static void +scroll_bottom(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + printf("Bottom edge!\n"); +} + +static void +scroll_left(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + printf("Left edge!\n"); +} + +static void +scroll_right(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + printf("Right edge!\n"); +} + +enum _api_state +{ + ITEM_PREPEND, /* 0 */ + ITEM_INSERT_BEFORE, /* 1 */ + ITEM_INSERT_AFTER, /* 2 */ + ITEM_SEPARATOR_SET, /* 3 */ + LIST_ITEM_DEL, /* 4 */ + SCROLLER_POLICY_SET_ON, + SCROLLER_POLICY_SET_OFF, /* Back to AUTO next */ + TOOLTIP_TEXT_SET, /* 7 */ + TOOLTIP_UNSET, /* 8 */ + ITEM_CURSOR_SET, /* 9 */ + ITEM_CURSOR_STYLE_SET, + DISABLED_SET, /* 11 */ + MODE_SET_COMPRESS, /* 12 */ + MODE_SET_LIMIT, /* 13 */ + MODE_SET_EXPAND, /* 14 */ + HORIZONTAL_SET, /* 15 */ + BOUNCE_SET, /* 16 */ + LIST_CLEAR, /* 17 */ + API_STATE_LAST +}; +typedef enum _api_state api_state; + +static void +set_api_state(api_data *api) +{ +/** HOW TO TEST ************************ +0 ITEM PREPEND +Scroll to end +1 INSERT BEFORE +Scroll to end +2 INSERT AFTER +3 INSERT SEPERATOR +Scroll to end +4 ITEM DEL +5 POLICY ON, BOUNCE_SET(TRUE, TRUE) +6 POLICY OFF +Scroll to end +7 TOOLTIP last-item +8 Cancel tootip +9 Curosr set on last item +10 Cursor style set last item +11 DISABLE last item +12 MODE COMPRESS +13 MODE LIMIT +14 MODE EXPAND +15 HORIZ SET +16 VERT MODE, BOUNCE(TRUE, FALSE) try to bounce on Y-axis +17 List clear +*** HOW TO TEST ***********************/ + Evas_Object *li = api->data; + + switch(api->state) + { /* Put all api-changes under switch */ + case ITEM_PREPEND: /* 0 */ + { + const Eina_List *items = elm_list_items_get(li); + elm_list_item_prepend(li, "PREPEND", NULL, NULL, NULL, NULL); + elm_list_go(li); + elm_list_item_bring_in(eina_list_nth(items, 0)); + } + break; + + case ITEM_INSERT_BEFORE: /* 1 */ + { + const Eina_List *items = elm_list_items_get(li); + if(eina_list_count(items)) + { + elm_list_item_insert_before(li, + eina_list_nth(items, eina_list_count(items)-1), + "1-before-last", NULL, NULL, NULL, NULL); + elm_list_go(li); + elm_list_item_bring_in(eina_list_data_get(eina_list_last(items))); + } + } + break; + + case ITEM_INSERT_AFTER: /* 2 */ + { + const Eina_List *items = elm_list_items_get(li); + if(eina_list_count(items)) + { + elm_list_item_insert_after(li, + eina_list_nth(items, eina_list_count(items)-2), + "insert-after", NULL, NULL, NULL, NULL); + elm_list_go(li); + elm_list_item_bring_in(eina_list_data_get(eina_list_last(items))); + } + } + break; + + case ITEM_SEPARATOR_SET: /* 3 */ + { + const Eina_List *items = elm_list_items_get(li); + if(eina_list_count(items)) + { + elm_list_item_separator_set(eina_list_nth(items, eina_list_count(items)/2), EINA_TRUE); + elm_list_item_bring_in(eina_list_nth(items, eina_list_count(items)/2)); + elm_list_go(li); + } + } + break; + + case LIST_ITEM_DEL: /* 4 */ + { + const Eina_List *items = elm_list_items_get(li); + if(eina_list_count(items)) + { + elm_list_item_del(eina_list_data_get(eina_list_last(items))); + } + } + break; + + case SCROLLER_POLICY_SET_ON: /* 5 */ + elm_list_bounce_set(li, EINA_TRUE, EINA_TRUE); + elm_list_scroller_policy_set(li, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON); + break; + + case SCROLLER_POLICY_SET_OFF: /* Back to AUTO next (6) */ + elm_list_scroller_policy_set(li, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + break; + + case TOOLTIP_TEXT_SET: /* 7 */ + { + const Eina_List *items = elm_list_items_get(li); + if(eina_list_count(items)) + { + elm_list_item_tooltip_text_set(eina_list_data_get(eina_list_last(items)), "Tooltip set from API"); + } + elm_list_scroller_policy_set(li, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_AUTO); + } + break; + + case TOOLTIP_UNSET: /* 8 */ + { + const Eina_List *items = elm_list_items_get(li); + if(eina_list_count(items)) + { + elm_list_item_tooltip_unset(eina_list_data_get(eina_list_last(items))); + } + } + break; + + case ITEM_CURSOR_SET: /* 9 */ + { + const Eina_List *items = elm_list_items_get(li); + if(eina_list_count(items)) + { + elm_list_item_cursor_set(eina_list_data_get(eina_list_last(items)), ELM_CURSOR_HAND2); + } + } + break; + + case ITEM_CURSOR_STYLE_SET: /* 10 */ + { + const Eina_List *items = elm_list_items_get(li); + if(eina_list_count(items)) + { + elm_list_item_cursor_style_set(eina_list_data_get(eina_list_last(items)), "transparent"); + } + } + break; + + case DISABLED_SET: /* 11 */ + { + const Eina_List *items = elm_list_items_get(li); + if(eina_list_count(items)) + { + elm_list_item_disabled_set(eina_list_data_get(eina_list_last(items)), EINA_TRUE); + } + } + break; + + case MODE_SET_COMPRESS: /* 12 */ + elm_list_mode_set(li, ELM_LIST_COMPRESS); + break; + + case MODE_SET_LIMIT: /* 13 */ + elm_list_mode_set(li, ELM_LIST_LIMIT); + break; + + case MODE_SET_EXPAND: /* 14 */ + elm_list_mode_set(li, ELM_LIST_EXPAND); + break; + + case HORIZONTAL_SET: /* 15 */ + elm_list_mode_set(li, ELM_LIST_SCROLL); /* return to default mode */ + elm_list_horizontal_set(li, EINA_TRUE); + break; + + case BOUNCE_SET: /* 16 */ + elm_list_horizontal_set(li, EINA_FALSE); + elm_list_bounce_set(li, EINA_TRUE, EINA_FALSE); + break; + + case LIST_CLEAR: /* 17 */ + elm_list_clear(li); + break; + + case API_STATE_LAST: + break; + + default: + return; + } +} + +static void +_api_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ /* Will add here a SWITCH command containing code to modify test-object */ + /* in accordance a->state value. */ + api_data *a = data; + char str[128]; + + printf("clicked event on API Button: api_state=<%d>\n", a->state); + set_api_state(a); + a->state++; + sprintf(str, "Next API function (%u)", a->state); + elm_object_text_set(a->bt, str); + elm_object_disabled_set(a->bt, a->state == API_STATE_LAST); +} + +TEST_START(test_list) +{ + Evas_Object *bg, *li, *ic, *ic2, *bx, *bxx, *tb2, *bt; + char buf[PATH_MAX]; + Elm_List_Item *it1, *it2, *it3, *it4, *it5; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bxx = elm_box_add(win); + elm_win_resize_object_add(win, bxx); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bxx); + + li = elm_list_add(win); + elm_list_mode_set(li, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL); + api->data = li; + + api->bt = elm_button_add(win); + elm_object_text_set(api->bt, "Next API function"); + evas_object_smart_callback_add(api->bt, "clicked", _api_bt_clicked, (void *) api); + elm_box_pack_end(bxx, api->bt); + elm_object_disabled_set(api->bt, api->state == API_STATE_LAST); + evas_object_show(api->bt); + + elm_box_pack_end(bxx, li); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 1, 1); + it1 = elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + elm_list_item_append(li, "world", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "edit"); + elm_icon_scale_set(ic, 0, 0); + elm_list_item_append(li, ".", ic, NULL, NULL, NULL); + + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "delete"); + elm_icon_scale_set(ic, 0, 0); + ic2 = elm_icon_add(win); + elm_icon_standard_set(ic2, "clock"); + elm_icon_scale_set(ic2, 0, 0); + it2 = elm_list_item_append(li, "How", ic, ic2, NULL, NULL); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, EINA_TRUE); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + elm_list_item_append(li, "are", bx, NULL, NULL, NULL); + + elm_list_item_append(li, "you", NULL, NULL, NULL, NULL); + it3 = elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "out", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "there", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "today", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "?", NULL, NULL, NULL, NULL); + it4 = elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "are", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "some", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "more", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "items", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL); + it5 = elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + evas_object_show(li); + + tb2 = elm_table_add(win); + evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, tb2); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Hello"); + evas_object_smart_callback_add(bt, "clicked", my_show_it, it1); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.5); + elm_table_pack(tb2, bt, 0, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "How"); + evas_object_smart_callback_add(bt, "clicked", my_show_it, it2); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.5); + elm_table_pack(tb2, bt, 0, 1, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "doing"); + evas_object_smart_callback_add(bt, "clicked", my_show_it, it3); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.5); + elm_table_pack(tb2, bt, 0, 2, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Here"); + evas_object_smart_callback_add(bt, "clicked", my_show_it, it4); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.5); + elm_table_pack(tb2, bt, 0, 3, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Maybe this..."); + evas_object_smart_callback_add(bt, "clicked", my_show_it, it5); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.5); + elm_table_pack(tb2, bt, 0, 4, 1, 1); + evas_object_show(bt); + + evas_object_show(tb2); + + evas_object_resize(win, 320, 300); + evas_object_show(win); + + evas_object_smart_callback_add(li, "scroll,edge,top", scroll_top, NULL); + evas_object_smart_callback_add(li, "scroll,edge,bottom", scroll_bottom, NULL); + evas_object_smart_callback_add(li, "scroll,edge,left", scroll_left, NULL); + evas_object_smart_callback_add(li, "scroll,edge,right", scroll_right, NULL); +} +TEST_END + +TEST_START(test_list_horizontal) +{ + Evas_Object *bg, *li, *ic, *ic2, *bx, *tb2, *bt; + char buf[PATH_MAX]; + Elm_List_Item *it1, *it2, *it3, *it4; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + li = elm_list_add(win); + elm_list_horizontal_set(li, EINA_TRUE); + elm_list_mode_set(li, ELM_LIST_LIMIT); + elm_win_resize_object_add(win, li); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 1, 1); + it1 = elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + elm_list_item_append(li, "world", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "edit"); + elm_icon_scale_set(ic, 0, 0); + elm_list_item_append(li, ".", ic, NULL, NULL, NULL); + + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "delete"); + elm_icon_scale_set(ic, 0, 0); + ic2 = elm_icon_add(win); + elm_icon_standard_set(ic2, "clock"); + elm_icon_scale_set(ic2, 0, 0); + it2 = elm_list_item_append(li, "How", ic, ic2, NULL, NULL); + + bx = elm_box_add(win); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + elm_list_item_append(li, "are", bx, NULL, NULL, NULL); + + elm_list_item_append(li, "you", NULL, NULL, NULL, NULL); + it3 = elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "out", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "there", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "today", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "?", NULL, NULL, NULL, NULL); + + it4 = elm_list_item_append(li, "And", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "here", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "we", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "are", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "done", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "with", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "items.", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + evas_object_show(li); + + tb2 = elm_table_add(win); + evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, tb2); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Hello"); + evas_object_smart_callback_add(bt, "clicked", my_show_it, it1); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.5, 0.9); + elm_table_pack(tb2, bt, 0, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "How"); + evas_object_smart_callback_add(bt, "clicked", my_show_it, it2); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.5, 0.9); + elm_table_pack(tb2, bt, 1, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "doing"); + evas_object_smart_callback_add(bt, "clicked", my_show_it, it3); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.5, 0.9); + elm_table_pack(tb2, bt, 2, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "And"); + evas_object_smart_callback_add(bt, "clicked", my_show_it, it4); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.5, 0.9); + elm_table_pack(tb2, bt, 3, 0, 1, 1); + evas_object_show(bt); + + evas_object_show(tb2); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END + +/***********/ + +static void +my_li2_clear(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + elm_list_clear(data); +} + +static void +my_li2_sel(void *data __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + Elm_List_Item *it = elm_list_selected_item_get(obj); + elm_list_item_selected_set(it, 0); +// elm_list_item_selected_set(event_info, 0); +} + +TEST_START(test_list2) +{ + Evas_Object *bg, *li, *ic, *ic2, *bx, *bx2, *bt; + char buf[PATH_MAX]; + Elm_List_Item *it; + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_bg_file_set(bg, buf, NULL); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + li = elm_list_add(win); + evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_list_mode_set(li, ELM_LIST_LIMIT); +// elm_list_multi_select_set(li, 1); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + it = elm_list_item_append(li, "Hello", ic, NULL, my_li2_sel, NULL); + elm_list_item_selected_set(it, 1); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + elm_list_item_append(li, "world", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "edit"); + elm_icon_scale_set(ic, 0, 0); + elm_list_item_append(li, ".", ic, NULL, NULL, NULL); + + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "delete"); + elm_icon_scale_set(ic, 0, 0); + ic2 = elm_icon_add(win); + elm_icon_standard_set(ic2, "clock"); + elm_icon_scale_set(ic2, 0, 0); + elm_list_item_append(li, "How", ic, ic2, NULL, NULL); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx2, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.0); + elm_box_pack_end(bx2, ic); + evas_object_show(ic); + elm_list_item_append(li, "are", bx2, NULL, NULL, NULL); + + elm_list_item_append(li, "you", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "out", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "there", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "today", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "?", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "are", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "some", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "more", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "items", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Longer label.", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + elm_box_pack_end(bx, li); + evas_object_show(li); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Clear"); + evas_object_smart_callback_add(bt, "clicked", my_li2_clear, li); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END + +/***********/ + +static void +_bt_clicked(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + printf("button was clicked\n"); +} + +static void +_it_clicked(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + printf("item was clicked\n"); +} + +TEST_START(test_list3) +{ + Evas_Object *bg, *li, *ic, *ic2, *bx; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + li = elm_list_add(win); + elm_win_resize_object_add(win, li); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_list_mode_set(li, ELM_LIST_COMPRESS); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + ic2 = elm_button_add(win); + elm_object_text_set(ic2, "Click me"); + evas_object_smart_callback_add(ic2, "clicked", _bt_clicked, NULL); + evas_object_propagate_events_set(ic2, 0); + elm_list_item_append(li, "Hello", ic, ic2, _it_clicked, NULL); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + ic2 = elm_button_add(win); + elm_object_text_set(ic2, "Click me"); + evas_object_smart_callback_add(ic2, "clicked", _bt_clicked, NULL); + elm_list_item_append(li, "world", ic, ic2, _it_clicked, NULL); + + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "edit"); + elm_icon_scale_set(ic, 0, 0); + elm_list_item_append(li, ".", ic, NULL, NULL, NULL); + + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "delete"); + elm_icon_scale_set(ic, 0, 0); + ic2 = elm_icon_add(win); + elm_icon_standard_set(ic2, "clock"); + elm_icon_scale_set(ic2, 0, 0); + elm_list_item_append(li, "How", ic, ic2, NULL, NULL); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, EINA_TRUE); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + elm_list_item_append(li, "are", bx, NULL, NULL, NULL); + elm_list_item_append(li, "you", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "out", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "there", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "today", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "?", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "are", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "some", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "more", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "items", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + evas_object_show(li); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END + +/////////////////////////////////////////////////////////////////////////////////////// + +struct Pginfo +{ + Evas_Object *pager, *win; +}; + +static void +test_list4_back_cb(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + struct Pginfo *info = data; + if (!info) return; + + elm_pager_content_pop(info->pager); +} + +static void +test_list4_swipe(void *data, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Evas_Object *box, *entry, *button; + struct Pginfo *info = data; + char *item_data; + if ((!event_info) || (!data)) return; + + item_data = elm_list_item_data_get(event_info); + + box = elm_box_add(info->win); + elm_box_horizontal_set(box, EINA_FALSE); + elm_box_homogeneous_set(box, EINA_FALSE); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + entry = elm_entry_add(info->win); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_editable_set(entry, EINA_FALSE); + elm_entry_entry_set(entry, item_data); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(entry); + + button = elm_button_add(info->win); + elm_object_text_set(button, "back"); + evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0); + evas_object_smart_callback_add(button, "clicked", test_list4_back_cb, info); + evas_object_show(button); + + elm_box_pack_start(box, entry); + elm_box_pack_end(box, button); + + elm_pager_content_push(info->pager, box); +} + +TEST_START(test_list4) +{ + Evas_Object *bg, *li, *ic, *ic2, *pager; + static struct Pginfo info = {NULL, NULL}; + char buf[PATH_MAX]; + + info.win = win; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + pager = elm_pager_add(win); + elm_win_resize_object_add(win, pager); + evas_object_size_hint_weight_set(pager, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(pager, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(pager); + info.pager = pager; + + li = elm_list_add(win); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_list_mode_set(li, ELM_LIST_COMPRESS); + evas_object_smart_callback_add(li, "swipe", test_list4_swipe, &info); + elm_pager_content_push(pager, li); + + static char pf_data[] = "Pink Floyd were formed in 1965, and originally consisted of university" \ + "students Roger Waters, Nick Mason, Richard Wright, and Syd Barrett. The group were a popular" \ + "fixture on London's underground music scene, and under Barrett's leadership released two " \ + "charting singles, \"Arnold Layne\" and \"See Emily Play\", and a successful debut album, " \ + "ThePiper at the Gates of Dawn. In 1968, guitarist and singer David Gilmour joined the " \ + "line-up. Barrett was soon removed, due to his increasingly erratic behaviour. Following " \ + "Barrett's departure, bass player and singer Roger Waters became the band's lyricist and " \ + "conceptual leader, with Gilmour assuming lead guitar and much of the vocals. With this " \ + "line-up, Floyd went on to achieve worldwide critical and commercial success with the " \ + "conceptalbums The Dark Side of the Moon, Wish You Were Here, Animals, and The Wall."; + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/mystrale.jpg", elm_app_data_dir_get()); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + elm_list_item_append(li, "Pink Floyd", ic, NULL, NULL, &pf_data); + + static char ds_data[] = "Dire Straits were a British rock band, formed by Mark Knopfler " \ + "(lead vocals and lead guitar), his younger brother David Knopfler (rhythm guitar and " \ + "backing vocals), John Illsley (bass guitar and backing vocals), and Pick Withers (drums " \ + "and percussion), and managed by Ed Bicknell, active between 1977 and 1995. Although the " \ + "band was formed in an era when punk rock was at the forefront, Dire Straits played a more " + "bluesy style, albeit with a stripped-down sound that appealed to audiences weary of the " \ + "overproduced stadium rock of the 1970s.[citation needed] In their early days, Mark and " \ + "David requested that pub owners turn down their sound so that patrons could converse " \ + "while the band played, an indication of their unassuming demeanor. Despite this oddly " \ + "self-effacing approach to rock and roll, Dire Straits soon became hugely successful, with " \ + "their first album going multi-platinum globally."; + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/mystrale_2.jpg", elm_app_data_dir_get()); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + elm_list_item_append(li, "Dire Straits", ic, NULL, NULL, &ds_data); + + static char uh_data[] = "Uriah Heep are an English hard rock band. The band released several " \ + "commercially successful albums in the 1970s such as Uriah Heep Live (1973), but their " \ + "audience declined by the 1980s, to the point where they became essentially a cult band in " \ + "the United States and United Kingdom. Uriah Heep maintain a significant following in " \ + "Germany, the Netherlands, Scandinavia, the Balkans, Japan and Russia, where they still " \ + "perform at stadium-sized venues."; + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/icon_17.png", elm_app_data_dir_get()); + elm_icon_scale_set(ic, 1, 1); + elm_icon_file_set(ic, buf, NULL); + elm_list_item_append(li, "Uriah Heep", ic, NULL, NULL, &uh_data); + + static char r_data[] = "Rush is a Canadian rock band formed in August 1968, in the Willowdale " \ + "neighbourhood of Toronto, Ontario. The band is composed of bassist, keyboardist, and lead " \ + "vocalist Geddy Lee, guitarist Alex Lifeson, and drummer and lyricist Neil Peart. The band " \ + "and its membership went through a number of re-configurations between 1968 and 1974, " \ + "achieving their current form when Peart replaced original drummer John Rutsey in July 1974, " \ + "two weeks before the group's first United States tour."; + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/icon_21.png", elm_app_data_dir_get()); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + ic2 = elm_icon_add(win); + elm_icon_standard_set(ic2, "clock"); + elm_icon_scale_set(ic2, 0, 0); + elm_list_item_append(li, "Rush", ic, ic2, NULL, &r_data); + + elm_list_go(li); + + evas_object_show(li); + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END + +///////////////////////////////////////////////////////////////////////////////////////// +struct list5_data_cb +{ + Evas_Object *win, *list; +}; + +static void +test_list5_item_del(void *data, + Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + elm_list_item_del(data); +} + +static void +test_list5_swipe(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Evas_Object *button; + struct list5_data_cb *info = elm_list_item_data_get(event_info); + + if (elm_list_item_end_get(event_info)) return; + + button = elm_button_add(info->win); + elm_object_text_set(button, "delete"); + evas_object_propagate_events_set(button, 0); + evas_object_smart_callback_add(button, "clicked", test_list5_item_del, + event_info); + elm_list_item_end_set(event_info, button); +} + +TEST_START(test_list5) +{ + Evas_Object *bg, *li; + static struct list5_data_cb info; + + info.win = win; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + li = elm_list_add(win); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_list_mode_set(li, ELM_LIST_COMPRESS); + evas_object_smart_callback_add(li, "swipe", test_list5_swipe, NULL); + elm_win_resize_object_add(win, li); + evas_object_show(li); + info.list = li; + + elm_list_item_append(li, "Network", NULL, NULL, NULL, &info); + elm_list_item_append(li, "Audio", NULL, NULL, NULL, &info); + + elm_list_go(li); + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END + diff --git a/src/bin/test_map.c b/src/bin/test_map.c new file mode 100644 index 0000000..e8fa6b8 --- /dev/null +++ b/src/bin/test_map.c @@ -0,0 +1,798 @@ +#include +#include "tsuite.h" +#define SOURCE_MAX 10 +#define MARKER_MAX 1000 +#define NAME_ENTRY_TEXT "Enter freeform address" + +typedef struct Map_Source +{ + Evas_Object *map; + char *source_name; +} Map_Source; + +static Elm_Map_Marker_Class *itc1, *itc2, *itc_parking; +static Elm_Map_Group_Class *itc_group1, *itc_group2, *itc_group_parking; + +static Evas_Object *rect, *menu, *fs_win; +static int nb_elts; +/*static Elm_Map_Marker *markers[MARKER_MAX];*/ +static Elm_Map_Marker *route_from, *route_to; +static Elm_Map_Route *route; +static Elm_Map_Name *name; +static Evas_Object *track; +static const char **source_names = NULL; +static Evas_Coord old_x, old_y; +static Evas_Coord old_d; +static Map_Source ms[SOURCE_MAX]; + +struct _Test_Data +{ + char *data1; + char *data2; + char *data3; + char *data4; + char *data5; + char *data6; + char *data7; + char *data8; + char *data9; + char *data10; + char *data11; +}; +typedef struct _Test_Data Test_Data; + +static char *data3; /* used in _marker_get */ + +static Evas_Object * _marker_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data); +static Evas_Object * _group_icon_get(Evas_Object *obj, void *data); + +static void +#ifdef ELM_EMAP +my_map_gpx_fileselector_done(void *data, Evas_Object *obj __UNUSED__, void *event_info) +#else +my_map_gpx_fileselector_done(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +#endif +{ + const char *selected = event_info; + + if (selected) + { + printf("Selected file: %s\n", selected); +#ifdef ELM_EMAP + EMap_Route *emap = emap_route_gpx_new(selected); + track = elm_map_track_add(data, emap); +#else + printf("libEMap is required !\n"); +#endif + } + evas_object_del(fs_win); +} + +static char * +_get_str(char *dest, const char *str) +{ /* dest should be not null and big enough */ + sprintf(dest, "%s/%s", elm_app_data_dir_get(), str); + return dest; +} + +static void +my_map_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("clicked\n"); +} + +static void +my_map_press(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("press\n"); +} + +static void +my_map_longpressed(void *data, Evas_Object *obj __UNUSED__, void *event_info) +{ + double lon, lat; + Evas_Coord ox, oy, x, y, w, h; + int zoom; + Evas_Event_Mouse_Down *down = (Evas_Event_Mouse_Down *)event_info; + if (!down) return; + + evas_object_geometry_get(data, &ox, &oy, &w, &h); + zoom = elm_map_zoom_get(data); + elm_map_geo_region_get(obj, &lon, &lat); + elm_map_utils_convert_geo_into_coord(obj, lon, lat, pow(2.0, zoom) * 256, &x, &y); + x += down->canvas.x - (w / 2) - ox; + y += down->canvas.y - (h / 2) - oy; + elm_map_utils_convert_coord_into_geo(obj, x, y, pow(2.0, zoom) * 256, &lon, &lat); + + name = elm_map_utils_convert_coord_into_name(data, lon, lat); +} + +static void +my_map_clicked_double(void *data, Evas_Object *obj, void *event_info) +{ + double lon, lat; + double flon, flat, tlon, tlat; + Evas_Coord ox, oy, x, y, w, h, rx, ry, tx, ty; + double d; + int zoom; + char buf[1024]; + Evas_Coord size; + Evas_Event_Mouse_Down *down = (Evas_Event_Mouse_Down *)event_info; + if (!down) return; + + evas_object_geometry_get(data, &ox, &oy, &w, &h); + zoom = elm_map_zoom_get(data); + if (zoom < 5) return; + size = pow(2.0, zoom) * 256; + elm_map_geo_region_get(obj, &lon, &lat); + elm_map_utils_convert_geo_into_coord(obj, lon, lat, size, &x, &y); + + rx = x; + ry = y; + x += down->canvas.x - ((float)w * 0.5) - ox; + y += down->canvas.y - ((float)h * 0.5) - oy; + elm_map_rotate_get(data, &d, NULL, NULL); + elm_map_utils_rotate_coord(data, x, y, rx, ry, -d, &tx, &ty); + elm_map_utils_convert_coord_into_geo(obj, tx, ty, size, &lon, &lat); + + itc1 = elm_map_marker_class_new(data); + + elm_map_marker_class_del_cb_set(itc1, NULL); + + itc_group1 = elm_map_group_class_new(data); + elm_map_group_class_icon_cb_set(itc_group1, _group_icon_get); + elm_map_group_class_data_set(itc_group1, _get_str(buf,"images/bubble.png")); + elm_map_group_class_style_set(itc_group1, "empty"); + elm_map_group_class_zoom_displayed_set(itc_group1, 5); + + if (route_from && route_to) + { + elm_map_marker_remove(route_from); + route_from = NULL; + elm_map_marker_remove(route_to); + route_to = NULL; + elm_map_route_remove(route); + } + + if (!route_from) route_from = elm_map_marker_add(data, lon, lat, itc1, itc_group1, NULL); + else route_to = elm_map_marker_add(data, lon, lat, itc1, itc_group1, NULL); + + if (route_from && route_to) + { + elm_map_marker_region_get(route_from, &flon, &flat); + elm_map_marker_region_get(route_to, &tlon, &tlat); + route = elm_map_route_add(data, ELM_MAP_ROUTE_TYPE_MOTOCAR, ELM_MAP_ROUTE_METHOD_FASTEST, flon, flat, tlon, tlat); + elm_map_route_color_set(route, 255, 0, 0, 255); + } +} + +static void +my_map_load_detail(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("load,detail\n"); +} + +static void +my_map_loaded_detail(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("loaded,detail\n"); +} + +static void +my_map_zoom_start(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("zoom,start\n"); +} + +static void +my_map_zoom_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("zoom,stop\n"); +} + +static void +my_map_zoom_change(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("zoom,change\n"); +} + +static void +my_map_anim_start(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("anim,start\n"); +} + +static void +my_map_anim_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("anim,stop\n"); +} + +static void +my_map_drag_start(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_smart_callback_del(data, "longpressed", my_map_longpressed); +} + +static void +my_map_drag_stop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_smart_callback_add(data, "longpressed", my_map_longpressed, data); +} + +static void +my_map_scroll(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + double lon, lat; + elm_map_geo_region_get(obj, &lon, &lat); + printf("scroll longitude : %f latitude : %f\n", lon, lat); +} + +static void +my_map_downloaded(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + int try_num, finish_num; + elm_map_utils_downloading_status_get(data, &try_num, &finish_num); + printf("downloaded : %d / %d\n", finish_num, try_num); +} + +static void +my_map_route_load(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("route_load\n"); +} + +static void +my_map_route_loaded(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + double d; + const char *w, *n; + d = elm_map_route_distance_get(route); + printf("route distance = %lf km\n", d); + + w = elm_map_route_waypoint_get(route); + if (w) printf("[waypoints]\n%s\n", w); + + n = elm_map_route_node_get(route); + if (n) printf("[nodes]\n%s\n", n); +} + +static void +my_map_name_load(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("name_load\n"); +} + +static void +my_map_name_loaded(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + if (!name) return; + double lon, lat; + const char *addr = elm_map_name_address_get(name); + elm_map_name_region_get(name, &lon, &lat); + if (addr) + { + printf("name of [lon = %lf, lat = %lf] is %s\n", lon, lat, addr); + if ((lon != 0.0) && (lat !=0.0)) + { + Eina_Bool b = elm_map_paused_get(data); + elm_map_paused_set(data, EINA_TRUE); + elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); + elm_map_geo_region_show(data, lon, lat); + elm_map_zoom_set(data, 18); + elm_map_paused_set(data, b); + } + } + elm_map_name_remove(name); +} + +static void +map_show_urmatt(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Eina_Bool b = elm_map_paused_get(data); + elm_map_paused_set(data, EINA_TRUE); + elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); + elm_map_geo_region_show(data,7.325201, 48.526813); + elm_map_zoom_set(data, 12); + elm_map_paused_set(data, b); +} + +static void +map_bring_seoul(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_map_geo_region_bring_in(data, 126.977969, 37.566535); +} + +static void +map_paused_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_map_paused_set(data, EINA_TRUE); +} + +static void +map_paused_unset(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_map_paused_set(data, EINA_FALSE); +} + +static void +map_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + int zoom; + + zoom = elm_map_zoom_get(data) + 1; + elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); + elm_map_zoom_set(data, zoom); +} + +static void +map_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + int zoom; + + zoom = elm_map_zoom_get(data) - 1; + elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_MANUAL); + elm_map_zoom_set(data, zoom); +} + +static void +map_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FIT); +} + +static void +map_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_map_zoom_mode_set(data, ELM_MAP_ZOOM_MODE_AUTO_FILL); +} + +static void +map_track_add(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *fs, *bg, *vbox, *hbox, *sep; + + fs_win = elm_win_add(NULL, "fileselector", ELM_WIN_BASIC); + elm_win_title_set(fs_win, "File Selector"); + elm_win_autodel_set(fs_win, 1); + + bg = elm_bg_add(fs_win); + elm_win_resize_object_add(fs_win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + vbox = elm_box_add(fs_win); + elm_win_resize_object_add(fs_win, vbox); + evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(vbox); + + fs = elm_fileselector_add(fs_win); + elm_fileselector_is_save_set(fs, EINA_TRUE); + elm_fileselector_expandable_set(fs, EINA_FALSE); + elm_fileselector_path_set(fs, getenv("HOME")); + evas_object_size_hint_weight_set(fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(vbox, fs); + evas_object_show(fs); + + evas_object_smart_callback_add(fs, "done", my_map_gpx_fileselector_done, data); + + sep = elm_separator_add(fs_win); + elm_separator_horizontal_set(sep, EINA_TRUE); + elm_box_pack_end(vbox, sep); + evas_object_show(sep); + + hbox = elm_box_add(fs_win); + elm_box_horizontal_set(hbox, EINA_TRUE); + elm_box_pack_end(vbox, hbox); + evas_object_show(hbox); + + evas_object_resize(fs_win, 240, 350); + evas_object_show(fs_win); +} + + +static void +map_track_remove(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_map_track_remove(data, track); +} + +static void +map_rotate_cw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + double d; + Evas_Coord x, y, w, h; + float half_w, half_h; + evas_object_geometry_get(data, &x, &y, &w, &h); + half_w = (float)w * 0.5; + half_h = (float)h * 0.5; + + elm_map_rotate_get(data, &d, NULL, NULL); + d += 15.0; + elm_map_rotate_set(data, d, x + half_w, y + half_h); +} + +static void +map_rotate_ccw(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + double d; + Evas_Coord x, y, w, h; + float half_w, half_h; + evas_object_geometry_get(data, &x, &y, &w, &h); + half_w = (float)w * 0.5; + half_h = (float)h * 0.5; + + elm_map_rotate_get(data, &d, NULL, NULL); + d -= 15.0; + elm_map_rotate_set(data, d, x + half_w, y + half_h); +} + +static void +map_rotate_reset(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Coord x, y, w, h; + float half_w, half_h; + evas_object_geometry_get(data, &x, &y, &w, &h); + half_w = (float)w * 0.5; + half_h = (float)h * 0.5; + + elm_map_rotate_set(data, 0.0, x + half_w, y + half_h); +} + +static void +map_zoom_min_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_map_source_zoom_min_set(data, 1); +} + +static void +map_zoom_max_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_map_source_zoom_max_set(data, 10); +} + +static void +map_source(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Map_Source *s = data; + + if (!s) return; + elm_map_source_name_set(s->map, s->source_name); +} + +static Evas_Object * +_marker_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data) +{ + char *d = data; + + Evas_Object *bx = elm_box_add(obj); + evas_object_show(bx); + + if (d == data3) + { + Evas_Object *icon = elm_icon_add(obj); + elm_icon_file_set(icon, d, NULL); + evas_object_show(icon); + + Evas_Object *o = elm_button_add(obj); + elm_object_part_content_set(o, "icon", icon); + evas_object_show(o); + elm_box_pack_end(bx, o); + } + else + { + Evas_Object *o = evas_object_image_add(evas_object_evas_get(obj)); + evas_object_image_file_set(o, d, NULL); + evas_object_image_filled_set(o, EINA_TRUE); + evas_object_size_hint_min_set(o, 64, 64); + evas_object_show(o); + elm_box_pack_end(bx, o); + + Evas_Object *lbl = elm_label_add(obj); + elm_object_text_set(lbl, "Wolves Go !"); + evas_object_show(lbl); + elm_box_pack_end(bx, lbl); + } + + return bx; +} + +static Evas_Object * +_icon_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data) +{ + char *d = data; + + Evas_Object *icon = elm_icon_add(obj); + elm_icon_file_set(icon, d, NULL); + evas_object_show(icon); + + return icon; +} + +static Evas_Object * +_group_icon_get(Evas_Object *obj, void *data) +{ + char *file = data; + + Evas_Object *icon = elm_icon_add(obj); + elm_icon_file_set(icon, file, NULL); + evas_object_show(icon); + + return icon; +} + +static void +_map_move_resize_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + int x,y,w,h; + + evas_object_geometry_get(data,&x,&y,&w,&h); + evas_object_resize(rect,w,h); + evas_object_move(rect,x,y); +} + +static void +_populate(void *data, Elm_Object_Item *menu_it) +{ + int idx; + + if ((!data) || (!menu_it) || (!source_names)) return; + for (idx = 0; source_names[idx]; idx++) + { + if (idx >= SOURCE_MAX) break; + ms[idx].map = data; + ms[idx].source_name = strdup(source_names[idx]); + elm_menu_item_add(menu, menu_it, "", source_names[idx], map_source, + &ms[idx]); + } +} + +static void +_map_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *down = event_info; + Elm_Object_Item *menu_it; + if (!down) return; + + if (down->button == 2) + { + old_x = down->canvas.x; + old_y = down->canvas.y; + old_d = 0.0; + } + else if (down->button == 3) + { + menu = elm_menu_add(obj); + menu_it = elm_menu_item_add(menu, NULL, NULL, "Source", NULL, NULL); + _populate(data, menu_it); + elm_menu_item_add(menu, NULL, NULL, "Show Urmatt", map_show_urmatt, data); + elm_menu_item_add(menu, NULL, NULL, "Bring Seoul", map_bring_seoul, data); + elm_menu_item_add(menu, NULL, NULL, "Paused Set", map_paused_set, data); + elm_menu_item_add(menu, NULL, NULL, "Paused Unset", map_paused_unset, data); + elm_menu_item_add(menu, NULL, NULL, "Zoom +", map_zoom_in, data); + elm_menu_item_add(menu, NULL, NULL, "Zoom -", map_zoom_out, data); + elm_menu_item_add(menu, NULL, NULL, "Zoom Fit", map_zoom_fit, data); + elm_menu_item_add(menu, NULL, NULL, "Zoom Fill", map_zoom_fill, data); + elm_menu_item_add(menu, NULL, NULL, "Add Track", map_track_add, data); + elm_menu_item_add(menu, NULL, NULL, "Remove Track", map_track_remove, data); + elm_menu_item_add(menu, NULL, NULL, "Add Marker", NULL, NULL); + elm_menu_item_add(menu, NULL, NULL, "Rotate CW", map_rotate_cw, data); + elm_menu_item_add(menu, NULL, NULL, "Rotate CCW", map_rotate_ccw, data); + elm_menu_item_add(menu, NULL, NULL, "Reset Rotate", map_rotate_reset, data); + elm_menu_item_add(menu, NULL, NULL, "Set Zoom Min to 1", map_zoom_min_set, data); + elm_menu_item_add(menu, NULL, NULL, "Set Zoom Max to 10", map_zoom_max_set, data); + + elm_menu_move(menu, down->canvas.x, down->canvas.y); + evas_object_show(menu); + } +} + +static void +_map_mouse_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Evas_Event_Mouse_Move *move = event_info; + Evas_Coord x, y, w, h; + float half_w, half_h; + int d, d_diff; + double cur_d; + if (!move) return; + + if (move->buttons == 2) + { + evas_object_geometry_get(data, &x, &y, &w, &h); + half_w = (float)w * 0.5; + half_h = (float)h * 0.5; + elm_map_rotate_get(data, &cur_d, NULL, NULL); + + d = move->cur.canvas.x - old_x; + if (!old_d) old_d = d; + else + { + d_diff = old_d - d; + if (d_diff > 0) + { + old_d --; + cur_d += 1.0; + } + else if (d_diff < 0) + { + old_d ++; + cur_d -= 1.0; + } + old_d = d; + elm_map_rotate_set(data, cur_d, x + half_w, y + half_h); + } + } +} + +static void +_map_mouse_up(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Evas_Event_Mouse_Up *up = event_info; + if (!up) return; + + if (up->button == 2) + { + old_x = 0; + old_y = 0; + } +} + +static void +_win_del(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Test_Data *tdata = data; + if (!data) return; + + free(tdata->data1); + free(tdata->data2); + free(tdata->data3); + free(tdata->data4); + free(tdata->data5); + free(tdata->data6); + free(tdata->data7); + free(tdata->data8); + free(tdata->data9); + free(tdata->data10); + free(tdata->data11); + + free(tdata); +} + +TEST_START(test_map) +{ + Evas_Object *bg, *map; + int idx = 0; + char buf[1024]; + + Test_Data *tdata = malloc(sizeof(Test_Data)); + tdata->data1 = strdup(_get_str(buf, "images/logo.png")); + tdata->data2 = strdup(_get_str(buf, "images/logo_small.png")); + data3 = tdata->data3 = strdup(_get_str(buf, "images/panel_01.jpg")); + tdata->data4 = strdup(_get_str(buf, "images/plant_01.jpg")); + tdata->data5 = strdup(_get_str(buf, "images/rock_01.jpg")); + tdata->data6 = strdup(_get_str(buf, "images/rock_02.jpg")); + tdata->data7 = strdup(_get_str(buf, "images/sky_01.jpg")); + tdata->data8 = strdup(_get_str(buf, "images/sky_02.jpg")); + tdata->data9 = strdup(_get_str(buf, "images/sky_03.jpg")); + tdata->data10 = strdup(_get_str(buf, "images/sky_03.jpg")); + tdata->data11= strdup(_get_str(buf, "images/wood_01.jpg")); + + evas_object_smart_callback_add(win, "delete,request", _win_del, tdata); + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + map = elm_map_add(win); + if (map) + { + srand(time(NULL)); + + source_names = elm_map_source_names_get(map); + + if (!source_names) return; + printf("map sources [ "); + for (idx = 0; source_names[idx] ; idx++) printf("%s ", source_names[idx]); + printf("]\n"); + + evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, map); + evas_object_data_set(map, "window", win); + + // + itc1 = elm_map_marker_class_new(map); + elm_map_marker_class_get_cb_set(itc1, _marker_get); + elm_map_marker_class_del_cb_set(itc1, NULL); + + itc2 = elm_map_marker_class_new(map); + elm_map_marker_class_get_cb_set(itc2, _marker_get); + elm_map_marker_class_del_cb_set(itc2, NULL); + elm_map_marker_class_style_set(itc2, "radio2"); + + itc_parking = elm_map_marker_class_new(map); + elm_map_marker_class_get_cb_set(itc_parking, _marker_get); + elm_map_marker_class_del_cb_set(itc_parking, NULL); + elm_map_marker_class_icon_cb_set(itc_parking, _icon_get); + elm_map_marker_class_style_set(itc_parking, "empty"); + // + + // + itc_group1 = elm_map_group_class_new(map); + elm_map_group_class_data_set(itc_group1, + _get_str(buf, "images/plant_01.jpg")); + + itc_group2 = elm_map_group_class_new(map); + elm_map_group_class_style_set(itc_group2, "radio2"); + elm_map_group_class_zoom_displayed_set(itc_group1, 3); + + itc_group_parking = elm_map_group_class_new(map); + elm_map_group_class_icon_cb_set(itc_group_parking, _group_icon_get); + elm_map_group_class_data_set(itc_group_parking, + _get_str(buf, "images/parking.png")); + elm_map_group_class_style_set(itc_group_parking, "empty"); + elm_map_group_class_zoom_displayed_set(itc_group_parking, 5); + // + + rect = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rect, 0, 0, 0, 0); + evas_object_repeat_events_set(rect,1); + evas_object_show(rect); + evas_object_raise(rect); + + evas_object_event_callback_add(map, EVAS_CALLBACK_RESIZE, + _map_move_resize_cb, map); + evas_object_event_callback_add(map, EVAS_CALLBACK_MOVE, + _map_move_resize_cb, map); + evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_DOWN, + _map_mouse_down, map); + evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_MOVE, + _map_mouse_move, map); + evas_object_event_callback_add(map, EVAS_CALLBACK_MOUSE_UP, + _map_mouse_up, map); + + elm_map_marker_add(map, 2.352, 48.857, itc1, itc_group1, tdata->data1); + elm_map_marker_add(map, 2.355, 48.857, itc1, itc_group1, tdata->data3); + elm_map_marker_add(map, 3, 48.857, itc2, itc_group1, tdata->data2); + elm_map_marker_add(map, 2.352, 49, itc2, itc_group1, tdata->data1); + + elm_map_marker_add(map, 7.31451, 48.857127, itc1, itc_group1, tdata->data10); + elm_map_marker_add(map, 7.314704, 48.857119, itc1, itc_group1, tdata->data4); + elm_map_marker_add(map, 7.314704, 48.857119, itc2, itc_group1, tdata->data5); + elm_map_marker_add(map, 7.31432, 48.856785, itc2, itc_group1, tdata->data6); + elm_map_marker_add(map, 7.3148, 48.85725, itc1, itc_group2, tdata->data7); + elm_map_marker_add(map, 7.316445, 48.8572210000694, itc1, itc_group1, tdata->data8); + elm_map_marker_add(map, 7.316527000125, 48.85609, itc2, itc_group2, tdata->data9); + elm_map_marker_add(map, 7.3165409990833, 48.856078, itc2, itc_group1, tdata->data11); + elm_map_marker_add(map, 7.319812, 48.856561, itc2, itc_group2, tdata->data10); + + nb_elts = 13; + + evas_object_smart_callback_add(map, "clicked", my_map_clicked, win); + evas_object_smart_callback_add(map, "press", my_map_press, win); + evas_object_smart_callback_add(map, "longpressed", my_map_longpressed, map); + evas_object_smart_callback_add(map, "clicked,double", my_map_clicked_double, map); + evas_object_smart_callback_add(map, "load,detail", my_map_load_detail, win); + evas_object_smart_callback_add(map, "loaded,detail", my_map_loaded_detail, win); + evas_object_smart_callback_add(map, "zoom,start", my_map_zoom_start, win); + evas_object_smart_callback_add(map, "zoom,stop", my_map_zoom_stop, win); + evas_object_smart_callback_add(map, "zoom,change", my_map_zoom_change, win); + evas_object_smart_callback_add(map, "scroll,anim,start", my_map_anim_start, win); + evas_object_smart_callback_add(map, "scroll,anim,stop", my_map_anim_stop, win); + evas_object_smart_callback_add(map, "scroll,drag,start", my_map_drag_start, map); + evas_object_smart_callback_add(map, "scroll,drag,stop", my_map_drag_stop, map); + evas_object_smart_callback_add(map, "scroll", my_map_scroll, win); + evas_object_smart_callback_add(map, "downloaded", my_map_downloaded, map); + evas_object_smart_callback_add(map, "route,load", my_map_route_load, map); + evas_object_smart_callback_add(map, "route,loaded", my_map_route_loaded, map); + evas_object_smart_callback_add(map, "name,load", my_map_name_load, map); + evas_object_smart_callback_add(map, "name,loaded", my_map_name_loaded, map); + + evas_object_show(map); + } + + evas_object_resize(win, 800, 800); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_menu.c b/src/bin/test_menu.c new file mode 100644 index 0000000..9672bf5 --- /dev/null +++ b/src/bin/test_menu.c @@ -0,0 +1,121 @@ +#include +#include "tsuite.h" +static Evas_Object *bg, *menu, *rect; + +static void +_show(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Evas_Event_Mouse_Down *ev = event_info; + elm_menu_move(data, ev->canvas.x, ev->canvas.y); + evas_object_show(data); +} + +static void +_populate_4(Elm_Object_Item *menu_it) +{ + Elm_Object_Item *menu_it2; + + elm_menu_item_add(menu, menu_it, "go-bottom", "menu 2", NULL, NULL); + elm_menu_item_add(menu, menu_it, "go-first", "menu 3", NULL, NULL); + elm_menu_item_separator_add(menu, menu_it); + menu_it2 = elm_menu_item_add(menu, menu_it, "go-last", "Disabled item", NULL, + NULL); + elm_object_item_disabled_set(menu_it2, EINA_TRUE); + menu_it2 = elm_menu_item_add(menu, menu_it, "go-next", "Disabled item", NULL, + NULL); + elm_object_item_disabled_set(menu_it2, EINA_TRUE); + menu_it2 = elm_menu_item_add(menu, menu_it, "go-up", "Disabled item", NULL, + NULL); + elm_object_item_disabled_set(menu_it2, EINA_TRUE); +} + +static void +_populate_3(Elm_Object_Item *menu_it) +{ + Elm_Object_Item *menu_it2; + + elm_menu_item_add(menu, menu_it, "media-eject", "menu 2", NULL, NULL); + elm_menu_item_add(menu, menu_it, "media-playback-start", "menu 3", NULL, + NULL); + elm_menu_item_separator_add(menu, menu_it); + menu_it2 = elm_menu_item_add(menu, menu_it, "media-playback-stop", + "Disabled item", NULL, NULL); + elm_object_item_disabled_set(menu_it2, EINA_TRUE); +} + +static void +_populate_2(Elm_Object_Item *menu_it) +{ + Elm_Object_Item *menu_it2, *menu_it3; + + elm_menu_item_add(menu, menu_it, "system-reboot", "menu 2", NULL, NULL); + menu_it2 = elm_menu_item_add(menu, menu_it, "system-shutdown", "menu 3", + NULL, NULL); + _populate_3(menu_it2); + + elm_menu_item_separator_add(menu, menu_it); + elm_menu_item_separator_add(menu, menu_it); + elm_menu_item_separator_add(menu, menu_it); + elm_menu_item_separator_add(menu, menu_it); + elm_menu_item_separator_add(menu, menu_it); + elm_menu_item_separator_add(menu, menu_it); + elm_menu_item_separator_add(menu, menu_it); + + menu_it2 = elm_menu_item_add(menu, menu_it, "system-lock-screen", "menu 2", + NULL, NULL); + elm_menu_item_separator_add(menu, menu_it); + + menu_it3 = elm_menu_item_add(menu, menu_it, "system-run", "Disabled item", + NULL, NULL); + elm_object_item_disabled_set(menu_it3, EINA_TRUE); + + _populate_4(menu_it2); +} + +static void +_populate_1(Evas_Object *win, Elm_Object_Item *menu_it) +{ + Elm_Object_Item *menu_it2; + Evas_Object *radio; + + radio = elm_radio_add(win); + elm_radio_state_value_set(radio, 0); + elm_radio_value_set(radio, 0); + elm_object_text_set(radio, "radio in menu"); + menu_it2 = elm_menu_item_add(menu, menu_it, "object-rotate-left", "menu 1", + NULL, NULL); + elm_menu_item_add_object(menu, menu_it, radio, NULL, NULL); + + _populate_2(menu_it2); +} + +TEST_START(test_menu) +{ + Elm_Object_Item *menu_it; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + rect = evas_object_rectangle_add(evas_object_evas_get(win)); + elm_win_resize_object_add(win, rect); + evas_object_color_set(rect, 0, 0, 0, 0); + evas_object_show(rect); + + menu = elm_menu_add(win); + elm_menu_item_add(menu, NULL, NULL, "first item", NULL, NULL); + + menu_it = elm_menu_item_add(menu, NULL, "mail-reply-all", "second item", + NULL, NULL); + _populate_1(win, menu_it); + + elm_menu_item_add(menu, menu_it, "window-new", "sub menu", NULL, NULL); + + evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _show, menu); + + evas_object_resize(win, 350, 200); + evas_object_show(win); +} +TEST_END + diff --git a/src/bin/test_naviframe.c b/src/bin/test_naviframe.c new file mode 100644 index 0000000..dd325d7 --- /dev/null +++ b/src/bin/test_naviframe.c @@ -0,0 +1,241 @@ +#include +#include "tsuite.h" + +struct _Test_Data +{ + char *img1; + char *img2; + char *img3; + char *img4; + char *img5; +}; +typedef struct _Test_Data Test_Data; + +static Test_Data *tdata = NULL; + + static char * +_get_str(char *dest, const char *str) +{ /* dest should be not null and big enough */ + sprintf(dest, "%s/%s", elm_app_data_dir_get(), str); + return dest; +} + +static void +_win_del(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Test_Data *tdata = data; + if (!data) return; + + free(tdata->img1); + free(tdata->img2); + free(tdata->img3); + free(tdata->img4); + free(tdata->img5); + + free(tdata); +} + +Evas_Object * +_content_new(Evas_Object *parent, const char *img) +{ + Evas_Object *photo = elm_photo_add(parent); + elm_photo_file_set(photo, img); + elm_photo_fill_inside_set(photo, EINA_TRUE); + elm_object_style_set(photo, "shadow"); + return photo; +} + +void +_navi_pop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_naviframe_item_pop(data); +} + +void +_navi_it_del(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_naviframe_item_del(data); +} + +void +_title_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("Title Clicked!\n"); +} + +void +_title_visible(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_naviframe_item_title_visible_set(data, + !elm_naviframe_item_title_visible_get(data)); +} + +void +_promote(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_naviframe_item_promote(data); +} + +void +_page5(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *bt, *bt2, *content, *nf = data; + Elm_Object_Item *it; + + bt = elm_button_add(nf); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(bt, "Prev"); + + bt2 = elm_button_add(nf); + evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(bt2, "Page 1"); + evas_object_smart_callback_add(bt2, "clicked", _promote, + evas_object_data_get(nf, "page1")); + + content = _content_new(nf, tdata->img5); + it = elm_naviframe_item_insert_after(elm_naviframe_top_item_get(nf), + "Page 5", + bt, + bt2, + content, + NULL); + + evas_object_smart_callback_add(bt, "clicked", _navi_it_del, it); +} + +void +_page4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *bt, *ic, *content, *nf = data; + char buf[PATH_MAX]; + Elm_Object_Item *it; + + ic = elm_icon_add(nf); + snprintf(buf, sizeof(buf), "%s/images/icon_right_arrow.png", + elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + bt = elm_button_add(nf); + evas_object_smart_callback_add(bt, "clicked", _page5, nf); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_part_content_set(bt, "icon", ic); + + content = _content_new(nf, tdata->img4); + + it = elm_naviframe_item_push(nf, + "Page 4", + NULL, + bt, + content, + NULL); + + ic = elm_icon_add(nf); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", + elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_object_item_part_content_set(it, "icon", ic); + elm_naviframe_item_title_visible_set(it, EINA_FALSE); + evas_object_smart_callback_add(content, "clicked", _title_visible, it); +} + +void +_page3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *bt, *bt2, *ic, *content, *nf = data; + char buf[PATH_MAX]; + Elm_Object_Item *it; + + bt = elm_button_add(nf); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(bt, "Prev"); + evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf); + + bt2 = elm_button_add(nf); + evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(bt2, "Next"); + evas_object_smart_callback_add(bt2, "clicked", _page4, nf); + + content = _content_new(nf, tdata->img3); + + it = elm_naviframe_item_push(nf, + "Page 3", + bt, + bt2, + content, + NULL); + ic = elm_icon_add(nf); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + elm_object_item_part_content_set(it, "icon", ic); +} + +void +_page2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *bt, *content, *ic, *nf = data; + char buf[PATH_MAX]; + Elm_Object_Item *it; + + bt = elm_button_add(nf); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(bt, "clicked", _page3, nf); + + ic = elm_icon_add(nf); + snprintf(buf, sizeof(buf), "%s/images/icon_right_arrow.png", + elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_object_part_content_set(bt, "icon", ic); + + content = _content_new(nf, tdata->img2); + + it = elm_naviframe_item_push(nf, "Page 2", NULL, bt, content, NULL); + elm_object_item_part_text_set(it, "subtitle", "Here is sub-title part!"); +} + + +TEST_START(test_naviframe) +{ + Evas_Object *bg, *nf, *btn, *content; + Elm_Object_Item *it; + char buf[1024]; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + tdata = malloc(sizeof(Test_Data)); + tdata->img1 = strdup(_get_str(buf, "images/logo.png")); + tdata->img2 = strdup(_get_str(buf, "images/plant_01.jpg")); + tdata->img3 = strdup(_get_str(buf, "images/rock_01.jpg")); + tdata->img4 = strdup(_get_str(buf, "images/rock_02.jpg")); + tdata->img5 = strdup(_get_str(buf, "images/sky_01.jpg")); + evas_object_smart_callback_add(win, "delete,request", _win_del, tdata); + + nf = elm_naviframe_add(win); + elm_win_resize_object_add(win, nf); + evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(nf); + evas_object_smart_callback_add(nf, "title,clicked", _title_clicked, 0); + + btn = elm_button_add(nf); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(btn, "clicked", _page2, nf); + elm_object_text_set(btn, "Next"); + evas_object_show(btn); + + content = _content_new(nf, tdata->img1); + it = elm_naviframe_item_push(nf, "Page 1", NULL, btn, content, NULL); + evas_object_data_set(nf, "page1", it); + + evas_object_resize(win, 400, 600); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_notify.c b/src/bin/test_notify.c new file mode 100644 index 0000000..c32df04 --- /dev/null +++ b/src/bin/test_notify.c @@ -0,0 +1,295 @@ +#include +#include "tsuite.h" +static void +_bt(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *notify = data; + evas_object_show(notify); +} + +static void +_bt_close(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *notify = data; + evas_object_hide(notify); +} + +static void +_bt_timer_close(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *notify = data; + elm_notify_timeout_set(notify, 2.0); +} + +static void +_notify_timeout(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("Notify timed out!\n"); +} + +static void +_notify_block(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("Notify block area clicked!!\n"); +} + +TEST_START(test_notify) +{ + Evas_Object *bg, *bx, *tb, *notify, *bt, *lb; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + tb = elm_table_add(win); + elm_win_resize_object_add(win, tb); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(tb); + + notify = elm_notify_add(win); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + bx = elm_box_add(win); + elm_object_content_set(notify, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, "This position is the default."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", _bt_close, notify); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Top"); + evas_object_smart_callback_add(bt, "clicked", _bt, notify); + elm_table_pack(tb, bt, 1, 0, 1, 1); + evas_object_show(bt); + + notify = elm_notify_add(win); + elm_notify_repeat_events_set(notify, EINA_FALSE); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM); + elm_notify_timeout_set(notify, 5.0); + evas_object_smart_callback_add(notify, "timeout", _notify_timeout, NULL); + evas_object_smart_callback_add(notify, "block,clicked", _notify_block, NULL); + + bx = elm_box_add(win); + elm_object_content_set(notify, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Bottom position. This notify use a timeout of 5 sec.
" + "The events outside the window are blocked."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", _bt_close, notify); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Bottom"); + evas_object_smart_callback_add(bt, "clicked", _bt, notify); + elm_table_pack(tb, bt, 1, 2, 1, 1); + evas_object_show(bt); + + notify = elm_notify_add(win); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_LEFT); + elm_notify_timeout_set(notify, 10.0); + evas_object_smart_callback_add(notify, "timeout", _notify_timeout, NULL); + + bx = elm_box_add(win); + elm_object_content_set(notify, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Left position. This notify use a timeout of 10 sec."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", _bt_close, notify); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Left"); + evas_object_smart_callback_add(bt, "clicked", _bt, notify); + elm_table_pack(tb, bt, 0, 1, 1, 1); + evas_object_show(bt); + + notify = elm_notify_add(win); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_CENTER); + elm_notify_timeout_set(notify, 10.0); + evas_object_smart_callback_add(notify, "timeout", _notify_timeout, NULL); + + bx = elm_box_add(win); + elm_object_content_set(notify, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Center position. This notify use a timeout of 10 sec."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", _bt_close, notify); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Center"); + evas_object_smart_callback_add(bt, "clicked", _bt, notify); + elm_table_pack(tb, bt, 1, 1, 1, 1); + evas_object_show(bt); + + notify = elm_notify_add(win); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_RIGHT); + + bx = elm_box_add(win); + elm_object_content_set(notify, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Right position."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", _bt_close, notify); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Right"); + evas_object_smart_callback_add(bt, "clicked", _bt, notify); + elm_table_pack(tb, bt, 2, 1, 1, 1); + evas_object_show(bt); + + notify = elm_notify_add(win); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_TOP_LEFT); + + bx = elm_box_add(win); + elm_object_content_set(notify, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Top Left position."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", _bt_close, notify); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Top Left"); + evas_object_smart_callback_add(bt, "clicked", _bt, notify); + elm_table_pack(tb, bt, 0, 0, 1, 1); + evas_object_show(bt); + + notify = elm_notify_add(win); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_TOP_RIGHT); + + bx = elm_box_add(win); + elm_object_content_set(notify, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Top Right position."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", _bt_close, notify); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Top Right"); + evas_object_smart_callback_add(bt, "clicked", _bt, notify); + elm_table_pack(tb, bt, 2, 0, 1, 1); + evas_object_show(bt); + + notify = elm_notify_add(win); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM_LEFT); + + bx = elm_box_add(win); + elm_object_content_set(notify, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Bottom Left position."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", _bt_close, notify); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Bottom Left"); + evas_object_smart_callback_add(bt, "clicked", _bt, notify); + elm_table_pack(tb, bt, 0, 2, 1, 1); + evas_object_show(bt); + + notify = elm_notify_add(win); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM_RIGHT); + + bx = elm_box_add(win); + elm_object_content_set(notify, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, "Bottom Right position."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close in 2s"); + evas_object_smart_callback_add(bt, "clicked", _bt_timer_close, notify); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Bottom Right"); + evas_object_smart_callback_add(bt, "clicked", _bt, notify); + elm_table_pack(tb, bt, 2, 2, 1, 1); + evas_object_show(bt); + + evas_object_show(win); + evas_object_resize(win, 300, 350); +} +TEST_END diff --git a/src/bin/test_pager.c b/src/bin/test_pager.c new file mode 100644 index 0000000..cf7c449 --- /dev/null +++ b/src/bin/test_pager.c @@ -0,0 +1,320 @@ +#include +#include "tsuite.h" +typedef struct _Pginfo Pginfo; + +struct _Pginfo +{ + Evas_Object *win, *pager, *pg1, *pg2, *pg3, *pg4; +}; + +static void +my_pager_1(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Pginfo *info = data; + elm_pager_content_promote(info->pager, info->pg2); +} + +static void +my_pager_2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Pginfo *info = data; + elm_pager_content_promote(info->pager, info->pg3); +} + +static void +my_pager_3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Pginfo *info = data; + elm_pager_content_promote(info->pager, info->pg4); +} + + +static void +my_pager_4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Pginfo *info = data; + elm_pager_content_promote(info->pager, info->pg1); +} + + +static void +my_pager_pop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Pginfo *info = data; + elm_pager_content_pop(info->pager); +} + +struct style_tuple { + const char *label; + const char *name; +}; +static const struct style_tuple styles[] = { + { "Default", "default"}, + { "Slide", "slide"}, + { "Slide Invisible", "slide_invisible"}, + { "Fade", "fade"}, + { "Fade Translucide", "fade_translucide"}, + { "Fade Invisible", "fade_invisible"}, + { "Flip", "flip"}, +}; + +static void +_style(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *pg = data; + elm_object_style_set(pg, styles[elm_radio_value_get(obj)].name); +} + +TEST_START(test_pager) +{ + Evas_Object *bg, *pg, *bx, *lb, *bt; + static Pginfo info; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + info.win = win; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + pg = elm_pager_add(win); + evas_object_size_hint_weight_set(pg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, pg); + evas_object_show(pg); + + info.pager = pg; + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This is page 1 in a pager stack.
" + "
" + "So what is a pager stack? It is a stack
" + "of pages that hold widgets in it. The
" + "pages can be pushed and popped on and
" + "off the stack, activated and otherwise
" + "activated if already in the stack
" + "(activated means promoted to the top of
" + "the stack).
" + "
" + "The theme may define the animation how
" + "show and hide of pages. Select one theme style:"); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + unsigned int i = 0; + Evas_Object *rdg = NULL, *rd; + for (i = 0; i < (sizeof(styles) / sizeof(struct style_tuple)); i++) + { + rd = elm_radio_add(win); + elm_object_text_set(rd, styles[i].label); + elm_radio_state_value_set(rd, i); + if (rdg) + elm_radio_group_add(rd, rdg); + else + rdg = rd; + evas_object_smart_callback_add(rd, "changed", _style, pg); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + } + elm_radio_value_set(rd, 0); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Flip to 2"); + evas_object_smart_callback_add(bt, "clicked", my_pager_1, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Popme"); + evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_pager_content_push(pg, bx); + info.pg1 = bx; + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This is page 2 in a pager stack.
" + "
" + "This is just like the previous page in
" + "the pager stack." + ); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Flip to 3"); + evas_object_smart_callback_add(bt, "clicked", my_pager_2, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Popme"); + evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_pager_content_push(pg, bx); + info.pg2 = bx; + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This is page 3 in a pager stack.
" + "
" + "This is just like the previous page in
" + "the pager stack."); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Flip to 1"); + evas_object_smart_callback_add(bt, "clicked", my_pager_3, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Popme"); + evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_pager_content_push(pg, bx); + info.pg3 = bx; + + Evas_Object *ly, *ly2; + char buf[4096]; + + ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly, buf, "test/layout"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(ly); + + ly2 = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(ly2, buf, "layout2"); + evas_object_size_hint_weight_set(ly2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + //elm_win_resize_object_add(win, ly2); + evas_object_show(ly2); + + + + + bt = elm_button_add(win); + elm_object_text_set(bt, "Flip to 1"); + evas_object_smart_callback_add(bt, "clicked", my_pager_4, &info); + elm_object_part_content_set(ly2, "element1", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Popme"); + evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info); + evas_object_show(bt); + elm_object_part_content_set(ly2, "element2", bt); + + elm_object_part_content_set(ly, "swallow", ly2); + evas_object_show(ly); + + elm_pager_content_push(pg, ly); + info.pg4 = ly2; + + + evas_object_show(win); +} +TEST_END + +static void +my_pager_push(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Pginfo *info = data; + Evas_Object *bx, *bt, *lb; + static int count = 2; + char buf[32]; + + bx = elm_box_add(info->win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + lb = elm_label_add(info->win); + snprintf(buf, sizeof(buf), "This is page %d in the slide pager

", count++); + elm_object_text_set(lb, buf); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(info->win); + elm_object_text_set(bt, "Push a new page"); + evas_object_smart_callback_add(bt, "clicked", my_pager_push, info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(info->win); + elm_object_text_set(bt, "Go back (pop)"); + evas_object_smart_callback_add(bt, "clicked", my_pager_pop, info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_pager_content_push(info->pager, bx); +} + +TEST_START(test_pager_slide) +{ + Evas_Object *bg, *pg, *bx, *lb, *bt; + static Pginfo info; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + info.win = win; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + pg = elm_pager_add(win); + elm_win_resize_object_add(win, pg); + elm_object_style_set(pg, "slide"); + evas_object_show(pg); + info.pager = pg; + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This is page 1 in a slide pager.
" + "
" + "The slide pager style is useful for browsing
" + "a hierarchy of objects, as it makes clear
" + "the direction of the browse.
" + "This is the 'slide' style, also available
" + "a fully transparent style named 'slide_invisble'.
" + "
"); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Push a new page"); + evas_object_smart_callback_add(bt, "clicked", my_pager_push, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Go back (pop)"); + evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_pager_content_push(pg, bx); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_panel.c b/src/bin/test_panel.c new file mode 100644 index 0000000..03e276b --- /dev/null +++ b/src/bin/test_panel.c @@ -0,0 +1,253 @@ +#include +#include "tsuite.h" +static Elm_Genlist_Item_Class itc; + +static void _bstatus(void *data, Evas_Object *obj, void *event_info); +static void _tstatus(void *data, Evas_Object *obj, void *event_info); +static char *_text_get(void *data, Evas_Object *obj, const char *source); +static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *source); +static Eina_Bool _state_get(void *data, Evas_Object *obj, const char *source); +static void _item_del(void *data, Evas_Object *obj); +static void _fill_list(Evas_Object *obj); +static Eina_Bool _dir_has_subs(const char *path); + +static void +_tstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Elm_Object_Item *tb_it; + const char *status; + + if (elm_panel_hidden_get((Evas_Object*)data)) + status = "hidden"; + else + status = "shown"; + printf("The top panel is currently %s\n", status); + tb_it = elm_toolbar_selected_item_get(obj); + elm_toolbar_item_selected_set(tb_it, EINA_FALSE); +} + +static void +_bstatus(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Elm_Object_Item *tb_it; + const char *status; + + if (elm_panel_hidden_get((Evas_Object*)data)) + status = "hidden"; + else + status = "shown"; + printf("The bottom panel is currently %s\n", status); + tb_it = elm_toolbar_selected_item_get(obj); + elm_toolbar_item_selected_set(tb_it, EINA_FALSE); +} + +static char * +_text_get(void *data, Evas_Object *obj __UNUSED__, const char *source __UNUSED__) +{ + return strdup(ecore_file_file_get(data)); +} + +static Evas_Object * +_content_get(void *data, Evas_Object *obj, const char *source) +{ + if (!strcmp(source, "elm.swallow.icon")) + { + Evas_Object *ic; + + ic = elm_icon_add(obj); + if (ecore_file_is_dir((char *)data)) + elm_icon_standard_set(ic, "folder"); + else + elm_icon_standard_set(ic, "file"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + evas_object_show(ic); + return ic; + } + return NULL; +} + +static Eina_Bool +_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *source __UNUSED__) +{ + return EINA_FALSE; +} + +static void +_item_del(void *data, Evas_Object *obj __UNUSED__) +{ + eina_stringshare_del(data); +} + +static void +_fill_list(Evas_Object *obj) +{ + DIR *d; + struct dirent *de; + Eina_List *dirs = NULL, *l; + char *real; + + if (!(d = opendir(getenv("HOME")))) return; + while ((de = readdir(d))) + { + char buff[PATH_MAX]; + + if (de->d_name[0] == '.') continue; + snprintf(buff, sizeof(buff), "%s/%s", getenv("HOME"), de->d_name); + if (!ecore_file_is_dir(buff)) continue; + real = ecore_file_realpath(buff); + dirs = eina_list_append(dirs, real); + } + closedir(d); + + dirs = eina_list_sort(dirs, eina_list_count(dirs), EINA_COMPARE_CB(strcoll)); + + EINA_LIST_FOREACH(dirs, l, real) + { + Eina_Bool result = EINA_FALSE; + + result = _dir_has_subs(real); + if (!result) + elm_genlist_item_append(obj, &itc, eina_stringshare_add(real), + NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + else + elm_genlist_item_append(obj, &itc, eina_stringshare_add(real), + NULL, ELM_GENLIST_ITEM_SUBITEMS, + NULL, NULL); + free(real); + } + eina_list_free(dirs); +} + +static Eina_Bool +_dir_has_subs(const char *path) +{ + DIR *d; + struct dirent *de; + Eina_Bool result = EINA_FALSE; + + if (!path) return result; + if (!(d = opendir(path))) return result; + while ((de = readdir(d))) + { + char buff[PATH_MAX]; + + if (de->d_name[0] == '.') continue; + snprintf(buff, sizeof(buff), "%s/%s", path, de->d_name); + if (ecore_file_is_dir(buff)) + { + result = EINA_TRUE; + break; + } + } + closedir(d); + return result; +} + +TEST_START(test_panel) +{ + Evas_Object *bg, *panel, *bx, *vbx, *toolbar; + Evas_Object *list; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + vbx = elm_box_add(win); + elm_win_resize_object_add(win, vbx); + evas_object_size_hint_weight_set(vbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(vbx, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(vbx); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(bx); + + panel = elm_panel_add(win); + elm_panel_orient_set(panel, ELM_PANEL_ORIENT_TOP); + evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL); + + toolbar = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(toolbar, 0); + elm_toolbar_mode_shrink_set(toolbar, ELM_TOOLBAR_SHRINK_NONE); + evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(toolbar); + + elm_toolbar_item_append(toolbar, "home", "Hello", _tstatus, panel); + + elm_object_content_set(panel, toolbar); + elm_box_pack_end(vbx, panel); + evas_object_show(panel); + + panel = elm_panel_add(win); + elm_panel_orient_set(panel, ELM_PANEL_ORIENT_LEFT); + evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(panel, 0, EVAS_HINT_FILL); + + itc.item_style = "default"; + itc.func.text_get = _text_get; + itc.func.content_get = _content_get; + itc.func.state_get = _state_get; + itc.func.del = _item_del; + + list = elm_genlist_add(win); + evas_object_size_hint_min_set(list, 100, -1); + evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(list); + + elm_object_content_set(panel, list); + + elm_box_pack_end(bx, panel); + evas_object_show(panel); + + _fill_list(list); + + panel = elm_panel_add(win); + elm_panel_orient_set(panel, ELM_PANEL_ORIENT_RIGHT); + evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(panel, 1, EVAS_HINT_FILL); + elm_panel_hidden_set(panel, EINA_TRUE); + + list = elm_genlist_add(win); + evas_object_size_hint_min_set(list, 100, -1); + evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(list); + + elm_object_content_set(panel, list); + + elm_box_pack_end(bx, panel); + evas_object_show(panel); + + _fill_list(list); + + elm_box_pack_end(vbx, bx); + + panel = elm_panel_add(win); + elm_panel_orient_set(panel, ELM_PANEL_ORIENT_BOTTOM); + evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_panel_hidden_set(panel, EINA_TRUE); + + toolbar = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(toolbar, 0); + elm_toolbar_mode_shrink_set(toolbar, ELM_TOOLBAR_SHRINK_NONE); + evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(toolbar); + + elm_toolbar_item_append(toolbar, "home", "Hello", _bstatus, panel); + + elm_object_content_set(panel, toolbar); + elm_box_pack_end(vbx, panel); + evas_object_show(panel); + + evas_object_resize(win, 320, 400); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_panes.c b/src/bin/test_panes.c new file mode 100644 index 0000000..2bf6c13 --- /dev/null +++ b/src/bin/test_panes.c @@ -0,0 +1,107 @@ +#include +#include "tsuite.h" +static double size = 0.0; + +static void +_press(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("press\n"); +} + +static void +_unpress(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + printf("unpress, size : %f\n", elm_panes_content_left_size_get(obj)); +} + +static void +_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("clicked\n"); +} + + +static void +_clicked_double(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + printf("clicked double\n"); + if(elm_panes_content_left_size_get(obj) > 0) + { + size = elm_panes_content_left_size_get(obj); + elm_panes_content_left_size_set(obj, 0.0); + } + else + elm_panes_content_left_size_set(obj, size); +} + + +TEST_START(test_panes) +{ + Evas_Object *bg, *panes, *panes_h, *bt; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + evas_object_show(bg); + + panes = elm_panes_add(win); + elm_win_resize_object_add(win, panes); + evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(panes, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(panes); + + evas_object_smart_callback_add(panes, "clicked", _clicked, panes); + evas_object_smart_callback_add(panes, "clicked,double", _clicked_double, panes); + + evas_object_smart_callback_add(panes, "press", _press, panes); + evas_object_smart_callback_add(panes, "unpress", _unpress, panes); + + + // + bt = elm_button_add(win); + elm_object_text_set(bt, "Left"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_show(bt); + elm_object_part_content_set(panes, "left", bt); + // + + // + panes_h = elm_panes_add(win); + elm_panes_horizontal_set(panes_h, EINA_TRUE); + evas_object_size_hint_weight_set(panes_h, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(panes_h, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(panes_h); + + evas_object_smart_callback_add(panes_h, "clicked", _clicked, panes_h); + evas_object_smart_callback_add(panes_h, "clicked,double", _clicked_double, panes_h); + + evas_object_smart_callback_add(panes_h, "press", _press, panes_h); + evas_object_smart_callback_add(panes_h, "unpress", _unpress, panes_h); + elm_object_part_content_set(panes, "right", panes_h); + // + + // + bt = elm_button_add(win); + elm_object_text_set(bt, "Up"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(bt); + elm_object_part_content_set(panes_h, "left", bt); + // + + // + bt = elm_button_add(win); + elm_object_text_set(bt, "Down"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(bt); + elm_object_part_content_set(panes_h, "right", bt); + // + + + evas_object_resize(win, 320, 400); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_photo.c b/src/bin/test_photo.c new file mode 100644 index 0000000..3aab8ce --- /dev/null +++ b/src/bin/test_photo.c @@ -0,0 +1,100 @@ +#include +#include "tsuite.h" +static void drop_cb(void *mydata, Evas_Object *obj, void *evdata); +static void drag_stop_cb(void *mydata, Evas_Object *obj, void *evdata); +static void drag_start_cb(void *mydata, Evas_Object *obj, void *evdata); + +TEST_START(test_photo) +{ + Evas_Object *bg, *sc, *tb, *ph; + int i, j, n; + char buf[PATH_MAX]; + const char *img[9] = + { + "panel_01.jpg", + "mystrale.jpg", + "mystrale_2.jpg", + "rock_02.jpg", + "sky_01.jpg", + "sky_02.jpg", + "sky_03.jpg", + "sky_04.jpg", + "wood_01.jpg" + }; + elm_need_ethumb(); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + n = 0; + for (j = 0; j < 12; j++) + { + for (i = 0; i < 12; i++) + { + ph = elm_photo_add(win); + snprintf(buf, sizeof(buf), "%s/images/%s", + elm_app_data_dir_get(), img[n]); + n++; + if (n >= 9) n = 0; + elm_photo_size_set(ph, 80); + if (n == 8) + elm_photo_thumb_set(ph, buf, NULL); + else + elm_photo_file_set(ph, buf); + elm_photo_editable_set(ph, 1); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_smart_callback_add(ph, "drop", + drop_cb, NULL); + evas_object_smart_callback_add(ph, "drag,start", + drag_start_cb, NULL); + evas_object_smart_callback_add(ph, "drag,stop", + drag_stop_cb, NULL); + + if ((n == 2) || (n == 3)) + { + elm_photo_fill_inside_set(ph, EINA_TRUE); + elm_object_style_set(ph, "shadow"); + } + elm_table_pack(tb, ph, i, j, 1, 1); + evas_object_show(ph); + } + } + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, sc); + + elm_object_content_set(sc, tb); + evas_object_show(tb); + evas_object_show(sc); + + evas_object_resize(win, 300, 300); + evas_object_show(win); +} +TEST_END + +/* Never called, elm_photo never call "drop" smart cb */ +static void +drop_cb(void *mydata __UNUSED__, Evas_Object *obj, void *evdata __UNUSED__){ + printf("Drop on obj %p\n", obj); +} + +static void +drag_start_cb(void *mydata __UNUSED__, Evas_Object *obj __UNUSED__, void *evdata __UNUSED__){ + +} + +static void +drag_stop_cb(void *mydata __UNUSED__, Evas_Object *obj __UNUSED__, void *evdata __UNUSED__){ + +} + +/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/ diff --git a/src/bin/test_photocam.c b/src/bin/test_photocam.c new file mode 100644 index 0000000..6acc11a --- /dev/null +++ b/src/bin/test_photocam.c @@ -0,0 +1,333 @@ +#include +#include "tsuite.h" +static Evas_Object *rect; + +static void +my_ph_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("clicked\n"); +} + +static void +my_ph_press(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("press\n"); +} + +static void +my_ph_longpressed(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("longpressed\n"); +} + +static void +my_ph_clicked_double(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("clicked,double\n"); +} + +static void +my_ph_load(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("load\n"); +} + +static void +my_ph_loaded(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("loaded\n"); +} + +static void +my_ph_load_details(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("load,details\n"); +} + +static void +my_ph_loaded_details(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("loaded,details\n"); +} + +static void +my_ph_zoom_start(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("zoom,start\n"); +} + +static void +my_ph_zoom_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("zoom,stop\n"); +} + +static void +my_ph_zoom_change(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("zoom,change\n"); +} + +static void +my_ph_anim_start(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("anim,start\n"); +} + +static void +my_ph_anim_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("anim,stop\n"); +} + +static void +my_ph_drag_start(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("drag,start\n"); +} + +static void +my_ph_drag_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + printf("drag_stop\n"); +} + +static void +my_ph_scroll(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + int x, y, w, h; + elm_photocam_region_get(obj, &x, &y, &w, &h); + printf("scroll %i %i %ix%i\n", x, y, w, h); +} + +static void +my_bt_open(void *data, Evas_Object *obj __UNUSED__, void *event_info) +{ + Evas_Object *ph = data; + const char *file = event_info; + + if (file) + elm_photocam_file_set(ph, file); +} + +static void +my_bt_show_reg(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_photocam_image_region_show(data, 30, 50, 500, 300); +} + +static void +my_bt_bring_reg(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) + +{ + elm_photocam_image_region_bring_in(data, 800, 300, 500, 300); +} + +static void +my_bt_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + double zoom; + + zoom = elm_photocam_zoom_get(data); + zoom -= 0.5; + elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_MANUAL); + if (zoom >= (1.0 / 32.0)) elm_photocam_zoom_set(data, zoom); +} + +static void +my_bt_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + double zoom; + + zoom = elm_photocam_zoom_get(data); + zoom += 0.5; + elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_MANUAL); + if (zoom <= 256.0) elm_photocam_zoom_set(data, zoom); +} + +static void +my_bt_pause(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_photocam_paused_set(data, !elm_photocam_paused_get(data)); +} + +static void +my_bt_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT); +} + +static void +my_bt_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL); +} + +static void +_photocam_mouse_wheel_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + Evas_Object *photocam = data; + Evas_Event_Mouse_Wheel *ev = (Evas_Event_Mouse_Wheel*) event_info; + int zoom; + double val; + //unset the mouse wheel + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + + zoom = elm_photocam_zoom_get(photocam); + if ((ev->z>0) && (zoom == 1)) return; + + if (ev->z > 0) + zoom /= 2; + else + zoom *= 2; + + val = 1; + int _zoom = zoom; + while(_zoom>1) + { + _zoom /= 2; + val++; + } + + elm_photocam_zoom_mode_set(photocam, ELM_PHOTOCAM_ZOOM_MODE_MANUAL); + if (zoom >= 1) elm_photocam_zoom_set(photocam, zoom); +} + +static void +_photocam_move_resize_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + int x,y,w,h; + + evas_object_geometry_get(data,&x,&y,&w,&h); + evas_object_resize(rect,w,h); + evas_object_move(rect,x,y); +} + +TEST_START(test_photocam) +{ + Evas_Object *bg, *ph, *tb2, *bt; + // these were just testing - use the "select photo" browser to select one + const char *img[5] = + { + "/home/raster/t1.jpg", // 5 mpixel + "/home/raster/t2.jpg", // 18 mpixel + "/home/raster/t3.jpg", // 39 mpixel + "/home/raster/t4.jpg", // 192 mpixel + "/home/raster/t5.jpg" // 466 mpixel + }; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + ph = elm_photocam_add(win); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, ph); + evas_object_data_set(ph, "window", win); + + rect = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_color_set(rect, 0, 0, 0, 0); + evas_object_repeat_events_set(rect,1); + evas_object_show(rect); + evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_WHEEL, _photocam_mouse_wheel_cb, ph); + evas_object_raise(rect); + + evas_object_event_callback_add(ph, EVAS_CALLBACK_RESIZE, _photocam_move_resize_cb, ph); + evas_object_event_callback_add(ph, EVAS_CALLBACK_MOVE, _photocam_move_resize_cb, ph); + + evas_object_smart_callback_add(ph, "clicked", my_ph_clicked, win); + evas_object_smart_callback_add(ph, "press", my_ph_press, win); + evas_object_smart_callback_add(ph, "longpressed", my_ph_longpressed, win); + evas_object_smart_callback_add(ph, "clicked,double", my_ph_clicked_double, win); + evas_object_smart_callback_add(ph, "load", my_ph_load, win); + evas_object_smart_callback_add(ph, "loaded", my_ph_loaded, win); + evas_object_smart_callback_add(ph, "load,details", my_ph_load_details, win); + evas_object_smart_callback_add(ph, "loaded,details", my_ph_loaded_details, win); + evas_object_smart_callback_add(ph, "zoom,start", my_ph_zoom_start, win); + evas_object_smart_callback_add(ph, "zoom,stop", my_ph_zoom_stop, win); + evas_object_smart_callback_add(ph, "zoom,change", my_ph_zoom_change, win); + evas_object_smart_callback_add(ph, "scroll,anim,start", my_ph_anim_start, win); + evas_object_smart_callback_add(ph, "scroll,anim,stop", my_ph_anim_stop, win); + evas_object_smart_callback_add(ph, "scroll,drag,start", my_ph_drag_start, win); + evas_object_smart_callback_add(ph, "scroll,drag,stop", my_ph_drag_stop, win); + evas_object_smart_callback_add(ph, "scroll", my_ph_scroll, win); + + elm_photocam_file_set(ph, img[1]); + + evas_object_show(ph); + + tb2 = elm_table_add(win); + evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, tb2); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Z -"); + evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_out, ph); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.1, 0.1); + elm_table_pack(tb2, bt, 0, 0, 1, 1); + evas_object_show(bt); + + bt = elm_fileselector_button_add(win); + elm_object_text_set(bt, "Select Photo"); + evas_object_smart_callback_add(bt, "file,chosen", my_bt_open, ph); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.5, 0.1); + elm_table_pack(tb2, bt, 1, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Z +"); + evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_in, ph); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.1); + elm_table_pack(tb2, bt, 2, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Show 30,50 500x300"); + evas_object_smart_callback_add(bt, "clicked", my_bt_show_reg, ph); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.1, 0.5); + elm_table_pack(tb2, bt, 0, 1, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Bring 800,300 500x300"); + evas_object_smart_callback_add(bt, "clicked", my_bt_bring_reg, ph); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.5); + elm_table_pack(tb2, bt, 2, 1, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Pause On/Off"); + evas_object_smart_callback_add(bt, "clicked", my_bt_pause, ph); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.1, 0.9); + elm_table_pack(tb2, bt, 0, 2, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Fit"); + evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fit, ph); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.5, 0.9); + elm_table_pack(tb2, bt, 1, 2, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Fill"); + evas_object_smart_callback_add(bt, "clicked", my_bt_zoom_fill, ph); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.9); + elm_table_pack(tb2, bt, 2, 2, 1, 1); + evas_object_show(bt); + + evas_object_show(tb2); + + evas_object_resize(win, 800, 800); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_progressbar.c b/src/bin/test_progressbar.c new file mode 100644 index 0000000..001039b --- /dev/null +++ b/src/bin/test_progressbar.c @@ -0,0 +1,199 @@ +#include +#include "tsuite.h" +typedef struct Progressbar +{ + Evas_Object *pb1; + Evas_Object *pb2; + Evas_Object *pb3; + Evas_Object *pb4; + Evas_Object *pb5; + Evas_Object *pb6; + Evas_Object *pb7; + Eina_Bool run; + Ecore_Timer *timer; +} Progressbar; + +static Progressbar _test_progressbar; + +static Eina_Bool +_my_progressbar_value_set (void *data __UNUSED__) +{ + double progress; + + progress = elm_progressbar_value_get (_test_progressbar.pb1); + if (progress < 1.0) progress += 0.0123; + else progress = 0.0; + elm_progressbar_value_set(_test_progressbar.pb1, progress); + elm_progressbar_value_set(_test_progressbar.pb4, progress); + elm_progressbar_value_set(_test_progressbar.pb3, progress); + elm_progressbar_value_set(_test_progressbar.pb6, progress); + if (progress < 1.0) return ECORE_CALLBACK_RENEW; + _test_progressbar.run = 0; + return ECORE_CALLBACK_CANCEL; +} + +static void +my_progressbar_test_start(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_progressbar_pulse(_test_progressbar.pb2, EINA_TRUE); + elm_progressbar_pulse(_test_progressbar.pb5, EINA_TRUE); + elm_progressbar_pulse(_test_progressbar.pb7, EINA_TRUE); + if (!_test_progressbar.run) + { + _test_progressbar.timer = ecore_timer_add(0.1, _my_progressbar_value_set, NULL); + _test_progressbar.run = EINA_TRUE; + } +} + +static void +my_progressbar_test_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_progressbar_pulse(_test_progressbar.pb2, EINA_FALSE); + elm_progressbar_pulse(_test_progressbar.pb5, EINA_FALSE); + elm_progressbar_pulse(_test_progressbar.pb7, EINA_FALSE); + if (_test_progressbar.run) + { + ecore_timer_del(_test_progressbar.timer); + _test_progressbar.run = EINA_FALSE; + } +} + +static void +my_progressbar_destroy(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + my_progressbar_test_stop(NULL, NULL, NULL); + evas_object_del(obj); +} + +TEST_START(test_progressbar) +{ + Evas_Object *bg, *pb, *bx, *hbx, *bt, *bt_bx, *ic1, *ic2; + char buf[PATH_MAX]; + + evas_object_smart_callback_add(win, "delete,request", + my_progressbar_destroy, NULL); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + pb = elm_progressbar_add(win); + evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, pb); +// elm_progressbar_horizontal_set(pb, EINA_TRUE); +// elm_object_text_set(pb, "Progression %"); +// elm_progressbar_unit_format_set(pb, NULL); + evas_object_show(pb); + _test_progressbar.pb1 = pb; + + pb = elm_progressbar_add(win); + evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(pb, "Infinite bounce"); + elm_progressbar_pulse_set(pb, EINA_TRUE); + elm_box_pack_end(bx, pb); + evas_object_show(pb); + _test_progressbar.pb2 = pb; + + ic1 = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic1, buf, NULL); + evas_object_size_hint_aspect_set(ic1, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + pb = elm_progressbar_add(win); + elm_object_text_set(pb, "Label"); + elm_object_content_set(pb, ic1); + elm_progressbar_inverted_set(pb, 1); + elm_progressbar_unit_format_set(pb, "%1.1f units"); + elm_progressbar_span_size_set(pb, 200); + evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, pb); + evas_object_show(ic1); + evas_object_show(pb); + _test_progressbar.pb3 = pb; + + hbx = elm_box_add(win); + elm_box_horizontal_set(hbx, EINA_TRUE); + evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, hbx); + evas_object_show(hbx); + + pb = elm_progressbar_add(win); + elm_progressbar_horizontal_set(pb, EINA_FALSE); + evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(hbx, pb); + elm_progressbar_span_size_set(pb, 60); + elm_object_text_set(pb, "percent"); + evas_object_show(pb); + _test_progressbar.pb4 = pb; + + pb = elm_progressbar_add(win); + elm_progressbar_horizontal_set(pb, EINA_FALSE); + evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_progressbar_span_size_set(pb, 80); + elm_progressbar_pulse_set(pb, EINA_TRUE); + elm_progressbar_unit_format_set(pb, NULL); + elm_object_text_set(pb, "Infinite bounce"); + elm_box_pack_end(hbx, pb); + evas_object_show(pb); + _test_progressbar.pb5 = pb; + + ic2 = elm_icon_add(win); + elm_icon_file_set(ic2, buf, NULL); + evas_object_size_hint_aspect_set(ic2, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); + + pb = elm_progressbar_add(win); + elm_progressbar_horizontal_set(pb, EINA_FALSE); + elm_object_text_set(pb, "Label"); + elm_object_content_set(pb, ic2); + elm_progressbar_inverted_set(pb, 1); + elm_progressbar_unit_format_set(pb, "%1.2f%%"); + elm_progressbar_span_size_set(pb, 200); + evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(hbx, pb); + evas_object_show(ic2); + evas_object_show(pb); + _test_progressbar.pb6 = pb; + + pb = elm_progressbar_add(win); + elm_object_style_set(pb, "wheel"); + elm_object_text_set(pb, "Style: wheel"); + evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, pb); + evas_object_show(pb); + _test_progressbar.pb7 = pb; + + bt_bx = elm_box_add(win); + elm_box_horizontal_set(bt_bx, EINA_TRUE); + evas_object_size_hint_weight_set(bt_bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, bt_bx); + evas_object_show(bt_bx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Start"); + evas_object_smart_callback_add(bt, "clicked", my_progressbar_test_start, NULL); + elm_box_pack_end(bt_bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Stop"); + evas_object_smart_callback_add(bt, "clicked", my_progressbar_test_stop, NULL); + elm_box_pack_end(bt_bx, bt); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_radio.c b/src/bin/test_radio.c new file mode 100644 index 0000000..c103bdf --- /dev/null +++ b/src/bin/test_radio.c @@ -0,0 +1,94 @@ +#include +#include "tsuite.h" +TEST_START(test_radio) +{ + Evas_Object *bg, *bx, *ic, *rd, *rdg; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 0); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); + elm_object_text_set(rd, "Icon sized to radio"); + elm_object_content_set(rd, ic); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_show(ic); + rdg = rd; + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 1); + elm_radio_group_add(rd, rdg); + elm_object_text_set(rd, "Icon no scale"); + elm_object_content_set(rd, ic); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_show(ic); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 2); + elm_radio_group_add(rd, rdg); + elm_object_text_set(rd, "Label Only"); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 3); + elm_radio_group_add(rd, rdg); + elm_object_text_set(rd, "Disabled"); + elm_object_disabled_set(rd, 1); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 4); + elm_radio_group_add(rd, rdg); + elm_object_content_set(rd, ic); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 5); + elm_radio_group_add(rd, rdg); + elm_object_content_set(rd, ic); + elm_object_disabled_set(rd, 1); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_show(ic); + + elm_radio_value_set(rdg, 2); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_scaling.c b/src/bin/test_scaling.c new file mode 100644 index 0000000..0218a34 --- /dev/null +++ b/src/bin/test_scaling.c @@ -0,0 +1,114 @@ +#include +#include "tsuite.h" +TEST_START(test_scaling) +{ + Evas_Object *bg, *bx, *bt; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Scale: 0.5"); + elm_object_scale_set(bt, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Scale: 0.75"); + elm_object_scale_set(bt, 0.75); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Scale: 1.0"); + elm_object_scale_set(bt, 1.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Scale: 1.5"); + elm_object_scale_set(bt, 1.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Scale: 2.0"); + elm_object_scale_set(bt, 2.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Scale: 3.0"); + elm_object_scale_set(bt, 3.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + +TEST_START(test_scaling2) +{ + Evas_Object *bg, *bx, *fr, *lb; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fr = elm_frame_add(win); + elm_object_scale_set(fr, 0.5); + elm_object_text_set(fr, "Scale: 0.5"); + lb = elm_label_add(win); + elm_object_text_set(lb, + "Parent frame scale
" + "is 0.5. Child should
" + "inherit it."); + elm_object_content_set(fr, lb); + evas_object_show(lb); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + fr = elm_frame_add(win); + elm_object_text_set(fr, "Scale: 1.0"); + lb = elm_label_add(win); + elm_object_text_set(lb, + "Parent frame scale
" + "is 1.0. Child should
" + "inherit it."); + elm_object_content_set(fr, lb); + evas_object_show(lb); + elm_object_scale_set(fr, 1.0); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + fr = elm_frame_add(win); + elm_object_text_set(fr, "Scale: 2.0"); + lb = elm_label_add(win); + elm_object_text_set(lb, + "Parent frame scale
" + "is 2.0. Child should
" + "inherit it."); + elm_object_content_set(fr, lb); + evas_object_show(lb); + elm_object_scale_set(fr, 2.0); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_scroller.c b/src/bin/test_scroller.c new file mode 100644 index 0000000..32ccb5d --- /dev/null +++ b/src/bin/test_scroller.c @@ -0,0 +1,260 @@ +#include +#include "tsuite.h" + +void +my_bt_go_300_300(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_scroller_region_bring_in((Evas_Object *)data, 300, 300, 318, 318); +} + +void +my_bt_go_900_300(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_scroller_region_bring_in((Evas_Object *)data, 900, 300, 318, 318); +} + +void +my_bt_go_300_900(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_scroller_region_bring_in((Evas_Object *)data, 300, 900, 318, 318); +} + +void +my_bt_go_900_900(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_scroller_region_bring_in((Evas_Object *)data, 900, 900, 318, 318); +} + +TEST_START(test_scroller) +{ +/******* HOW TO TEST ******************* + Do NOT Exit test window while testing + This causes scroller to get redundent + event that breaks this test. +******** HOW TO TEST ******************/ + Evas_Object *bg2, *tb, *tb2, *bg, *sc, *bt; + int i, j, n; + char buf[PATH_MAX]; + const char *img[9] = + { + "panel_01.jpg", + "plant_01.jpg", + "rock_01.jpg", + "rock_02.jpg", + "sky_01.jpg", + "sky_02.jpg", + "sky_03.jpg", + "sky_04.jpg", + "wood_01.jpg" + }; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + n = 0; + for (j = 0; j < 12; j++) + { + for (i = 0; i < 12; i++) + { + bg2 = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/%s", + elm_app_data_dir_get(), img[n]); + n++; + if (n >= 9) n = 0; + elm_bg_file_set(bg2, buf, NULL); + evas_object_size_hint_weight_set(bg2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bg2, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_min_set(bg2, 318, 318); + elm_table_pack(tb, bg2, i, j, 1, 1); + evas_object_show(bg2); + } + } + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, sc); + + elm_object_content_set(sc, tb); + evas_object_show(tb); + + elm_scroller_page_relative_set(sc, 1.0, 1.0); +// elm_scroller_page_size_set(sc, 200, 200); + evas_object_show(sc); + + tb2 = elm_table_add(win); + evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, tb2); + + bt = elm_button_add(win); + elm_object_text_set(bt, "to 300 300"); + evas_object_smart_callback_add(bt, "clicked", my_bt_go_300_300, sc); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.1, 0.1); + elm_table_pack(tb2, bt, 0, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "to 900 300"); + evas_object_smart_callback_add(bt, "clicked", my_bt_go_900_300, sc); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.1); + elm_table_pack(tb2, bt, 1, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "to 300 900"); + evas_object_smart_callback_add(bt, "clicked", my_bt_go_300_900, sc); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.1, 0.9); + elm_table_pack(tb2, bt, 0, 1, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "to 900 900"); + evas_object_smart_callback_add(bt, "clicked", my_bt_go_900_900, sc); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.9, 0.9); + elm_table_pack(tb2, bt, 1, 1, 1, 1); + evas_object_show(bt); + + evas_object_show(tb2); + + evas_object_resize(win, 320, 320); + evas_object_show(win); +} +TEST_END + +void +click_through(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + printf("click went through on %p\n", obj); +} + +TEST_START(test_scroller2) +{ + Evas_Object *bt, *bx, *bx2, *bg, *sc, *tb, *tb2, *rc; + int i, j; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0.0); + + /* { */ + for (i = 0; i < 3; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "Vertical"); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + } + /* } */ + + /* { */ + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, 0.5); + elm_scroller_bounce_set(sc, 1, 0); + elm_scroller_content_min_limit(sc, 0, 1); + elm_box_pack_end(bx, sc); + evas_object_show(sc); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + + for (i = 0; i < 10; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "... Horizontal scrolling ..."); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + } + + elm_object_content_set(sc, bx2); + evas_object_show(bx2); + /* } */ + + /* { */ + for (i = 0; i < 3; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "Vertical"); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + } + /* } */ + + /* { */ + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(rc, 200, 120); + elm_table_pack(tb, rc, 0, 0, 1, 1); + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, sc, 0, 0, 1, 1); + evas_object_show(sc); + + tb2 = elm_table_add(win); + + for (j = 0; j < 16; j++) + { + for (i = 0; i < 16; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "Both"); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + elm_table_pack(tb2, bt, i, j, 1, 1); + evas_object_show(bt); + } + } + + elm_object_content_set(sc, tb2); + evas_object_show(tb2); + /* } */ + + for (i = 0; i < 24; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "Vertical"); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + } + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_scroller_bounce_set(sc, 0, 1); + elm_win_resize_object_add(win, sc); + elm_object_content_set(sc, bx); + evas_object_show(bx); + evas_object_show(sc); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_segment_control.c b/src/bin/test_segment_control.c new file mode 100644 index 0000000..b42e83b --- /dev/null +++ b/src/bin/test_segment_control.c @@ -0,0 +1,96 @@ +#include +#include "tsuite.h" +TEST_START(test_segment_control) +{ + Evas_Object *bg, *ic, *ic1, *ic2, *ic3, *ic4, *ic5; + Elm_Segment_Item *it; + + Evas_Object * in_layout; + Evas_Object *segment1, *segment2, *segment3, *segment4; + char buf[PATH_MAX]; + char buf1[PATH_MAX]; + char buf2[PATH_MAX]; + char buf3[PATH_MAX]; + char buf4[PATH_MAX]; + char buf5[PATH_MAX]; + char buf6[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + in_layout = elm_layout_add( win ); + elm_win_resize_object_add(win, in_layout); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get()); + elm_layout_file_set(in_layout, buf, "segment_test"); + evas_object_size_hint_weight_set(in_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + ic = elm_icon_add(in_layout); + snprintf(buf1, sizeof(buf1), "%s/images/logo.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf1, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + + ic1 = elm_icon_add(in_layout); + snprintf(buf2, sizeof(buf2), "%s/images/logo.png", elm_app_data_dir_get()); + elm_icon_file_set(ic1, buf2, NULL); + evas_object_size_hint_aspect_set(ic1, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + + segment1 = elm_segment_control_add(win); + elm_segment_control_item_add(segment1, NULL, "Only Text"); + it = elm_segment_control_item_add(segment1, ic, NULL); + elm_segment_control_item_selected_set(it, EINA_TRUE); + elm_segment_control_item_add(segment1, ic1, "Text_Icon_test"); + elm_segment_control_item_add(segment1, NULL, "Seg4"); + elm_segment_control_item_add(segment1, NULL, "Seg5"); + + segment2 = elm_segment_control_add(win); + elm_segment_control_item_add(segment2, NULL, "SegmentItem"); + it = elm_segment_control_item_add(segment2, NULL, "SegmentItem"); + elm_segment_control_item_selected_set(it, EINA_TRUE); + elm_segment_control_item_add(segment2, NULL, "SegmentControlItem"); + elm_segment_control_item_add(segment2, NULL, "SegmentItem"); + + ic2 = elm_icon_add(in_layout); + snprintf(buf3, sizeof(buf3), "%s/images/logo.png", elm_app_data_dir_get()); + elm_icon_file_set(ic2, buf3, NULL); + evas_object_size_hint_aspect_set(ic2, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + + ic3 = elm_icon_add(in_layout); + snprintf(buf4, sizeof(buf4), "%s/images/logo.png", elm_app_data_dir_get()); + elm_icon_file_set(ic3, buf4, NULL); + evas_object_size_hint_aspect_set(ic3, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + + ic4 = elm_icon_add(in_layout); + snprintf(buf5, sizeof(buf5), "%s/images/logo.png", elm_app_data_dir_get()); + elm_icon_file_set(ic4, buf5, NULL); + evas_object_size_hint_aspect_set(ic4, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + + segment3 = elm_segment_control_add(win); + elm_segment_control_item_add(segment3, ic2, NULL); + it = elm_segment_control_item_add(segment3, ic3, NULL); + elm_segment_control_item_selected_set(it, EINA_TRUE); + elm_segment_control_item_add(segment3, ic4, NULL); + + ic5 = elm_icon_add(in_layout); + snprintf(buf6, sizeof(buf6), "%s/images/logo.png", elm_app_data_dir_get()); + elm_icon_file_set(ic5, buf6, NULL); + evas_object_size_hint_aspect_set(ic5, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + + segment4 = elm_segment_control_add(win); + elm_segment_control_item_add(segment4, NULL, "Disabled"); + it = elm_segment_control_item_add(segment4, ic5, "Disabled"); + elm_segment_control_item_selected_set(it, EINA_TRUE); + elm_segment_control_item_add(segment4, NULL, "Disabled"); + elm_object_disabled_set(segment4, EINA_TRUE); + + elm_object_part_content_set(in_layout, "segment1", segment1); + elm_object_part_content_set(in_layout, "segment2", segment2); + elm_object_part_content_set(in_layout, "segment3", segment3); + elm_object_part_content_set(in_layout, "segment4", segment4); + + evas_object_show(in_layout); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_separator.c b/src/bin/test_separator.c new file mode 100644 index 0000000..9ed087a --- /dev/null +++ b/src/bin/test_separator.c @@ -0,0 +1,66 @@ +#include +#include "tsuite.h" +TEST_START(test_separator) +{ + Evas_Object *bg, *bx0, *bx, *bt, *sp; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx0 = elm_box_add(win); + evas_object_size_hint_weight_set(bx0, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(bx0, 1); + elm_win_resize_object_add(win, bx0); + evas_object_show(bx0); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx0, bx); + evas_object_show(bx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Left upper corner"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + sp = elm_separator_add(win); + elm_separator_horizontal_set(sp, 1); // by default, separator is vertical, we must set it horizontal + elm_box_pack_end(bx, sp); + evas_object_show(sp); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Left lower corner"); + elm_object_disabled_set(bt, 1); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + sp = elm_separator_add(win); // now we need vertical separator + elm_box_pack_end(bx0, sp); + evas_object_show(sp); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx0, bx); + evas_object_show(bx); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Right upper corner"); + elm_object_disabled_set(bt, 1); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + sp = elm_separator_add(win); + elm_separator_horizontal_set(sp, 1); + elm_box_pack_end(bx, sp); + evas_object_show(sp); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Right lower corner"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_slider.c b/src/bin/test_slider.c new file mode 100644 index 0000000..351722e --- /dev/null +++ b/src/bin/test_slider.c @@ -0,0 +1,190 @@ +#include +#include "tsuite.h" +void +_change_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + double val = elm_slider_value_get(obj); + elm_slider_value_set(data, val); +} + +TEST_START(test_slider) +{ + Evas_Object *bg, *bx, *sl, *ic, *sl1, *bx2; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + sl = elm_slider_add(win); + sl1 = sl; + elm_object_text_set(sl, "Horizontal"); + elm_object_part_content_set(sl, "icon", ic); + elm_slider_unit_format_set(sl, "%1.1f units"); + elm_slider_span_size_set(sl, 120); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sl); + evas_object_show(ic); + evas_object_show(sl); + + /* horizontal disable state */ + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Disabled"); + elm_object_part_content_set(sl, "icon", ic); + elm_slider_unit_format_set(sl, "%1.1f units"); + elm_slider_span_size_set(sl, 120); + elm_slider_min_max_set(sl, 50, 150); + elm_slider_value_set(sl, 80); + elm_object_disabled_set(sl, EINA_TRUE); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sl); + evas_object_show(ic); + evas_object_show(sl); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Horizontal inverted"); + elm_object_part_content_set(sl, "end", ic); + elm_slider_span_size_set(sl, 80); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_slider_indicator_format_set(sl, "%3.0f"); + elm_slider_min_max_set(sl, 50, 150); + elm_slider_value_set(sl, 80); + elm_slider_inverted_set(sl, EINA_TRUE); + evas_object_size_hint_align_set(sl, 0.5, 0.5); + evas_object_size_hint_weight_set(sl, 0.0, 0.0); + elm_box_pack_end(bx, sl); + evas_object_show(ic); + evas_object_show(sl); + + /* label2 disable */ + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Disabled inverted"); + elm_object_part_content_set(sl, "end", ic); + elm_slider_span_size_set(sl, 80); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_slider_indicator_format_set(sl, "%3.0f"); + elm_slider_min_max_set(sl, 50, 150); + elm_slider_value_set(sl, 80); + elm_slider_inverted_set(sl, EINA_TRUE); + elm_object_disabled_set(sl, EINA_TRUE); + evas_object_size_hint_align_set(sl, 0.5, 0.5); + evas_object_size_hint_weight_set(sl, 0.0, 0.0); + elm_box_pack_end(bx, sl); + evas_object_show(ic); + evas_object_show(sl); + + sl = elm_slider_add(win); + elm_slider_indicator_show_set(sl, EINA_FALSE); + elm_object_text_set(sl, "Scale doubled"); + elm_slider_unit_format_set(sl, "%3.0f units"); + elm_slider_span_size_set(sl, 40); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_slider_indicator_format_set(sl, "%3.0f"); + elm_slider_min_max_set(sl, 50, 150); + elm_slider_value_set(sl, 80); + elm_slider_inverted_set(sl, EINA_TRUE); + elm_object_scale_set(sl, 2.0); + elm_box_pack_end(bx, sl); + evas_object_show(ic); + evas_object_show(sl); + + bx2 = elm_box_add(win); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); + + sl = elm_slider_add(win); + elm_object_part_content_set(sl, "icon", ic); + elm_object_text_set(sl, "Vertical inverted"); + elm_slider_inverted_set(sl, EINA_TRUE); + elm_slider_unit_format_set(sl, "units"); + elm_slider_span_size_set(sl, 60); + evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(sl, 0.0, EVAS_HINT_EXPAND); + elm_slider_indicator_format_set(sl, "%1.1f"); + elm_slider_value_set(sl, 0.2); + elm_object_scale_set(sl, 1.0); + elm_slider_horizontal_set(sl, 0); + elm_box_pack_end(bx2, sl); + evas_object_show(ic); + evas_object_show(sl); + + evas_object_smart_callback_add(sl1, "changed", _change_cb, sl); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Vertical"); + elm_slider_unit_format_set(sl, "units"); + elm_slider_span_size_set(sl, 60); + evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(sl, 0.0, EVAS_HINT_EXPAND); + elm_slider_indicator_format_set(sl, "%1.1f"); + elm_slider_value_set(sl, 0.2); + elm_object_scale_set(sl, 1.0); + elm_slider_horizontal_set(sl, EINA_FALSE); + elm_box_pack_end(bx2, sl); + evas_object_show(ic); + evas_object_show(sl); + + /* vertical disable state */ + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); + + sl = elm_slider_add(win); + elm_object_part_content_set(sl, "icon", ic); + elm_object_text_set(sl, "Disabled vertical"); + elm_slider_inverted_set(sl, EINA_TRUE); + elm_slider_unit_format_set(sl, "units"); + elm_slider_span_size_set(sl, 100); + evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(sl, 0.0, EVAS_HINT_EXPAND); + elm_slider_indicator_format_set(sl, "%1.1f"); + elm_slider_value_set(sl, 0.2); + elm_object_scale_set(sl, 1.0); + elm_slider_horizontal_set(sl, 0); + elm_object_disabled_set(sl, EINA_TRUE); + elm_box_pack_end(bx2, sl); + evas_object_show(ic); + evas_object_show(sl); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_slideshow.c b/src/bin/test_slideshow.c new file mode 100644 index 0000000..952dbba --- /dev/null +++ b/src/bin/test_slideshow.c @@ -0,0 +1,204 @@ +#include +#include "tsuite.h" +static Evas_Object *slideshow, *bt_start, *bt_stop; +static Elm_Slideshow_Item_Class itc; + +static void +_notify_show(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_show(data); +} + +static void +_next(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_slideshow_next(data); +} + +static void +_previous(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_slideshow_previous(data); +} + +static void +_mouse_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_notify_timeout_set(data, 0.0); + evas_object_show(data); +} + + +static void +_mouse_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_notify_timeout_set(data, 3.0); +} + +static void +_hv_select(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + elm_slideshow_transition_set(slideshow, data); + elm_object_text_set(obj, data); +} + +static void +_layout_select(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + elm_slideshow_layout_set(slideshow, data); + elm_object_text_set(obj, data); +} + +static void +_start(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_slideshow_timeout_set(slideshow, elm_spinner_value_get(data)); + + elm_object_disabled_set(bt_start, EINA_TRUE); + elm_object_disabled_set(bt_stop, EINA_FALSE); +} + +static void +_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_slideshow_timeout_set(slideshow, 0.0); + elm_object_disabled_set(bt_start, EINA_FALSE); + elm_object_disabled_set(bt_stop, EINA_TRUE); +} + +static void +_spin(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + if (elm_slideshow_timeout_get(slideshow) > 0) + elm_slideshow_timeout_set(slideshow, elm_spinner_value_get(data)); +} + +static Evas_Object * +_get(void *data, Evas_Object *obj) +{ + //Evas_Object *photo = elm_photocam_add(obj); + //elm_photocam_file_set(photo, data); + //elm_photocam_zoom_mode_set(photo, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT); + + Evas_Object *photo = elm_photo_add(obj); + elm_photo_file_set(photo, data); + elm_photo_fill_inside_set(photo, EINA_TRUE); + elm_object_style_set(photo, "shadow"); + + return photo; +} + +static char * +_get_str(char *dest, const char *str) +{ /* dest should be not null and big enough */ + sprintf(dest, "%s/%s", elm_app_data_dir_get(), str); + return dest; +} + +TEST_START(test_slideshow) +{ + Evas_Object *bg, *notify, *bx, *bt, *hv, *spin; + const Eina_List *l; + const char *transition, *layout; + char buf[1024]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + slideshow = elm_slideshow_add(win); + elm_slideshow_loop_set(slideshow, EINA_TRUE); + elm_win_resize_object_add(win, slideshow); + evas_object_size_hint_weight_set(slideshow, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(slideshow); + + itc.func.get = _get; + itc.func.del = NULL; + + elm_slideshow_item_add(slideshow,&itc,_get_str(buf,"images/logo.png")); + elm_slideshow_item_add(slideshow,&itc,_get_str(buf,"images/plant_01.jpg")); + elm_slideshow_item_add(slideshow,&itc,_get_str(buf,"images/rock_01.jpg")); + elm_slideshow_item_add(slideshow,&itc,get_str(buf,"images/rock_02.jpg")); + elm_slideshow_item_add(slideshow,&itc,_get_str(buf,"images/sky_01.jpg")); + elm_slideshow_item_add(slideshow,&itc,_get_str(buf,"images/sky_04.jpg")); + elm_slideshow_item_add(slideshow,&itc,_get_str(buf,"images/wood_01.jpg")); + elm_slideshow_item_add(slideshow,&itc,_get_str(buf,"images/mystrale.jpg")); + elm_slideshow_item_add(slideshow,&itc,_get_str(buf,"images/mystrale_2.jpg")); + + notify = elm_notify_add(win); + elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM); + elm_win_resize_object_add(win, notify); + elm_notify_timeout_set(notify, 3.0); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, EINA_TRUE); + elm_object_content_set(notify, bx); + evas_object_show(bx); + + evas_object_event_callback_add(bx, EVAS_CALLBACK_MOUSE_IN, _mouse_in, + notify); + evas_object_event_callback_add(bx, EVAS_CALLBACK_MOUSE_OUT, _mouse_out, + notify); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Previous"); + evas_object_smart_callback_add(bt, "clicked", _previous, slideshow); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Next"); + evas_object_smart_callback_add(bt, "clicked", _next, slideshow); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + hv = elm_hoversel_add(win); + elm_box_pack_end(bx, hv); + elm_hoversel_hover_parent_set(hv, win); + EINA_LIST_FOREACH(elm_slideshow_transitions_get(slideshow), l, transition) + elm_hoversel_item_add(hv, transition, NULL, 0, _hv_select, transition); + elm_object_text_set(hv, eina_list_data_get(elm_slideshow_transitions_get(slideshow))); + evas_object_show(hv); + + hv = elm_hoversel_add(win); + elm_box_pack_end(bx, hv); + elm_hoversel_hover_parent_set(hv, win); + EINA_LIST_FOREACH(elm_slideshow_layouts_get(slideshow), l, layout) + elm_hoversel_item_add(hv, layout, NULL, 0, _layout_select, layout); + elm_object_text_set(hv, elm_slideshow_layout_get(slideshow)); + evas_object_show(hv); + + spin = elm_spinner_add(win); + elm_spinner_label_format_set(spin, "%2.0f secs."); + evas_object_smart_callback_add(spin, "changed", _spin, spin); + elm_spinner_step_set(spin, 1); + elm_spinner_min_max_set(spin, 1, 30); + elm_spinner_value_set(spin, 3); + elm_box_pack_end(bx, spin); + evas_object_show(spin); + + bt = elm_button_add(win); + bt_start = bt; + elm_object_text_set(bt, "Start"); + evas_object_smart_callback_add(bt, "clicked", _start, spin); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + bt_stop = bt; + elm_object_text_set(bt, "Stop"); + evas_object_smart_callback_add(bt, "clicked", _stop, spin); + elm_box_pack_end(bx, bt); + elm_object_disabled_set(bt, EINA_TRUE); + evas_object_show(bt); + + evas_object_event_callback_add(slideshow, EVAS_CALLBACK_MOUSE_UP, + _notify_show, notify); + evas_object_event_callback_add(slideshow, EVAS_CALLBACK_MOUSE_MOVE, + _notify_show, notify); + + evas_object_resize(win, 500, 400); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_spinner.c b/src/bin/test_spinner.c new file mode 100644 index 0000000..b4ce8e0 --- /dev/null +++ b/src/bin/test_spinner.c @@ -0,0 +1,81 @@ +#include +#include "tsuite.h" +TEST_START(test_spinner) +{ + Evas_Object *bg, *bx, *sp; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + sp = elm_spinner_add(win); + elm_spinner_label_format_set(sp, "%1.1f units"); + elm_spinner_step_set(sp, 1.3); + elm_spinner_wrap_set(sp, ELM_WRAP_CHAR); + elm_spinner_min_max_set(sp, -50.0, 250.0); + evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sp); + evas_object_show(sp); + + sp = elm_spinner_add(win); + elm_spinner_label_format_set(sp, "Percentage %%%1.2f something"); + elm_spinner_step_set(sp, 5.0); + elm_spinner_wrap_set(sp, ELM_WRAP_CHAR); + elm_spinner_min_max_set(sp, 0.0, 100.0); + evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sp); + evas_object_show(sp); + + sp = elm_spinner_add(win); + elm_spinner_label_format_set(sp, "%1.1f units"); + elm_spinner_step_set(sp, 1.3); + elm_spinner_wrap_set(sp, ELM_WRAP_CHAR); + elm_object_style_set (sp, "vertical"); + elm_spinner_min_max_set(sp, -50.0, 250.0); + evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sp); + evas_object_show(sp); + + sp = elm_spinner_add(win); + elm_spinner_label_format_set(sp, "Disabled %.0f"); + elm_object_disabled_set(sp, 1); + elm_spinner_min_max_set(sp, -50.0, 250.0); + evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sp); + evas_object_show(sp); + + sp = elm_spinner_add(win); + elm_spinner_min_max_set(sp, 1, 12); + elm_spinner_label_format_set(sp, "%.0f"); + elm_spinner_step_set(sp, 1.0); + elm_spinner_editable_set(sp, EINA_FALSE); + elm_spinner_special_value_add(sp, 1, "January"); + elm_spinner_special_value_add(sp, 2, "February"); + elm_spinner_special_value_add(sp, 3, "March"); + elm_spinner_special_value_add(sp, 4, "April"); + elm_spinner_special_value_add(sp, 5, "May"); + elm_spinner_special_value_add(sp, 6, "June"); + elm_spinner_special_value_add(sp, 7, "July"); + elm_spinner_special_value_add(sp, 8, "August"); + elm_spinner_special_value_add(sp, 9, "September"); + elm_spinner_special_value_add(sp, 10, "October"); + elm_spinner_special_value_add(sp, 11, "November"); + elm_spinner_special_value_add(sp, 12, "December"); + evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, sp); + evas_object_show(sp); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_table.c b/src/bin/test_table.c new file mode 100644 index 0000000..fdaa76d --- /dev/null +++ b/src/bin/test_table.c @@ -0,0 +1,340 @@ +#include +#include "tsuite.h" +TEST_START(test_table) +{ + Evas_Object *bg, *tb, *bt; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + elm_win_resize_object_add(win, tb); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(tb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 1"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 2"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 1, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 3"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 2, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 4"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 1, 2, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 5"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 2, 1, 1, 2); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button a"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 2, 2, 1); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END + +TEST_START(test_table2) +{ + Evas_Object *bg, *tb, *bt; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + elm_table_homogeneous_set(tb, EINA_TRUE); + elm_win_resize_object_add(win, tb); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(tb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "A"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 1, 1, 2, 2); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Blah blah blah"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 3, 0, 2, 3); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Hallow"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 3, 10, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "B"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 2, 5, 2, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "C"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 8, 8, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Wide"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 1, 7, 7, 2); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END + +static void +my_tb_ch(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *tb = evas_object_data_get(win, "tb"); + Evas_Object *b2 = evas_object_data_get(win, "b2"); + + elm_table_unpack(tb, b2); + elm_table_pack(tb, b2, 1, 0, 1, 2); +} + +TEST_START(test_table3) +{ + Evas_Object *bg, *tb, *bt; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + elm_win_resize_object_add(win, tb); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_data_set(win, "tb", tb); + evas_object_show(tb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 1"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 0, 1, 1); + evas_object_data_set(win, "b1", bt); + evas_object_smart_callback_add(bt, "clicked", my_tb_ch, win); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 2"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 1, 0, 1, 1); + evas_object_data_set(win, "b2", bt); + evas_object_smart_callback_add(bt, "clicked", my_tb_ch, win); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 3"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 1, 1, 1); + evas_object_data_set(win, "b3", bt); + evas_object_smart_callback_add(bt, "clicked", my_tb_ch, win); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END + +TEST_START(test_table4) +{ + Evas_Object *bg, *tb, *bt; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + elm_win_resize_object_add(win, tb); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_data_set(win, "tb", tb); + evas_object_show(tb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 1"); + evas_object_size_hint_weight_set(bt, 0.25, 0.25); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 0, 1, 1); + evas_object_data_set(win, "b1", bt); + evas_object_smart_callback_add(bt, "clicked", my_tb_ch, win); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 2"); + evas_object_size_hint_weight_set(bt, 0.75, 0.25); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 1, 0, 1, 1); + evas_object_data_set(win, "b2", bt); + evas_object_smart_callback_add(bt, "clicked", my_tb_ch, win); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button 3"); + evas_object_size_hint_weight_set(bt, 0.25, 0.75); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 1, 1, 1); + evas_object_data_set(win, "b3", bt); + evas_object_smart_callback_add(bt, "clicked", my_tb_ch, win); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END + +TEST_START(test_table5) +{ + Evas_Object *bg, *tb, *bt; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + elm_table_homogeneous_set(tb, EINA_TRUE); + elm_win_resize_object_add(win, tb); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(tb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "A"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 33, 0, 34, 33); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "B"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 67, 33, 33, 34); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "C"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 33, 67, 34, 33); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "D"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 33, 33, 34); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "X"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 33, 33, 34, 34); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END + +TEST_START(test_table6) +{ + Evas_Object *bg, *tb, *bt; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + elm_table_homogeneous_set(tb, EINA_TRUE); + elm_win_resize_object_add(win, tb); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(tb); + + bt = elm_button_add(win); + elm_object_text_set(bt, "C"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 1, 1, 2, 2); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "A"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 1, 1, 2, 2); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Blah blah blah"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 3, 0, 2, 3); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Hallow"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 0, 3, 10, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "B"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 1, 1, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Wide"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, bt, 1, 7, 7, 2); + evas_object_show(bt); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_thumb.c b/src/bin/test_thumb.c new file mode 100644 index 0000000..4749d74 --- /dev/null +++ b/src/bin/test_thumb.c @@ -0,0 +1,64 @@ +#include +#include "tsuite.h" +TEST_START(test_thumb) +{ + Evas_Object *bg, *sc, *tb, *th; + int i, j, n; + char buf[PATH_MAX]; + const char *img[11] = + { + "panel_01.jpg", + "plant_01.jpg", + "rock_01.jpg", + "rock_02.jpg", + "sky_01.jpg", + "sky_02.jpg", + "sky_03.jpg", + "sky_04.jpg", + "wood_01.jpg", + "mystrale.jpg", + "mystrale_2.jpg" + }; + + elm_need_ethumb(); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + n = 0; + for (j = 0; j < 12; j++) + { + for (i = 0; i < 12; i++) + { + th = elm_thumb_add(win); + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), + img[n]); + n = (n + 1) % 11; + elm_thumb_file_set(th, buf, img[n]); + evas_object_size_hint_weight_set(th, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(th, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_table_pack(tb, th, i, j, 1, 1); + elm_thumb_editable_set(th, EINA_TRUE); + evas_object_show(th); + } + } + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, sc); + + elm_object_content_set(sc, tb); + evas_object_show(tb); + evas_object_show(sc); + + evas_object_resize(win, 600, 600); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_toggle.c b/src/bin/test_toggle.c new file mode 100644 index 0000000..0281d34 --- /dev/null +++ b/src/bin/test_toggle.c @@ -0,0 +1,85 @@ +#include +#include "tsuite.h" +TEST_START(test_toggle) +{ + Evas_Object *bg, *bx, *ic, *tg; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + tg = elm_check_add(win); + elm_object_style_set(tg, "toggle"); + evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(tg, EVAS_HINT_FILL, 0.5); + elm_object_text_set(tg, "Icon sized to toggle"); + elm_object_content_set(tg, ic); + elm_check_state_set(tg, 1); + elm_object_part_text_set(tg, "on", "Yes"); + elm_object_part_text_set(tg, "off", "No"); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + + tg = elm_check_add(win); + elm_object_style_set(tg, "toggle"); + elm_object_text_set(tg, "Icon no scale"); + elm_object_content_set(tg, ic); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + + tg = elm_check_add(win); + elm_object_style_set(tg, "toggle"); + elm_object_text_set(tg, "Icon no scale"); + elm_object_content_set(tg, ic); + elm_object_disabled_set(tg, 1); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); + + tg = elm_check_add(win); + elm_object_style_set(tg, "toggle"); + elm_object_text_set(tg, "Label Only"); + elm_object_part_text_set(tg, "on", "Big long fun times label"); + elm_object_part_text_set(tg, "off", "Small long happy fun label"); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + + tg = elm_check_add(win); + elm_object_style_set(tg, "toggle"); + elm_object_content_set(tg, ic); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); + + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_toolbar.c b/src/bin/test_toolbar.c new file mode 100644 index 0000000..86be1e7 --- /dev/null +++ b/src/bin/test_toolbar.c @@ -0,0 +1,699 @@ +#include +#include "tsuite.h" +static void +tb_1(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/panel_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(data, buf); +} + +static void +tb_2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(data, buf); +} + +static void +tb_3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/wood_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(data, buf); +} + +static void +tb_3a(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + tb_3(data, obj, event_info); + elm_toolbar_item_state_set(event_info, elm_toolbar_item_state_next(event_info)); +} + +static void +tb_3b(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + tb_3(data, obj, event_info); + elm_toolbar_item_state_unset(event_info); +} + +static void +tb_4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", elm_app_data_dir_get()); + elm_photo_file_set(data, buf); +} + +static void +tb_4a(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_toolbar_item_state_set(event_info, elm_toolbar_item_state_prev(event_info)); +} + +static void +tb_5(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + elm_photo_file_set(data, NULL); +} + +TEST_START(test_toolbar) +{ + Evas_Object *bg, *bx, *tb, *ph, *menu; + Evas_Object *ph1, *ph2, *ph3, *ph4; + Elm_Object_Item *tb_it; + Elm_Object_Item *menu_it; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + tb = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(tb, 0); + elm_toolbar_mode_shrink_set(tb, ELM_TOOLBAR_SHRINK_MENU); + evas_object_size_hint_weight_set(tb, 0.0, 0.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); + + ph1 = elm_photo_add(win); + ph2 = elm_photo_add(win); + ph3 = elm_photo_add(win); + ph4 = elm_photo_add(win); + + tb_it = elm_toolbar_item_append(tb, "document-print", "Hello", tb_1, ph1); + elm_toolbar_item_disabled_set(tb_it, EINA_TRUE); + elm_toolbar_item_priority_set(tb_it, 100); + + tb_it = elm_toolbar_item_append(tb, "folder-new", "World", tb_2, ph1); + elm_toolbar_item_priority_set(tb_it, -100); + + tb_it = elm_toolbar_item_append(tb, "object-rotate-right", "H", tb_3, ph4); + elm_toolbar_item_priority_set(tb_it, 150); + + tb_it = elm_toolbar_item_append(tb, "mail-send", "Comes", tb_4, ph4); + elm_toolbar_item_priority_set(tb_it, 0); + + tb_it = elm_toolbar_item_append(tb, "clock", "Elementary", tb_5, ph4); + elm_toolbar_item_priority_set(tb_it, -200); + + tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); + elm_toolbar_item_menu_set(tb_it, 1); + elm_toolbar_item_priority_set(tb_it, -999999); + elm_toolbar_menu_parent_set(tb, win); + menu = elm_toolbar_item_menu_get(tb_it); + + elm_menu_item_add(menu, NULL, "edit-cut", "Shrink", tb_3, ph4); + menu_it = elm_menu_item_add(menu, NULL, "edit-copy", "Mode", tb_4, ph4); + elm_menu_item_add(menu, menu_it, "edit-paste", "is set to", tb_4, ph4); + elm_menu_item_add(menu, NULL, "edit-delete", "Menu", tb_5, ph4); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + tb = elm_table_add(win); + //elm_table_homogeneous_set(tb, 1); + evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + ph = ph1; + elm_photo_size_set(ph, 40); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 0, 1, 1); + evas_object_show(ph); + + ph = ph2; + elm_photo_size_set(ph, 80); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 0, 1, 1); + evas_object_show(ph); + + ph = ph3; + elm_photo_size_set(ph, 20); + snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 1, 1, 1); + evas_object_show(ph); + + ph = ph4; + elm_photo_size_set(ph, 60); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 1, 1, 1); + evas_object_show(ph); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END + +TEST_START(test_toolbar2) +{ + Evas_Object *bg, *bx, *tb, *ph, *menu; + Evas_Object *ph1, *ph2, *ph3, *ph4; + Elm_Object_Item *item; + Elm_Object_Item *menu_it; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + tb = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(tb, 0); + elm_toolbar_mode_shrink_set(tb, ELM_TOOLBAR_SHRINK_SCROLL); + evas_object_size_hint_weight_set(tb, 0.0, 0.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); + + ph1 = elm_photo_add(win); + ph2 = elm_photo_add(win); + ph3 = elm_photo_add(win); + ph4 = elm_photo_add(win); + + item = elm_toolbar_item_append(tb, "document-print", "Hello", tb_1, ph1); + elm_toolbar_item_disabled_set(item, EINA_TRUE); + elm_toolbar_item_priority_set(item, -100); + + item = elm_toolbar_item_append(tb, "folder-new", "World", tb_2, ph1); + elm_toolbar_item_priority_set(item, 100); + + item = elm_toolbar_item_append(tb, "object-rotate-right", "H", tb_3, ph4); + elm_toolbar_item_priority_set(item, -150); + + item = elm_toolbar_item_append(tb, "mail-send", "Comes", tb_4, ph4); + elm_toolbar_item_priority_set(item, -200); + + item = elm_toolbar_item_append(tb, "clock", "Elementary", tb_5, ph4); + elm_toolbar_item_priority_set(item, 0); + + item = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); + elm_toolbar_item_menu_set(item, 1); + elm_toolbar_item_priority_set(item, -999999); + elm_toolbar_menu_parent_set(tb, win); + menu = elm_toolbar_item_menu_get(item); + + elm_menu_item_add(menu, NULL, "edit-cut", "Shrink", tb_3, ph4); + menu_it = elm_menu_item_add(menu, NULL, "edit-copy", "Mode", tb_4, ph4); + elm_menu_item_add(menu, menu_it, "edit-paste", "is set to", tb_4, ph4); + elm_menu_item_add(menu, NULL, "edit-delete", "Scroll", tb_5, ph4); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + tb = elm_table_add(win); + //elm_table_homogeneous_set(tb, 1); + evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + ph = ph1; + elm_photo_size_set(ph, 40); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 0, 1, 1); + evas_object_show(ph); + + ph = ph2; + elm_photo_size_set(ph, 80); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 0, 1, 1); + evas_object_show(ph); + + ph = ph3; + elm_photo_size_set(ph, 20); + snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 1, 1, 1); + evas_object_show(ph); + + ph = ph4; + elm_photo_size_set(ph, 60); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 1, 1, 1); + evas_object_show(ph); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END + +TEST_START(test_toolbar3) +{ + Evas_Object *bg, *bx, *tb, *ph, *menu; + Evas_Object *ph1, *ph2, *ph3, *ph4; + Elm_Object_Item *tb_it; + Elm_Object_Item *menu_it; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + tb = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(tb, 0); + elm_toolbar_mode_shrink_set(tb, ELM_TOOLBAR_SHRINK_NONE); + evas_object_size_hint_weight_set(tb, 0.0, 0.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); + + ph1 = elm_photo_add(win); + ph2 = elm_photo_add(win); + ph3 = elm_photo_add(win); + ph4 = elm_photo_add(win); + + tb_it = elm_toolbar_item_append(tb, "document-print", "Hello", tb_1, ph1); + elm_toolbar_item_disabled_set(tb_it, EINA_TRUE); + elm_toolbar_item_priority_set(tb_it, 0); + + tb_it = elm_toolbar_item_append(tb, "folder-new", "World", tb_2, ph1); + elm_toolbar_item_priority_set(tb_it, -200); + + tb_it = elm_toolbar_item_append(tb, "object-rotate-right", "H", tb_3, ph4); + elm_toolbar_item_priority_set(tb_it, 1); + + tb_it = elm_toolbar_item_append(tb, "mail-send", "Comes", tb_4, ph4); + elm_toolbar_item_priority_set(tb_it, -10); + + tb_it = elm_toolbar_item_append(tb, "clock", "Elementary", tb_5, ph4); + elm_toolbar_item_priority_set(tb_it, 50); + + tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); + elm_toolbar_item_menu_set(tb_it, 1); + elm_toolbar_item_priority_set(tb_it, 999999); + elm_toolbar_menu_parent_set(tb, win); + menu = elm_toolbar_item_menu_get(tb_it); + + elm_menu_item_add(menu, NULL, "edit-cut", "Shrink", tb_3, ph4); + menu_it = elm_menu_item_add(menu, NULL, "edit-copy", "Mode", tb_4, ph4); + elm_menu_item_add(menu, menu_it, "edit-paste", "is set to", tb_4, ph4); + elm_menu_item_add(menu, NULL, "edit-delete", "None", tb_5, ph4); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + ph = ph1; + elm_photo_size_set(ph, 40); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 0, 1, 1); + evas_object_show(ph); + + ph = ph2; + elm_photo_size_set(ph, 80); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 0, 1, 1); + evas_object_show(ph); + + ph = ph3; + elm_photo_size_set(ph, 20); + snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 1, 1, 1); + evas_object_show(ph); + + ph = ph4; + elm_photo_size_set(ph, 60); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 1, 1, 1); + evas_object_show(ph); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END + +/* The same test of toolbar, but using hide shrink mode instead of menu */ +TEST_START(test_toolbar4) +{ + Evas_Object *bg, *bx, *tb, *ph, *menu; + Evas_Object *ph1, *ph2, *ph3, *ph4; + Elm_Object_Item *tb_it; + Elm_Object_Item *menu_it; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + tb = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(tb, 0); + elm_toolbar_mode_shrink_set(tb, ELM_TOOLBAR_SHRINK_HIDE); + evas_object_size_hint_weight_set(tb, 0.0, 0.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); + + ph1 = elm_photo_add(win); + ph2 = elm_photo_add(win); + ph3 = elm_photo_add(win); + ph4 = elm_photo_add(win); + + tb_it = elm_toolbar_item_append(tb, "document-print", "Hello", tb_1, ph1); + elm_toolbar_item_disabled_set(tb_it, EINA_TRUE); + elm_toolbar_item_priority_set(tb_it, 100); + + tb_it = elm_toolbar_item_append(tb, "folder-new", "World", tb_2, ph1); + elm_toolbar_item_priority_set(tb_it, -100); + + tb_it = elm_toolbar_item_append(tb, "object-rotate-right", "H", tb_3, ph4); + elm_toolbar_item_priority_set(tb_it, 150); + + tb_it = elm_toolbar_item_append(tb, "mail-send", "Comes", tb_4, ph4); + elm_toolbar_item_priority_set(tb_it, 0); + + tb_it = elm_toolbar_item_append(tb, "clock", "Elementary", tb_5, ph4); + elm_toolbar_item_priority_set(tb_it, -200); + + tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); + elm_toolbar_item_menu_set(tb_it, 1); + elm_toolbar_item_priority_set(tb_it, -999999); + elm_toolbar_menu_parent_set(tb, win); + menu = elm_toolbar_item_menu_get(tb_it); + + elm_menu_item_add(menu, NULL, "edit-cut", "Shrink", tb_3, ph4); + menu_it = elm_menu_item_add(menu, NULL, "edit-copy", "Mode", tb_4, ph4); + elm_menu_item_add(menu, menu_it, "edit-paste", "is set to", tb_4, ph4); + elm_menu_item_add(menu, NULL, "edit-delete", "Menu", tb_5, ph4); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + ph = ph1; + elm_photo_size_set(ph, 40); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 0, 1, 1); + evas_object_show(ph); + + ph = ph2; + elm_photo_size_set(ph, 80); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 0, 1, 1); + evas_object_show(ph); + + ph = ph3; + elm_photo_size_set(ph, 20); + snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 1, 1, 1); + evas_object_show(ph); + + ph = ph4; + elm_photo_size_set(ph, 60); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 1, 1, 1); + evas_object_show(ph); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END + +/* Toolbar with multiple state buttons */ +TEST_START(test_toolbar5) +{ + Evas_Object *bg, *bx, *tb, *ph, *menu; + Evas_Object *ph1, *ph2, *ph3, *ph4; + Elm_Object_Item *tb_it; + Elm_Object_Item *menu_it; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + tb = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(tb, 0); + elm_toolbar_mode_shrink_set(tb, ELM_TOOLBAR_SHRINK_MENU); + evas_object_size_hint_weight_set(tb, 0.0, 0.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); + elm_toolbar_no_select_mode_set(tb, EINA_TRUE); + + ph1 = elm_photo_add(win); + ph2 = elm_photo_add(win); + ph3 = elm_photo_add(win); + ph4 = elm_photo_add(win); + + tb_it = elm_toolbar_item_append(tb, "document-print", "Hello", tb_1, ph1); + elm_toolbar_item_disabled_set(tb_it, EINA_TRUE); + elm_toolbar_item_priority_set(tb_it, 100); + + snprintf(buf, sizeof(buf), "%s/images/icon_04.pngj", elm_app_data_dir_get()); + tb_it = elm_toolbar_item_append(tb, buf, "World", tb_2, ph1); + elm_toolbar_item_priority_set(tb_it, -100); + + tb_it = elm_toolbar_item_append(tb, "object-rotate-right", "H", tb_3a, ph4); + elm_toolbar_item_state_add(tb_it, "object-rotate-left", "H2", tb_3b, ph4); + elm_toolbar_item_priority_set(tb_it, 150); + + tb_it = elm_toolbar_item_append(tb, "mail-send", "Comes", tb_4a, ph4); + elm_toolbar_item_state_add(tb_it, "emptytrash", "Comes2", tb_4a, ph4); + elm_toolbar_item_state_add(tb_it, "trashcan_full", "Comes3", tb_4a, ph4); + elm_toolbar_item_priority_set(tb_it, 0); + + tb_it = elm_toolbar_item_append(tb, "clock", "Elementary", tb_5, ph4); + elm_toolbar_item_priority_set(tb_it, -200); + + tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); + elm_toolbar_item_menu_set(tb_it, 1); + elm_toolbar_item_priority_set(tb_it, -999999); + elm_toolbar_menu_parent_set(tb, win); + menu = elm_toolbar_item_menu_get(tb_it); + + elm_menu_item_add(menu, NULL, "edit-cut", "Shrink", tb_3, ph4); + menu_it = elm_menu_item_add(menu, NULL, "edit-copy", "Mode", tb_4, ph4); + elm_menu_item_add(menu, menu_it, "edit-paste", "is set to", tb_4, ph4); + elm_menu_item_add(menu, NULL, "edit-delete", "Menu", tb_5, ph4); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + ph = ph1; + elm_photo_size_set(ph, 40); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 0, 1, 1); + evas_object_show(ph); + + ph = ph2; + elm_photo_size_set(ph, 80); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 0, 1, 1); + evas_object_show(ph); + + ph = ph3; + elm_photo_size_set(ph, 20); + snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 1, 1, 1); + evas_object_show(ph); + + ph = ph4; + elm_photo_size_set(ph, 60); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 1, 1, 1); + evas_object_show(ph); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END +TEST_START(test_toolbar6) +{ + Evas_Object *bg, *bx, *tb, *ph, *menu; + Evas_Object *ph1, *ph2, *ph3, *ph4; + Elm_Object_Item *tb_it; + Elm_Object_Item *menu_it; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + elm_box_horizontal_set(bx, EINA_TRUE); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(bx); + + tb = elm_toolbar_add(win); + elm_toolbar_horizontal_set(tb, EINA_FALSE); + elm_toolbar_mode_shrink_set(tb, ELM_TOOLBAR_SHRINK_MENU); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + ph1 = elm_photo_add(win); + ph2 = elm_photo_add(win); + ph3 = elm_photo_add(win); + ph4 = elm_photo_add(win); + + tb_it = elm_toolbar_item_append(tb, "document-print", "Hello", tb_1, ph1); + elm_toolbar_item_disabled_set(tb_it, EINA_TRUE); + elm_toolbar_item_priority_set(tb_it, 100); + + tb_it = elm_toolbar_item_append(tb, "folder-new", "World", tb_2, ph1); + elm_toolbar_item_priority_set(tb_it, -100); + + tb_it = elm_toolbar_item_append(tb, "object-rotate-right", "H", tb_3, ph4); + elm_toolbar_item_priority_set(tb_it, 150); + + tb_it = elm_toolbar_item_append(tb, "mail-send", "Comes", tb_4, ph4); + elm_toolbar_item_priority_set(tb_it, 0); + + tb_it = elm_toolbar_item_append(tb, "clock", "Elementary", tb_5, ph4); + elm_toolbar_item_priority_set(tb_it, -200); + + tb_it = elm_toolbar_item_append(tb, "refresh", "Menu", NULL, NULL); + elm_toolbar_item_menu_set(tb_it, 1); + elm_toolbar_item_priority_set(tb_it, -999999); + elm_toolbar_menu_parent_set(tb, win); + menu = elm_toolbar_item_menu_get(tb_it); + + elm_menu_item_add(menu, NULL, "edit-cut", "Shrink", tb_3, ph4); + menu_it = elm_menu_item_add(menu, NULL, "edit-copy", "Mode", tb_4, ph4); + elm_menu_item_add(menu, menu_it, "edit-paste", "is set to", tb_4, ph4); + elm_menu_item_add(menu, NULL, "edit-delete", "Menu", tb_5, ph4); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + ph = ph1; + elm_photo_size_set(ph, 40); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 0, 1, 1); + evas_object_show(ph); + + ph = ph2; + elm_photo_size_set(ph, 80); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 0, 1, 1); + evas_object_show(ph); + + ph = ph3; + elm_photo_size_set(ph, 20); + snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 0, 1, 1, 1); + evas_object_show(ph); + + ph = ph4; + elm_photo_size_set(ph, 60); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get()); + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ph, 0.5, 0.5); + elm_table_pack(tb, ph, 1, 1, 1, 1); + evas_object_show(ph); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_tooltip.c b/src/bin/test_tooltip.c new file mode 100644 index 0000000..7dd8cc0 --- /dev/null +++ b/src/bin/test_tooltip.c @@ -0,0 +1,600 @@ +#include +#include "tsuite.h" +typedef struct _Testitem +{ + Elm_Gengrid_Item *item; + const char *path; + int mode; + int onoff; +} Testitem; + +static Elm_Gengrid_Item_Class gic; + +char * +grdt_lbl_get(void *data, + Evas_Object *obj __UNUSED__, + const char *part __UNUSED__) +{ + const Testitem *ti = data; + char buf[256]; + snprintf(buf, sizeof(buf), "Photo %s", ti->path); + return strdup(buf); +} + +Evas_Object * +grdt_content_get(void *data, + Evas_Object *obj, + const char *part) +{ + const Testitem *ti = data; + if (!strcmp(part, "elm.swallow.icon")) + { + Evas_Object *icon = elm_bg_add(obj); + elm_bg_file_set(icon, ti->path, NULL); + evas_object_size_hint_aspect_set(icon, + EVAS_ASPECT_CONTROL_VERTICAL, + 1, 1); + evas_object_show(icon); + return icon; + } + return NULL; +} + +static Elm_Genlist_Item_Class itct; + +static void +gltt_exp(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Elm_Genlist_Item *it = event_info; + Evas_Object *gl = elm_genlist_item_genlist_get(it); + int val = (int)(long)elm_genlist_item_data_get(it); + Elm_Genlist_Item *it1, *it2, *it3; + + val *= 10; + it1 = elm_genlist_item_append(gl, &itct, (void *)(long)(val + 1), it, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + it2 = elm_genlist_item_append(gl, &itct, (void *)(long)(val + 2), it, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + it3 = elm_genlist_item_append(gl, &itct, (void *)(long)(val + 3), it, + ELM_GENLIST_ITEM_SUBITEMS, NULL, NULL); + + elm_genlist_item_tooltip_text_set(it1, "Testing A"); + elm_genlist_item_tooltip_text_set(it2, "Testing B"); + elm_genlist_item_tooltip_text_set(it3, "Testing C"); +} + +static void +gltt_con(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_subitems_clear(it); +} + +static void +gltt_exp_req(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_expanded_set(it, 1); +} + +static void +gltt_con_req(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Elm_Genlist_Item *it = event_info; + elm_genlist_item_expanded_set(it, 0); +} + +char * +gltt_text_get(void *data, + Evas_Object *obj __UNUSED__, + const char *part __UNUSED__) +{ + char buf[256]; + snprintf(buf, sizeof(buf), "Item mode %i", (int)(long)data); + return strdup(buf); +} + +static Evas_Object * +_tt_item_icon(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + Evas_Object *tt, + void *item __UNUSED__) +{ + Evas_Object *ic = elm_icon_add(tt); + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", + elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_resize(ic, 64, 64); + return ic; +} + +static Evas_Object * +_tt_item_icon2(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + Evas_Object *tt, + void *item __UNUSED__) +{ + Evas_Object *ic = elm_icon_add(tt); + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + return ic; +} + +static Evas_Object * +_tt_item_icon3(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + Evas_Object *tt, + void *item __UNUSED__) +{ + int w, h, sw, sh; + Evas_Object *ic = elm_icon_add(tt); + + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/insanely_huge_test_image.jpg", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_size_get(ic, &w, &h); + elm_win_screen_size_get(tt, NULL, NULL, &sw, &sh); + if ((w > sw) || (h > sh)) + { + float sc = 0; + if ((float)w / (float)sw >= 0.8) + sc = ((float)sw * 0.8) / (float)w; + else if ((float)h / (float)sh >= 0.8) + sc = ((float)sh * 0.8) / (float)h; + if (sc) elm_object_scale_set(ic, sc); + } + return ic; +} + +static Evas_Object * +_tt_item_label(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + Evas_Object *tt, + void *item __UNUSED__) +{ + Evas_Object *l = elm_label_add(tt); + elm_object_text_set(l, "Something useful here?" + "No probably not, but this is a super long label" + "which probably breaks on your system, now doesn't it?" + "Yeah, I thought so."); + elm_label_line_wrap_set(l, ELM_WRAP_MIXED); + return l; +} + +static void +_tt_item_icon_del(void *data, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + // test to check for del_cb behavior! + printf("_tt_icon_del: data=%ld (== 456?), event_info=%p\n", + (long)data, event_info); +} + +static void +_tt_text_replace(void *data __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + static int count = 0; + char buf[64]; + snprintf(buf, sizeof(buf), "count=%d", count); + count++; + elm_object_tooltip_text_set(obj, buf); +} + +static void +_tt_timer_del(void *data __UNUSED__, + Evas *e __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + Ecore_Timer *timer = evas_object_data_del(obj, "test-timer"); + if (!timer) return; + ecore_timer_del(timer); +} + +static Eina_Bool +_tt_text_replace_timer_cb(void *data) +{ + _tt_text_replace(NULL, data, NULL); + return EINA_TRUE; +} + +static void +_tt_text_replace_timed(void *data __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + Ecore_Timer *timer = evas_object_data_get(obj, "test-timer"); + if (timer) + { + ecore_timer_del(timer); + evas_object_data_del(obj, "test-timer"); + elm_object_text_set(obj, "Simple text tooltip, click to start" + " changed timed"); + return; + } + + timer = ecore_timer_add(1.5, _tt_text_replace_timer_cb, obj); + evas_object_data_set(obj, "test-timer", timer); + elm_object_text_set(obj, "Simple text tooltip, click to stop changed" + " timed"); +} + +static Evas_Object * +_tt_icon(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + Evas_Object *tt) +{ + Evas_Object *ic = elm_icon_add(tt); + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", + elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_resize(ic, 64, 64); + return ic; +} + +static Evas_Object * +_tt_icon2(void *data __UNUSED__, + Evas_Object *obj __UNUSED__, + Evas_Object *tt) +{ + Evas_Object *ic = elm_icon_add(tt); + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/images/icon_00.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_resize(ic, 64, 64); + return ic; +} + +static void +_tt_icon_del(void *data, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + // test to check for del_cb behavior! + printf("_tt_icon_del: data=%ld (== 123?), event_info=%p\n", + (long)data, event_info); +} + +static Eina_Bool +_tt_icon_replace_timer_cb(void *data) +{ + static int current = 0; + + elm_object_tooltip_content_cb_set + (data, current ? _tt_icon2 : _tt_icon, NULL, NULL); + + current = !current; + return EINA_TRUE; +} + +static void +_tt_icon_replace_timed(void *data __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + Ecore_Timer *timer = evas_object_data_get(obj, "test-timer"); + if (timer) + { + ecore_timer_del(timer); + evas_object_data_del(obj, "test-timer"); + elm_object_text_set(obj, "Icon tooltip, click to start changed" + " timed"); + return; + } + + timer = ecore_timer_add(1.5, _tt_icon_replace_timer_cb, obj); + evas_object_data_set(obj, "test-timer", timer); + elm_object_text_set(obj, "Icon tooltip, click to stop changed timed"); +} + +static Eina_Bool +_tt_style_replace_timer_cb(void *data) +{ + static int current = 0; + elm_object_tooltip_style_set(data, current ? NULL : "transparent"); + current = !current; + return EINA_TRUE; +} + +static void +_tt_style_replace_timed(void *data __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + Ecore_Timer *timer = evas_object_data_get(obj, "test-timer"); + if (timer) + { + ecore_timer_del(timer); + evas_object_data_del(obj, "test-timer"); + elm_object_text_set(obj, "Icon tooltip style, click to start" + " changed timed"); + return; + } + + timer = ecore_timer_add(1.5, _tt_style_replace_timer_cb, obj); + evas_object_data_set(obj, "test-timer", timer); + elm_object_text_set(obj, "Icon tooltip style, click to stop changed" + " timed"); +} + +static void +_tt_visible_lock_toggle(void *data __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + static int locked = 0; + + locked = !locked; + if (locked) + { + elm_object_text_set(obj, "Locked tooltip visibility"); + elm_object_tooltip_text_set(obj, "This tooltip is locked" + " visible,
click the button" + " to unlock!"); + elm_object_tooltip_show(obj); + } + else + { + elm_object_text_set(obj, "Unlocked tooltip visibility"); + elm_object_tooltip_text_set(obj, "This tooltip is unlocked" + " visible,
click the button" + " to lock!"); + elm_object_tooltip_hide(obj); + } +} + +TEST_START(test_tooltip) +{ + Evas_Object *bg, *bx, *tb, *bt, *se, *lst; + Elm_Object_Item *tb_it; + Elm_List_Item *li; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + tb = elm_toolbar_add(win); + elm_toolbar_homogeneous_set(tb, 0); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + tb_it = elm_toolbar_item_append(tb, NULL, "Open", NULL, NULL); + elm_toolbar_item_tooltip_text_set(tb_it, "Opens a file"); + + tb_it = elm_toolbar_item_append(tb, NULL, "Icon", NULL, NULL); + elm_toolbar_item_tooltip_content_cb_set + (tb_it, _tt_item_icon, (void *)456L, _tt_item_icon_del); + elm_toolbar_item_tooltip_style_set(tb_it, "transparent"); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Simple text tooltip"); + elm_object_tooltip_text_set(bt, "Simple text tooltip"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Simple text tooltip, click to change"); + elm_object_tooltip_text_set(bt, "Initial"); + evas_object_smart_callback_add(bt, "clicked", _tt_text_replace, NULL); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Simple text tooltip, click to start" + " changed timed"); + elm_object_tooltip_text_set(bt, "Initial"); + evas_object_smart_callback_add(bt, "clicked", _tt_text_replace_timed, + NULL); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_event_callback_add(bt, EVAS_CALLBACK_DEL, _tt_timer_del, + NULL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Icon tooltip"); + elm_object_tooltip_content_cb_set(bt, _tt_icon, (void *)123L, + _tt_icon_del); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Icon tooltip, click to start changed timed"); + elm_object_tooltip_content_cb_set(bt, _tt_icon, NULL, NULL); + evas_object_smart_callback_add(bt, "clicked", _tt_icon_replace_timed, + NULL); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_event_callback_add(bt, EVAS_CALLBACK_DEL, _tt_timer_del, + NULL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Transparent Icon tooltip"); + elm_object_tooltip_content_cb_set(bt, _tt_icon, NULL, NULL); + elm_object_tooltip_style_set(bt, "transparent"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Icon tooltip style, click to start changed" + " timed"); + elm_object_tooltip_content_cb_set(bt, _tt_icon, NULL, NULL); + evas_object_smart_callback_add(bt, "clicked", _tt_style_replace_timed, + NULL); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_event_callback_add(bt, EVAS_CALLBACK_DEL, _tt_timer_del, + NULL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Unlocked tooltip visibility"); + elm_object_tooltip_text_set(bt, "This tooltip is unlocked visible,
" + " click the button to lock!"); + evas_object_smart_callback_add(bt, "clicked", _tt_visible_lock_toggle, + NULL); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + se = elm_entry_add(win); + elm_entry_scrollable_set(se, EINA_TRUE); + evas_object_size_hint_weight_set(se, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(se, EVAS_HINT_FILL, 0.5); + elm_entry_scrollbar_policy_set(se, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_OFF); + elm_entry_entry_set(se, "Hello, some scrolled entry here!"); + elm_object_tooltip_text_set(se, "Type something here!"); + elm_entry_single_line_set(se, 1); + elm_box_pack_end(bx, se); + evas_object_show(se); + + lst = elm_list_add(win); + li = elm_list_item_append(lst, "Hello", NULL, NULL, NULL, NULL); + elm_list_item_tooltip_content_cb_set(li, _tt_item_label, NULL, NULL); + elm_list_item_tooltip_size_restrict_disable(li, EINA_TRUE); + li = elm_list_item_append(lst, "Icon Tooltip", NULL, NULL, NULL, NULL); + elm_list_item_tooltip_content_cb_set(li, _tt_item_icon, NULL, NULL); + li = elm_list_item_append(lst, "Big Icon Tooltip", NULL, NULL, NULL, NULL); + elm_list_item_tooltip_content_cb_set(li, _tt_item_icon2, NULL, NULL); + elm_list_item_tooltip_style_set(li, "transparent"); + elm_list_item_tooltip_size_restrict_disable(li, EINA_TRUE); + li = elm_list_item_append(lst, "Insanely Big Icon Tooltip", NULL, NULL, NULL, NULL); + elm_list_item_tooltip_content_cb_set(li, _tt_item_icon3, NULL, NULL); + elm_list_item_tooltip_style_set(li, "transparent"); + elm_list_item_tooltip_size_restrict_disable(li, EINA_TRUE); + evas_object_size_hint_weight_set(lst, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(lst, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_min_set(lst, 100, 100); + elm_list_go(lst); + elm_box_pack_end(bx, lst); + evas_object_show(lst); + + evas_object_resize(win, 320, 580); + evas_object_show(win); +} +TEST_END + +TEST_START(test_tooltip2) +{ + Evas_Object *bg, *bx, *grid, *gl; + Elm_Genlist_Item *it1, *it2, *it3; + static Testitem ti[144]; + int i, n; + char buf[PATH_MAX]; + const char *img[9] = + { + "panel_01.jpg", + "plant_01.jpg", + "rock_01.jpg", + "rock_02.jpg", + "sky_01.jpg", + "sky_02.jpg", + "sky_03.jpg", + "sky_04.jpg", + "wood_01.jpg", + }; + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + grid = elm_gengrid_add(win); + elm_gengrid_item_size_set(grid, 100, 100); + elm_gengrid_horizontal_set(grid, EINA_FALSE); + elm_gengrid_multi_select_set(grid, EINA_TRUE); + evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + gic.item_style = "default"; + gic.func.text_get = grdt_lbl_get; + gic.func.content_get = grdt_content_get; + + n = 0; + for (i = 0; i < 9; i++) + { + snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), + img[n]); + n++; + ti[i].mode = i; + ti[i].path = eina_stringshare_add(buf); + ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), NULL, + NULL); + if (n % 2) + elm_gengrid_item_tooltip_text_set(ti[i].item, "Testing X"); + else + elm_gengrid_item_tooltip_text_set(ti[i].item, "Testing Y"); + if (!(i % 5)) + elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE); + } + + elm_box_pack_end(bx, grid); + evas_object_show(grid); + + gl = elm_genlist_add(win); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + itct.item_style = "default"; + itct.func.text_get = gltt_text_get; + + it1 = elm_genlist_item_append(gl, &itct, (void *)1, NULL, + ELM_GENLIST_ITEM_SUBITEMS, NULL, NULL); + it2 = elm_genlist_item_append(gl, &itct, (void *)2, NULL, + ELM_GENLIST_ITEM_SUBITEMS, NULL, NULL); + it3 = elm_genlist_item_append(gl, &itct, (void *)3, NULL, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + + elm_genlist_item_tooltip_text_set(it1, "Testing 1"); + elm_genlist_item_tooltip_text_set(it2, "Testing 2"); + elm_genlist_item_tooltip_text_set(it3, "Testing 3"); + + evas_object_smart_callback_add(gl, "expand,request", gltt_exp_req, gl); + evas_object_smart_callback_add(gl, "contract,request", gltt_con_req, + gl); + evas_object_smart_callback_add(gl, "expanded", gltt_exp, gl); + evas_object_smart_callback_add(gl, "contracted", gltt_con, gl); + + elm_box_pack_end(bx, gl); + evas_object_show(gl); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_transit.c b/src/bin/test_transit.c new file mode 100644 index 0000000..0d1ded0 --- /dev/null +++ b/src/bin/test_transit.c @@ -0,0 +1,590 @@ +#include +#include "tsuite.h" +typedef struct _Custom_Effect Custom_Effect; + +struct _Custom_Effect +{ + struct _size + { + Evas_Coord w, h; + } from, to; +}; + +static void +_custom_op(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress) +{ + if (!effect) return; + Evas_Coord w, h; + Evas_Object *obj; + const Eina_List *elist; + + Custom_Effect *custom_effect = effect; + const Eina_List *objs = elm_transit_objects_get(transit); + + if (progress < 0.5) + { + h = custom_effect->from.h + (custom_effect->to.h * progress * 2); + w = custom_effect->from.w; + } + else + { + h = custom_effect->from.h + custom_effect->to.h; + w = custom_effect->from.w + \ + (custom_effect->to.w * (progress - 0.5) * 2); + } + + EINA_LIST_FOREACH(objs, elist, obj) + evas_object_resize(obj, w, h); + +} + +static Elm_Transit_Effect * +_custom_context_new(Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord to_h) +{ + Custom_Effect *custom_effect; + + custom_effect = calloc(1, sizeof(Custom_Effect)); + if (!custom_effect) return NULL; + + custom_effect->from.w = from_w; + custom_effect->from.h = from_h; + custom_effect->to.w = to_w - from_w; + custom_effect->to.h = to_h - from_h; + + return custom_effect; +} + +static void +_custom_context_free(Elm_Transit_Effect *effect, Elm_Transit *transit __UNUSED__) +{ + Custom_Effect *custom_effect = effect; + free(custom_effect); +} + +static void +_transit_rotation_translation_color(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Elm_Transit *trans; + + trans = elm_transit_add(); + elm_transit_object_add(trans, obj); + elm_transit_auto_reverse_set(trans, EINA_TRUE); + elm_transit_repeat_times_set(trans, 2); + + /* Translation Effect */ + elm_transit_effect_translation_add(trans, -70.0, -150.0, 70.0, 150.0); + + /* Color Effect */ + elm_transit_effect_color_add(trans, 100, 255, 100, 255, 200, 50, 200, 50); + + /* Rotation Effect */ + elm_transit_effect_rotation_add(trans, 0.0, 135.0); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); +} + +static void +_transit_wipe(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Elm_Transit *trans; + + trans = elm_transit_add(); + elm_transit_object_add(trans, obj); + elm_transit_auto_reverse_set(trans, EINA_TRUE); + + elm_transit_effect_wipe_add(trans, + ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE, + ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); +} + +static void +_transit_del_cb(void *data, Elm_Transit *transit __UNUSED__) +{ + evas_object_freeze_events_set(data, EINA_FALSE); +} + +static void +_transit_image_animation(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Eina_List *images = NULL; + char buf[PATH_MAX]; + Elm_Transit *trans; + Evas_Object *ic = data; + + snprintf(buf, sizeof(buf), "%s/images/icon_19.png", elm_app_data_dir_get()); + images = eina_list_append(images, eina_stringshare_add(buf)); + + snprintf(buf, sizeof(buf), "%s/images/icon_00.png", elm_app_data_dir_get()); + images = eina_list_append(images, eina_stringshare_add(buf)); + + snprintf(buf, sizeof(buf), "%s/images/icon_11.png", elm_app_data_dir_get()); + images = eina_list_append(images, eina_stringshare_add(buf)); + + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + images = eina_list_append(images, eina_stringshare_add(buf)); + + trans = elm_transit_add(); + elm_transit_del_cb_set(trans, _transit_del_cb, obj); + elm_transit_object_add(trans, ic); + elm_transit_effect_image_animation_add(trans, images); + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); + + evas_object_freeze_events_set(obj, EINA_TRUE); +} + +static void +_transit_resizing(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Elm_Transit *trans; + + trans = elm_transit_add(); + elm_transit_object_add(trans, obj); + + elm_transit_effect_resizing_add(trans, 100, 50, 300, 150); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); +} + +static void +_transit_flip(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Elm_Transit *trans; + Evas_Object *obj2 = data; + + trans = elm_transit_add(); + elm_transit_object_add(trans, obj); + elm_transit_object_add(trans, obj2); + + elm_transit_effect_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_X, EINA_TRUE); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); +} + +static void +_transit_zoom(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Elm_Transit *trans; + + trans = elm_transit_add(); + elm_transit_object_add(trans, obj); + + elm_transit_effect_zoom_add(trans, 1.0, 3.0); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); +} + +static void +_transit_blend(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Elm_Transit *trans; + Evas_Object *obj2 = data; + + trans = elm_transit_add(); + elm_transit_object_add(trans, obj); + elm_transit_object_add(trans, obj2); + + elm_transit_effect_blend_add(trans); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); +} + +static void +_transit_fade(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Elm_Transit *trans; + Evas_Object *obj2 = data; + + trans = elm_transit_add(); + elm_transit_object_add(trans, obj); + elm_transit_object_add(trans, obj2); + + elm_transit_effect_fade_add(trans); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); +} + +static void +_transit_resizable_flip(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Elm_Transit *trans; + Evas_Object *obj2 = data; + + trans = elm_transit_add(); + elm_transit_object_add(trans, obj); + elm_transit_object_add(trans, obj2); + + elm_transit_effect_resizable_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE); + + elm_transit_duration_set(trans, 5.0); + elm_transit_go(trans); +} + +/* Translation, Rotation, Color, Wipe, ImagemAnimation Effect */ +TEST_START(test_transit) +{ + Evas_Object *bg, *bx, *bt, *ic; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_min_set(bx, 318, 318); + evas_object_show(bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/icon_11.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + bt = elm_button_add(win); + elm_object_text_set(bt, "ImageAnimation Effect"); + elm_object_content_set(bt, ic); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); + evas_object_smart_callback_add(bt, "clicked", _transit_image_animation, ic); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Color, Rotation and Translation"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_smart_callback_add(bt, "clicked", + _transit_rotation_translation_color, NULL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Wipe Effect"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_smart_callback_add(bt, "clicked", _transit_wipe, NULL); + + evas_object_show(win); +} +TEST_END + +/* Resizing Effect */ +TEST_START(test_transit2) +{ + Evas_Object *bg, *bt; + + evas_object_resize(win, 400, 400); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Resizing Effect"); + evas_object_show(bt); + evas_object_move(bt, 50, 100); + evas_object_resize(bt, 100, 50); + evas_object_smart_callback_add(bt, "clicked", _transit_resizing, NULL); + + evas_object_resize(win, 400, 400); + evas_object_show(win); +} +TEST_END + +/* Flip Effect */ +TEST_START(test_transit3) +{ + Evas_Object *bg, *bt, *bt2; + + evas_object_resize(win, 300, 300); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Front Button - Flip Effect"); + evas_object_show(bt); + evas_object_move(bt, 50, 50); + evas_object_resize(bt, 200, 200); + + bt2 = elm_button_add(win); + elm_object_text_set(bt2, "Back Button - Flip Effect"); + evas_object_move(bt2, 50, 50); + evas_object_resize(bt2, 200, 200); + + evas_object_resize(win, 300, 300); + evas_object_show(win); + + evas_object_smart_callback_add(bt, "clicked", _transit_flip, bt2); + evas_object_smart_callback_add(bt2, "clicked", _transit_flip, bt); +} +TEST_END + +/* Zoom Effect */ +TEST_START(test_transit4) +{ + Evas_Object *bg, *bt; + + evas_object_resize(win, 300, 300); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Zoom Effect"); + evas_object_resize(bt, 100, 50); + evas_object_move(bt, 100, 125); + evas_object_show(bt); + + evas_object_smart_callback_add(bt, "clicked", _transit_zoom, NULL); + + evas_object_resize(win, 300, 300); + evas_object_show(win); +} +TEST_END + +/* Blend Effect */ +TEST_START(test_transit5) +{ + Evas_Object *bg, *bt, *bt2, *ic; + + char buf[PATH_MAX]; + evas_object_resize(win, 300, 300); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_max_set(ic, 50, 50); + + bt = elm_button_add(win); + elm_object_content_set(bt, ic); + elm_object_text_set(bt, "Before Button - Blend Effect"); + evas_object_move(bt, 25, 125); + evas_object_resize(bt, 250, 50); + evas_object_show(bt); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/rock_02.jpg", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_max_set(ic, 50, 50); + + bt2 = elm_button_add(win); + elm_object_content_set(bt2, ic); + elm_object_text_set(bt2, "After Button - Blend Effect"); + evas_object_move(bt2, 25, 125); + evas_object_resize(bt2, 250, 50); + + evas_object_resize(win, 300, 300); + evas_object_show(win); + + evas_object_smart_callback_add(bt, "clicked", _transit_blend, bt2); + evas_object_smart_callback_add(bt2, "clicked", _transit_blend, bt); +} +TEST_END + +/* Fade Effect */ +TEST_START(test_transit6) +{ + Evas_Object *bg, *bt, *bt2, *ic; + + char buf[PATH_MAX]; + evas_object_resize(win, 300, 300); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_max_set(ic, 50, 50); + + bt = elm_button_add(win); + elm_object_content_set(bt, ic); + elm_object_text_set(bt, "Before Button - Fade Effect"); + evas_object_move(bt, 25, 125); + evas_object_resize(bt, 250, 50); + evas_object_show(bt); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/rock_02.jpg", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_max_set(ic, 50, 50); + + bt2 = elm_button_add(win); + elm_object_content_set(bt2, ic); + elm_object_text_set(bt2, "After Button - Fade Effect"); + evas_object_move(bt2, 25, 125); + evas_object_resize(bt2, 250, 50); + + evas_object_resize(win, 300, 300); + evas_object_show(win); + + evas_object_smart_callback_add(bt, "clicked", _transit_fade, bt2); + evas_object_smart_callback_add(bt2, "clicked", _transit_fade, bt); +} +TEST_END + +/* Resizable Flip Effect */ +TEST_START(test_transit7) +{ + Evas_Object *bg, *bt, *bt2; + + evas_object_resize(win, 400, 400); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Front Button - Resizable Flip Effect"); + evas_object_show(bt); + evas_object_move(bt, 50, 100); + evas_object_resize(bt, 250, 30); + + bt2 = elm_button_add(win); + elm_object_text_set(bt2, "Back Button - Resizable Flip Effect"); + evas_object_move(bt2, 50, 100); + evas_object_resize(bt2, 300, 200); + + evas_object_resize(win, 400, 400); + evas_object_show(win); + + evas_object_smart_callback_add(bt, "clicked", _transit_resizable_flip, bt2); + evas_object_smart_callback_add(bt2, "clicked", _transit_resizable_flip, bt); +} +TEST_END + +/* Custom Effect */ +TEST_START(test_transit8) +{ + Evas_Object *bg, *bt; + Elm_Transit *trans; + Elm_Transit_Effect *effect_context; + + evas_object_resize(win, 400, 400); + evas_object_show(win); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Button - Custom Effect"); + evas_object_show(bt); + evas_object_move(bt, 50, 50); + evas_object_resize(bt, 150, 150); + + /* Adding Transit */ + trans = elm_transit_add(); + elm_transit_auto_reverse_set(trans, EINA_TRUE); + elm_transit_tween_mode_set(trans, ELM_TRANSIT_TWEEN_MODE_DECELERATE); + effect_context = _custom_context_new(150, 150, 50, 50); + elm_transit_object_add(trans, bt); + elm_transit_effect_add(trans, + _custom_op, effect_context, + _custom_context_free); + elm_transit_duration_set(trans, 5.0); + elm_transit_repeat_times_set(trans, -1); + elm_transit_go(trans); + + evas_object_resize(win, 400, 400); + evas_object_show(win); +} +TEST_END + +/* Chain Transit Effect */ +TEST_START(test_transit9) +{ + Evas_Object *bg, *bt, *bt2, *bt3, *bt4; + Elm_Transit *trans, *trans2, *trans3, *trans4; + + evas_object_resize(win, 400, 400); + evas_object_show(win); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Chain 1"); + evas_object_resize(bt, 100, 100); + evas_object_move(bt, 0, 0); + evas_object_show(bt); + + bt2 = elm_button_add(win); + elm_object_text_set(bt2, "Chain 2"); + evas_object_resize(bt2, 100, 100); + evas_object_move(bt2, 300, 0); + evas_object_show(bt2); + + bt3 = elm_button_add(win); + elm_object_text_set(bt3, "Chain 3"); + evas_object_resize(bt3, 100, 100); + evas_object_move(bt3, 300, 300); + evas_object_show(bt3); + + bt4 = elm_button_add(win); + elm_object_text_set(bt4, "Chain 4"); + evas_object_resize(bt4, 100, 100); + evas_object_move(bt4, 0, 300); + evas_object_show(bt4); + + trans = elm_transit_add(); + elm_transit_tween_mode_set(trans, ELM_TRANSIT_TWEEN_MODE_ACCELERATE); + elm_transit_effect_translation_add(trans, 0, 0, 300, 0); + elm_transit_object_add(trans, bt); + elm_transit_duration_set(trans, 1); + elm_transit_objects_final_state_keep_set(trans, EINA_TRUE); + elm_transit_go(trans); + + trans2 = elm_transit_add(); + elm_transit_tween_mode_set(trans2, ELM_TRANSIT_TWEEN_MODE_ACCELERATE); + elm_transit_effect_translation_add(trans2, 0, 0, 0, 300); + elm_transit_object_add(trans2, bt2); + elm_transit_duration_set(trans2, 1); + elm_transit_objects_final_state_keep_set(trans2, EINA_TRUE); + elm_transit_chain_transit_add(trans, trans2); + + trans3 = elm_transit_add(); + elm_transit_tween_mode_set(trans3, ELM_TRANSIT_TWEEN_MODE_ACCELERATE); + elm_transit_effect_translation_add(trans3, 0, 0, -300, 0); + elm_transit_object_add(trans3, bt3); + elm_transit_duration_set(trans3, 1); + elm_transit_objects_final_state_keep_set(trans3, EINA_TRUE); + elm_transit_chain_transit_add(trans2, trans3); + + trans4 = elm_transit_add(); + elm_transit_tween_mode_set(trans4, ELM_TRANSIT_TWEEN_MODE_ACCELERATE); + elm_transit_effect_translation_add(trans4, 0, 0, 0, -300); + elm_transit_object_add(trans4, bt4); + elm_transit_duration_set(trans4, 1); + elm_transit_objects_final_state_keep_set(trans4, EINA_TRUE); + elm_transit_chain_transit_add(trans3, trans4); + + evas_object_resize(win, 400, 400); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_weather.c b/src/bin/test_weather.c new file mode 100644 index 0000000..44b0b64 --- /dev/null +++ b/src/bin/test_weather.c @@ -0,0 +1,167 @@ +#include +#include "tsuite.h" +#ifdef HAVE_ELEMENTARY_EWEATHER +# include "EWeather_Smart.h" +#endif + +#ifdef HAVE_ELEMENTARY_EWEATHER +static Evas_Object *en, *hv, *fl; +static Evas_Object *weather[2]; +static int current = 0; +static Eina_Module *module[2]; + +static void +_first_city_cb(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) +{ + if (!current) return; + current = 0; + elm_flip_go(fl, ELM_FLIP_ROTATE_YZ_CENTER_AXIS); +} + +static void +_second_city_cb(void *dat __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) +{ + if (current) return; + current = 1; + elm_flip_go(fl, ELM_FLIP_ROTATE_XZ_CENTER_AXIS); +} + +static void _apply_cb(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__) +{ + EWeather *eweather = eweather_object_eweather_get(weather[current]); + + if (module[current]) + eweather_plugin_set(eweather, module[current]); + eweather_code_set(eweather, elm_entry_entry_get(en)); + printf("CURRENT %d %p %p\n", current, module[current], eweather); +} + +static void +_hover_select_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) +{ + EWeather *eweather = eweather_object_eweather_get(weather[0]); + module[0] = eweather_plugin_search(eweather, elm_hoversel_item_label_get(event_info)); + + eweather = eweather_object_eweather_get(weather[1]); + module[1] = eweather_plugin_search(eweather, elm_hoversel_item_label_get(event_info)); + printf("%p %p\n", module[0], module[1]); +} +#endif + +TEST_START(test_weather) +{ + Evas_Object *bg; +#ifdef HAVE_ELEMENTARY_EWEATHER + Evas_Object *bx, *bx0, *bt; + EWeather *eweather; + Eina_Array_Iterator it; + Eina_Array *array; + Eina_Module *m; + unsigned int i; +#endif + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + +#ifdef HAVE_ELEMENTARY_EWEATHER + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + fl = elm_flip_add(win); + evas_object_size_hint_align_set(fl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, fl); + + current = 0; + + module[0] = NULL; + weather[0] = eweather_object_add(evas_object_evas_get(win)); + evas_object_size_hint_weight_set(weather[0], EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(weather[0], -1.0, -1.0); + elm_flip_content_front_set(fl, weather[0]); + evas_object_show(weather[0]); + + module[1] = NULL; + weather[1] = eweather_object_add(evas_object_evas_get(win)); + eweather = eweather_object_eweather_get(weather[1]); + evas_object_size_hint_weight_set(weather[1], EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(weather[1], -1.0, -1.0); + elm_flip_content_back_set(fl, weather[1]); + evas_object_show(weather[1]); + + evas_object_show(fl); + + // + bx0 = elm_box_add(win); + elm_box_horizontal_set(bx0, EINA_TRUE); + evas_object_size_hint_weight_set(bx0, 1.0, 0.0); + elm_box_pack_end(bx, bx0); + evas_object_show(bx0); + + bt = elm_button_add(win); + elm_object_text_set(bt, "First city"); + evas_object_show(bt); + elm_box_pack_end(bx0, bt); + evas_object_smart_callback_add(bt, "clicked", _first_city_cb, NULL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Second city"); + evas_object_show(bt); + elm_box_pack_end(bx0, bt); + evas_object_smart_callback_add(bt, "clicked", _second_city_cb, NULL); + // + + // + bx0 = elm_box_add(win); + elm_box_horizontal_set(bx0, EINA_TRUE); + evas_object_size_hint_weight_set(bx0, 1.0, 0.0); + elm_box_pack_end(bx, bx0); + evas_object_show(bx0); + + hv = elm_hoversel_add(win); + elm_hoversel_hover_parent_set(hv, win); + elm_object_text_set(hv, "data source"); + evas_object_size_hint_weight_set(hv, 0.0, 0.0); + evas_object_size_hint_align_set(hv, 0.5, 0.5); + elm_box_pack_end(bx0, hv); + evas_object_show(hv); + + array = eweather_plugins_list_get(eweather); + + EINA_ARRAY_ITER_NEXT(array, i, m, it) + elm_hoversel_item_add(hv, eweather_plugin_name_get(eweather, i), NULL, ELM_ICON_NONE, _hover_select_cb, NULL); + + en = elm_entry_add(win); + elm_entry_line_wrap_set(en, ELM_WRAP_NONE); + elm_entry_single_line_set(en, EINA_TRUE); + elm_entry_entry_set(en, "Paris"); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx0, en); + evas_object_show(en); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Apply"); + evas_object_show(bt); + elm_box_pack_end(bx0, bt); + evas_object_smart_callback_add(bt, "clicked", _apply_cb, NULL); + // + + +#else + Evas_Object *lbl; + + lbl = elm_label_add(win); + elm_win_resize_object_add(win, lbl); + elm_object_text_set(lbl, "libeweather is required to display the forecast."); + evas_object_show(lbl); +#endif + + evas_object_resize(win, 244, 388); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_win_inline.c b/src/bin/test_win_inline.c new file mode 100644 index 0000000..317355d --- /dev/null +++ b/src/bin/test_win_inline.c @@ -0,0 +1,237 @@ +#include +#include "tsuite.h" +static void +fill(Evas_Object *win, Eina_Bool do_bg) +{ + Evas_Object *bg, *sc, *bx, *ic, *bb, *av, *en; + char buf[PATH_MAX]; + + if (do_bg) + { + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + } + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, sc); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_entry_set(en, "This is a single line"); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_single_line_set(en, 1); + evas_object_show(en); + elm_box_pack_end(bx, en); + + en = elm_entry_add(win); + elm_entry_scrollable_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_entry_entry_set(en, "Entry 2"); + elm_entry_scrollbar_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_entry_single_line_set(en, 1); + evas_object_show(en); + elm_box_pack_end(bx, en); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); + + bb = elm_bubble_add(win); + elm_object_text_set(bb, "Message 3"); + elm_object_part_text_set(bb, "info", "10:32 4/11/2008"); + elm_object_part_content_set(bb, "icon", ic); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bb, EVAS_HINT_FILL, EVAS_HINT_FILL); + av = elm_anchorblock_add(win); + elm_anchorblock_hover_style_set(av, "popout"); + elm_anchorblock_hover_parent_set(av, win); + elm_object_text_set(av, + "Hi there. This is the most recent message in the " + "list of messages. It has one +61 432 1234 " + "(phone number) to click on."); + elm_object_content_set(bb, av); + evas_object_show(av); + elm_box_pack_end(bx, bb); + evas_object_show(bb); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + bb = elm_bubble_add(win); + elm_object_text_set(bb, "Message 2"); + elm_object_part_text_set(bb, "info", "7:16 27/10/2008"); + elm_object_part_content_set(bb, "icon", ic); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bb, EVAS_HINT_FILL, EVAS_HINT_FILL); + av = elm_anchorblock_add(win); + elm_anchorblock_hover_style_set(av, "popout"); + elm_anchorblock_hover_parent_set(av, win); + elm_object_text_set(av, + "Hey what are you doing? This is the second last message " + "Hi there. This is the most recent message in the " + "list. It's a longer one so it can wrap more and " + "contains a John contact " + "link in it to test popups on links. The idea is that " + "all SMS's are scanned for things that look like phone " + "numbers or names that are in your contacts list, and " + "if they are, they become clickable links that pop up " + "a menus of obvious actions to perform on this piece " + "of information. This of course can be later explicitly " + "done by links maybe running local apps or even being " + "web URL's too that launch the web browser and point it " + "to that URL. "); + elm_object_content_set(bb, av); + evas_object_show(av); + elm_box_pack_end(bx, bb); + evas_object_show(bb); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get()); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); + + bb = elm_bubble_add(win); + elm_object_text_set(bb, "Message 1"); + elm_object_part_text_set(bb, "info", "20:47 18/6/2008"); + elm_object_part_content_set(bb, "icon", ic); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + av = elm_anchorblock_add(win); + elm_anchorblock_hover_style_set(av, "popout"); + elm_anchorblock_hover_parent_set(av, win); + elm_object_text_set(av, "This is a short message. "); + elm_object_content_set(bb, av); + evas_object_show(av); + elm_box_pack_end(bx, bb); + evas_object_show(bb); + + elm_object_content_set(sc, bx); + evas_object_show(bx); + + evas_object_show(sc); +} + +static void +cb_mouse_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ev = event_info; + Evas_Object *orig = data; + Evas_Coord x, y; + Evas_Map *p; + int i, w, h; + + if (!ev->buttons) return; + evas_object_geometry_get(obj, &x, &y, NULL, NULL); + evas_object_move(obj, + x + (ev->cur.canvas.x - ev->prev.output.x), + y + (ev->cur.canvas.y - ev->prev.output.y)); + evas_object_image_size_get(orig, &w, &h); + p = evas_map_new(4); + evas_object_map_enable_set(orig, EINA_TRUE); + evas_object_raise(orig); + for (i = 0; i < 4; i++) + { + Evas_Object *hand; + char key[32]; + + snprintf(key, sizeof(key), "h-%i\n", i); + hand = evas_object_data_get(orig, key); + evas_object_raise(hand); + evas_object_geometry_get(hand, &x, &y, NULL, NULL); + x += 15; + y += 15; + evas_map_point_coord_set(p, i, x, y, 0); + if (i == 0) evas_map_point_image_uv_set(p, i, 0, 0); + else if (i == 1) evas_map_point_image_uv_set(p, i, w, 0); + else if (i == 2) evas_map_point_image_uv_set(p, i, w, h); + else if (i == 3) evas_map_point_image_uv_set(p, i, 0, h); + } + evas_object_map_set(orig, p); + evas_map_free(p); +} + +static void +create_handles(Evas_Object *obj) +{ + int i; + Evas_Coord x, y, w, h; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + for (i = 0; i < 4; i++) + { + Evas_Object *hand; + char buf[PATH_MAX]; + char key[32]; + + hand = evas_object_image_filled_add(evas_object_evas_get(obj)); + evas_object_resize(hand, 31, 31); + snprintf(buf, sizeof(buf), "%s/images/pt.png", elm_app_data_dir_get()); + evas_object_image_file_set(hand, buf, NULL); + if (i == 0) evas_object_move(hand, x - 15, y - 15); + else if (i == 1) evas_object_move(hand, x + w - 15, y - 15); + else if (i == 2) evas_object_move(hand, x + w - 15, y + h - 15); + else if (i == 3) evas_object_move(hand, x - 15, y + h - 15); + evas_object_event_callback_add(hand, EVAS_CALLBACK_MOUSE_MOVE, cb_mouse_move, obj); + evas_object_show(hand); + snprintf(key, sizeof(key), "h-%i\n", i); + evas_object_data_set(obj, key, hand); + } +} + +TEST_START(test_win_inline) +{ + Evas_Object *bg, *win2, *win3; + char buf[PATH_MAX]; + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_bg_file_set(bg, buf, NULL); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + win2 = elm_win_add(win, "inlined", ELM_WIN_INLINED_IMAGE); + fill(win2, EINA_TRUE); + + evas_object_move(win2, 20, 60); + evas_object_resize(win2, 300, 200); + // image object for win2 is unlinked to its pos/size - so manual control + // this allows also for using map and other things with it. + evas_object_move(elm_win_inlined_image_object_get(win2), 20, 40); + evas_object_resize(elm_win_inlined_image_object_get(win2), 200, 320); + evas_object_show(win2); + + win3 = elm_win_add(win, "inlined", ELM_WIN_INLINED_IMAGE); + elm_win_alpha_set(win3, EINA_TRUE); + fill(win3, EINA_FALSE); + + evas_object_resize(win3, 300, 200); + evas_object_move(elm_win_inlined_image_object_get(win3), 80, 180); + evas_object_resize(elm_win_inlined_image_object_get(win3), 300, 200); + evas_object_show(win3); + + create_handles(elm_win_inlined_image_object_get(win3)); + + evas_object_resize(win, 400, 600); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/test_win_state.c b/src/bin/test_win_state.c new file mode 100644 index 0000000..122d36a --- /dev/null +++ b/src/bin/test_win_state.c @@ -0,0 +1,357 @@ +#include +#include "tsuite.h" +typedef struct _Testitem +{ + Elm_Genlist_Item *item; + int mode, onoff; +} Testitem; + +static int rotate_with_resize = 0; + +static void +my_bt_38_alpha_on(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *bg = evas_object_data_get(win, "bg"); + evas_object_hide(bg); + elm_win_alpha_set(win, 1); +} + +static void +my_bt_38_alpha_off(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *bg = evas_object_data_get(win, "bg"); + evas_object_show(bg); + elm_win_alpha_set(win, 0); +} + +static void +my_ck_38_resize(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ +// Evas_Object *win = data; + rotate_with_resize = elm_check_state_get(obj); +} + +static void +my_bt_38_rot_0(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + if (rotate_with_resize) + elm_win_rotation_with_resize_set(win, 0); + else + elm_win_rotation_set(win, 0); +} + +static void +my_bt_38_rot_90(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + if (rotate_with_resize) + elm_win_rotation_with_resize_set(win, 90); + else + elm_win_rotation_set(win, 90); +} + +static void +my_bt_38_rot_180(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + if (rotate_with_resize) + elm_win_rotation_with_resize_set(win, 180); + else + elm_win_rotation_set(win, 180); +} + +static void +my_bt_38_rot_270(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + if (rotate_with_resize) + elm_win_rotation_with_resize_set(win, 270); + else + elm_win_rotation_set(win, 270); +} +/* +static void +my_win_move(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Coord x, y; + elm_win_screen_position_get(obj, &x, &y); + printf("MOVE - win geom: %4i %4i\n", x, y); +} + +static void +_win_resize(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Coord w, h; + evas_object_geometry_get(obj, NULL, NULL, &w, &h); + printf("RESIZE - win geom: %4ix%4i\n", w, h); +} +*/ +static void +_win_foc_in(void *data __UNUSED__, Evas *e __UNUSED__, void *event_info __UNUSED__) +{ + printf("FOC IN\n"); +} + +static void +_win_foc_out(void *data __UNUSED__, Evas *e __UNUSED__, void *event_info __UNUSED__) +{ + printf("FOC OUT\n"); +} + +static void +_close_win(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + evas_object_del(data); +} + +TEST_START(test_win_state) +{ + Evas_Object *bg, *sl, *bx, *bx2, *bt, *ck; + + evas_event_callback_add(evas_object_evas_get(win), EVAS_CALLBACK_CANVAS_FOCUS_IN, _win_foc_in, NULL); + evas_event_callback_add(evas_object_evas_get(win), EVAS_CALLBACK_CANVAS_FOCUS_OUT, _win_foc_out, NULL); + elm_win_autodel_set(win, EINA_TRUE); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + evas_object_data_set(win, "bg", bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_fill_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Alpha On"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_alpha_on, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Alpha Off"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_alpha_off, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Test"); + elm_slider_span_size_set(sl, 100); + evas_object_size_hint_align_set(sl, 0.5, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_slider_indicator_format_set(sl, "%3.0f"); + elm_slider_min_max_set(sl, 50, 150); + elm_slider_value_set(sl, 50); + elm_slider_inverted_set(sl, 1); + elm_box_pack_end(bx2, sl); + evas_object_show(sl); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + ck = elm_check_add(win); + elm_object_text_set(ck, "resize"); + elm_check_state_set(ck, rotate_with_resize); + evas_object_smart_callback_add(ck, "changed", my_ck_38_resize, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.02, 0.99); + evas_object_show(ck); + elm_box_pack_end(bx, ck); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_fill_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rot 0"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_rot_0, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rot 90"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_rot_90, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rot 180"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_rot_180, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rot 270"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_rot_270, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 280, 400); + evas_object_show(win); +} +TEST_END + +TEST_START(test_win_state2) +{ + Evas_Object *bg, *sl, *bx, *bx2, *bt, *ck; + char buf[PATH_MAX]; + + elm_win_title_set(win, "Window States 2"); + elm_win_autodel_set(win, EINA_TRUE); + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get()); + elm_bg_file_set(bg, buf, NULL); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + evas_object_data_set(win, "bg", bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_fill_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Alpha On"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_alpha_on, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Alpha Off"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_alpha_off, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", _close_win, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + sl = elm_slider_add(win); + elm_object_text_set(sl, "Override Redirect"); + elm_slider_span_size_set(sl, 100); + evas_object_size_hint_align_set(sl, 0.5, 0.5); + evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_slider_indicator_format_set(sl, "%3.0f"); + elm_slider_min_max_set(sl, 50, 150); + elm_slider_value_set(sl, 50); + elm_slider_inverted_set(sl, 1); + elm_box_pack_end(bx2, sl); + evas_object_show(sl); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + ck = elm_check_add(win); + elm_object_text_set(ck, "resize"); + elm_check_state_set(ck, rotate_with_resize); + evas_object_smart_callback_add(ck, "changed", my_ck_38_resize, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.02, 0.99); + evas_object_show(ck); + elm_box_pack_end(bx, ck); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + elm_box_homogeneous_set(bx2, EINA_TRUE); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_fill_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rot 0"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_rot_0, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rot 90"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_rot_90, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rot 180"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_rot_180, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_object_text_set(bt, "Rot 270"); + evas_object_smart_callback_add(bt, "clicked", my_bt_38_rot_270, win); + evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} +TEST_END diff --git a/src/bin/tsuite.c b/src/bin/tsuite.c new file mode 100644 index 0000000..9ac43d3 --- /dev/null +++ b/src/bin/tsuite.c @@ -0,0 +1,851 @@ +#define _GNU_SOURCE 1 + +#include +#include +#include "tsuite.h" + +#define IMAGE_FILENAME_EXT ".png" +#include +#include "tsuite_file_data.h" + +void test_3d(void); +void test_actionslider(void); +void test_anchorblock(void); +void test_anchorview(void); +void test_bg_plain(void); +void test_bg_image(void); +void test_bg_options(void); +void test_box_vert(void); +void test_box_vert2(void); +void test_box_horiz(void); +void test_button(void); +void test_bubble(void); +void test_calendar(void); +void test_calendar2(void); +void test_check(void); +void test_colorselector(void); +void test_conformant(void); +void test_conformant2(void); +void test_ctxpopup(void); +void test_cursor(void); +void test_cursor2(void); +void test_cursor3(void); +void test_diskselector(void); +void test_entry(void); +void test_entry_scrolled(void); +void test_entry3(void); +void test_entry4(void); +void test_entry5(void); +void test_entry_notepad(void); +void test_fileselector(void); +void test_fileselector_button(void); +void test_fileselector_entry(void); +void test_floating(void); +void test_focus(void); +void test_focus2(void); +void test_focus3(void); +void test_gengrid(void); +void test_gengrid2(void); +void test_genlist(void); +void test_genlist2(void); +void test_genlist3(void); +void test_genlist4(void); +void test_genlist5(void); +void test_genlist6(void); +void test_genlist7(void); +void test_genlist8(void); +void test_genlist9(void); +void test_genlist10(void); +void test_genlist11(void); +void test_glview(void); +void test_glview_simple(void); +void test_grid(void); +void test_hover(void); +void test_hover2(void); +void test_hoversel(void); +void test_index(void); +void test_index2(void); +void test_inwin(void); +void test_inwin2(void); +void test_label(void); +void test_list(void); +void test_list_horizontal(void); +void test_list2(void); +void test_list3(void); +void test_list4(void); +void test_list5(void); +void test_map(void); +void test_menu(void); +void test_naviframe(void); +void test_notify(void); +void test_pager(void); +void test_pager_slide(void); +void test_panel(void); +void test_panes(void); +void test_photo(void); +void test_photocam(void); +void test_progressbar(void); +void test_radio(void); +void test_scaling(void); +void test_scaling2(void); +void test_scroller(void); +void test_scroller2(void); +void test_segment_control(void); +void test_separator(void); +void test_slider(void); +void test_spinner(void); +void test_table(void); +void test_table2(void); +void test_table3(void); +void test_table4(void); +void test_table5(void); +void test_table6(void); +void test_thumb(void); +void test_toggle(void); +void test_toolbar(void); +void test_toolbar2(void); +void test_toolbar3(void); +void test_toolbar4(void); +void test_toolbar5(void); +void test_tooltip(void); +void test_tooltip2(void); +void test_weather(void); +void test_win_inline(void); +void test_win_state(void); +void test_win_state2(void); + +/* START - Some globals - may want to move these to Timer_Data struct later */ +static Lists_st *vr_list = NULL; +/* END - Some globals - may want to move these to Timer_Data struct later */ + +/** + * @internal + * + * @struct _Tsuite_Data + * Struct holds test-suite data-properties + * + * @ingroup Tsuite + */ +struct _Tsuite_Data +{ + char *name; /**< Test Name */ + int serial; /**< Serial number of currnen-file */ + api_data *api; + Evas *e; + Evas_Object *win; +}; +typedef struct _Tsuite_Data Tsuite_Data; + +/** + * @internal + * + * @struct _Test_Item + * Struct holds test-suite test / func pair. + * + * @ingroup Tsuite + */ +struct _Test_Item +{ /* Item type for array of test-names, test-func-ptr */ + char *name; + void (* func) (void); + Eina_Bool test; +}; +typedef struct _Test_Item Test_Item; + +static Tsuite_Data ts; +static Eina_Bool recording = EINA_FALSE; +static char *dest_dir = NULL; + +Eina_List * +_add_test(Eina_List *list, char *n, void (* f) (void), Eina_Bool t) +{ + Test_Item *item = malloc(sizeof(Test_Item)); + item->name = n; + item->func = f; + item->test = t; + return eina_list_append(list, item); +} + +int test_name_cmp(const void *data1, const void *data2) +{ + return strcmp(((Test_Item *) data1)->name, (char *) data2); +} + +Test_Item * +_set_test(Eina_List *list, char *n, Eina_Bool t) +{ + Test_Item *item = eina_list_search_unsorted(list, test_name_cmp, n); + if (item) + item->test = t; + + return item; +} + +static void (* _tsuite_evas_hook_init) (Lists_st *) = NULL; +static void (* _tsuite_evas_hook_reset) (void) = NULL; + +static void +_init_recording_funcs(void) +{ + _tsuite_evas_hook_init = dlsym(RTLD_DEFAULT, "tsuite_evas_hook_init"); + _tsuite_evas_hook_reset = dlsym(RTLD_DEFAULT, "tsuite_evas_hook_reset"); +} + +/** + * @internal + * + * This function initiates Tsuite_Data + * @param name defines test-name + * @param Pointer_Event Pointer to PE. + * + * @ingroup Tsuite + */ +void +tsuite_init(Evas_Object *win, char *name, api_data *d) +{ + tsuite_cleanup(); + if (!name) + return; + + ts.name = strdup(name); /* Freed by tsuite_cleanup */ + ts.win = win; + ts.api = d; + ts.api->win = win; + ts.e = evas_object_evas_get(ts.win); +} + +/** + * @internal + * + * This function do cleanup for Tsuite + * @param Tsuite_Data * data for cleanup. + * + * @ingroup Tsuite + */ +void +tsuite_cleanup(void) +{ + if (ts.name) + free(ts.name); + + if (ts.api) + { + if (ts.api->data && ts.api->free_data) + free(ts.api->data); + + free(ts.api); + } + + if (ts.win) + evas_object_del(ts.win); + + memset(&ts, 0, sizeof(ts)); +} + +char *tsuite_test_name_get() +{ + return ts.name; +} + +/** + * @internal + * + * This function takes actual shot and saves it in PNG + * @param data Tsuite_Data pointer initiated by user + * @param obj Window pointer + * @param obj name file name. Will use name_+serial if NULL + * + * @ingroup Tsuite + */ +void +tsuite_shot_do(Evas_Object *obj, char *name) +{ + Ecore_Evas *ee, *ee_orig; + Evas_Object *o; + unsigned int *pixels; + int w, h,dir_name_len = 0; + char *filename; + if (dest_dir) + dir_name_len = strlen(dest_dir) + 1; /* includes space of a '/' */ + + if (name) + { + filename = malloc(strlen(name) + strlen(IMAGE_FILENAME_EXT) + + dir_name_len + 4); + + if (dest_dir) + sprintf(filename, "%s/", dest_dir); + + sprintf(filename + dir_name_len, "%s%s", name, IMAGE_FILENAME_EXT); + } + else + { + filename = malloc(strlen(ts.name) + strlen(IMAGE_FILENAME_EXT) + + dir_name_len + 8); /* also space for serial */ + + ts.serial++; + if (dest_dir) + sprintf(filename, "%s/", dest_dir); + + sprintf(filename + dir_name_len, "%s_%d%s", ts.name ,ts.serial, + IMAGE_FILENAME_EXT); + } + + printf("in func <%s> name=<%s>\n", __func__, filename); + + /* A bit hackish, get the ecore_evas from the Evas canvas */ + ee_orig = evas_data_attach_get(evas_object_evas_get(obj)); + + ecore_evas_manual_render(ee_orig); + pixels = (void *)ecore_evas_buffer_pixels_get(ee_orig); + if (!pixels) return; + ecore_evas_geometry_get(ee_orig, NULL, NULL, &w, &h); + if ((w < 1) || (h < 1)) return; + ee = ecore_evas_buffer_new(1, 1); + o = evas_object_image_add(ecore_evas_get(ee)); + evas_object_image_alpha_set(o, ecore_evas_alpha_get(ee_orig)); + evas_object_image_size_set(o, w, h); + evas_object_image_data_set(o, pixels); + + if (!evas_object_image_save(o, filename, NULL, NULL)) + { + printf("Cannot save widget to <%s>\n", filename); + } + ecore_evas_free(ee); + free(filename); +} + +static unsigned int +evt_time_get(unsigned int tm, Variant_st *v) +{ + switch(tsuite_event_mapping_type_get(v->t.type)) + { + case TSUITE_EVENT_MOUSE_IN: + { + mouse_in_mouse_out *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_MOUSE_OUT: + { + mouse_in_mouse_out *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_MOUSE_DOWN: + { + mouse_down_mouse_up *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_MOUSE_UP: + { + mouse_down_mouse_up *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_MOUSE_MOVE: + { + mouse_move *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_MOUSE_WHEEL: + { + mouse_wheel *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_MULTI_DOWN: + { + multi_event *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_MULTI_UP: + { + multi_event *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_MULTI_MOVE: + { + multi_move *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_KEY_DOWN: + { + key_down_key_up *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_KEY_UP: + { + key_down_key_up *t = v->data; + return t->timestamp; + } + case TSUITE_EVENT_TAKE_SHOT: + { + take_screenshot *t = v->data; + return t->timestamp; + } + default: /* All non-input events are not handeled */ + return tm; + break; + } +} + +static Eina_Bool +tsuite_feed_event(void *data) +{ + static Ecore_Timer *tmr = NULL; + Timer_Data *td = data; + time_t evt_time; + if (!td) + return ECORE_CALLBACK_CANCEL; + + Variant_st *v = eina_list_data_get(td->current_event); + switch(tsuite_event_mapping_type_get(v->t.type)) + { + case TSUITE_EVENT_MOUSE_IN: + { + mouse_in_mouse_out *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_mouse_in timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_mouse_in(td->e, time(NULL), NULL); + break; + } + case TSUITE_EVENT_MOUSE_OUT: + { + mouse_in_mouse_out *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_mouse_out timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_mouse_out(td->e, time(NULL), NULL); + break; + } + case TSUITE_EVENT_MOUSE_DOWN: + { + mouse_down_mouse_up *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_mouse_down timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_mouse_down(td->e, t->b, t->flags, time(NULL), + NULL); + + break; + } + case TSUITE_EVENT_MOUSE_UP: + { + mouse_down_mouse_up *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_mouse_up timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_mouse_up(td->e, t->b, t->flags, time(NULL), + NULL); + + break; + } + case TSUITE_EVENT_MOUSE_MOVE: + { + mouse_move *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_mouse_move (x,y)=(%d,%d) timestamp=<%u>\n", __func__, t->x, t->y, t->timestamp); +#endif + evas_event_feed_mouse_move(td->e, t->x, t->y, time(NULL), NULL); + break; + } + case TSUITE_EVENT_MOUSE_WHEEL: + { + mouse_wheel *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_mouse_wheel timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_mouse_wheel(td->e, t->direction, t->z, + time(NULL), NULL); + + break; + } + case TSUITE_EVENT_MULTI_DOWN: + { + multi_event *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_multi_down timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_multi_down(td->e, t->d, t->x, t->y, t->rad, + t->radx, t->rady, t->pres, t->ang, t->fx, t->fy, + t->flags, time(NULL), NULL); + + break; + } + case TSUITE_EVENT_MULTI_UP: + { + multi_event *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_multi_up timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_multi_up(td->e, t->d, t->x, t->y, t->rad, + t->radx, t->rady, t->pres, t->ang, t->fx, t->fy, + t->flags, time(NULL), NULL); + + break; + } + case TSUITE_EVENT_MULTI_MOVE: + { + multi_move *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_multi_move timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_multi_move(td->e, t->d, t->x, t->y, t->rad, + t->radx, t->rady, t->pres, t->ang, t->fx, t->fy, + time(NULL), NULL); + + break; + } + case TSUITE_EVENT_KEY_DOWN: + { + key_down_key_up *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_key_down timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_key_down(td->e, t->keyname, t->key, t->string, + t->compose, time(NULL), NULL); + + break; + } + case TSUITE_EVENT_KEY_UP: + { + key_down_key_up *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s evas_event_feed_key_up timestamp=<%u>\n", __func__, t->timestamp); +#endif + evas_event_feed_key_up(td->e, t->keyname, t->key, t->string, + t->compose, time(NULL), NULL); + + break; + } + case TSUITE_EVENT_TAKE_SHOT: + { + take_screenshot *t = v->data; + evt_time = t->timestamp; +#ifdef DEBUG_TSUITE + printf("%s take shot timestamp=<%u>\n", __func__, t->timestamp); +#endif + tsuite_shot_do(ts.win, NULL); /* Serial name based on test-name */ + break; + } + default: /* All non-input events are not handeled */ + evt_time = td->recent_event_time; + break; + } + + double timer_time; + td->current_event = eina_list_next(td->current_event); + + if (!td->current_event) + { /* Finished reading all events */ + elm_exit(); + return ECORE_CALLBACK_CANCEL; + } + + td->recent_event_time = evt_time; + + unsigned int current_event_time = evt_time_get(evt_time, eina_list_data_get(td->current_event)); + + if (current_event_time < td->recent_event_time) /* Could happen with refeed event */ + current_event_time = td->recent_event_time; + +#ifdef DEBUG_TSUITE + printf("%s td->recent_event_time=<%u> current_event_time=<%u>\n", __func__, td->recent_event_time, current_event_time); +#endif + timer_time = (current_event_time - td->recent_event_time) / 1000.0; + + if (!td->recent_event_time) + timer_time = 0.0; + +#ifdef DEBUG_TSUITE + printf("%s timer_time=<%f>\n", __func__, timer_time); +#endif + tmr = ecore_timer_add(timer_time, tsuite_feed_event, td); + + return ECORE_CALLBACK_CANCEL; +} + +void +_test_close_win(void *data __UNUSED__, Evas_Object *obj __UNUSED__, + void *event_info __UNUSED__) +{ + ts.win = NULL; + elm_exit(); +} + +static Lists_st * +free_events(Lists_st *st) +{ + Variant_st *v; + EINA_LIST_FREE(st->variant_list, v) + { + if (recording) + { + Tsuite_Event_Type e = tsuite_event_mapping_type_get(v->t.type); + if ((e == TSUITE_EVENT_KEY_DOWN) || (e == TSUITE_EVENT_KEY_UP)) + { /* Allocated in tsuite_evas_hook.c */ + key_down_key_up *t = v->data; + eina_stringshare_del(t->keyname); + eina_stringshare_del(t->key); + eina_stringshare_del(t->string); + eina_stringshare_del(t->compose); + } + } + + free(v->data); + free(v); + } + + free(st); /* Allocated when reading data from EET file */ + return NULL; +} + +void +do_test(void (* func) (void)) +{ + char buf[1024]; + + vr_list = calloc(1, sizeof(*vr_list)); + if (recording) + _tsuite_evas_hook_init(vr_list); + + func(); + sprintf(buf, "%s.rec", ts.name); + + if (recording) + { + elm_run(); /* and run the program now and handle all events etc. */ + if (vr_list) + write_events(buf, vr_list); + } + else + { + Timer_Data *td = NULL; + + td = calloc(1, sizeof(Timer_Data)); + vr_list = read_events(buf, ts.e, td); + if (td->current_event) + { /* Got first event in list, run test */ + tsuite_feed_event(td); + elm_run(); /* and run the program now and handle all events etc */ + } + + if (td) + free(td); + } + + + if (recording) + _tsuite_evas_hook_reset(); + + if (vr_list) + vr_list = free_events(vr_list); +} + +EAPI int +elm_main(int argc, char **argv) +{ + Eina_List *tests = NULL; + Eina_Bool test_all; + int i, first_arg = 1; + + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + + /* tell elm about our app so it can figure out where to get files */ + elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR); + elm_app_compile_data_dir_set(PACKAGE_DATA_DIR); + elm_app_info_set(elm_main, "elementary", "images/logo.png"); + + if (argc >= 2) + { + recording = !strcmp(argv[1], "--record"); + if (!recording) + { /* Could have a destdir param */ + if (!strcmp(argv[1], "--destdir")) + { /* Get dest-dir param */ + first_arg = 2; /* if user ommited dest-dir name, */ + /* works anyway skipping this flag */ + if (argc > 2) + dest_dir = argv[2]; + } + } + } + + if (recording) + { + _init_recording_funcs(); + first_arg = 2; + } + else if (dest_dir) + first_arg = 3; + + /* If no test specified in command line, set all */ + test_all = (first_arg - argc) == 0; + tests = _add_test(tests, "test_3d", test_3d, test_all); + tests = _add_test(tests, "test_actionslider", test_actionslider, test_all); + tests = _add_test(tests, "test_anchorblock", test_anchorblock, test_all); + tests = _add_test(tests, "test_anchorview", test_anchorview, test_all); + tests = _add_test(tests, "test_bg_plain", test_bg_plain, test_all); + tests = _add_test(tests, "test_bg_image", test_bg_image, test_all); + tests = _add_test(tests, "test_bg_options", test_bg_options, test_all); + tests = _add_test(tests, "test_box_vert", test_box_vert, test_all); + tests = _add_test(tests, "test_box_vert2", test_box_vert2, test_all); + tests = _add_test(tests, "test_box_horiz", test_box_horiz, test_all); + tests = _add_test(tests, "test_button", test_button, test_all); + tests = _add_test(tests, "test_bubble", test_bubble, test_all); + tests = _add_test(tests, "test_calendar", test_calendar, test_all); + tests = _add_test(tests, "test_calendar2", test_calendar2, test_all); + tests = _add_test(tests, "test_check", test_check, test_all); + tests = _add_test(tests, "test_colorselector", test_colorselector, test_all); + tests = _add_test(tests, "test_conformant", test_conformant, test_all); + tests = _add_test(tests, "test_conformant2", test_conformant2, test_all); + tests = _add_test(tests, "test_ctxpopup", test_ctxpopup, test_all); + tests = _add_test(tests, "test_cursor", test_cursor, test_all); + tests = _add_test(tests, "test_cursor2", test_cursor2, test_all); + tests = _add_test(tests, "test_cursor3", test_cursor3, test_all); + tests = _add_test(tests, "test_diskselector", test_diskselector, test_all); + tests = _add_test(tests, "test_entry", test_entry, test_all); + tests = _add_test(tests, "test_entry_scrolled", test_entry_scrolled, + test_all); + tests = _add_test(tests, "test_entry3", test_entry3, test_all); + tests = _add_test(tests, "test_entry4", test_entry4, test_all); + tests = _add_test(tests, "test_entry5", test_entry5, test_all); + tests = _add_test(tests, "test_entry_notepad", test_entry_notepad, test_all); + tests = _add_test(tests, "test_fileselector", test_fileselector, test_all); + tests = _add_test(tests, "test_fileselector_button", + test_fileselector_button, test_all); + tests = _add_test(tests, "test_fileselector_entry", + test_fileselector_entry, test_all); + tests = _add_test(tests, "test_floating", test_floating, test_all); + tests = _add_test(tests, "test_focus", test_focus, test_all); + tests = _add_test(tests, "test_focus2", test_focus2, test_all); + tests = _add_test(tests, "test_focus3", test_focus3, test_all); + tests = _add_test(tests, "test_gengrid", test_gengrid, test_all); + tests = _add_test(tests, "test_gengrid2", test_gengrid2, test_all); + tests = _add_test(tests, "test_genlist", test_genlist, test_all); + tests = _add_test(tests, "test_genlist2", test_genlist2, test_all); + tests = _add_test(tests, "test_genlist3", test_genlist3, test_all); + tests = _add_test(tests, "test_genlist4", test_genlist4, test_all); + tests = _add_test(tests, "test_genlist5", test_genlist5, test_all); + tests = _add_test(tests, "test_genlist6", test_genlist6, test_all); + tests = _add_test(tests, "test_genlist7", test_genlist7, test_all); + tests = _add_test(tests, "test_genlist8", test_genlist8, test_all); + tests = _add_test(tests, "test_genlist9", test_genlist9, test_all); + tests = _add_test(tests, "test_genlist10", test_genlist10, test_all); + tests = _add_test(tests, "test_genlist11", test_genlist11, test_all); + tests = _add_test(tests, "test_grid", test_grid, test_all); + tests = _add_test(tests, "test_hover", test_hover, test_all); + tests = _add_test(tests, "test_hover2", test_hover2, test_all); + tests = _add_test(tests, "test_hoversel", test_hoversel, test_all); + tests = _add_test(tests, "test_index", test_index, test_all); + tests = _add_test(tests, "test_index2", test_index2, test_all); + tests = _add_test(tests, "test_inwin", test_inwin, test_all); + tests = _add_test(tests, "test_inwin2", test_inwin2, test_all); + tests = _add_test(tests, "test_label", test_label, test_all); + tests = _add_test(tests, "test_list", test_list, test_all); + tests = _add_test(tests, "test_list_horizontal", test_list_horizontal, + test_all); + + tests = _add_test(tests, "test_list2", test_list2, test_all); + tests = _add_test(tests, "test_list3", test_list3, test_all); + tests = _add_test(tests, "test_list4", test_list4, test_all); + tests = _add_test(tests, "test_list5", test_list5, test_all); + tests = _add_test(tests, "test_map", test_map, test_all); + tests = _add_test(tests, "test_menu", test_menu, test_all); + tests = _add_test(tests, "test_naviframe", test_naviframe, test_all); + tests = _add_test(tests, "test_notify", test_notify, test_all); + tests = _add_test(tests, "test_pager", test_pager, test_all); + tests = _add_test(tests, "test_pager_slide", test_pager_slide, test_all); + tests = _add_test(tests, "test_panel", test_panel, test_all); + tests = _add_test(tests, "test_panes", test_panes, test_all); + tests = _add_test(tests, "test_photo", test_photo, test_all); + tests = _add_test(tests, "test_photocam", test_photocam, test_all); + tests = _add_test(tests, "test_progressbar", test_progressbar, test_all); + tests = _add_test(tests, "test_radio", test_radio, test_all); + tests = _add_test(tests, "test_scaling", test_scaling, test_all); + tests = _add_test(tests, "test_scaling2", test_scaling2, test_all); + tests = _add_test(tests, "test_scroller", test_scroller, test_all); + tests = _add_test(tests, "test_scroller2", test_scroller2, test_all); + tests = _add_test(tests, "test_segment_control", test_segment_control, + test_all); + + tests = _add_test(tests, "test_separator", test_separator, test_all); + tests = _add_test(tests, "test_slider", test_slider, test_all); + tests = _add_test(tests, "test_spinner", test_spinner, test_all); + tests = _add_test(tests, "test_table", test_table, test_all); + tests = _add_test(tests, "test_table2", test_table2, test_all); + tests = _add_test(tests, "test_table3", test_table3, test_all); + tests = _add_test(tests, "test_table4", test_table4, test_all); + tests = _add_test(tests, "test_table5", test_table5, test_all); + tests = _add_test(tests, "test_table6", test_table6, test_all); + tests = _add_test(tests, "test_thumb", test_thumb, test_all); + tests = _add_test(tests, "test_toggle", test_toggle, test_all); + tests = _add_test(tests, "test_toolbar", test_toolbar, test_all); + tests = _add_test(tests, "test_toolbar2", test_toolbar2, test_all); + tests = _add_test(tests, "test_toolbar3", test_toolbar3, test_all); + tests = _add_test(tests, "test_toolbar4", test_toolbar4, test_all); + tests = _add_test(tests, "test_toolbar5", test_toolbar5, test_all); + tests = _add_test(tests, "test_tooltip", test_tooltip, test_all); + tests = _add_test(tests, "test_tooltip2", test_tooltip2, test_all); + tests = _add_test(tests, "test_weather", test_weather, test_all); + tests = _add_test(tests, "test_win_inline", test_win_inline, test_all); + tests = _add_test(tests, "test_win_state", test_win_state, test_all); + tests = _add_test(tests, "test_win_state2", test_win_state2, test_all); + + /* Set tests from command line */ + for(i = first_arg; i < argc ; i++) + _set_test(tests, argv[i], EINA_TRUE); + + Eina_List *l; + Test_Item *item; + int n_tests = 0; + EINA_LIST_FOREACH(tests, l, item) + if (item->test) + { /* Run test and count tests committed */ + do_test(item->func); + n_tests++; + } + + if (n_tests) + { /* Print completed message */ + if (test_all) + printf("\n\nAll tests completed.\n"); + else + printf("\n\n%d tests completed out of %d tests\n", + n_tests, argc - first_arg); + } + else + { /* No tests committed, let user know test-name is wrong */ + printf ("\n\nNo test matching:\n"); + for(i = first_arg; i < argc; i++) + printf("%s\n", argv[i]); + + printf ("\nPlease review test name.\n"); + } + + + /* Free all tests in list */ + Test_Item *data = NULL; + EINA_LIST_FREE(tests, data) + free(data); + + tsuite_cleanup(); + /* if the mainloop that elm_run() runs exist - we exit the app */ + elm_shutdown(); /* clean up and shut down */ + + /* exit code, ZERO if all completed successfuly */ + if (test_all) + return 0; + else + return ((argc - first_arg) - n_tests); +} +ELM_MAIN() diff --git a/src/bin/tsuite.h b/src/bin/tsuite.h new file mode 100644 index 0000000..d512273 --- /dev/null +++ b/src/bin/tsuite.h @@ -0,0 +1,113 @@ +#ifndef _TSUITE_H +#define _TSUITE_H + +#include +#include + +#define fail_if(expr) \ + do { \ + if ( expr ) \ + { \ + FILE *fp; \ + char buf[1024]; \ + sprintf(buf, "fail_%s.txt", tsuite_test_name_get()); \ + if ((fp = fopen(buf, "a")) != NULL) \ + { \ + fprintf(fp, "Failed at %s:%d on <%s>\n", __FILE__, __LINE__, #expr); \ + fclose(fp); \ + } \ + } \ + } while(0) + +/* #define DEBUG_TSUITE 1 */ +struct _api_data +{ + unsigned int state; /* What state we are testing */ + Evas_Object *win; /* Parent Window of widgets */ + Evas_Object *bt; /* Button to progress in states */ + void *data; /* Additional data defined by test */ + Eina_Bool free_data; /* free data on close */ +}; +typedef struct _api_data api_data; + +void +_test_close_win(void *data, Evas_Object *obj, void *event_info); + +#define TEST_START(x) \ + void x(void) \ + { \ + Evas_Object *win = elm_win_add(NULL, #x, ELM_WIN_BASIC); \ + api_data *api = calloc(1, sizeof(api_data)); \ + tsuite_init(win, #x, api); \ + elm_win_title_set(win, #x); \ + elm_win_autodel_set(win, 1); \ + evas_object_smart_callback_add(win, "delete,request", _test_close_win, NULL); \ + evas_object_show(win); + +#define TEST_END \ + } + +#define TEST_SHOT(x) \ + tsuite_shot_do(win, x) + +void tsuite_init(Evas_Object *win, char *name, api_data *d); +void tsuite_cleanup(void); +void tsuite_shot_do(Evas_Object *obj, char *name); +char *tsuite_test_name_get(); +Eina_Bool write_events_get(void); +void write_events_set(Eina_Bool val); +/* Macro declaring a function argument to be unused */ +#define __UNUSED__ __attribute__((unused)) + +enum _Tsuite_Event_Type +{ /* Add any supported events here */ + TSUITE_EVENT_NOT_SUPPORTED = 0, + TSUITE_EVENT_MOUSE_IN, + TSUITE_EVENT_MOUSE_OUT, + TSUITE_EVENT_MOUSE_DOWN, + TSUITE_EVENT_MOUSE_UP, + TSUITE_EVENT_MOUSE_MOVE, + TSUITE_EVENT_MOUSE_WHEEL, + TSUITE_EVENT_MULTI_DOWN, + TSUITE_EVENT_MULTI_UP, + TSUITE_EVENT_MULTI_MOVE, + TSUITE_EVENT_KEY_DOWN, + TSUITE_EVENT_KEY_UP, + TSUITE_EVENT_TAKE_SHOT +}; +typedef enum _Tsuite_Event_Type Tsuite_Event_Type; + +struct _eet_event_type_mapping +{ + Tsuite_Event_Type t; + const char *name; +}; +typedef struct _eet_event_type_mapping eet_event_type_mapping; + +struct _Variant_Type_st +{ + const char *type; + Eina_Bool unknow : 1; +}; +typedef struct _Variant_Type_st Variant_Type_st; + +struct _Variant_st +{ + Variant_Type_st t; + void *data; /* differently than the union type, we + * don't need to pre-allocate the memory + * for the field*/ +}; +typedef struct _Variant_st Variant_st; + +struct _Timer_Data +{ + Eet_File *fp; + unsigned int recent_event_time; + Evas *e; + Eina_List *current_event; +}; +typedef struct _Timer_Data Timer_Data; + +void variant_list_append(Variant_st *v); +#endif diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am new file mode 100644 index 0000000..bc336c7 --- /dev/null +++ b/src/lib/Makefile.am @@ -0,0 +1,23 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I$(top_srcdir)/src/bin \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_LIB_DIR=\"$(libdir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +@EFL_CFLAGS@ + +EXTRA_DIST = \ + tsuite_file_data.h + +pkgdir = $(libdir)/exactness +pkg_LTLIBRARIES = libexactness.la + +libexactness_la_SOURCES = \ + tsuite_evas_hook.c \ + tsuite_file_data.c + +libexactness_la_LDFLAGS = -module -avoid-version -rdynamic +libexactness_la_DEPENDENCIES = $(top_builddir)/config.h +libexactness_la_LIBADD = @EFL_LIBS@ +libexactness_la_CFLAGS = @EFL_CFLAGS@ diff --git a/src/lib/tsuite_evas_hook.c b/src/lib/tsuite_evas_hook.c new file mode 100644 index 0000000..eb4587e --- /dev/null +++ b/src/lib/tsuite_evas_hook.c @@ -0,0 +1,313 @@ +#define _GNU_SOURCE 1 +#include +#include + +#include +#include +#include +#include +#include +#include "tsuite_file_data.h" +#include "tsuite.h" + + +#define SHOT_KEY_STR "F2" +/* START - EET Handling code */ +struct _Eet_Event_Type +{ + unsigned int version; +}; +typedef struct _Eet_Event_Type Eet_Event_Type; +/* END - EET Handling code */ + +static char *shot_key = SHOT_KEY_STR; +static Lists_st *vr_list = NULL; + +void tsuite_evas_hook_init(Lists_st *v) +{ /* Pointer taken from tsuite.c */ + vr_list = v; + shot_key = getenv("TSUITE_SHOT_KEY"); + if (!shot_key) shot_key = SHOT_KEY_STR; +} + +void tsuite_evas_hook_reset(void) +{ /* tsuite.c informs us that vr_list is no longer valid */ + vr_list = NULL; +} + +/* Adding variant to list, this list is later written to EET file */ +#define ADD_TO_LIST(EVT_TYPE, EVT_STRUCT_NAME, INFO) \ + do { /* This macro will add event to EET data list */ \ + if (vr_list) \ + { \ + Variant_st *v = malloc(sizeof(Variant_st)); \ + v->data = malloc(sizeof(EVT_STRUCT_NAME)); \ + _variant_type_set(tsuite_event_mapping_type_str_get(EVT_TYPE), \ + &v->t, EINA_FALSE); \ + memcpy(v->data, &INFO, sizeof(EVT_STRUCT_NAME)); \ + printf("recording <%s> time=<%u>\n", #EVT_STRUCT_NAME, ((EVT_STRUCT_NAME *) v->data)->timestamp); \ + vr_list->variant_list = eina_list_append(vr_list->variant_list, v); \ + } \ + } while (0) + +static Tsuite_Event_Type +tsuite_event_type_get(Evas_Callback_Type t) +{ + switch(t) + { + case EVAS_CALLBACK_MOUSE_IN: + return TSUITE_EVENT_MOUSE_IN; + case EVAS_CALLBACK_MOUSE_OUT: + return TSUITE_EVENT_MOUSE_OUT; + case EVAS_CALLBACK_MOUSE_DOWN: + return TSUITE_EVENT_MOUSE_DOWN; + case EVAS_CALLBACK_MOUSE_UP: + return TSUITE_EVENT_MOUSE_UP; + case EVAS_CALLBACK_MOUSE_MOVE: + return TSUITE_EVENT_MOUSE_MOVE; + case EVAS_CALLBACK_MOUSE_WHEEL: + return TSUITE_EVENT_MOUSE_WHEEL; + case EVAS_CALLBACK_MULTI_DOWN: + return TSUITE_EVENT_MULTI_DOWN; + case EVAS_CALLBACK_MULTI_UP: + return TSUITE_EVENT_MULTI_UP; + case EVAS_CALLBACK_MULTI_MOVE: + return TSUITE_EVENT_MULTI_MOVE; + case EVAS_CALLBACK_KEY_DOWN: + return TSUITE_EVENT_KEY_DOWN; + case EVAS_CALLBACK_KEY_UP: + return TSUITE_EVENT_KEY_UP; + + default: + return TSUITE_EVENT_NOT_SUPPORTED; + } +} + +EAPI void +evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data) +{ +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + mouse_in_mouse_out t = { timestamp }; + int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_IN); + ADD_TO_LIST(evt, mouse_in_mouse_out, t); + void (*orig) (Evas *e, unsigned int timestamp, const void *data) = + dlsym(RTLD_NEXT, __func__); + + orig(e, timestamp, data); +} + +EAPI void +evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data) +{ +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + mouse_in_mouse_out t = { timestamp }; + int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_OUT); + ADD_TO_LIST(evt, mouse_in_mouse_out, t); + void (*orig) (Evas *e, unsigned int timestamp, const void *data) = + dlsym(RTLD_NEXT, __func__); + + orig(e, timestamp, data); +} + +EAPI void +evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, + unsigned int timestamp, const void *data) +{ +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + mouse_down_mouse_up t = { b, flags, timestamp }; + int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_DOWN); + ADD_TO_LIST(evt, mouse_down_mouse_up, t); + void (*orig) (Evas *e, int b, Evas_Button_Flags flags, + unsigned int timestamp, const void *data) = + dlsym(RTLD_NEXT, __func__); + + orig(e, b, flags, timestamp, data); +} + +EAPI void +evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, + unsigned int timestamp, const void *data) +{ +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + mouse_down_mouse_up t = { b, flags, timestamp }; + int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_UP); + ADD_TO_LIST(evt, mouse_down_mouse_up, t); + void (*orig) (Evas *e, int b, Evas_Button_Flags flags, + unsigned int timestamp, const void *data) = + dlsym(RTLD_NEXT, __func__); + + orig(e, b, flags, timestamp, data); +} + +EAPI void +evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, + const void *data) +{ + mouse_move t = { x, y, timestamp }; +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_MOVE); + ADD_TO_LIST(evt, mouse_move, t); + void (*orig) (Evas *e, int x, int y, unsigned int timestamp, + const void *data) = dlsym(RTLD_NEXT, __func__); + orig(e, x, y, timestamp, data); +} + +EAPI void +evas_event_feed_mouse_wheel(Evas *e, int direction, int z, + unsigned int timestamp, const void *data) +{ +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + mouse_wheel t = { direction, z, timestamp }; + int evt = tsuite_event_type_get(EVAS_CALLBACK_MOUSE_WHEEL); + ADD_TO_LIST(evt, mouse_wheel, t); + void (*orig) (Evas *e, int direction, int z, unsigned int timestamp, + const void *data) = dlsym(RTLD_NEXT, __func__); + + orig(e, direction, z, timestamp, data); +} + +EAPI void +evas_event_feed_multi_down(Evas *e, int d, int x, int y, + double rad, double radx, double rady, double pres, double ang, + double fx, double fy, Evas_Button_Flags flags, + unsigned int timestamp, const void *data) +{ +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + multi_event t = { d, x, y, rad, radx, rady, pres, ang, + fx, fy, flags, timestamp }; + + int evt = tsuite_event_type_get(EVAS_CALLBACK_MULTI_DOWN); + ADD_TO_LIST(evt, multi_event, t); + void (*orig) (Evas *e, int d, int x, int y, double rad, + double radx, double rady, double pres, double ang, + double fx, double fy, Evas_Button_Flags flags, + unsigned int timestamp, const void *data) = + dlsym(RTLD_NEXT, __func__); + orig(e, d, x, y, rad, radx, rady, pres, ang, fx, fy, flags, timestamp, data); +} + +EAPI void +evas_event_feed_multi_up(Evas *e, int d, int x, int y, + double rad, double radx, double rady, double pres, double ang, + double fx, double fy, Evas_Button_Flags flags, + unsigned int timestamp, const void *data) +{ +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + multi_event t = { d, x, y, rad, radx, rady, pres, ang, fx, fy, flags, timestamp }; + int evt = tsuite_event_type_get(EVAS_CALLBACK_MULTI_UP); + ADD_TO_LIST(evt, multi_event, t); + void (*orig) (Evas *e, int d, int x, int y, double rad, + double radx, double rady, double pres, double ang, + double fx, double fy, Evas_Button_Flags flags, + unsigned int timestamp, const void *data) = + dlsym(RTLD_NEXT, __func__); + + orig(e, d, x, y, rad, radx, rady, pres, ang, fx, fy, flags, timestamp, data); +} + +EAPI void +evas_event_feed_multi_move(Evas *e, int d, int x, int y, double rad, + double radx, double rady, double pres, double ang, + double fx, double fy, unsigned int timestamp, const void *data) +{ +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + multi_move t = { d, x, y, rad, radx, rady, pres, ang, fx, fy, timestamp }; + int evt = tsuite_event_type_get(EVAS_CALLBACK_MULTI_MOVE); + ADD_TO_LIST(evt, multi_move, t); + void (*orig) (Evas *e, int d, int x, int y, double rad, + double radx, double rady, double pres, double ang, + double fx, double fy, unsigned int timestamp, const void *data) = + dlsym(RTLD_NEXT, __func__); + + orig(e, d, x, y, rad, radx, rady, pres, ang, fx, fy, timestamp, data); +} + +EAPI void +evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, + const char *string, const char *compose, + unsigned int timestamp, const void *data) +{ + int evt = tsuite_event_type_get(EVAS_CALLBACK_KEY_DOWN); + void (*orig) (Evas *e, const char *keyname, const char *key, + const char *string, const char *compose, + unsigned int timestamp, const void *data) = + dlsym(RTLD_NEXT, __func__); +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + if (!strcmp(key, shot_key)) + { +#ifdef DEBUG_TSUITE + printf("Take Screenshot: %s timestamp=<%u>\n", __func__, timestamp); +#endif + take_screenshot t = { timestamp }; + ADD_TO_LIST(TSUITE_EVENT_TAKE_SHOT, take_screenshot, t); + + orig(e, keyname, key, string, compose, timestamp, data); + return; + } + + /* Contruct t duplicate strings, free them when list if freed */ + key_down_key_up t; + t.timestamp = timestamp; + t.keyname = eina_stringshare_add(keyname); + t.key = eina_stringshare_add(key); + t.string = eina_stringshare_add(string); + t.compose = eina_stringshare_add(compose); + ADD_TO_LIST(evt, key_down_key_up, t); + + orig(e, keyname, key, string, compose, timestamp, data); +} + +EAPI void +evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, + const char *string, const char *compose, + unsigned int timestamp, const void *data) +{ + void (*orig) (Evas *e, const char *keyname, const char *key, + const char *string, const char *compose, + unsigned int timestamp, const void *data) = + dlsym(RTLD_NEXT, __func__); + + if (!strcmp(key, shot_key)) + { +#ifdef DEBUG_TSUITE + printf("Take Screenshot: %s timestamp=<%u>\n", __func__, timestamp); +#endif + orig(e, keyname, key, string, compose, timestamp, data); + return; /* Take screenshot done on key-down */ + } + + int evt = { tsuite_event_type_get(EVAS_CALLBACK_KEY_UP) }; +#ifdef DEBUG_TSUITE + printf("Calling %s timestamp=<%u>\n", __func__, timestamp); +#endif + /* Contruct t duplicate strings, free them when list if freed */ + key_down_key_up t; + t.timestamp = timestamp; + t.keyname = eina_stringshare_add(keyname); + t.key = eina_stringshare_add(key); + t.string = eina_stringshare_add(string); + t.compose = eina_stringshare_add(compose); + ADD_TO_LIST(evt, key_down_key_up, t); + + orig(e, keyname, key, string, compose, timestamp, data); +} diff --git a/src/lib/tsuite_file_data.c b/src/lib/tsuite_file_data.c new file mode 100644 index 0000000..0071c0f --- /dev/null +++ b/src/lib/tsuite_file_data.c @@ -0,0 +1,586 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "tsuite_file_data.h" + +static data_desc *desc = NULL; /* this struct holds descs (alloc on init) */ + +static eet_event_type_mapping eet_mapping[] = { + { TSUITE_EVENT_MOUSE_IN, TSUITE_EVENT_MOUSE_IN_STR }, + { TSUITE_EVENT_MOUSE_OUT, TSUITE_EVENT_MOUSE_OUT_STR }, + { TSUITE_EVENT_MOUSE_DOWN, TSUITE_EVENT_MOUSE_DOWN_STR }, + { TSUITE_EVENT_MOUSE_UP, TSUITE_EVENT_MOUSE_UP_STR }, + { TSUITE_EVENT_MOUSE_MOVE, TSUITE_EVENT_MOUSE_MOVE_STR }, + { TSUITE_EVENT_MOUSE_WHEEL, TSUITE_EVENT_MOUSE_WHEEL_STR }, + { TSUITE_EVENT_MULTI_DOWN, TSUITE_EVENT_MULTI_DOWN_STR }, + { TSUITE_EVENT_MULTI_UP, TSUITE_EVENT_MULTI_UP_STR }, + { TSUITE_EVENT_MULTI_MOVE, TSUITE_EVENT_MULTI_MOVE_STR }, + { TSUITE_EVENT_KEY_DOWN, TSUITE_EVENT_KEY_DOWN_STR }, + { TSUITE_EVENT_KEY_UP, TSUITE_EVENT_KEY_UP_STR }, + { TSUITE_EVENT_TAKE_SHOT, TSUITE_EVENT_TAKE_SHOT_STR }, + { TSUITE_EVENT_NOT_SUPPORTED, NULL } +}; + +Tsuite_Event_Type +tsuite_event_mapping_type_get(const char *name) +{ + int i; + for (i = 0; eet_mapping[i].name != NULL; ++i) + if (strcmp(name, eet_mapping[i].name) == 0) + return eet_mapping[i].t; + + return TSUITE_EVENT_NOT_SUPPORTED; +} + +const char * +tsuite_event_mapping_type_str_get(Tsuite_Event_Type t) +{ + int i; + for (i = 0; eet_mapping[i].name != NULL; ++i) + if (t == eet_mapping[i].t) + return eet_mapping[i].name; + + return NULL; +} + +void +write_events(const char *filename, Lists_st *vr_list) +{ + _data_descriptors_init(); + Eet_File *fp = eet_open(filename, EET_FILE_MODE_WRITE); + eet_data_write(fp, desc->_lists_descriptor, CACHE_FILE_ENTRY, vr_list, + EINA_TRUE); + + eet_close(fp); + _data_descriptors_shutdown(); +} + +Lists_st * +read_events(char *filename, Evas *e, Timer_Data *td) +{ + Lists_st *vr_list; + td->e = e; + td->fp = eet_open(filename, EET_FILE_MODE_READ); + if (!td->fp) + { + printf("Failed to open input file <%s>.\n", filename); + return NULL; + } + + /* Read events list */ + _data_descriptors_init(); + vr_list = eet_data_read(td->fp, desc->_lists_descriptor, CACHE_FILE_ENTRY); + eet_close(td->fp); + _data_descriptors_shutdown(); + if (!vr_list->variant_list) + return NULL; + + td->current_event = eina_list_nth_list(vr_list->variant_list, 0); +#ifdef DEBUG_TSUITE + printf("%s list size is <%d>\n", __func__, eina_list_count(vr_list->variant_list)); +#endif + + return vr_list; +} + +const char * +_variant_type_get(const void *data, Eina_Bool *unknow) +{ + const Variant_Type_st *type = data; + int i; + + if (unknow) + *unknow = type->unknow; + + for (i = 0; eet_mapping[i].name != NULL; ++i) + if (strcmp(type->type, eet_mapping[i].name) == 0) + return eet_mapping[i].name; + + if (unknow) + *unknow = EINA_FALSE; + + return type->type; +} /* _variant_type_get */ + +Eina_Bool +_variant_type_set(const char *type, + void *data, + Eina_Bool unknow) +{ + Variant_Type_st *vt = data; + + vt->type = type; + vt->unknow = unknow; + return EINA_TRUE; +} /* _variant_type_set */ + +/* START - Allocating and setting variant structs */ +mouse_in_mouse_out *mouse_in_mouse_out_set(unsigned int timestamp) +{ + mouse_in_mouse_out *st = calloc(1, sizeof(mouse_in_mouse_out)); + if (st) + { + st->timestamp = timestamp; + } + + return st; +} + +Variant_st *mouse_in_mouse_out_new(Tsuite_Event_Type type, + unsigned int timestamp) +{ + Variant_st *va = calloc(1, sizeof(Variant_st)); + va->t.type = eet_mapping[type].name; + va->data = mouse_in_mouse_out_set(timestamp); + + return va; +} + +mouse_down_mouse_up *mouse_down_mouse_up_set(int b, Evas_Button_Flags flags, + unsigned int timestamp) +{ + mouse_down_mouse_up *st = calloc(1, sizeof(mouse_down_mouse_up)); + if (st) + { + st->b = b; + st->flags = flags; + st->timestamp = timestamp; + } + + return st; +} + +Variant_st *mouse_down_mouse_up_new(Tsuite_Event_Type type, int b, + Evas_Button_Flags flags, unsigned int timestamp) +{ + Variant_st *va = calloc(1, sizeof(Variant_st)); + va->t.type = eet_mapping[type].name; + va->data = mouse_down_mouse_up_set(b, flags, timestamp); + + return va; +} + +mouse_move *mouse_move_set(int x, int y, unsigned int timestamp) +{ + mouse_move *st = calloc(1, sizeof(mouse_move)); + if (st) + { + st->x = x; + st->y = y; + st->timestamp = timestamp; + } + + return st; +} + +Variant_st *mouse_move_new(int x, int y, unsigned int timestamp) +{ + Variant_st *va = calloc(1, sizeof(Variant_st)); + va->t.type = eet_mapping[TSUITE_EVENT_MOUSE_MOVE].name; + va->data = mouse_move_set(x, y, timestamp); + + return va; +} + +mouse_wheel *mouse_wheel_set(int direction, int z, unsigned int timestamp) +{ + mouse_wheel *st = calloc(1, sizeof(mouse_wheel)); + if (st) + { + st->direction = direction; + st->z = z; + st->timestamp = timestamp; + } + + return st; +} + +Variant_st *mouse_wheel_new(int direction, int z, unsigned int timestamp) +{ + Variant_st *va = calloc(1, sizeof(Variant_st)); + va->t.type = eet_mapping[TSUITE_EVENT_MOUSE_WHEEL].name; + va->data = mouse_wheel_set(direction, z, timestamp); + + return va; +} + +multi_event *multi_event_set(int d, int x, int y, double rad, + double radx, double rady, double pres, double ang, + double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp) +{ + multi_event *st = calloc(1, sizeof(multi_event)); + if (st) + { + st->d = d; + st->x = x; + st->y = y; + st->rad = rad; + st->radx = radx; + st->rady = rady; + st->pres = pres; + st->ang = ang; + st->fx = fx; + st->fy = fy; + st->flags = flags; + st->timestamp = timestamp; + } + + return st; +} + +Variant_st *multi_event_new(Tsuite_Event_Type type, int d, int x, int y, + double rad, double radx, double rady, double pres, double ang, + double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp) +{ + Variant_st *va = calloc(1, sizeof(Variant_st)); + va->t.type = eet_mapping[type].name; + va->data = multi_event_set(d, x, y, rad, radx, rady, pres, ang, fx, fy, + flags, timestamp); + + return va; +} + +multi_move *multi_move_set(int d, int x, int y, double rad, double radx, + double rady, double pres, double ang, double fx, double fy, + unsigned int timestamp) +{ + multi_move *st = calloc(1, sizeof(multi_move)); + if (st) + { + st->d = d; + st->x = x; + st->y = y; + st->rad = rad; + st->radx = radx; + st->rady = rady; + st->pres = pres; + st->ang = ang; + st->fx = fx; + st->fy = fy; + st->timestamp = timestamp; + } + + return st; +} + +Variant_st *multi_move_new(int d, int x, int y, + double rad, double radx,double rady, double pres, double ang, + double fx, double fy, unsigned int timestamp) +{ + Variant_st *va = calloc(1, sizeof(Variant_st)); + va->t.type = eet_mapping[TSUITE_EVENT_MULTI_MOVE].name; + va->data = multi_move_set(d, x, y, rad, radx, rady, pres, ang, + fx, fy,timestamp); + + return va; +} + +key_down_key_up *key_down_key_up_set(unsigned int timestamp, + const char *keyname, const char *key, const char *string, + const char *compose) +{ + key_down_key_up *st = calloc(1, sizeof(key_down_key_up)); + if (st) + { + st->timestamp = timestamp; + st->keyname = keyname; + st->key = key; + st->string = string; + st->compose = compose; + } + + return st; +} + +Variant_st *key_down_key_up_new(Tsuite_Event_Type type, + unsigned int timestamp, const char *keyname, const char *key, + const char *string, const char *compose) +{ + Variant_st *va = calloc(1, sizeof(Variant_st)); + va->t.type = eet_mapping[type].name; + va->data = key_down_key_up_set(timestamp, keyname, key, string, compose); + + return va; +} + +take_screenshot *take_screenshot_set(unsigned int timestamp) +{ + take_screenshot *st = calloc(1, sizeof(take_screenshot)); + if (st) + { + st->timestamp = timestamp; + } + + return st; +} + +Variant_st *take_screenshot_new(unsigned int timestamp) +{ + Variant_st *va = calloc(1, sizeof(Variant_st)); + va->t.type = eet_mapping[TSUITE_EVENT_TAKE_SHOT].name; + va->data = take_screenshot_set(timestamp); + + return va; +} +/* END - Allocating and setting variant structs */ + +/* START Event struct descriptors */ +Eet_Data_Descriptor * +take_screenshot_desc_make(void) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Data_Descriptor *desc; + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, take_screenshot); + desc = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, take_screenshot, "timestamp", + timestamp, EET_T_UINT); + + return desc; +} + +Eet_Data_Descriptor * +mouse_in_mouse_out_desc_make(void) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Data_Descriptor *desc; + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, mouse_in_mouse_out); + desc = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_in_mouse_out, "timestamp", + timestamp, EET_T_UINT); + + return desc; +} + +Eet_Data_Descriptor * +mouse_down_mouse_up_desc_make(void) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Data_Descriptor *desc; + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, mouse_down_mouse_up); + desc = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_down_mouse_up, "b", b, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_down_mouse_up, "flags", + flags, EET_T_INT); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_down_mouse_up, "timestamp", + timestamp, EET_T_UINT); + + return desc; +} + +Eet_Data_Descriptor * +mouse_move_desc_make(void) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Data_Descriptor *desc; + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, mouse_move); + desc = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_move, "x", x, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_move, "y", y, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_move, "timestamp", + timestamp, EET_T_UINT); + + return desc; +} + +Eet_Data_Descriptor * +mouse_wheel_desc_make(void) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Data_Descriptor *desc; + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, mouse_wheel); + desc = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_wheel, "direction", + direction, EET_T_INT); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_wheel, "z", z, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, mouse_wheel, "timestamp", + timestamp, EET_T_UINT); + + return desc; +} + +Eet_Data_Descriptor * +key_down_key_up_desc_make(void) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Data_Descriptor *desc; + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, key_down_key_up); + desc = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, key_down_key_up, "timestamp", + timestamp, EET_T_UINT); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, key_down_key_up, "keyname", + keyname, EET_T_STRING); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, key_down_key_up, "key", + key, EET_T_STRING); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, key_down_key_up, "string", + string, EET_T_STRING); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, key_down_key_up, "compose", + compose, EET_T_STRING); + + return desc; +} + +Eet_Data_Descriptor * +multi_event_desc_make(void) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Data_Descriptor *desc; + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, multi_event); + desc = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "d", d, EET_T_UINT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "x", x, EET_T_UINT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "y", y, EET_T_UINT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "rad", rad, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "radx", radx, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "rady", rady, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "pres", pres, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "ang", ang, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "fx", fx, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "fy", fy, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "flags", flags, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_event, "timestamp", + timestamp, EET_T_UINT); + + return desc; +} + +Eet_Data_Descriptor * +multi_move_desc_make(void) +{ + Eet_Data_Descriptor_Class eddc; + Eet_Data_Descriptor *desc; + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, multi_move); + desc = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "d", d, EET_T_UINT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "x", x, EET_T_UINT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "y", y, EET_T_UINT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "rad", rad, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "radx", radx, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "rady", rady, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "pres", pres, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "ang", ang, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "fx", fx, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "fy", fy, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(desc, multi_move, "timestamp", + timestamp, EET_T_UINT); + + return desc; +} + +/* declaring types */ +data_desc *_data_descriptors_init(void) +{ + if (desc) /* Was allocated */ + return desc; + + desc = calloc(1, sizeof(data_desc)); + + Eet_Data_Descriptor_Class eddc; + + EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Lists_st); + desc->_lists_descriptor = eet_data_descriptor_file_new(&eddc); + + desc->take_screenshot = take_screenshot_desc_make(); + desc->mouse_in_mouse_out = mouse_in_mouse_out_desc_make(); + desc->mouse_down_mouse_up = mouse_down_mouse_up_desc_make(); + desc->mouse_move = mouse_move_desc_make(); + desc->mouse_wheel = mouse_wheel_desc_make(); + desc->multi_event = multi_event_desc_make(); + desc->multi_move = multi_move_desc_make(); + desc->key_down_key_up = key_down_key_up_desc_make(); + + /* for variant */ + EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Variant_st); + desc->_variant_descriptor = eet_data_descriptor_file_new(&eddc); + + eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION; + eddc.func.type_get = _variant_type_get; + eddc.func.type_set = _variant_type_set; + desc->_variant_unified_descriptor = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_MOUSE_IN_STR, desc->mouse_in_mouse_out); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_MOUSE_OUT_STR, desc->mouse_in_mouse_out); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_MOUSE_DOWN_STR, desc->mouse_down_mouse_up); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_MOUSE_UP_STR, desc->mouse_down_mouse_up); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_MOUSE_MOVE_STR, desc->mouse_move); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_MOUSE_WHEEL_STR, desc->mouse_wheel); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_MULTI_DOWN_STR, desc->multi_event); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_MULTI_UP_STR, desc->multi_event); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_MULTI_MOVE_STR, desc->multi_move); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_KEY_DOWN_STR, desc->key_down_key_up); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_KEY_UP_STR, desc->key_down_key_up); + + EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor, + TSUITE_EVENT_TAKE_SHOT_STR, desc->take_screenshot); + + + EET_DATA_DESCRIPTOR_ADD_VARIANT(desc->_variant_descriptor, + Variant_st, "data", data, t, desc->_variant_unified_descriptor); + + EET_DATA_DESCRIPTOR_ADD_LIST(desc->_lists_descriptor, + Lists_st, "variant_list", variant_list, desc->_variant_descriptor); + + return desc; +} + +void _data_descriptors_shutdown(void) +{ + if (desc) + { + eet_data_descriptor_free(desc->mouse_in_mouse_out); + eet_data_descriptor_free(desc->mouse_down_mouse_up); + eet_data_descriptor_free(desc->mouse_move); + eet_data_descriptor_free(desc->mouse_wheel); + eet_data_descriptor_free(desc->multi_event); + eet_data_descriptor_free(desc->multi_move); + eet_data_descriptor_free(desc->key_down_key_up); + eet_data_descriptor_free(desc->take_screenshot); + eet_data_descriptor_free(desc->_lists_descriptor); + eet_data_descriptor_free(desc->_variant_descriptor); + eet_data_descriptor_free(desc->_variant_unified_descriptor); + + free(desc); + desc = NULL; + /* FIXME: Should probably only init and shutdown once */ + } +} +/* END Event struct descriptors */ diff --git a/src/lib/tsuite_file_data.h b/src/lib/tsuite_file_data.h new file mode 100644 index 0000000..b7a945e --- /dev/null +++ b/src/lib/tsuite_file_data.h @@ -0,0 +1,143 @@ +#ifndef _TSUITE_EVAS_HOOK_H +#define _TSUITE_EVAS_HOOK_H + +#include "tsuite.h" + +#define CACHE_FILE_ENTRY "cache" + +struct _mouse_in_mouse_out +{ + unsigned int timestamp; +}; + +struct _mouse_down_mouse_up +{ + int b; + Evas_Button_Flags flags; + unsigned int timestamp; +}; + +struct _mouse_move +{ + int x; + int y; + unsigned int timestamp; +}; + +struct _mouse_wheel +{ + int direction; + int z; + unsigned int timestamp; +}; + +struct _key_down_key_up +{ + unsigned int timestamp; + const char *keyname; + const char *key; + const char *string; + const char *compose; +}; + +struct _multi_event +{ + int d; + int x; + int y; + double rad; + double radx; + double rady; + double pres; + double ang; + double fx; + double fy; + Evas_Button_Flags flags; + unsigned int timestamp; +}; + +struct _multi_move +{ + int d; + int x; + int y; + double rad; + double radx; + double rady; + double pres; + double ang; + double fx; + double fy; + unsigned int timestamp; +}; + +typedef struct _mouse_in_mouse_out mouse_in_mouse_out; +typedef struct _mouse_down_mouse_up mouse_down_mouse_up; +typedef struct _mouse_move mouse_move; +typedef struct _mouse_wheel mouse_wheel; +typedef struct _multi_event multi_event; +typedef struct _multi_move multi_move; +typedef struct _key_down_key_up key_down_key_up; +typedef struct _mouse_in_mouse_out take_screenshot; + +/* START - EET support typedefs */ +#define TSUITE_EVENT_MOUSE_IN_STR "tsuite_event_mouse_in" +#define TSUITE_EVENT_MOUSE_OUT_STR "tsuite_event_mouse_out" +#define TSUITE_EVENT_MOUSE_DOWN_STR "tsuite_event_mouse_down" +#define TSUITE_EVENT_MOUSE_UP_STR "tsuite_event_mouse_up" +#define TSUITE_EVENT_MOUSE_MOVE_STR "tsuite_event_mouse_move" +#define TSUITE_EVENT_MOUSE_WHEEL_STR "tsuite_event_mouse_wheel" +#define TSUITE_EVENT_MULTI_DOWN_STR "tsuite_event_multi_down" +#define TSUITE_EVENT_MULTI_UP_STR "tsuite_event_multi_up" +#define TSUITE_EVENT_MULTI_MOVE_STR "tsuite_event_multi_move" +#define TSUITE_EVENT_KEY_DOWN_STR "tsuite_event_key_down" +#define TSUITE_EVENT_KEY_UP_STR "tsuite_event_key_up" +#define TSUITE_EVENT_TAKE_SHOT_STR "tsuite_event_take_shot" + + +struct _Lists_st +{ + Eina_List *variant_list; +}; +typedef struct _Lists_st Lists_st; + +struct _data_desc +{ + Eet_Data_Descriptor *take_screenshot; + Eet_Data_Descriptor *mouse_in_mouse_out; + Eet_Data_Descriptor *mouse_down_mouse_up; + Eet_Data_Descriptor *mouse_move; + Eet_Data_Descriptor *mouse_wheel; + Eet_Data_Descriptor *multi_event; + Eet_Data_Descriptor *multi_move; + Eet_Data_Descriptor *key_down_key_up; + + /* list, variant EET desc support */ + Eet_Data_Descriptor *_lists_descriptor; + Eet_Data_Descriptor *_variant_descriptor; + Eet_Data_Descriptor *_variant_unified_descriptor; +}; +typedef struct _data_desc data_desc; +/* END - EET support typedefs */ + +/* START Event struct descriptors */ +Eet_Data_Descriptor *take_screenshot_desc_make(void); +Eet_Data_Descriptor *mouse_in_mouse_out_desc_make(void); +Eet_Data_Descriptor *mouse_down_mouse_up_desc_make(void); +Eet_Data_Descriptor *mouse_move_desc_make(void); +Eet_Data_Descriptor *mouse_wheel_desc_make(void); +Eet_Data_Descriptor *key_down_key_up_desc_make(void); +Eet_Data_Descriptor *multi_event_desc_make(void); +Eet_Data_Descriptor *multi_move_desc_make(void); +data_desc *_data_descriptors_init(void); +void _data_descriptors_shutdown(void); +/* END Event struct descriptors */ + +Tsuite_Event_Type tsuite_event_mapping_type_get(const char *name); +const char * tsuite_event_mapping_type_str_get(Tsuite_Event_Type t); +const char * _variant_type_get(const void *data, Eina_Bool *unknow); +Eina_Bool _variant_type_set(const char *type, void *data, Eina_Bool unknow); + +void write_events(const char *filename, Lists_st *vr_list); +Lists_st *read_events(char *filename, Evas *e, Timer_Data *td); +#endif diff --git a/src/scripts/Makefile.am b/src/scripts/Makefile.am new file mode 100644 index 0000000..964e57e --- /dev/null +++ b/src/scripts/Makefile.am @@ -0,0 +1,8 @@ +MAINTAINERCLEANFILES = Makefile.in + +uninstall-local: + rm $(bindir)/exactness + +install-exec-local: + ./write.sh $(libdir)/exactness/ + $(INSTALL) exactness $(bindir) diff --git a/src/scripts/write.sh b/src/scripts/write.sh new file mode 100755 index 0000000..9c9473d --- /dev/null +++ b/src/scripts/write.sh @@ -0,0 +1,329 @@ +#!/bin/sh +# This script creates exactness script that later is copied to $(bindir) +# by Makefile. +# The reason to do it this was is that we would like to get $OUR_LIBPATH as +# a parameter from Makefile. +cat <<-ENDOFMESSAGE>exactness +#!/usr/bin/env bash +# tsuite_script.sh -i this makes new 'orig' folder +# tsuite_script.sh -i TestName1 [TestName2 ...] rewrite files for selcted tests in 'orig' folder +# tsuite_script.sh -r [TestName1 TestName2 ...] ; this means record [all tests or TestName additional arg] +# tsuite_script.sh -d FolderName -p [TestName1 TestName2 ...] this means play a record and put screenshots FolderName +# tsuite_script.sh -d FolderName -c [TestName1 TestName2 ...] this means compare "orig" with screenshots in FolderName +# When omitting DestDir we will use 'current' as default DestDir + +#_DEBUG="on" +function DEBUG() +{ + [ "\$_DEBUG" == "on" ] && \$@ +} + +do_help () { +echo "Record tests to produce input-stream to play and set screenshot timing" +echo "To record all tests:" +echo "\$0 -r" +echo "To record specific tests:" +echo "\$0 -r TestName1 [TestName2 ...]" +echo +echo "Play tests to produce PNG files of screenshot defined while recording." +echo "To play all tests:" +echo "\$0 -p d DestDir" +echo "To play specific tests:" +echo "\$0 -p -d DestDir TestName1 [TestName2 ...]" +echo "To play and rewrite 'orig' dir, use init option for all test: \$0 -i" +echo "To play and rewrite 'orig' dir, use init option for selected tests: \$0 -i [TestName1 ...]" +echo +echo "Run comprison to produce comp_*.png files" +echo "To compare all tests:" +echo "\$0 -c [-d DestDir]" +echo "To compare specific tests:" +echo "\$0 -c -d DestDir TestName1 [TestName2 ...]" +echo +echo "NOTE:" +echo "For all actions require DestDir, when omitting this param we use 'current' as default" +} + +do_record () { +DEBUG printf "do_record()\n" +# This will run record for all test if no specific test specified +# or run recording of specified tests (names passed as parameter). +# run ALL tests to record +DEBUG echo do_record "\$*" + +OUR_LIBPATH="$1" + +if [ -z "\$*" ] +then + LD_PRELOAD=\${OUR_LIBPATH}/libexactness.so exactness_raw --record +else + LD_PRELOAD=\${OUR_LIBPATH}/libexactness.so exactness_raw --record \$* +fi +return 0 +} + +do_play () { +# This will play record for all test if '-a' specified. +# or play record of tests specified as parameter. +# run ALL tests to record +DEBUG echo dest dir: "\$_dest_dir" +DEBUG echo do_play "\$_dest_dir" "\$*" + +# Play recorded tests and produce PNG files. +# this will produce screenshots in "_dest_dir" folder +if [ -z "\$*" ] +then +# Clear all files before producing all PNG files. + rm -rf "\$_dest_dir" &> /dev/null + mkdir -p "\$_dest_dir" + ELM_ENGINE="buffer" exactness_raw --destdir "\$_dest_dir" +else + if [ -e "\$_dest_dir" ] + then +# Remove PNG files according to tests played + for i in \$* + do + rm "\$_dest_dir"/"\$i"_[0-9]*.png &> /dev/null + done + else +# Create dest dir + mkdir -p "\$_dest_dir" + fi + + ELM_ENGINE="buffer" exactness_raw --destdir "\$_dest_dir" \$* +fi + +return 0 +} + +compare_files () { +if [ -e "\$1" ] +# First file exists +then + local md_file1=\`md5sum \$1\` + if [ -e "\$2" ] + then +# Second file exists + local md_file2=\`md5sum \$2\` + +# Get md5 of both files + local md1=\`echo "\$md_file1" | cut -d ' ' -f1\` + local md2=\`echo "\$md_file2" | cut -d ' ' -f1\` + +# Increase counter of comparisons + (( ncomp++ )) + + # Compare md5 of both files + if [ "x\$md1" != "x\$md2" ] + then + if [ \$comp_unavail -eq 0 ] + then + # Create diff-file with 'comp_' prefix. + local name=\`basename "\$1"\` + compare "\$1" "\$2" "\$_dest_dir"/comp_"\$name" + else + echo "\$name does not match." + fi +# Increment counter of files not identical. + (( nfail++ )) + fi + else +# Failed to find second file + echo "Test file was not found \$2" + (( nerr++ )) + fi +else +# Failed to find first file + echo "Test file was not found \$1" + (( nerr++ )) +fi +} + +process_compare () { + # Process all files listed in array (param) + local files_list=( "\$@" ) + for line in "\${files_list[@]}" + do + local name=\`basename "\$line"\` + DEBUG echo "comparing \$name" + compare_files "\$_orig_dir"/"\$name" "\$_dest_dir"/"\$name" + done +} + +do_compare () { +DEBUG printf "do_compare()\n" +# This will compare files in 'orig' folder with files in _dest_dir +if [ \$comp_unavail -ne 0 ] +then + if [ \$# -eq 1 ] + then + echo "Compare software missing." + echo "Install \"ImageMagick\" if you like to procduce \"comp\" files." + echo "Printing diffs to output" + fi +fi + +if [ -z "\$_dest_dir" ] +then + printf "For comparing, Usage: %s -c -a -d DirName\nor\n%s -c -d DirName TestName1, TestName2,...\n" \$(basename \$0) \$(basename \$0) >&2 +fi + +if [ "\$_dest_dir" = "\$_orig_dir" ] +then + printf "Dest-Dir is \$_dest_dir, exiting.\n" + return 0 +fi + +local files_list= +if [ -z "\$*" ] +# No test names given, compare all +then + rm -f "\$_dest_dir"/comp_* &> /dev/null + files_list=( \`ls "\$_dest_dir"/test_*\` ) + process_compare "\${files_list[@]}" +else + for test_name in \$* + do + rm -f "\$_dest_dir"/comp_"\$test_name"_[0-9]*.png &> /dev/null + files_list=( \`ls "\$_dest_dir"/"\$test_name"_[0-9]*.png\` ) + process_compare "\${files_list[@]}" + done +fi + +echo "Processed \$ncomp comparisons" +echo "with \$nfail file that did not match" +echo "and \$nerr errors" +return 0 +} + +# Script Entry Point +_record= +_play= +_compare= +_init= +_remove_fail= +_orig_dir="orig" +# Init dest_dir - should change on the fly +_dest_dir= + +nerr=0 +ncomp=0 +nfail=0 + +# Test that compare is insatlled +which compare &> /dev/null +comp_unavail=\$? + +while getopts 'acd:hpri?' OPTION +do + case \$OPTION in + c) _compare=1 + ;; + d) _dest_dir="\$OPTARG" + ;; + p) _play=1 + _remove_fail=1 + ;; + r) _record=1 + _remove_fail=1 + ;; + i) _dest_dir="\$_orig_dir" + _init=1 + _play=1 + _remove_fail=1 + ;; + h) do_help + exit 0 + ;; + ?) do_help + exit 0 + ;; + esac +done +shift \$((\$OPTIND - 1)) +# printf "Remaining arguments are: %s\n" "\$*" +if [ -z "\$_dest_dir" ] +then + if [ ! -z "\$_play" ] + then + _dest_dir="current" + fi + if [ ! -z "\$_compare" ] + then + _dest_dir="current" + fi +else + if [ ! -z "\$_init" ] + then + if [ "\$_dest_dir" != "\$_orig_dir" ] + then + echo "Cannot use '-i' option with a DestDir that is not 'orig'" + echo "No need to specify DestDir when using '-i'" + echo "For help: \$0 -h" + exit 2 + fi + fi +fi + +if [ ! -z "\$_compare" ] +then + if [ "\$_dest_dir" = "\$_orig_dir" ] + then + echo "Cannot use 'orig' dir with compare '-c' option" + echo "Please select different DestDir" + echo "For help: \$0 -h" + exit 3 + fi +fi + +# Here we clear all fail_*.txt files before running test +# because those files are opened with append ("a") mode. +# We don't want to accumlate old tests fail text. +if [ "\$_remove_fail" ] +then + if [ -z "\$*" ] + then + # Remove all file_*.txt files before init/play/record + DEBUG echo "removing fail_*.txt" + rm fail_*.txt &> /dev/null + else + # Remove file_*.txt files before init/play/record + for i in \$* + do + DEBUG echo "removing fail_\$i.txt" + rm fail_"\$i".txt &> /dev/null + done + fi +fi + +if [ "\$_record" ] +then + do_record "\$*" +fi + +if [ "\$_play" ] +then + do_play "\$*" +fi + +if [ "\$_compare" ] +then + do_compare "\$*" +fi + +if [ "\$_remove_fail" ] +then + ls fail_*.txt &> /dev/null + if [ "\$?" -eq 0 ] + then + _n_tests_failed=\`ls fail_*.txt -1 | wc -l\` + + if [ "\$_n_tests_failed" ] + then + echo "\$_n_tests_failed tests had errors while running." + echo "Please examine fail_*.txt files in CWD" + fi + fi +fi +ENDOFMESSAGE + +chmod +x exactness diff --git a/tasn_is_a_lazy_bastard b/tasn_is_a_lazy_bastard index c315802..1184451 100644 --- a/tasn_is_a_lazy_bastard +++ b/tasn_is_a_lazy_bastard @@ -1 +1 @@ -And he deserves to DIEEEEEE +And he deserves to live forever.