rubeus 0.0.2-java → 0.0.3-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/examples/notepad.rb +33 -0
- data/examples/notepad.rtf +39 -0
- data/examples/rubeus_swing_example01.rb +40 -0
- data/examples/rubeus_swing_example01_with_class.rb +45 -0
- data/lib/rubeus.rb +1 -0
- data/lib/rubeus/awt.rb +5 -9
- data/lib/rubeus/component_loader.rb +73 -52
- data/lib/rubeus/extensions.rb +6 -0
- data/lib/rubeus/extensions/java.rb +5 -0
- data/lib/rubeus/extensions/java/awt.rb +4 -0
- data/lib/rubeus/{awt/extensions → extensions/java/awt}/component.rb +1 -1
- data/lib/rubeus/{awt/extensions → extensions/java/awt}/container.rb +1 -1
- data/lib/rubeus/{awt/extensions → extensions/java/awt}/dimension.rb +1 -2
- data/lib/rubeus/extensions/javax.rb +5 -0
- data/lib/rubeus/extensions/javax/swing.rb +4 -0
- data/lib/rubeus/{swing/extensions → extensions/javax/swing}/box_layout.rb +1 -1
- data/lib/rubeus/{swing/extensions → extensions/javax/swing}/j_applet.rb +1 -1
- data/lib/rubeus/{swing/extensions → extensions/javax/swing}/j_component.rb +1 -1
- data/lib/rubeus/{swing/extensions → extensions/javax/swing}/j_frame.rb +1 -1
- data/lib/rubeus/{swing/extensions → extensions/javax/swing}/j_panel.rb +1 -1
- data/lib/rubeus/{swing/extensions → extensions/javax/swing}/j_scroll_pane.rb +0 -0
- data/lib/rubeus/{swing/extensions → extensions/javax/swing}/j_split_pane.rb +0 -0
- data/lib/rubeus/{swing/extensions → extensions/javax/swing}/j_text_field.rb +0 -0
- data/lib/rubeus/{swing/extensions → extensions/javax/swing}/j_window.rb +0 -0
- data/lib/rubeus/swing.rb +8 -8
- metadata +22 -20
- data/lib/rubeus/awt/extensions.rb +0 -4
- data/lib/rubeus/swing/extensions.rb +0 -4
data/examples/notepad.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
include Java
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
gem 'rubeus'
|
5
|
+
require 'rubeus'
|
6
|
+
|
7
|
+
Rubeus::Swing.irb
|
8
|
+
|
9
|
+
import 'java.io.FileInputStream'
|
10
|
+
import 'java.io.FileOutputStream'
|
11
|
+
|
12
|
+
rtf_editor_kit = RTFEditorKit.new
|
13
|
+
|
14
|
+
JFrame.new('Notepad') do |frame|
|
15
|
+
JScrollPane.new do |pane|
|
16
|
+
pane.vertical_scroll_bar_policy = ScrollPaneConstants::VERTICAL_SCROLLBAR_AS_NEEDED
|
17
|
+
pane.horizontal_scroll_bar_policy = ScrollPaneConstants::HORIZONTAL_SCROLLBAR_NEVER
|
18
|
+
@text_pane = JTextPane.new
|
19
|
+
@text_pane.document = DefaultStyledDocument.new StyleContext.new
|
20
|
+
end
|
21
|
+
|
22
|
+
file_path = File.join(File.dirname(__FILE__), 'notepad.rtf')
|
23
|
+
rtf_editor_kit.read FileInputStream.new(file_path), @text_pane.document, 0
|
24
|
+
|
25
|
+
@text_pane.listen(:key, :key_released) do |event|
|
26
|
+
rtf_editor_kit.write FileOutputStream.new(file_path), @text_pane.document, 0, @text_pane.document.length
|
27
|
+
end
|
28
|
+
|
29
|
+
frame.default_close_operation = JFrame::EXIT_ON_CLOSE
|
30
|
+
frame.set_size(300, 200)
|
31
|
+
frame.set_location_relative_to(nil)
|
32
|
+
frame.visible = true
|
33
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
{\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf330
|
2
|
+
{\fonttbl\f0\fnil\fcharset128 HiraKakuPro-W3;}
|
3
|
+
{\colortbl;\red255\green255\blue255;\red255\green6\blue12;\red12\green21\blue237;\red237\green9\blue17;
|
4
|
+
\red179\green176\blue39;\red237\green12\blue9;}
|
5
|
+
\margl1440\margr1440\margb1800\margt1800\vieww9000\viewh8400\viewkind0
|
6
|
+
\deftab708
|
7
|
+
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardeftab708\ql\qnatural\pardirnatural
|
8
|
+
|
9
|
+
\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
|
10
|
+
\
|
11
|
+
\
|
12
|
+
|
13
|
+
\b\fs36 \cf2 \kerning1\expnd0\expndtw0 Rubeus
|
14
|
+
\b0\fs24 \cf0 \expnd0\expndtw0\kerning0
|
15
|
+
provides you an easy access to
|
16
|
+
\b\fs36 \cf3 \kerning1\expnd0\expndtw0 Java
|
17
|
+
\b0\fs24 \cf0 \expnd0\expndtw0\kerning0
|
18
|
+
objects from
|
19
|
+
\b\fs36 \cf4 \kerning1\expnd0\expndtw0 Ruby
|
20
|
+
\b0\fs24 \cf0 \expnd0\expndtw0\kerning0
|
21
|
+
scripts on
|
22
|
+
\b\fs36 \cf5 \kerning1\expnd0\expndtw0 JRuby
|
23
|
+
\b0\fs24 \cf0 \expnd0\expndtw0\kerning0
|
24
|
+
. Currently, we're working on Swing libralies. With
|
25
|
+
\b\fs36 \cf6 \kerning1\expnd0\expndtw0 Rubeus
|
26
|
+
\b0\fs24 \cf0 \expnd0\expndtw0\kerning0
|
27
|
+
swing-extension, you'll be free from messy chank of codes. It makes everything about Swing surprisingly simple ! JDBC supports will come next !\
|
28
|
+
\
|
29
|
+
Google Group:
|
30
|
+
\fs28 http://groups.google.com/group/rubeus
|
31
|
+
\fs24 \
|
32
|
+
\
|
33
|
+
example_code01:\
|
34
|
+
\
|
35
|
+
with_rubeus: http://code.google.com/p/rubeus/source/browse/trunk/examples/rubeus_swing_example01.rb \
|
36
|
+
\
|
37
|
+
with_java: http://code.google.com/p/rubeus/source/browse/trunk/examples/JavaSwingExample01.java \
|
38
|
+
\
|
39
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
include Java
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
gem "rubeus"
|
5
|
+
require "rubeus"
|
6
|
+
|
7
|
+
Rubeus::Swing.irb
|
8
|
+
|
9
|
+
# JFrameなどのコンテナのnewに渡されたブロックの中でnewされたコンポーネントは
|
10
|
+
# 自動的にaddされます。
|
11
|
+
JFrame.new("Rubeus Swing Example 01") do |frame|
|
12
|
+
frame.layout = BoxLayout.new(:Y_AXIS)
|
13
|
+
JSplitPane.new(JSplitPane::VERTICAL_SPLIT) do
|
14
|
+
JPanel.new do |panel|
|
15
|
+
panel.layout = BoxLayout.new(:X_AXIS)
|
16
|
+
# キーのイベントもメソッドを指定してハンドリングできます。
|
17
|
+
# newにブロックを渡すとlisten(:key, :pressed)が実行されます。
|
18
|
+
@text_field = JTextField.new do |event|
|
19
|
+
if event.key_code == 10 # RETURN
|
20
|
+
@textpane.text += @text_field.text + "\n"
|
21
|
+
@text_field.text = ''
|
22
|
+
end
|
23
|
+
end
|
24
|
+
# 以下のように書くこともできますです
|
25
|
+
# @text_field = JTextField.new
|
26
|
+
# @text_field.listen(:key, :key_pressed, :key_code => 10) do |event|
|
27
|
+
# @textpane.text += @text_field.text + "\n"
|
28
|
+
# @text_field.text = ''
|
29
|
+
# end
|
30
|
+
JButton.new("append") do
|
31
|
+
@textpane.text += @text_field.text
|
32
|
+
@text_field.text = ''
|
33
|
+
end
|
34
|
+
end
|
35
|
+
JScrollPane.new(:preferred_size => [400, 250]) do |pane|
|
36
|
+
@textpane = JTextPane.new
|
37
|
+
end
|
38
|
+
end
|
39
|
+
frame.visible = true
|
40
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
include Java
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
gem "rubeus"
|
5
|
+
require "rubeus"
|
6
|
+
|
7
|
+
class Example01
|
8
|
+
extend Rubeus::Swing
|
9
|
+
|
10
|
+
def show
|
11
|
+
# JFrameなどのコンテナのnewに渡されたブロックの中でnewされたコンポーネントは
|
12
|
+
# 自動的にaddされます。
|
13
|
+
JFrame.new("Rubeus Swing Example 01") do |frame|
|
14
|
+
frame.layout = BoxLayout.new(:Y_AXIS)
|
15
|
+
JSplitPane.new(JSplitPane::VERTICAL_SPLIT) do
|
16
|
+
JPanel.new do |panel|
|
17
|
+
panel.layout = BoxLayout.new(:X_AXIS)
|
18
|
+
# キーのイベントもメソッドを指定してハンドリングできます。
|
19
|
+
# newにブロックを渡すとlisten(:key, :pressed)が実行されます。
|
20
|
+
@text_field = JTextField.new do |event|
|
21
|
+
if event.key_code == 10 # RETURN
|
22
|
+
@textpane.text += @text_field.text + "\n"
|
23
|
+
@text_field.text = ''
|
24
|
+
end
|
25
|
+
end
|
26
|
+
# 以下のように書くこともできますです
|
27
|
+
# @text_field = JTextField.new
|
28
|
+
# @text_field.listen(:key, :key_pressed, :key_code => 10) do |event|
|
29
|
+
# @textpane.text += @text_field.text + "\n"
|
30
|
+
# @text_field.text = ''
|
31
|
+
# end
|
32
|
+
JButton.new("append") do
|
33
|
+
@textpane.text += @text_field.text + "\n"
|
34
|
+
@text_field.text = ''
|
35
|
+
end
|
36
|
+
end
|
37
|
+
JScrollPane.new(:preferred_size => [400, 250]) do |pane|
|
38
|
+
@textpane = JTextPane.new
|
39
|
+
end
|
40
|
+
end
|
41
|
+
frame.visible = true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
Example01.new.show
|
data/lib/rubeus.rb
CHANGED
data/lib/rubeus/awt.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
require "rubeus/component_loader"
|
2
2
|
|
3
3
|
module Rubeus
|
4
|
-
|
5
|
-
Awt = ComponentLoader.new("java.awt", extensions_path) do
|
6
|
-
base_path = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
7
|
-
Dir.glob(File.join(base_path, 'rubeus', 'awt', '*.rb')) do |file|
|
8
|
-
rel_path = file.gsub("#{base_path}/", '')
|
9
|
-
autoload(File.basename(rel_path, '.*').camelize, rel_path.gsub(/\.rb$/, ''))
|
10
|
-
end
|
11
|
-
end
|
4
|
+
Awt = ComponentLoader.new("java.awt")
|
12
5
|
end
|
13
6
|
|
14
|
-
require "rubeus/awt/
|
7
|
+
require "rubeus/awt/attributes"
|
8
|
+
require "rubeus/awt/nestable"
|
9
|
+
require "rubeus/awt/event"
|
10
|
+
require "rubeus/awt/setters"
|
@@ -1,33 +1,50 @@
|
|
1
1
|
module Rubeus
|
2
2
|
class ComponentLoader < Module
|
3
|
-
attr_reader :java_package, :ruby_module_path, :base_path
|
4
3
|
|
5
|
-
def self.
|
6
|
-
|
7
|
-
|
4
|
+
def self.class_names(*package_names)
|
5
|
+
patterns = Regexp.union(
|
6
|
+
*package_names.map{|package_name|
|
7
|
+
Regexp.new(package_name.gsub(/\./, "/"))})
|
8
|
+
classlist = File.join(ENV_JAVA["java.home"], "lib", "classlist")
|
9
|
+
classes = []
|
10
|
+
open(classlist) do |f|
|
11
|
+
f.each do |line|
|
12
|
+
classes << line.gsub(/\//, '.').strip if patterns =~ line
|
13
|
+
end
|
14
|
+
end
|
15
|
+
classes
|
8
16
|
end
|
9
17
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@
|
18
|
+
attr_reader :java_package
|
19
|
+
attr_reader :class_to_package
|
20
|
+
|
21
|
+
def initialize(java_package, &block)
|
22
|
+
@java_package = java_package
|
23
|
+
build_class_to_package_table
|
15
24
|
super(&block)
|
16
25
|
end
|
17
26
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
27
|
+
def build_class_to_package_table
|
28
|
+
class_names = ::Rubeus::ComponentLoader.class_names(@java_package)
|
29
|
+
@class_to_package = {}
|
30
|
+
class_names.each do |fqn|
|
31
|
+
parts = fqn.split('.')
|
32
|
+
class_name = parts.pop
|
33
|
+
# インナークラスの拡張はその持ち主のクラスの責任とします。
|
34
|
+
# JVM上でも同じタイミングでロードされるし。
|
35
|
+
next if class_name.include?('$')
|
36
|
+
package = parts.join('.')
|
37
|
+
@class_to_package[class_name] = @class_to_package.key?(class_name) ?
|
38
|
+
[@class_to_package[class_name], package] : package
|
23
39
|
end
|
24
|
-
@ruby_module_holder
|
25
40
|
end
|
26
|
-
|
41
|
+
|
27
42
|
def extended(object)
|
28
43
|
mod = Module.new do
|
29
44
|
def const_missing(java_class_name)
|
30
45
|
@loader.const_get(java_class_name)
|
46
|
+
rescue
|
47
|
+
super
|
31
48
|
end
|
32
49
|
end
|
33
50
|
object.instance_variable_set("@loader", self)
|
@@ -48,56 +65,60 @@ module Rubeus
|
|
48
65
|
|
49
66
|
def const_missing(java_class_name)
|
50
67
|
if autoload?(java_class_name)
|
51
|
-
feature = autolodings.delete(java_class_name.to_s)
|
68
|
+
feature = autolodings.delete(java_class_name.to_s)
|
52
69
|
require(feature)
|
53
70
|
return const_get(java_class_name)
|
54
71
|
end
|
55
|
-
|
56
|
-
|
72
|
+
package = @class_to_package[java_class_name.to_s]
|
73
|
+
raise NameError, java_class_name unless package
|
74
|
+
if package.is_a?(Array)
|
75
|
+
raise NameError, "cannot specified package name for #{java_class_name}: #{package.join(', ')}"
|
57
76
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
File.join(@ruby_module_path, package.underscore),
|
64
|
-
@base_path)
|
65
|
-
self.const_set(package.camelize, mod)
|
66
|
-
mod.const_get(names.last)
|
67
|
-
else
|
68
|
-
begin
|
69
|
-
require(File.join(@ruby_module_path, java_class_name.to_s.underscore))
|
70
|
-
rescue LoadError => e
|
71
|
-
# puts "warning: #{e}"
|
77
|
+
java_fqn = package.empty? ? java_class_name.to_s : "#{package}.#{java_class_name.to_s}"
|
78
|
+
extension = extension_for(java_fqn)
|
79
|
+
if extension
|
80
|
+
JavaUtilities.extend_proxy(java_fqn) do
|
81
|
+
include extension
|
72
82
|
end
|
73
|
-
java_fqn = to_java_fqn(java_class_name)
|
74
|
-
extension = nil
|
75
|
-
begin
|
76
|
-
extension = self.ruby_module_holder.const_get(java_class_name)
|
77
|
-
rescue
|
78
|
-
# puts "warning: #{$!.inspect}"
|
79
|
-
end
|
80
|
-
if extension
|
81
|
-
JavaUtilities.extend_proxy(java_fqn) do
|
82
|
-
include extension
|
83
|
-
end
|
84
|
-
end
|
85
|
-
result = instance_eval(java_fqn)
|
86
|
-
self.const_set(java_class_name, result)
|
87
|
-
result
|
88
83
|
end
|
84
|
+
result = instance_eval(java_fqn)
|
85
|
+
self.const_set(java_class_name, result)
|
86
|
+
result
|
89
87
|
rescue
|
90
88
|
puts $!
|
91
89
|
puts $!.backtrace.join("\n ")
|
92
90
|
super
|
93
91
|
end
|
94
92
|
|
95
|
-
def to_java_fqn(java_class_name)
|
96
|
-
"#{java_package}.#{java_class_name}"
|
97
|
-
end
|
98
|
-
|
99
93
|
def depend_on(*java_class_names)
|
100
94
|
java_class_names.each{|java_class_name| self.const_get(java_class_name)}
|
101
95
|
end
|
96
|
+
|
97
|
+
def extension_path_for(java_fqn_or_parts)
|
98
|
+
parts = java_fqn_or_parts.is_a?(Array) ? java_fqn_or_parts : java_fqn_or_parts.split('.')
|
99
|
+
"rubeus/extensions/%s" % parts.map{|part|part.underscore}.join('/')
|
100
|
+
end
|
101
|
+
|
102
|
+
def extension_class_name_for(java_fqn_or_parts)
|
103
|
+
parts = java_fqn_or_parts.is_a?(Array) ? java_fqn_or_parts : java_fqn_or_parts.split('.')
|
104
|
+
"Rubeus::Extensions::%s" % parts.map{|part|part.camelize}.join('::')
|
105
|
+
end
|
106
|
+
|
107
|
+
def extension_for(java_fqn)
|
108
|
+
parts = java_fqn.split('.')
|
109
|
+
extension_path = extension_path_for(parts)
|
110
|
+
begin
|
111
|
+
require(extension_path)
|
112
|
+
rescue LoadError => e
|
113
|
+
# puts "warning: #{e}"
|
114
|
+
return nil
|
115
|
+
end
|
116
|
+
begin
|
117
|
+
instance_eval(extension_class_name_for(parts))
|
118
|
+
rescue NameError => e
|
119
|
+
# puts "warning: #{e}"
|
120
|
+
return nil
|
121
|
+
end
|
122
|
+
end
|
102
123
|
end
|
103
124
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/rubeus/swing.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
require "rubeus/component_loader"
|
2
|
+
require "rubeus/awt"
|
2
3
|
|
3
4
|
module Rubeus
|
4
|
-
|
5
|
-
|
5
|
+
Swing = ComponentLoader.new("javax.swing") do
|
6
|
+
class_to_package.update(
|
7
|
+
# $JAVA_HOME/lib/classlistにないものリスト
|
8
|
+
'JTextPane' => 'javax.swing',
|
9
|
+
'RTFEditorKit' => 'javax.swing.text.rtf'
|
10
|
+
)
|
11
|
+
class_to_package['DefaultStyledDocument'] ||= 'javax.swing.text' # Windowsにない
|
6
12
|
|
7
13
|
def self.irb
|
8
14
|
Object.send(:extend, self)
|
@@ -10,12 +16,6 @@ module Rubeus
|
|
10
16
|
end
|
11
17
|
end
|
12
18
|
|
13
|
-
require "rubeus/swing/extensions"
|
14
|
-
|
15
|
-
require "rubeus/awt/attributes"
|
16
|
-
require "rubeus/awt/nestable"
|
17
|
-
require "rubeus/awt/event"
|
18
|
-
|
19
19
|
|
20
20
|
=begin
|
21
21
|
import "javax.swing.JFrame"
|
metadata
CHANGED
@@ -3,37 +3,39 @@ extensions: []
|
|
3
3
|
homepage: http://code.google.com/p/rubeus/
|
4
4
|
executables: []
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
6
|
+
version: 0.0.3
|
7
7
|
post_install_message:
|
8
8
|
date: 2008-06-28 15:00:00 +00:00
|
9
9
|
files:
|
10
|
-
- lib/rubeus
|
11
10
|
- lib/rubeus.rb
|
12
|
-
- lib/rubeus/awt
|
13
11
|
- lib/rubeus/awt.rb
|
14
12
|
- lib/rubeus/component_loader.rb
|
15
|
-
- lib/rubeus/
|
13
|
+
- lib/rubeus/extensions.rb
|
16
14
|
- lib/rubeus/swing.rb
|
17
15
|
- lib/rubeus/awt/attributes.rb
|
18
16
|
- lib/rubeus/awt/event.rb
|
19
|
-
- lib/rubeus/awt/extensions
|
20
|
-
- lib/rubeus/awt/extensions.rb
|
21
17
|
- lib/rubeus/awt/nestable.rb
|
22
18
|
- lib/rubeus/awt/setters.rb
|
23
|
-
- lib/rubeus/
|
24
|
-
- lib/rubeus/
|
25
|
-
- lib/rubeus/
|
26
|
-
- lib/rubeus/
|
27
|
-
- lib/rubeus/
|
28
|
-
- lib/rubeus/
|
29
|
-
- lib/rubeus/
|
30
|
-
- lib/rubeus/swing/
|
31
|
-
- lib/rubeus/swing/
|
32
|
-
- lib/rubeus/swing/
|
33
|
-
- lib/rubeus/swing/
|
34
|
-
- lib/rubeus/swing/
|
35
|
-
- lib/rubeus/swing/
|
36
|
-
- lib/rubeus/swing/
|
19
|
+
- lib/rubeus/extensions/java.rb
|
20
|
+
- lib/rubeus/extensions/javax.rb
|
21
|
+
- lib/rubeus/extensions/java/awt.rb
|
22
|
+
- lib/rubeus/extensions/java/awt/component.rb
|
23
|
+
- lib/rubeus/extensions/java/awt/container.rb
|
24
|
+
- lib/rubeus/extensions/java/awt/dimension.rb
|
25
|
+
- lib/rubeus/extensions/javax/swing.rb
|
26
|
+
- lib/rubeus/extensions/javax/swing/box_layout.rb
|
27
|
+
- lib/rubeus/extensions/javax/swing/j_applet.rb
|
28
|
+
- lib/rubeus/extensions/javax/swing/j_component.rb
|
29
|
+
- lib/rubeus/extensions/javax/swing/j_frame.rb
|
30
|
+
- lib/rubeus/extensions/javax/swing/j_panel.rb
|
31
|
+
- lib/rubeus/extensions/javax/swing/j_scroll_pane.rb
|
32
|
+
- lib/rubeus/extensions/javax/swing/j_split_pane.rb
|
33
|
+
- lib/rubeus/extensions/javax/swing/j_text_field.rb
|
34
|
+
- lib/rubeus/extensions/javax/swing/j_window.rb
|
35
|
+
- examples/notepad.rb
|
36
|
+
- examples/rubeus_swing_example01.rb
|
37
|
+
- examples/rubeus_swing_example01_with_class.rb
|
38
|
+
- examples/notepad.rtf
|
37
39
|
rubygems_version: 1.1.1
|
38
40
|
rdoc_options: []
|
39
41
|
signing_key:
|