rubeus 0.0.2-java → 0.0.3-java
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|