fxri 0.3.3 → 0.3.4
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/bugs/fxri bug `concat' can't convert nil into Array (TypeError).eml +50 -0
- data/bugs/fxri with Ruby v1.8.5 via OneClickInstaller v1.8.5-21.eml +167 -0
- data/fxri +344 -319
- data/fxri-0.3.4.gem +0 -0
- data/fxri.gemspec +24 -24
- data/lib/Empty_Text_Field_Handler.rb +63 -63
- data/lib/FoxDisplayer.rb +148 -148
- data/lib/FoxTextFormatter.rb +274 -274
- data/lib/Globals.rb +50 -48
- data/lib/Icon_Loader.rb +35 -35
- data/lib/Packet_Item.rb +178 -178
- data/lib/Packet_List.rb +192 -192
- data/lib/Recursive_Open_Struct.rb +238 -233
- data/lib/RiManager.rb +159 -154
- data/lib/Search_Engine.rb +165 -165
- data/lib/fxirb-0.2.1/CHANGELOG +31 -0
- data/lib/fxirb-0.2.1/fxirb.rb +395 -0
- data/lib/fxirb.rb +400 -395
- metadata +24 -17
- data/fxri.kpf +0 -66
data/fxri-0.3.4.gem
ADDED
File without changes
|
data/fxri.gemspec
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
#!/bin/env ruby
|
2
|
-
require 'rubygems'
|
3
|
-
|
4
|
-
spec = Gem::Specification.new do |s|
|
5
|
-
s.name = "fxri"
|
6
|
-
s.add_dependency('fxruby', ['>= 1.
|
7
|
-
s.version = "0.3.
|
8
|
-
s.date = "2006-
|
9
|
-
s.summary = "Graphical interface to the RI documentation, with search engine."
|
10
|
-
s.require_paths = ["lib"]
|
11
|
-
s.email = "markus.prinz@qsig.org"
|
12
|
-
s.homepage = "http://
|
13
|
-
s.rubyforge_project = "fxri"
|
14
|
-
s.description = "FxRi is an FXRuby interface to the RI documentation, with a search engine that allows for search-on-typing."
|
15
|
-
s.has_rdoc = false
|
16
|
-
s.files = Dir.glob("**/*")
|
17
|
-
s.bindir = "."
|
18
|
-
s.executables = ["fxri"]
|
19
|
-
end
|
20
|
-
|
21
|
-
if __FILE__ == $0
|
22
|
-
Gem.manage_gems
|
23
|
-
Gem::Builder.new(spec).build
|
24
|
-
end
|
1
|
+
#!/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
spec = Gem::Specification.new do |s|
|
5
|
+
s.name = "fxri"
|
6
|
+
s.add_dependency('fxruby', ['>= 1.6.0', '< 1.7'])
|
7
|
+
s.version = "0.3.4"
|
8
|
+
s.date = "2006-12-14"
|
9
|
+
s.summary = "Graphical interface to the RI documentation, with search engine."
|
10
|
+
s.require_paths = ["lib"]
|
11
|
+
s.email = "markus.prinz@qsig.org"
|
12
|
+
s.homepage = "http://rubyforge.org/projects/fxri/"
|
13
|
+
s.rubyforge_project = "fxri"
|
14
|
+
s.description = "FxRi is an FXRuby interface to the RI documentation, with a search engine that allows for search-on-typing."
|
15
|
+
s.has_rdoc = false
|
16
|
+
s.files = Dir.glob("**/*")
|
17
|
+
s.bindir = "."
|
18
|
+
s.executables = ["fxri"]
|
19
|
+
end
|
20
|
+
|
21
|
+
if __FILE__ == $0
|
22
|
+
Gem.manage_gems
|
23
|
+
Gem::Builder.new(spec).build
|
24
|
+
end
|
@@ -1,63 +1,63 @@
|
|
1
|
-
# Copyright (c) 2004, 2005 Martin Ankerl
|
2
|
-
# Shows a grey text in an FXTextField if the user did not enter any input. This is a nice way to
|
3
|
-
# give the user more information about what to enter into a text field, without the need of additional
|
4
|
-
# space in the GUI.
|
5
|
-
class Empty_Text_Field_Handler
|
6
|
-
|
7
|
-
# Create a new handler for the specified textfield, with the given text. From now on you have to use the
|
8
|
-
# created object to get and set text, not the textfield or this handler would come out of sync
|
9
|
-
def initialize(textField, myText)
|
10
|
-
@textField = textField
|
11
|
-
@myText = myText
|
12
|
-
@isEmpty = true
|
13
|
-
onTextFieldFocusOut
|
14
|
-
# create connections
|
15
|
-
@textField.connect(SEL_FOCUSIN, method(:onTextFieldFocusIn))
|
16
|
-
@textField.connect(SEL_FOCUSOUT, method(:onTextFieldFocusOut))
|
17
|
-
end
|
18
|
-
|
19
|
-
# Check if textfield is empty (no user input).
|
20
|
-
def empty?
|
21
|
-
@isEmpty
|
22
|
-
end
|
23
|
-
|
24
|
-
# Set new text for the textfield
|
25
|
-
def text=(newText)
|
26
|
-
onTextFieldFocusIn
|
27
|
-
@textField.text = newText.to_s
|
28
|
-
onTextFieldFocusOut
|
29
|
-
end
|
30
|
-
|
31
|
-
# Get the textfield's text, if the user has entered something.
|
32
|
-
def text
|
33
|
-
if empty? && !@inside
|
34
|
-
""
|
35
|
-
else
|
36
|
-
@textField.text
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Set focus to the textfield.
|
41
|
-
def setFocus
|
42
|
-
@textField.setFocus
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def onTextFieldFocusIn(*args)
|
48
|
-
@inside = true
|
49
|
-
return if !@isEmpty
|
50
|
-
@textField.textColor = FXColor::Black
|
51
|
-
@textField.text = ""
|
52
|
-
end
|
53
|
-
|
54
|
-
def onTextFieldFocusOut(*args)
|
55
|
-
@inside = false
|
56
|
-
@textField.killSelection
|
57
|
-
@isEmpty = @textField.text == ""
|
58
|
-
return if !@isEmpty
|
59
|
-
@textField.textColor = FXColor::DarkGrey
|
60
|
-
@textField.text = @myText
|
61
|
-
@isEmpty = true
|
62
|
-
end
|
63
|
-
end
|
1
|
+
# Copyright (c) 2004, 2005 Martin Ankerl
|
2
|
+
# Shows a grey text in an FXTextField if the user did not enter any input. This is a nice way to
|
3
|
+
# give the user more information about what to enter into a text field, without the need of additional
|
4
|
+
# space in the GUI.
|
5
|
+
class Empty_Text_Field_Handler
|
6
|
+
|
7
|
+
# Create a new handler for the specified textfield, with the given text. From now on you have to use the
|
8
|
+
# created object to get and set text, not the textfield or this handler would come out of sync
|
9
|
+
def initialize(textField, myText)
|
10
|
+
@textField = textField
|
11
|
+
@myText = myText
|
12
|
+
@isEmpty = true
|
13
|
+
onTextFieldFocusOut
|
14
|
+
# create connections
|
15
|
+
@textField.connect(SEL_FOCUSIN, method(:onTextFieldFocusIn))
|
16
|
+
@textField.connect(SEL_FOCUSOUT, method(:onTextFieldFocusOut))
|
17
|
+
end
|
18
|
+
|
19
|
+
# Check if textfield is empty (no user input).
|
20
|
+
def empty?
|
21
|
+
@isEmpty
|
22
|
+
end
|
23
|
+
|
24
|
+
# Set new text for the textfield
|
25
|
+
def text=(newText)
|
26
|
+
onTextFieldFocusIn
|
27
|
+
@textField.text = newText.to_s
|
28
|
+
onTextFieldFocusOut
|
29
|
+
end
|
30
|
+
|
31
|
+
# Get the textfield's text, if the user has entered something.
|
32
|
+
def text
|
33
|
+
if empty? && !@inside
|
34
|
+
""
|
35
|
+
else
|
36
|
+
@textField.text
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Set focus to the textfield.
|
41
|
+
def setFocus
|
42
|
+
@textField.setFocus
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def onTextFieldFocusIn(*args)
|
48
|
+
@inside = true
|
49
|
+
return if !@isEmpty
|
50
|
+
@textField.textColor = FXColor::Black
|
51
|
+
@textField.text = ""
|
52
|
+
end
|
53
|
+
|
54
|
+
def onTextFieldFocusOut(*args)
|
55
|
+
@inside = false
|
56
|
+
@textField.killSelection
|
57
|
+
@isEmpty = @textField.text == ""
|
58
|
+
return if !@isEmpty
|
59
|
+
@textField.textColor = FXColor::DarkGrey
|
60
|
+
@textField.text = @myText
|
61
|
+
@isEmpty = true
|
62
|
+
end
|
63
|
+
end
|
data/lib/FoxDisplayer.rb
CHANGED
@@ -1,148 +1,148 @@
|
|
1
|
-
class FoxDisplayer
|
2
|
-
attr_accessor :reader
|
3
|
-
|
4
|
-
def initialize(text_field)
|
5
|
-
@text_field = text_field
|
6
|
-
@formatter = FoxTextFormatter.new(70, "") do |arg, style|
|
7
|
-
startpos = @str.size
|
8
|
-
@str << arg
|
9
|
-
@formats.push [startpos, arg.size, style]
|
10
|
-
end
|
11
|
-
@reader = nil
|
12
|
-
end
|
13
|
-
|
14
|
-
def width=(newWidth)
|
15
|
-
@formatter.width = newWidth
|
16
|
-
end
|
17
|
-
|
18
|
-
def no_info_available
|
19
|
-
@text_field.text="nothing here, move on!"
|
20
|
-
end
|
21
|
-
|
22
|
-
def init_text
|
23
|
-
@str = ""
|
24
|
-
@formats = Array.new
|
25
|
-
end
|
26
|
-
|
27
|
-
# Sets a new text, and all styles
|
28
|
-
def set_text
|
29
|
-
@text_field.text = @str
|
30
|
-
@formats.each do |start, n, style|
|
31
|
-
case style
|
32
|
-
when FoxTextFormatter::STYLE_BOLD
|
33
|
-
@text_field.changeStyle(start, n, 2)
|
34
|
-
when FoxTextFormatter::STYLE_H1
|
35
|
-
@text_field.changeStyle(start, n, 3)
|
36
|
-
when FoxTextFormatter::STYLE_H2
|
37
|
-
@text_field.changeStyle(start, n, 4)
|
38
|
-
when FoxTextFormatter::STYLE_H3
|
39
|
-
@text_field.changeStyle(start, n, 5)
|
40
|
-
when FoxTextFormatter::STYLE_TELETYPE
|
41
|
-
@text_field.changeStyle(start, n, 6)
|
42
|
-
when FoxTextFormatter::STYLE_CODE
|
43
|
-
@text_field.changeStyle(start, n, 7)
|
44
|
-
when FoxTextFormatter::STYLE_EMPHASIS
|
45
|
-
@text_field.changeStyle(start, n, 8)
|
46
|
-
when FoxTextFormatter::STYLE_CLASS
|
47
|
-
@text_field.changeStyle(start, n, 9)
|
48
|
-
else
|
49
|
-
@text_field.changeStyle(start, n, 1)
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
# Display method information
|
56
|
-
def display_method_info(method)
|
57
|
-
init_text
|
58
|
-
@formatter.draw_line(method.full_name)
|
59
|
-
@formatter.display_params(method)
|
60
|
-
@formatter.draw_line
|
61
|
-
display_flow(method.comment)
|
62
|
-
|
63
|
-
if method.aliases && !method.aliases.empty?
|
64
|
-
@formatter.blankline
|
65
|
-
aka = "(also known as "
|
66
|
-
aka << method.aliases.map {|a| a.name }.join(", ")
|
67
|
-
aka << ")"
|
68
|
-
@formatter.wrap(aka)
|
69
|
-
end
|
70
|
-
set_text
|
71
|
-
end
|
72
|
-
|
73
|
-
def display_information(message)
|
74
|
-
init_text
|
75
|
-
display_flow(message)
|
76
|
-
set_text
|
77
|
-
end
|
78
|
-
|
79
|
-
def display_class_info(klass)
|
80
|
-
init_text
|
81
|
-
superclass = klass.superclass_string
|
82
|
-
if superclass
|
83
|
-
superclass = " < " + superclass
|
84
|
-
else
|
85
|
-
superclass = ""
|
86
|
-
end
|
87
|
-
@formatter.draw_line(klass.display_name + ": " + klass.full_name + superclass)
|
88
|
-
display_flow(klass.comment)
|
89
|
-
@formatter.draw_line
|
90
|
-
|
91
|
-
unless klass.includes.empty?
|
92
|
-
@formatter.blankline
|
93
|
-
@formatter.display_heading("Includes:", 2, "")
|
94
|
-
incs = []
|
95
|
-
klass.includes.each do |inc|
|
96
|
-
inc_desc = @reader.find_class_by_name(inc.name)
|
97
|
-
if inc_desc
|
98
|
-
str = inc.name + "("
|
99
|
-
str << inc_desc.instance_methods.map{|m| m.name}.join(", ")
|
100
|
-
str << ")"
|
101
|
-
incs << str
|
102
|
-
else
|
103
|
-
incs << inc.name
|
104
|
-
end
|
105
|
-
end
|
106
|
-
@formatter.wrap(incs.sort.join(', '))
|
107
|
-
end
|
108
|
-
|
109
|
-
unless klass.constants.empty?
|
110
|
-
@formatter.blankline
|
111
|
-
@formatter.display_heading("Constants:", 2, "")
|
112
|
-
len = 0
|
113
|
-
klass.constants.each { |c| len = c.name.length if c.name.length > len }
|
114
|
-
len += 2
|
115
|
-
klass.constants.each do |c|
|
116
|
-
@formatter.wrap(c.value, @formatter.indent+((c.name+":").ljust(len)))
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
unless klass.class_methods.empty?
|
121
|
-
@formatter.blankline
|
122
|
-
@formatter.display_heading("Class methods:", 2, "")
|
123
|
-
@formatter.wrap(klass.class_methods.map{|m| m.name}.sort.join(', '))
|
124
|
-
end
|
125
|
-
|
126
|
-
unless klass.instance_methods.empty?
|
127
|
-
@formatter.blankline
|
128
|
-
@formatter.display_heading("Instance methods:", 2, "")
|
129
|
-
@formatter.wrap(klass.instance_methods.map{|m| m.name}.sort.join(', '))
|
130
|
-
end
|
131
|
-
|
132
|
-
unless klass.attributes.empty?
|
133
|
-
@formatter.blankline
|
134
|
-
@formatter.wrap("Attributes:", "")
|
135
|
-
@formatter.wrap(klass.attributes.map{|a| a.name}.sort.join(', '))
|
136
|
-
end
|
137
|
-
|
138
|
-
set_text
|
139
|
-
end
|
140
|
-
|
141
|
-
def display_flow(flow)
|
142
|
-
if !flow || flow.empty?
|
143
|
-
@formatter.wrap("(no description...)\n")
|
144
|
-
else
|
145
|
-
@formatter.display_flow(flow)
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
1
|
+
class FoxDisplayer
|
2
|
+
attr_accessor :reader
|
3
|
+
|
4
|
+
def initialize(text_field)
|
5
|
+
@text_field = text_field
|
6
|
+
@formatter = FoxTextFormatter.new(70, "") do |arg, style|
|
7
|
+
startpos = @str.size
|
8
|
+
@str << arg
|
9
|
+
@formats.push [startpos, arg.size, style]
|
10
|
+
end
|
11
|
+
@reader = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def width=(newWidth)
|
15
|
+
@formatter.width = newWidth
|
16
|
+
end
|
17
|
+
|
18
|
+
def no_info_available
|
19
|
+
@text_field.text="nothing here, move on!"
|
20
|
+
end
|
21
|
+
|
22
|
+
def init_text
|
23
|
+
@str = ""
|
24
|
+
@formats = Array.new
|
25
|
+
end
|
26
|
+
|
27
|
+
# Sets a new text, and all styles
|
28
|
+
def set_text
|
29
|
+
@text_field.text = @str
|
30
|
+
@formats.each do |start, n, style|
|
31
|
+
case style
|
32
|
+
when FoxTextFormatter::STYLE_BOLD
|
33
|
+
@text_field.changeStyle(start, n, 2)
|
34
|
+
when FoxTextFormatter::STYLE_H1
|
35
|
+
@text_field.changeStyle(start, n, 3)
|
36
|
+
when FoxTextFormatter::STYLE_H2
|
37
|
+
@text_field.changeStyle(start, n, 4)
|
38
|
+
when FoxTextFormatter::STYLE_H3
|
39
|
+
@text_field.changeStyle(start, n, 5)
|
40
|
+
when FoxTextFormatter::STYLE_TELETYPE
|
41
|
+
@text_field.changeStyle(start, n, 6)
|
42
|
+
when FoxTextFormatter::STYLE_CODE
|
43
|
+
@text_field.changeStyle(start, n, 7)
|
44
|
+
when FoxTextFormatter::STYLE_EMPHASIS
|
45
|
+
@text_field.changeStyle(start, n, 8)
|
46
|
+
when FoxTextFormatter::STYLE_CLASS
|
47
|
+
@text_field.changeStyle(start, n, 9)
|
48
|
+
else
|
49
|
+
@text_field.changeStyle(start, n, 1)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Display method information
|
56
|
+
def display_method_info(method)
|
57
|
+
init_text
|
58
|
+
@formatter.draw_line(method.full_name)
|
59
|
+
@formatter.display_params(method)
|
60
|
+
@formatter.draw_line
|
61
|
+
display_flow(method.comment)
|
62
|
+
|
63
|
+
if method.aliases && !method.aliases.empty?
|
64
|
+
@formatter.blankline
|
65
|
+
aka = "(also known as "
|
66
|
+
aka << method.aliases.map {|a| a.name }.join(", ")
|
67
|
+
aka << ")"
|
68
|
+
@formatter.wrap(aka)
|
69
|
+
end
|
70
|
+
set_text
|
71
|
+
end
|
72
|
+
|
73
|
+
def display_information(message)
|
74
|
+
init_text
|
75
|
+
display_flow(message)
|
76
|
+
set_text
|
77
|
+
end
|
78
|
+
|
79
|
+
def display_class_info(klass)
|
80
|
+
init_text
|
81
|
+
superclass = klass.superclass_string
|
82
|
+
if superclass
|
83
|
+
superclass = " < " + superclass
|
84
|
+
else
|
85
|
+
superclass = ""
|
86
|
+
end
|
87
|
+
@formatter.draw_line(klass.display_name + ": " + klass.full_name + superclass)
|
88
|
+
display_flow(klass.comment)
|
89
|
+
@formatter.draw_line
|
90
|
+
|
91
|
+
unless klass.includes.empty?
|
92
|
+
@formatter.blankline
|
93
|
+
@formatter.display_heading("Includes:", 2, "")
|
94
|
+
incs = []
|
95
|
+
klass.includes.each do |inc|
|
96
|
+
inc_desc = @reader.find_class_by_name(inc.name)
|
97
|
+
if inc_desc
|
98
|
+
str = inc.name + "("
|
99
|
+
str << inc_desc.instance_methods.map{|m| m.name}.join(", ")
|
100
|
+
str << ")"
|
101
|
+
incs << str
|
102
|
+
else
|
103
|
+
incs << inc.name
|
104
|
+
end
|
105
|
+
end
|
106
|
+
@formatter.wrap(incs.sort.join(', '))
|
107
|
+
end
|
108
|
+
|
109
|
+
unless klass.constants.empty?
|
110
|
+
@formatter.blankline
|
111
|
+
@formatter.display_heading("Constants:", 2, "")
|
112
|
+
len = 0
|
113
|
+
klass.constants.each { |c| len = c.name.length if c.name.length > len }
|
114
|
+
len += 2
|
115
|
+
klass.constants.each do |c|
|
116
|
+
@formatter.wrap(c.value, @formatter.indent+((c.name+":").ljust(len)))
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
unless klass.class_methods.empty?
|
121
|
+
@formatter.blankline
|
122
|
+
@formatter.display_heading("Class methods:", 2, "")
|
123
|
+
@formatter.wrap(klass.class_methods.map{|m| m.name}.sort.join(', '))
|
124
|
+
end
|
125
|
+
|
126
|
+
unless klass.instance_methods.empty?
|
127
|
+
@formatter.blankline
|
128
|
+
@formatter.display_heading("Instance methods:", 2, "")
|
129
|
+
@formatter.wrap(klass.instance_methods.map{|m| m.name}.sort.join(', '))
|
130
|
+
end
|
131
|
+
|
132
|
+
unless klass.attributes.empty?
|
133
|
+
@formatter.blankline
|
134
|
+
@formatter.wrap("Attributes:", "")
|
135
|
+
@formatter.wrap(klass.attributes.map{|a| a.name}.sort.join(', '))
|
136
|
+
end
|
137
|
+
|
138
|
+
set_text
|
139
|
+
end
|
140
|
+
|
141
|
+
def display_flow(flow)
|
142
|
+
if !flow || flow.empty?
|
143
|
+
@formatter.wrap("(no description...)\n")
|
144
|
+
else
|
145
|
+
@formatter.display_flow(flow)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|