swing 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +24 -0
- data/HISTORY +7 -0
- data/LICENSE +20 -0
- data/README.rdoc +34 -0
- data/Rakefile +25 -0
- data/VERSION +1 -0
- data/bin/swing +13 -0
- data/features/step_definitions/swing_steps.rb +0 -0
- data/features/support/env.rb +10 -0
- data/features/support/world.rb +12 -0
- data/features/swing.feature +9 -0
- data/lib/swing/action_listener.rb +22 -0
- data/lib/swing/attr_setter.rb +73 -0
- data/lib/swing/controls.rb +47 -0
- data/lib/swing/frame.rb +33 -0
- data/lib/swing/list.rb +19 -0
- data/lib/swing/menus.rb +55 -0
- data/lib/swing/panel.rb +21 -0
- data/lib/swing/scroll_pane.rb +22 -0
- data/lib/swing/split_pane.rb +23 -0
- data/lib/swing/table.rb +65 -0
- data/lib/swing.rb +23 -0
- data/lib/version.rb +8 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/swing_spec.rb +7 -0
- data/tasks/common.rake +18 -0
- data/tasks/doc.rake +14 -0
- data/tasks/gem.rake +40 -0
- data/tasks/git.rake +34 -0
- data/tasks/spec.rake +16 -0
- data/tasks/version.rake +71 -0
- metadata +117 -0
data/.gitignore
ADDED
data/HISTORY
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Arvicco
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
= swing
|
2
|
+
by: Arvicco
|
3
|
+
url: http://github.com/arvicco/swing
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Straightforward wrappers for javax.swing Components that simplify Swing code in
|
8
|
+
JRuby-based GUI applications.
|
9
|
+
|
10
|
+
== FEATURES/PROBLEMS:
|
11
|
+
|
12
|
+
* Library defines Ruby wrapper classes for Swing components that do NOT shadow original
|
13
|
+
javax.swing classes. So, javax.swing.JButton class is wrapped by Swing::Button class,
|
14
|
+
and you need to <b> require 'swing/button' </b> to use it.
|
15
|
+
* Ruby wrappers define properties that are settable in constructor options, as well
|
16
|
+
as (optional) defaults for them that may be different from swing's original defaults:
|
17
|
+
Swing::Button.new 'Title', :enabled => false
|
18
|
+
*
|
19
|
+
|
20
|
+
== SYNOPSIS:
|
21
|
+
|
22
|
+
FIXME (code sample of usage)
|
23
|
+
|
24
|
+
== REQUIREMENTS:
|
25
|
+
|
26
|
+
* FIXME (list of requirements)
|
27
|
+
|
28
|
+
== INSTALL:
|
29
|
+
|
30
|
+
$ sudo gem install swing
|
31
|
+
|
32
|
+
== LICENSE:
|
33
|
+
|
34
|
+
Copyright (c) 2011 Arvicco. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
begin
|
2
|
+
require 'rake'
|
3
|
+
rescue LoadError
|
4
|
+
require 'rubygems'
|
5
|
+
gem 'rake', '~> 0.8.3.1'
|
6
|
+
require 'rake'
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
|
11
|
+
BASE_PATH = Pathname.new(__FILE__).dirname
|
12
|
+
LIB_PATH = BASE_PATH + 'lib'
|
13
|
+
PKG_PATH = BASE_PATH + 'pkg'
|
14
|
+
DOC_PATH = BASE_PATH + 'rdoc'
|
15
|
+
|
16
|
+
$LOAD_PATH.unshift LIB_PATH.to_s
|
17
|
+
require 'version'
|
18
|
+
|
19
|
+
NAME = 'swing'
|
20
|
+
CLASS_NAME = Swing
|
21
|
+
|
22
|
+
# Load rakefile tasks
|
23
|
+
Dir['tasks/*.rake'].sort.each { |file| load file }
|
24
|
+
|
25
|
+
# Project-specific tasks
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/bin/swing
ADDED
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
include Java
|
2
|
+
|
3
|
+
module Clients
|
4
|
+
|
5
|
+
module SwingGui
|
6
|
+
# Class that implements ActionListener interface around a given block
|
7
|
+
class ActionListener
|
8
|
+
java_implements java.awt.event.ActionListener
|
9
|
+
|
10
|
+
def initialize &block
|
11
|
+
@action_block = block
|
12
|
+
end
|
13
|
+
|
14
|
+
java_signature 'public void actionPerformed(ActionEvent event)'
|
15
|
+
# from ActionListener interface: Invoked when an action event occurs.
|
16
|
+
def actionPerformed event
|
17
|
+
@action_block.call event
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,73 @@
|
|
1
|
+
include Java
|
2
|
+
|
3
|
+
import java.awt.Dimension
|
4
|
+
|
5
|
+
# Module allows including classes to receive attribute values in an *opts* Hash
|
6
|
+
# and sets those attributes after object initialization
|
7
|
+
module AttrSetter
|
8
|
+
def self.dim_proc default = nil
|
9
|
+
proc do |*args|
|
10
|
+
case args.size
|
11
|
+
when 2
|
12
|
+
Dimension.new *args
|
13
|
+
when 1
|
14
|
+
case args.first
|
15
|
+
when Dimension
|
16
|
+
args.first
|
17
|
+
when String
|
18
|
+
Dimension.new *args.first.split(/x|-|:/, 2)
|
19
|
+
end
|
20
|
+
when 0
|
21
|
+
Dimension.new *default unless default.nil?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.included host
|
27
|
+
host.send :extend, ClassMethods
|
28
|
+
host.attr_setter :font,
|
29
|
+
:tool_tip_text,
|
30
|
+
:preferred_size => dim_proc,
|
31
|
+
:minimum_size => dim_proc,
|
32
|
+
:maximum_size => dim_proc
|
33
|
+
end
|
34
|
+
|
35
|
+
module ClassMethods
|
36
|
+
def attributes
|
37
|
+
@attributes ||= (superclass.attributes.dup rescue {})
|
38
|
+
end
|
39
|
+
|
40
|
+
# Adds settable attributes for a given class, possibly with defaults
|
41
|
+
# If defaults are given for attributes, they should be put at the end (as opts)
|
42
|
+
def attr_setter *new_attributes
|
43
|
+
if new_attributes.last.is_a? Hash
|
44
|
+
# Some attributes are given with defaults
|
45
|
+
new_attributes_with_defaults = new_attributes.pop
|
46
|
+
new_attributes_with_defaults.each { |name, default| attributes[name] = default }
|
47
|
+
end
|
48
|
+
new_attributes.each { |name| attributes[name] = nil }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Sets attributes after yielding to a given block (usually to call super).
|
53
|
+
# Use this method to wrap super call to *ORIGINAL* J... object, exactly
|
54
|
+
# once per each derived view hierarchy. TODO: better way?
|
55
|
+
#
|
56
|
+
def set_attributes opts
|
57
|
+
# Extract known attributes given in opts, to be set after object initialization
|
58
|
+
attributes = self.class.attributes.map do |name, default|
|
59
|
+
value = opts.delete name
|
60
|
+
result = if default.nil? # No default, return whatever value
|
61
|
+
value
|
62
|
+
elsif default.respond_to? :call # Default is callable, call it with whatever value
|
63
|
+
default.call *value
|
64
|
+
else # Return either non-nil value or default
|
65
|
+
value.nil? ? default : value
|
66
|
+
end
|
67
|
+
[name, result] if result
|
68
|
+
end.compact
|
69
|
+
yield opts if block_given?
|
70
|
+
attributes.each { |(name, value)| send "#{name}=", *value }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'swing/action_listener'
|
2
|
+
require 'swing/attr_setter'
|
3
|
+
|
4
|
+
module Clients
|
5
|
+
|
6
|
+
# Swing-based GUI controls
|
7
|
+
module SwingGui
|
8
|
+
|
9
|
+
class Button < javax.swing.JButton
|
10
|
+
include AttrSetter
|
11
|
+
|
12
|
+
attr_setter :enabled
|
13
|
+
|
14
|
+
def initialize text, opts = {}, &block
|
15
|
+
set_attributes(opts) { super(text) }
|
16
|
+
|
17
|
+
self.addActionListener ActionListener.new &block
|
18
|
+
|
19
|
+
opts[:parent].add self if opts[:parent]
|
20
|
+
end
|
21
|
+
end # class Button
|
22
|
+
|
23
|
+
class CheckBox < javax.swing.JCheckBox
|
24
|
+
include AttrSetter
|
25
|
+
|
26
|
+
attr_setter :selected
|
27
|
+
|
28
|
+
def initialize text, opts = {}, &block
|
29
|
+
set_attributes(opts) { super(text) }
|
30
|
+
|
31
|
+
# TODO: Probably need to implement ItemListener as well?
|
32
|
+
self.addActionListener ActionListener.new &block
|
33
|
+
|
34
|
+
opts[:parent].add self if opts[:parent]
|
35
|
+
end
|
36
|
+
end # class CheckBox
|
37
|
+
|
38
|
+
class Label < javax.swing.JLabel
|
39
|
+
include AttrSetter
|
40
|
+
|
41
|
+
def initialize text, opts = {}, &block
|
42
|
+
set_attributes(opts) { super(text) }
|
43
|
+
opts[:parent].add self if opts[:parent]
|
44
|
+
end
|
45
|
+
end # class Label
|
46
|
+
end
|
47
|
+
end
|
data/lib/swing/frame.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'swing/attr_setter'
|
2
|
+
|
3
|
+
import javax.swing.JFrame
|
4
|
+
|
5
|
+
module Clients
|
6
|
+
|
7
|
+
# Swing-based GUI controls
|
8
|
+
module SwingGui
|
9
|
+
|
10
|
+
class Frame < JFrame
|
11
|
+
include AttrSetter
|
12
|
+
|
13
|
+
attr_setter :layout, :background, :size, :title,
|
14
|
+
:default_close_operation => JFrame::EXIT_ON_CLOSE #DISPOSE_ON_CLOSE, HIDE_ON_CLOSE
|
15
|
+
|
16
|
+
def initialize name, opts = {}
|
17
|
+
|
18
|
+
set_attributes(opts) { super(name) }
|
19
|
+
|
20
|
+
setup opts
|
21
|
+
|
22
|
+
self.location_relative_to = nil
|
23
|
+
self.visible = true
|
24
|
+
end
|
25
|
+
|
26
|
+
# Method that subclasses should override to set up their contents before
|
27
|
+
# Frame is made visible
|
28
|
+
def setup opts
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
data/lib/swing/list.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'swing/attr_setter'
|
2
|
+
|
3
|
+
module Clients
|
4
|
+
|
5
|
+
# Swing-based GUI controls
|
6
|
+
module SwingGui
|
7
|
+
|
8
|
+
class List < javax.swing.JList
|
9
|
+
include AttrSetter
|
10
|
+
|
11
|
+
def initialize model, opts = {}
|
12
|
+
set_attributes(opts) {super(model)}
|
13
|
+
|
14
|
+
opts[:parent].add self if opts[:parent]
|
15
|
+
end
|
16
|
+
end # class List
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
data/lib/swing/menus.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'swing/action_listener'
|
2
|
+
require 'swing/attr_setter'
|
3
|
+
|
4
|
+
module Clients
|
5
|
+
|
6
|
+
# Swing-based Menu elements
|
7
|
+
module SwingGui
|
8
|
+
|
9
|
+
class MenuBar < javax.swing.JMenuBar
|
10
|
+
include AttrSetter
|
11
|
+
|
12
|
+
def initialize opts = {}
|
13
|
+
set_attributes(opts) { super() }
|
14
|
+
|
15
|
+
if opts[:structure]
|
16
|
+
[opts[:structure]].flatten.each do |element|
|
17
|
+
case element
|
18
|
+
when Hash # Hash defines menu structure
|
19
|
+
element.each do |menu_name, menu_structure|
|
20
|
+
menu = Menu.new menu_name.to_s, :parent => self
|
21
|
+
menu_structure.each do |item_name, item_action|
|
22
|
+
MenuItem.new item_name.to_s, :parent => menu, &item_action
|
23
|
+
end
|
24
|
+
end
|
25
|
+
else
|
26
|
+
self.add element
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
opts[:parent].setJMenuBar self if opts[:parent]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Menu < javax.swing.JMenu
|
35
|
+
include AttrSetter
|
36
|
+
|
37
|
+
def initialize text, opts = {}
|
38
|
+
set_attributes(opts) { super text }
|
39
|
+
opts[:parent].add self if opts[:parent]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class MenuItem < javax.swing.JMenuItem
|
44
|
+
include AttrSetter
|
45
|
+
|
46
|
+
def initialize text, opts = {}, &block
|
47
|
+
set_attributes(opts) { super text }
|
48
|
+
self.addActionListener ActionListener.new &block
|
49
|
+
opts[:parent].add self if opts[:parent]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
data/lib/swing/panel.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'swing/attr_setter'
|
2
|
+
|
3
|
+
module Clients
|
4
|
+
|
5
|
+
# Swing-based GUI controls
|
6
|
+
module SwingGui
|
7
|
+
|
8
|
+
class Panel < javax.swing.JPanel
|
9
|
+
include AttrSetter
|
10
|
+
|
11
|
+
attr_setter :layout, :background
|
12
|
+
|
13
|
+
def initialize opts = {}
|
14
|
+
set_attributes(opts) {super()}
|
15
|
+
|
16
|
+
opts[:parent].add self if opts[:parent]
|
17
|
+
end
|
18
|
+
end # class Panel
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'swing/attr_setter'
|
2
|
+
|
3
|
+
module Clients
|
4
|
+
|
5
|
+
# Swing-based GUI controls
|
6
|
+
module SwingGui
|
7
|
+
|
8
|
+
# Scroll Pane around given scrollable component
|
9
|
+
class ScrollPane < javax.swing.JScrollPane
|
10
|
+
include AttrSetter
|
11
|
+
|
12
|
+
attr_setter :horizontal_scroll_bar_policy, :vertical_scroll_bar_policy
|
13
|
+
|
14
|
+
def initialize component, opts = {}
|
15
|
+
set_attributes(opts) { super(component) }
|
16
|
+
|
17
|
+
opts[:parent].add self if opts[:parent]
|
18
|
+
end
|
19
|
+
end # class Panel
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'swing/attr_setter'
|
2
|
+
import javax.swing.JSplitPane
|
3
|
+
|
4
|
+
module Clients
|
5
|
+
|
6
|
+
# Swing-based GUI controls
|
7
|
+
module SwingGui
|
8
|
+
|
9
|
+
class SplitPane < JSplitPane
|
10
|
+
include AttrSetter
|
11
|
+
|
12
|
+
attr_setter :one_touch_expandable, :orientation, :continuous_layout,
|
13
|
+
:divider_size, :divider_location, :resize_weight
|
14
|
+
|
15
|
+
def initialize first, second, opts = {}
|
16
|
+
set_attributes(opts) { super(JSplitPane::HORIZONTAL_SPLIT, first, second) }
|
17
|
+
|
18
|
+
opts[:parent].add self if opts[:parent]
|
19
|
+
end
|
20
|
+
end # class Panel
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
data/lib/swing/table.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'swing/attr_setter'
|
2
|
+
|
3
|
+
module Clients
|
4
|
+
|
5
|
+
# Swing-based GUI controls
|
6
|
+
module SwingGui
|
7
|
+
|
8
|
+
class Table < javax.swing.JTable
|
9
|
+
include AttrSetter
|
10
|
+
|
11
|
+
# autoCreateColumnsFromModel boolean � � false
|
12
|
+
# autoResizeMode int � � AUTO_RESIZE_ALL_COLUMNS
|
13
|
+
# columnModel TableColumnModel � � DefaultTableColumnModel( )
|
14
|
+
# model TableModel � � DefaultTableModel( )
|
15
|
+
# rowHeight int � � 16
|
16
|
+
# cellSelectionEnabled boolean � � false
|
17
|
+
# columnSelectionAllowed boolean � � false
|
18
|
+
# rowSelectionAllowed boolean � � true
|
19
|
+
# selectionMode int � MULTIPLE_INTERVAL_SELECTION
|
20
|
+
# selectionModel ListSelectionModel � � DefaultListSelectionModel
|
21
|
+
# cellEditor TableCellEditor � � null
|
22
|
+
# dragEnabled boolean � � false
|
23
|
+
# gridColor Color � � From L&F
|
24
|
+
# intercellSpacing Dimension � � Dimension(1, 1)
|
25
|
+
# preferredScrollableViewportSize Dimension � � Dimension(450, 400)
|
26
|
+
# rowMargin int � � 1
|
27
|
+
# selectionBackground Color � � From L&F
|
28
|
+
# selectionForeground Color � � From L&F
|
29
|
+
# showGrid boolean � true
|
30
|
+
# showHorizontalLines boolean � � true
|
31
|
+
# showVerticalLines boolean � � true
|
32
|
+
# tableHeader JTableHeader � � JTableHeader(column-Model)
|
33
|
+
# ----Getters only - NO Setters!
|
34
|
+
# columnCount int � 0
|
35
|
+
# rowCount int � 0
|
36
|
+
# selectedColumn int � -1
|
37
|
+
# selectedColumnCount int � 0
|
38
|
+
# selectedColumns int[] � int[0]
|
39
|
+
# selectedRow int � -1
|
40
|
+
# selectedRowCount int � 0
|
41
|
+
# selectedRows int[] � int[0]
|
42
|
+
# accessibleContext AccessibleContext � JTable.AccessibleJTable
|
43
|
+
# scrollableTracksViewportHeighto boolean � false
|
44
|
+
# scrollableTracksViewportWidtho boolean � false
|
45
|
+
|
46
|
+
attr_setter :auto_create_columns_from_model, :auto_resize_mode, :row_height,
|
47
|
+
:model, :column_model, :selection_model,
|
48
|
+
:drag_enabled, :cell_editor, :grid_color, :intercell_spacing,
|
49
|
+
:preferred_scrollable_viewport_size, :row_margin,
|
50
|
+
:selection_background, :selection_foreground, :show_grid,
|
51
|
+
:show_horizontal_lines, :show_vertical_lines, :table_header,
|
52
|
+
:selection_mode => javax.swing.ListSelectionModel::SINGLE_SELECTION,
|
53
|
+
:cell_selection_enabled => true,
|
54
|
+
:row_selection_allowed => false,
|
55
|
+
:column_selection_allowed => false
|
56
|
+
|
57
|
+
def initialize rows, columns, opts = {}
|
58
|
+
set_attributes(opts) { super rows, columns }
|
59
|
+
|
60
|
+
opts[:parent].add self if opts[:parent]
|
61
|
+
end
|
62
|
+
end # class Table
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
data/lib/swing.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'version'
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
module Swing
|
5
|
+
|
6
|
+
# Requires ruby source file(s), given as single filename/glob or Array of filenames/globs.
|
7
|
+
# Accepts following options:
|
8
|
+
# :*file*:: Lib(s) required relative to this file - defaults to __FILE__
|
9
|
+
# :*dir*:: Required lib(s) located under this dir name - defaults to gem name
|
10
|
+
#
|
11
|
+
def self.require_libs( libs, opts={} )
|
12
|
+
file = Pathname.new(opts[:file] || __FILE__)
|
13
|
+
[libs].flatten.each do |lib|
|
14
|
+
name = file.dirname + (opts[:dir] || file.basename('.*')) + lib.gsub(/(?<!.rb)$/, '.rb')
|
15
|
+
Pathname.glob(name.to_s).sort.each {|rb| require rb}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end # module Swing
|
19
|
+
|
20
|
+
# Require all ruby source files located under directory lib/swing
|
21
|
+
# If you need files in specific order, you should specify it here before the glob
|
22
|
+
Swing.require_libs %W[**/*]
|
23
|
+
|
data/lib/version.rb
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'swing'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
require 'bundler'
|
5
|
+
Bundler.setup
|
6
|
+
Bundler.require :test
|
7
|
+
|
8
|
+
BASE_PATH = Pathname.new(__FILE__).dirname + '..'
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
# config.exclusion_filter = { :slow => true }
|
12
|
+
# config.filter = { :focus => true }
|
13
|
+
# config.include(UserExampleHelpers)
|
14
|
+
# config.mock_with :mocha
|
15
|
+
# config.mock_with :flexmock
|
16
|
+
# config.mock_with :rr
|
17
|
+
end
|
18
|
+
|
19
|
+
module SwingTest
|
20
|
+
|
21
|
+
end # module SwingTest
|
data/spec/swing_spec.rb
ADDED
data/tasks/common.rake
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#task :default => 'test:run'
|
2
|
+
#task 'gem:release' => 'test:run'
|
3
|
+
|
4
|
+
task :notes do
|
5
|
+
puts 'Output annotations (TBD)'
|
6
|
+
end
|
7
|
+
|
8
|
+
#Bundler not ready for prime time just yet
|
9
|
+
#desc 'Bundle dependencies'
|
10
|
+
#task :bundle do
|
11
|
+
# output = `bundle check 2>&1`
|
12
|
+
#
|
13
|
+
# unless $?.to_i == 0
|
14
|
+
# puts output
|
15
|
+
# system "bundle install"
|
16
|
+
# puts
|
17
|
+
# end
|
18
|
+
#end
|
data/tasks/doc.rake
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
desc 'Alias to doc:rdoc'
|
2
|
+
task :doc => 'doc:rdoc'
|
3
|
+
|
4
|
+
namespace :doc do
|
5
|
+
require 'rake/rdoctask'
|
6
|
+
Rake::RDocTask.new do |rdoc|
|
7
|
+
# Rake::RDocTask.new(:rdoc => "rdoc", :clobber_rdoc => "clobber", :rerdoc => "rerdoc") do |rdoc|
|
8
|
+
rdoc.rdoc_dir = DOC_PATH.basename.to_s
|
9
|
+
rdoc.title = "#{NAME} #{CLASS_NAME::VERSION} Documentation"
|
10
|
+
rdoc.main = "README.doc"
|
11
|
+
rdoc.rdoc_files.include('README*')
|
12
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
13
|
+
end
|
14
|
+
end
|
data/tasks/gem.rake
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
desc "Alias to gem:release"
|
2
|
+
task :release => 'gem:release'
|
3
|
+
|
4
|
+
desc "Alias to gem:install"
|
5
|
+
task :install => 'gem:install'
|
6
|
+
|
7
|
+
desc "Alias to gem:build"
|
8
|
+
task :gem => 'gem:build'
|
9
|
+
|
10
|
+
namespace :gem do
|
11
|
+
gem_file = "#{NAME}-#{CLASS_NAME::VERSION}.gem"
|
12
|
+
|
13
|
+
desc "(Re-)Build gem"
|
14
|
+
task :build do
|
15
|
+
puts "Remove existing gem package"
|
16
|
+
rm_rf PKG_PATH
|
17
|
+
puts "Build new gem package"
|
18
|
+
system "gem build #{NAME}.gemspec"
|
19
|
+
puts "Move built gem to package dir"
|
20
|
+
mkdir_p PKG_PATH
|
21
|
+
mv gem_file, PKG_PATH
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "Cleanup already installed gem(s)"
|
25
|
+
task :cleanup do
|
26
|
+
puts "Cleaning up installed gem(s)"
|
27
|
+
system "gem cleanup #{NAME}"
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Build and install gem"
|
31
|
+
task :install => :build do
|
32
|
+
system "gem install #{PKG_PATH}/#{gem_file}"
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Build and push gem to Gemcutter"
|
36
|
+
task :release => [:build, 'git:tag'] do
|
37
|
+
puts "Pushing gem to Gemcutter"
|
38
|
+
system "gem push #{PKG_PATH}/#{gem_file}"
|
39
|
+
end
|
40
|
+
end
|
data/tasks/git.rake
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
desc "Alias to git:commit"
|
2
|
+
task :git => 'git:commit'
|
3
|
+
|
4
|
+
namespace :git do
|
5
|
+
|
6
|
+
desc "Stage and commit your work [with message]"
|
7
|
+
task :commit, [:message] do |t, args|
|
8
|
+
puts "Staging new (unversioned) files"
|
9
|
+
system "git add --all"
|
10
|
+
if args.message
|
11
|
+
puts "Committing with message: #{args.message}"
|
12
|
+
system %Q[git commit -a -m "#{args.message}" --author arvicco]
|
13
|
+
else
|
14
|
+
puts "Committing"
|
15
|
+
system %Q[git commit -a -m "No message" --author arvicco]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "Push local changes to Github"
|
20
|
+
task :push => :commit do
|
21
|
+
puts "Pushing local changes to remote"
|
22
|
+
system "git push"
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Create (release) tag on Github"
|
26
|
+
task :tag => :push do
|
27
|
+
tag = CLASS_NAME::VERSION
|
28
|
+
puts "Creating git tag: #{tag}"
|
29
|
+
system %Q{git tag -a -m "Release tag #{tag}" #{tag}}
|
30
|
+
puts "Pushing #{tag} to remote"
|
31
|
+
system "git push origin #{tag}"
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
data/tasks/spec.rake
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
desc 'Alias to spec:spec'
|
2
|
+
task :spec => 'spec:spec'
|
3
|
+
|
4
|
+
namespace :spec do
|
5
|
+
# require 'spec/rake/spectask'
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
|
8
|
+
desc "Run all specs"
|
9
|
+
RSpec::Core::RakeTask.new(:spec){|task|}
|
10
|
+
|
11
|
+
desc "Run specs with RCov"
|
12
|
+
RSpec::Core::RakeTask.new(:rcov) do |task|
|
13
|
+
task.rcov = true
|
14
|
+
task.rcov_opts = ['--exclude', 'spec']
|
15
|
+
end
|
16
|
+
end
|
data/tasks/version.rake
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
class Version
|
2
|
+
attr_accessor :major, :minor, :patch, :build
|
3
|
+
|
4
|
+
def initialize(version_string)
|
5
|
+
raise "Invalid version #{version_string}" unless version_string =~ /^(\d+)\.(\d+)\.(\d+)(?:\.(.*?))?$/
|
6
|
+
@major = $1.to_i
|
7
|
+
@minor = $2.to_i
|
8
|
+
@patch = $3.to_i
|
9
|
+
@build = $4
|
10
|
+
end
|
11
|
+
|
12
|
+
def bump_major(x)
|
13
|
+
@major += x.to_i
|
14
|
+
@minor = 0
|
15
|
+
@patch = 0
|
16
|
+
@build = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def bump_minor(x)
|
20
|
+
@minor += x.to_i
|
21
|
+
@patch = 0
|
22
|
+
@build = nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def bump_patch(x)
|
26
|
+
@patch += x.to_i
|
27
|
+
@build = nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def update(major, minor, patch, build=nil)
|
31
|
+
@major = major
|
32
|
+
@minor = minor
|
33
|
+
@patch = patch
|
34
|
+
@build = build
|
35
|
+
end
|
36
|
+
|
37
|
+
def write(desc = nil)
|
38
|
+
CLASS_NAME::VERSION_FILE.open('w') {|file| file.puts to_s }
|
39
|
+
(BASE_PATH + 'HISTORY').open('a') do |file|
|
40
|
+
file.puts "\n== #{to_s} / #{Time.now.strftime '%Y-%m-%d'}\n"
|
41
|
+
file.puts "\n* #{desc}\n" if desc
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def to_s
|
46
|
+
[major, minor, patch, build].compact.join('.')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
desc 'Set version: [x.y.z] - explicitly, [1/10/100] - bump major/minor/patch, [.build] - build'
|
51
|
+
task :version, [:command, :desc] do |t, args|
|
52
|
+
version = Version.new(CLASS_NAME::VERSION)
|
53
|
+
case args.command
|
54
|
+
when /^(\d+)\.(\d+)\.(\d+)(?:\.(.*?))?$/ # Set version explicitly
|
55
|
+
version.update($1, $2, $3, $4)
|
56
|
+
when /^\.(.*?)$/ # Set build
|
57
|
+
version.build = $1
|
58
|
+
when /^(\d{1})$/ # Bump patch
|
59
|
+
version.bump_patch $1
|
60
|
+
when /^(\d{1})0$/ # Bump minor
|
61
|
+
version.bump_minor $1
|
62
|
+
when /^(\d{1})00$/ # Bump major
|
63
|
+
version.bump_major $1
|
64
|
+
else # Unknown command, just display VERSION
|
65
|
+
puts "#{NAME} #{version}"
|
66
|
+
next
|
67
|
+
end
|
68
|
+
|
69
|
+
puts "Writing version #{version} to VERSION file"
|
70
|
+
version.write args.desc
|
71
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: swing
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- arvicco
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-05-21 00:00:00 +04:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: rspec
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 2.0.0
|
25
|
+
type: :development
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 1.0.0
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
description: |-
|
39
|
+
Straightforward wrappers for javax.swing Components that simplify Swing code in
|
40
|
+
JRuby-based GUI applications
|
41
|
+
email: arvitallian@gmail.com
|
42
|
+
executables:
|
43
|
+
- swing
|
44
|
+
extensions: []
|
45
|
+
|
46
|
+
extra_rdoc_files:
|
47
|
+
- LICENSE
|
48
|
+
- HISTORY
|
49
|
+
- README.rdoc
|
50
|
+
files:
|
51
|
+
- bin/swing
|
52
|
+
- lib/swing.rb
|
53
|
+
- lib/version.rb
|
54
|
+
- lib/swing/action_listener.rb
|
55
|
+
- lib/swing/attr_setter.rb
|
56
|
+
- lib/swing/controls.rb
|
57
|
+
- lib/swing/frame.rb
|
58
|
+
- lib/swing/list.rb
|
59
|
+
- lib/swing/menus.rb
|
60
|
+
- lib/swing/panel.rb
|
61
|
+
- lib/swing/scroll_pane.rb
|
62
|
+
- lib/swing/split_pane.rb
|
63
|
+
- lib/swing/table.rb
|
64
|
+
- spec/spec_helper.rb
|
65
|
+
- spec/swing_spec.rb
|
66
|
+
- features/swing.feature
|
67
|
+
- features/step_definitions/swing_steps.rb
|
68
|
+
- features/support/env.rb
|
69
|
+
- features/support/world.rb
|
70
|
+
- tasks/common.rake
|
71
|
+
- tasks/doc.rake
|
72
|
+
- tasks/gem.rake
|
73
|
+
- tasks/git.rake
|
74
|
+
- tasks/spec.rake
|
75
|
+
- tasks/version.rake
|
76
|
+
- Rakefile
|
77
|
+
- README.rdoc
|
78
|
+
- LICENSE
|
79
|
+
- VERSION
|
80
|
+
- HISTORY
|
81
|
+
- .gitignore
|
82
|
+
has_rdoc: true
|
83
|
+
homepage: http://github.com/arvicco/swing
|
84
|
+
licenses: []
|
85
|
+
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options:
|
88
|
+
- --charset
|
89
|
+
- UTF-8
|
90
|
+
- --main
|
91
|
+
- README.rdoc
|
92
|
+
- --title
|
93
|
+
- swing
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: "0"
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: "0"
|
108
|
+
requirements: []
|
109
|
+
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 1.5.1
|
112
|
+
signing_key:
|
113
|
+
specification_version: 3
|
114
|
+
summary: Straightforward wrappers for javax.swing Components
|
115
|
+
test_files:
|
116
|
+
- spec/spec_helper.rb
|
117
|
+
- spec/swing_spec.rb
|