README.md in glimmer-0.7.6 vs README.md in glimmer-0.7.7

- old
+ new

@@ -1,11 +1,12 @@ -# Glimmer 0.7.6 Beta (Desktop Development Library for Ruby) +# Glimmer 0.7.7 Beta (Desktop Development Library for Ruby) [![Gem Version](https://badge.fury.io/rb/glimmer.svg)](http://badge.fury.io/rb/glimmer) [![Travis CI](https://travis-ci.com/AndyObtiva/glimmer.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer) -<!-- [![Coverage Status](https://coveralls.io/repos/github/AndyObtiva/glimmer/badge.svg?branch=master)](https://coveralls.io/github/AndyObtiva/glimmer?branch=master) --> +[![Test Coverage](https://api.codeclimate.com/v1/badges/38fbc278022862794414/test_coverage)](https://codeclimate.com/github/AndyObtiva/glimmer/test_coverage) +[![Maintainability](https://api.codeclimate.com/v1/badges/38fbc278022862794414/maintainability)](https://codeclimate.com/github/AndyObtiva/glimmer/maintainability) -Glimmer is a native-UI cross-platform desktop development library written in Ruby. Glimmer's main innovation is a JRuby DSL that enables productive and efficient authoring of desktop application user-interfaces while relying on the robust Eclipse SWT library. Glimmer additionally innovates by having built-in data-binding support to greatly facilitate synchronizing the UI with domain models. As a result, that achieves true decoupling of object oriented components, enabling developers to solve business problems without worrying about UI concerns, or alternatively drive development UI-first, and then write clean business models test-first afterwards. +Glimmer is a native-GUI cross-platform desktop development library written in Ruby. Glimmer's main innovation is a JRuby DSL that enables productive and efficient authoring of desktop application user-interfaces while relying on the robust Eclipse SWT library. Glimmer additionally innovates by having built-in data-binding support to greatly facilitate synchronizing the GUI with domain models. As a result, that achieves true decoupling of object oriented components, enabling developers to solve business problems without worrying about GUI concerns, or alternatively drive development GUI-first, and then write clean business models test-first afterwards. [<img src="https://covers.oreillystatic.com/images/9780596519650/lrg.jpg" width=105 /><br /> Featured in<br />JRuby Cookbook](http://shop.oreilly.com/product/9780596519650.do) ## Examples @@ -72,11 +73,11 @@ NOTE: Glimmer is in beta mode. Please help make better by adopting for small or low risk projects and providing feedback. ## Table of Contents -- [Glimmer 0.7.6 Beta (Desktop Development Library for Ruby)](#glimmer-075-beta-desktop-development-library-for-ruby) +- [Glimmer 0.7.7 Beta (Desktop Development Library for Ruby)](#glimmer-075-beta-desktop-development-library-for-ruby) - [Examples](#examples) - [Hello, World!](#hello-world) - [Tic Tac Toe](#tic-tac-toe) - [Background](#background) - [Platform Support](#platform-support) @@ -123,10 +124,11 @@ - [Feature Suggestions](#feature-suggestions) - [Change Log](#change-log) - [Contributing](#contributing) - [Contributors](#contributors) - [License](#license) + ## Background Ruby is a dynamically-typed object-oriented language, which provides great productivity gains due to its powerful expressive syntax and dynamic nature. While it is proven by the Ruby on Rails framework for web development, it currently lacks a robust platform-independent framework for building desktop applications. Given that Java libraries can now be utilized in Ruby code through JRuby, Eclipse technologies, such as SWT, JFace, and RCP can help fill the gap of desktop application development with Ruby. ## Platform Support @@ -134,16 +136,16 @@ Glimmer runs on the following platforms: - Mac - Windows - Linux -Glimmer's UI has the native look and feel of each operating system it runs on since it uses SWT behind the scenes, which leverages the following native libraries: +Glimmer's GUI has the native look and feel of each operating system it runs on since it uses SWT behind the scenes, which leverages the following native libraries: - Win32 on Windows - Cocoa on Mac - GTK on Linux -More info about the SWT UI on various platforms can be found on the Eclipse WIKI and SWT FAQ: +More info about the SWT GUI on various platforms can be found on the Eclipse WIKI and SWT FAQ: https://wiki.eclipse.org/SWT/Devel/Gtk/Dev_guide#Win32.2FCocoa.2FGTK https://www.eclipse.org/swt/faq.php @@ -167,22 +169,22 @@ ### Option 1: Direct Install Run this command to install directly: ``` -jgem install glimmer -v 0.7.6 +jgem install glimmer -v 0.7.7 ``` `jgem` is JRuby's version of `gem` command. RVM allows running `gem` as an alias. Otherwise, you may also run `jruby -S gem install ...` ### Option 2: Bundler Add the following to `Gemfile`: ``` -gem 'glimmer', '~> 0.7.6' +gem 'glimmer', '~> 0.7.7' ``` And, then run: ``` jruby -S bundle install @@ -339,29 +341,31 @@ glimmer scaffold:custom_widget[custom_widget_name] ``` #### Custom Shell Gem -Custom shell gems are self-contained Glimmer apps as well as reusable custom shells. +Custom shell gems are self-contained Glimmer apps as well as reusable custom shells. +As such, they are packaged as both a native executable (e.g. Mac DMG/PKG/APP) and a Ruby gem. +Of course, you can build a Ruby gem and disregard its native executable packaging if you do not need it. -To scaffold a Glimmer custom shell gem (full window view externalized into a gem) for an existing Glimmer app, run the following command: +To scaffold a Glimmer custom shell gem (full window view distributed as a Ruby gem), run the following command: ``` glimmer scaffold:custom_shell_gem[custom_shell_name, namespace] ``` It is important to specify a namespace to avoid having your gem clash with existing gems. -The Ruby gem name will follow the convention "glimmer-cs-customwidgetname-namespace" (the 'cs' is for Custom Shell) +The Ruby gem name will follow the convention "glimmer-cs-customwidgetname-namespace" (the 'cs' is for Custom Shell). Only official Glimmer gems created by the Glimmer project committers will have no namespace (e.g. [glimmer-cs-gladiator](https://rubygems.org/gems/glimmer-cs-gladiator) Ruby gem) Example: [https://github.com/AndyObtiva/glimmer-cs-gladiator](https://github.com/AndyObtiva/glimmer-cs-gladiator) #### Custom Widget Gem -To scaffold a Glimmer custom widget gem (part of a view externalized into a gem) for an existing Glimmer app, run the following command: +To scaffold a Glimmer custom widget gem (part of a view distributed as a Ruby gem), run the following command: ``` glimmer scaffold:custom_widget_gem[custom_widget_name, namespace] ``` @@ -407,11 +411,11 @@ You will learn more about widgets next. ### Widgets -Glimmer UIs (user interfaces) are modeled with widgets, which are wrappers around the SWT library widgets found here: +Glimmer GUIs (user interfaces) are modeled with widgets, which are wrappers around the SWT library widgets found here: https://www.eclipse.org/swt/widgets/ This screenshot taken from the link above should give a glimpse of how SWT widgets look and feel: @@ -516,11 +520,11 @@ }.open ``` #### Display -SWT Display is a singleton in Glimmer. It is used in SWT to represent your display device, allowing you to manage UI globally +SWT Display is a singleton in Glimmer. It is used in SWT to represent your display device, allowing you to manage GUI globally and access available monitors. It is automatically instantiated upon first instantiation of a `shell` widget. Alternatively, for advanced use cases, it can be created explicitly with Glimmer `display` keyword. When a `shell` is later declared, it automatically uses the display created earlier without having to explicitly hook it. @@ -544,11 +548,11 @@ - `Glimmer::SWT:WidgetProxy` wraps all descendants of `org.eclipse.swt.widgets.Widget` except the ones that have their own wrappers. - `Glimmer::SWT::ShellProxy` wraps `org.eclipse.swt.widgets.Shell` - `Glimmer::SWT:TabItemProxy` wraps `org.eclipse.swt.widget.TabItem` (also adds a composite to enable adding content under tab items directly in Glimmer) - `Glimmer::SWT:LayoutProxy` wraps all descendants of `org.eclipse.swt.widget.Layout` - `Glimmer::SWT:LayoutDataProxy` wraps all layout data objects -- `Glimmer::SWT:DisplayProxy` wraps `org.eclipse.swt.widget.Display` (manages displaying UI) +- `Glimmer::SWT:DisplayProxy` wraps `org.eclipse.swt.widget.Display` (manages displaying GUI) - `Glimmer::SWT:ColorProxy` wraps `org.eclipse.swt.graphics.Color` - `Glimmer::SWT:FontProxy` wraps `org.eclipse.swt.graphics.Font` - `Glimmer::SWT::WidgetListenerProxy` wraps all widget listeners These proxy objects have an API and provide some convenience methods, some of which are mentioned below. @@ -1403,11 +1407,11 @@ @shell.open ``` The shell declared above has been modified so that the minimize button works just like the close button. Once you minimize the shell (iconify it), it closes. -The alternative syntax can be helpful if you prefer to separate Glimmer observer declarations from Glimmer UI declarations, or would like to add observers dynamically based on some logic later on. +The alternative syntax can be helpful if you prefer to separate Glimmer observer declarations from Glimmer GUI declarations, or would like to add observers dynamically based on some logic later on. #### Observing Models Glimmer DSL includes an `observe` keyword used to register an observer by passing in the observable and the property(ies) to observe, and then specifying in a block what happens on notification. @@ -1937,11 +1941,11 @@ - Widget arguments are always wrapped inside parentheses - Widget properties are declared with underscored lowercase versions of the SWT properties - Widget property declarations always have arguments and never take a block - Widget property arguments are never wrapped inside parentheses - Widget listeners are always declared starting with `on_` prefix and affixing listener event method name afterwards in underscored lowercase form -- Widget listeners are always followed by a block using curly braces (Only when declared in DSL. When invoked on widget object directly outside of UI declarations, standard Ruby conventions apply) +- Widget listeners are always followed by a block using curly braces (Only when declared in DSL. When invoked on widget object directly outside of GUI declarations, standard Ruby conventions apply) - Data-binding is done via `bind` keyword, which always takes arguments wrapped in parentheses - Custom widget body, before_body, and after_body blocks open their blocks and close them with curly braces. - Custom widgets receive additional arguments to SWT style called options. These are passed as the last argument inside the parentheses, a hash of option names pointing to values. ## Samples @@ -2281,11 +2285,13 @@ [CONTRIBUTING.md](CONTRIBUTING.md) ## Contributors -* Andy Maleh (Founder) -* Dennis Theisen +* [Andy Maleh](https://github.com/AndyObtiva) (Founder) +* [Dennis Theisen](https://github.com/Soleone) (Contributor) + +[Click here to view contributor commits.](https://github.com/AndyObtiva/glimmer/graphs/contributors) ## License Copyright (c) 2007-2020 Andy Maleh. See LICENSE.txt for further details.