From 928c1e42404a2597511314bd121cc6b88b281215 Mon Sep 17 00:00:00 2001 From: Dean Iverson Date: Mon, 23 Jun 2014 22:16:48 -0600 Subject: [PATCH] Ported the first two sections of the docs to asciidoc. --- .gitignore | 2 +- build.gradle | 1 + src/asciidoc/getting_started.adoc | 205 +++++++++++++++++++++++++++++ src/asciidoc/images/helloWorld.png | Bin 0 -> 37061 bytes src/asciidoc/introduction.adoc | 49 ++++++- 5 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 src/asciidoc/images/helloWorld.png diff --git a/.gitignore b/.gitignore index bb43eb5..d56358f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ /buildSrc/build /buildSrc/.gradle /build -/.gradle +.gradle /dist/ # IntelliJ IDEA things diff --git a/build.gradle b/build.gradle index 7ca2aa9..db791d8 100755 --- a/build.gradle +++ b/build.gradle @@ -134,6 +134,7 @@ asciidoctor { sectanchors : true, numbered : true, linkattrs : true, + imagesdir : 'images', stylesheet : 'src/asciidoc-resources/css/style.css', 'source-highlighter' : 'coderay', 'groovyfx-version' : project.version diff --git a/src/asciidoc/getting_started.adoc b/src/asciidoc/getting_started.adoc index 01e5b08..f5f9220 100644 --- a/src/asciidoc/getting_started.adoc +++ b/src/asciidoc/getting_started.adoc @@ -1,3 +1,208 @@ = Getting Started +== What's New in Version 0.4.0 +GroovyFX version 0.4 includes support for Groovy 2.3, Java 8, and JavaFX 8. + +== What's New in Version 0.2.0 +GroovyFX version 0.2 has a number of fixes, new functionality, and other +enhancements. This includes some changes that are incompatible with version +0.1. See the Breaking Changes section below for details on these changes. + +=== Improvements +The following JavaFX 2.1 and 2.2 features have been added: + +* DirectoryChooser +* ComboBox +* StackedBarChart and StackedAreaChart +* Canvas + +Other improvements: + +* Usage of Node IDs +* Actions +* Nested Table Column Support +* onSelect Pseudo-Property Added to ListView, TreeView, ComboBox, ChoiceBox, + and TabPane +* Cell Factory Support + +=== Breaking Changes + +The following changes are not backwards compatible with previous versions. + +* New usage of GroovyFX and SceneGraphBuilder classes +* New Binding +* TimelineBuilder went away + +== Installation Requirements +Before installing GroovyFX you will need to install the Java Development Kit +(JDK) version 1.6 or above. + +http://java.com/en/download/manual.jsp[Download the appropriate JDK] for your +operating system, run the installer, and then set up an environment +variable named JAVA_HOME pointing to the location of this installation. + +== Using the GroovyFX Library +There are several ways in which you can include GroovyFx in your projects. + +=== Maven Central + +Having GroovyFX in Maven Central (thanks to Sonatype's OSS hosting!) makes it +simple to use GroovyFX in everything from simple test scripts to larger +projects. The Maven coordinates are as follows + +* _groupId_: org.codehaus.groovyfx +* _artifactId_: groovyfx +* _version_: 0.4.0 + +GroovyFX is simple to inlude in Groovy scripts thanks to Groovy's Grab +annotation, a part of the Grape system. Just include the following line at the +top of your script + +[source,groovy] +Testing.groovy +@Grab('org.codehaus.groovyfx:groovyfx:0.4.0') + +=== Creating a GroovyFX-Based Project with Gradle + +It is also simple to set up your own GroovyFX-based project using Gradle as the +build system. This sample build.gradle script will get you started. + +[source,groovy] +---- +apply plugin:'groovy' + +project.ext.set('javafxHome', System.env['JAVAFX_HOME'] + +repositories { mavenCentral() } + +dependencies { + groovy 'org.codehaus.groovy:groovy-all:1.8.6' + compile 'org.codehaus.groovyfx:groovyfx:0.4.0' + compile files("${javafxHome}/rt/lib/jfxrt.jar") +} + +task run(type: JavaExec) { + main = 'helloGroovyFX' + classpath sourceSets.main.runtimeClasspath +} + +task makeDirs(description:'make all dirs for project setup') << { + def sources = [sourceSets.main, sourceSets.test] + sources*.allSource*.srcDirs.flatten().each { File srcDir -> + println "making $srcDir" + srcDir.mkdirs() + } +} + +task wrap(type:Wrapper, description:"create a gradlew") { + gradleVersion = '1.0-rc-3' +} +---- + +Just create a new directory for your project and place the gradle script into +it. Then simply call + +[source,groovy] +gradle makeDirs + +to set up the rest of your project's directory structure. You will +automatically have a dependency on both Groovy and GroovyFX. + +== Building from Source + +The project's source code is located on +https://github.com/groovyfx-project/groovyfx[GitHub]. You can clone the +GroovyFX repository using the following http://git-scm.com/[Git] command + +[source] +git clone git://github.com/groovyfx-project/groovyfx.git + +=== Installation Requirements + +If you are using a JDK prior to Java 7u4, you will need to install the JavaFX +2.x SDK from +http://www.oracle.com/technetwork/java/javafx/downloads/index.html[javafx.com]. +Once you have downloaded and installed the SDK, set up an environment variable +called JAVAFX_HOME pointing to the location of the JavaFX SDK. + +[NOTE] +The JavaFX 2.1 SDK is included in Java 7u4 and above. If you are using this +version of the JDK, you do not need to install a separate SDK and set the +JAVAFX_HOME environment unless you would like to use a different version of the +JavaFX SDK than the one included in your JDK. + +=== Building with Gradle +GroovyFX uses http://www.gradle.org[Gradle] as its primary build system. +Building the project with Gradle requires only the following simple steps + +[source] +cd groovyfx +gradlew build + +The Gradle build script is also capable of running any of the project's demo. +To run any specific demo, e.g.the AccordionDemo, you can just use + +[source] +gradlew AccordionDemo + +To see an executable overview of all build tasks including all demos + +[source] +gradlew --gui + +=== Building with Intellij IDEA + +GroovyFX's build script is capable of generating all of the project files +neccessary to build the project with Intellij IDEA. Just run the following +command from the project's root directory + +[source] +gradlew idea + +This will generate a groovyfx.ipr file. From IDEA, select File -> Open Project +and navigate to the directory containing the groovyfx.ipr file and open it. You +should now be able to build the library and run the demos with IDEA. + +=== Building with NetBeans + +The NetBeans project files are included in the code repository. You may have to +set up a Java Platform that includes the JavaFX SDK directory, if one does not +already exist. Please see +http://netbeans.org/kb/docs/java/javafx-setup.html[Setting Up NetBeans IDE With +JavaFX 2.1] for more information. + +Once you have created the JavaFX enabled Java platform, then choose the GroovyFX project, +right click and pick "Properties". Choose the "Libraries" entry, then choose the +JavaFX enabled Java Platform. You should now be able to build the library and run the demos with NetBeans. +Also, you may have to fix the location for the groovy-all jar file. + +== Hello GroovyFX: Your First GroovyFX Program +Once you have everything set up, try the following Groovy script to test that your setup is functioning as it should. + +[source,groovy] +---- +@Grab('org.codehaus.groovyfx:groovyfx:0.2') + +import static groovyx.javafx.GroovyFX.start + +start { + stage(title: 'GroovyFX Hello World', visible: true) { + scene(fill: BLACK, width: 500, height: 250) { + hbox(padding: 60) { + text(text: 'Groovy', font: '80pt sanserif') { + fill linearGradient(endX: 0, stops: [PALEGREEN, SEAGREEN]) + } + text(text: 'FX', font: '80pt sanserif') { + fill linearGradient(endX: 0, stops: [CYAN, DODGERBLUE]) + effect dropShadow(color: DODGERBLUE, radius: 25, spread: 0.25) + } + } + } + } +} +---- + +If everything runs correctly you should see the following screen appear. + +image:helloWorld.png[] diff --git a/src/asciidoc/images/helloWorld.png b/src/asciidoc/images/helloWorld.png new file mode 100644 index 0000000000000000000000000000000000000000..e4fcf0e252020e8f23e71ffde1a970263648c605 GIT binary patch literal 37061 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 F{|{#*y}$qf literal 0 HcmV?d00001 diff --git a/src/asciidoc/introduction.adoc b/src/asciidoc/introduction.adoc index 73672a8..6599b02 100644 --- a/src/asciidoc/introduction.adoc +++ b/src/asciidoc/introduction.adoc @@ -1,3 +1,50 @@ - = Introduction +[NOTE] +Please note that this documentation is still under construction. There are a +lot of missing pieces. + +Client-side Java development took a major step forward with the introduction of +Oracle's http://www.javafx.com[JavaFX] library. JavaFX is a modern, rich client +technology stack that enables Java developers to quickly and easily create +desktop clients with functionality and richness that rival, and even surpass, +that of native clients and web applications. + +GroovyFX is a library that makes working with JavaFX much simpler and more +natural. GroovyFX is focused on exploiting the power of the +http://groovy.codehaus.org[Groovy] language to make JavaFX development easier +and more concise than what is possible in Java. GroovyFX also leverages Groovy's +powerful DSL features and AST transformations to eliminate boilerplate, making +GroovyFX code easier to write and, just as importantly, easier to read. + +GroovyFX provides the SceneGraphBuilder object, which offers support for: + +* All of the JavaFX core controls +* All of the core JavaFX layout containers +* Shapes, colors, and gradients +* Video and audio (including H.264 support) +* Bar charts, line charts, pie charts, and the rest of core JavaFX charts +* Full property and binding support +* The @FXBindable annotation, which eliminates the boilerplate required to + define JavaFX properties + +All of these are made easy to use through the power of the language and the +extensive use of Domain Specific Languages (DSLs). This documentation will take +you from getting started with GroovyFX all the way to building full applications +with the power of JavaFX and Groovy. + +== The GroovyFX Committers +The GroovyFX team is made up of the following core committers. + +* Jim Clarke +* Dean Iverson +* Dierk König +* Andres Almiray +* Russel Winder +* Danno Ferrin + +=== Other Contributions +We would also like to thank and recognize the following people who have +contribtued pull requests to GroovyFX. + +* Tobias Schulte, nested tableColumn support