The Nebula Project is a collection of enterprise-grade high-quality SWT (Standard Widget Toolkit) custom widgets, made available for use with Glimmer DSL for SWT.
Project version numbers are in sync with the Nebula Project version (currently 2.5.0). The first 3 numbers represent the Nebula Project version. The last 2 numbers represent the minor and patch numbers of this Ruby gem.
This gem imports all of the Nebula Project custom widgets by default. If you prefer to bring in a single custom widget or just a few piecemeal, you can change the configuration or alternatively use one of the standalone Nebula custom widget gems like glimmer-cw-cdatetime-nebula by running the glimmer list:gems:customwidget
command.
Here is a list of custom widgets taken from the Nebula Project Official Website.
Used in Are We There Yet?
This is a richer alternative to the table
widget.
This is a richer alternative to the styled_text
widget with some caveats (uses the browser
widget behind the scenes).
This is a richer alternative to the tree
widget.
This is a richer alternative to the built-in dialog
widget.
This shows memory usage in an application's Java Virtual Machine.
This is a richer alternative to the built-in slider
widget.
This is an alternative to the combo
widget.
This is an alternative to the checkbox
widget (aka check
or button(:check)
widget).
A higher-performant alternative to the built-in table
widget.
This gem includes the Nebula Project JAR files, so you just need to install the gem to get started.
gem 'glimmer-cw-nebula', '~> 2.5.0.0.0'
gem install glimmer-cw-nebula
Add the following require statement on top of your code (glimmer-dsl-swt
gets required automatically as part of it):
require 'glimmer-cw-nebula'
This imports all of the Nebula Project custom widgets. You can optionally bring in only the custom widgets you need through configuration.
Otherwise, just like with SWT widgets, you may use lowercase underscored keywords for Nebula custom widgets in Glimmer DSL for SWT.
Examples:
gantt_chart
(for GanttChart)progress_circle
(for ProgressCircle)password_revealer
(for PasswordRevealer)
For more details on what custom widgets are included in the Nebula Project, check out the official documentation below.
Nebula Project Official Website
Nebula Project Official Javadoc
By default, this gem brings in all of the Nebula custom widgets. They are basically all the libraries that live under the gem's vendor/nebula directory minus the version number / file extension:
Packages:
org.eclipse.nebula.widgets.opal.heapmanager
org.eclipse.nebula.widgets.carousel
org.eclipse.nebula.widgets.badgedlabel
org.eclipse.nebula.widgets.passwordrevealer
org.eclipse.nebula.widgets.progresscircle
org.eclipse.nebula.widgets.opal.starrating
org.eclipse.nebula.widgets.opal.checkboxgroup
org.eclipse.nebula.widgets.opal.calculator
org.eclipse.nebula.widgets.xviewer
org.eclipse.nebula.widgets.floatingtext
org.eclipse.nebula.widgets.opal.dialog
org.eclipse.nebula.widgets.geomap
org.eclipse.nebula.widgets.richtext
org.eclipse.nebula.widgets.ganttchart
org.eclipse.nebula.widgets.chips
org.eclipse.nebula.widgets.segmentedbar
org.eclipse.nebula.paperclips.widgets
org.eclipse.nebula.widgets.opal.multichoice
org.eclipse.nebula.widgets.opal.preferencewindow
org.eclipse.nebula.widgets.splitbutton
org.eclipse.nebula.widgets.opal.switchbutton
org.eclipse.nebula.widgets.xviewer.core
org.eclipse.nebula.widgets.tablecombo
org.eclipse.nebula.paperclips.core
org.eclipse.nebula.widgets.pgroup
org.eclipse.nebula.widgets.cdatetime
org.eclipse.nebula.widgets.opal.launcher
org.eclipse.nebula.widgets.opal.propertytable
org.eclipse.nebula.widgets.opal.commons
org.eclipse.nebula.widgets.opal.textassist
org.eclipse.nebula.widgets.opal.duallist
org.eclipse.nebula.widgets.opal.rangeslider
org.eclipse.nebula.widgets.fontawesome
org.eclipse.nebula.widgets.roundedswitch
org.eclipse.nebula.widgets.opal.titledseparator
org.eclipse.nebula.widgets.stepbar
org.eclipse.nebula.cwt
org.eclipse.nebula.widgets.gallery
org.eclipse.nebula.widgets.pshelf
org.eclipse.nebula.effects.stw
org.eclipse.nebula.widgets.nebulaslider
org.eclipse.nebula.widgets.opal.header
org.eclipse.nebula.widgets.oscilloscope
org.eclipse.nebula.widgets.opal.notifier
org.eclipse.nebula.widgets.opal.promptsupport
org.eclipse.nebula.widgets.compositetable
org.eclipse.nebula.widgets.ctreecombo
org.eclipse.nebula.widgets.opal.panels
org.eclipse.nebula.widgets.opal.logindialog
org.eclipse.nebula.widgets.grid
org.eclipse.nebula.visualization.widgets
org.eclipse.nebula.widgets.opal.roundedtoolbar
org.eclipse.nebula.widgets.opal.columnbrowser
org.eclipse.nebula.widgets.opal.tipoftheday
org.eclipse.nebula.widgets.opal.horizontalspinner
org.eclipse.nebula.widgets.opal.breadcrumb
org.eclipse.nebula.widgets.led
To limit imported custom widgets, set one of the following variables before the gem require statment (require 'glimmer-cw-nebula'
):
ENV['NEBULA_SWT_PACKAGES']
environment variable: can hold a comma separated string list of multiple Nebula SWT packages (e.g.export NEBULA_SWT_PACKAGES="org.eclipse.nebula.widgets.led,org.eclipse.nebula.widgets.opal.breadcrumb"
).NEBULA_SWT_PACKAGES
Ruby constant: can hold an array of strings representing multiple Nebula SWT packages (e.g.NEBULA_SWT_PACKAGES = ['org.eclipse.nebula.widgets.led' , 'org.eclipse.nebula.widgets.opal.breadcrumb']
Run:
girb
Enter this code (assuming you have gem installed):
# require './lib/glimmer-cw-nebula' # if run locally from cloned project
require 'glimmer-cw-nebula'
include Glimmer
shell {
minimum_size 100, 100
progress_circle {
show_text true
selection 53
}
}.open
Note about widgets without a standard SWT (parent, style)
constructor:
Some Nebula widgets do not follow the SWT convention of always having a constructor that receives only the (parent, style)
arguments, like text_assist
as documented in the TextAssist Nebula widget page:
There is a big difference with other SWT widget : there is no constructor TextAssist(Composite parent, int style).
The only constructor available is public TextAssist(final Composite parent, final int style, final TextAssistContentProvider contentProvider)
In that case, you would have to pass all widget arguments manually in the Glimmer GUI DSL, so instead of simply adding a call to text_assist
, you would have to pass all its arguments, including its parent as in text_assist(parent, style, content_provider)
. Learn more in the example below.
Example:
require 'glimmer-dsl-swt'
require 'glimmer-cw-nebula'
class EuropeanCountryContentProvider < org.eclipse.nebula.widgets.opal.textassist.TextAssistContentProvider
EUROZONE = ["Austria", "Belgium", "Cyprus",
"Estonia", "Finland", "France", "Germany", "Greece", "Ireland", "Italy",
"Luxembourg", "Malta", "Netherlands", "Portugal", "Slovakia", "Slovenia", "Spain"]
def getContent(entry)
EUROZONE.select { |country| country.downcase.start_with?(entry.to_s.downcase) }
end
end
include Glimmer
shell { |shell_proxy|
text 'Text Assist Demo'
text_assist(shell_proxy.swt_widget, :none, EuropeanCountryContentProvider.new)
}.open
- Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
- Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
- Fork the project.
- Start a feature/bugfix branch.
- Commit and push until you are happy with your contribution.
- Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
- Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
Copyright (c) 2021 - Andy Maleh
--
Built for Glimmer DSL for SWT (JRuby Desktop Development GUI Framework).