arcadia 0.10.0 → 0.11.0
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/README +20 -14
- data/conf/arcadia.conf +5 -3
- data/conf/arcadia.init.rb +1 -0
- data/conf/arcadia.res.rb +27 -0
- data/conf/theme-dark.conf +5 -2
- data/ext/ae-dir-projects/ae-dir-projects.rb +8 -2
- data/ext/ae-editor/ae-editor.conf +9 -45
- data/ext/ae-editor/ae-editor.rb +650 -240
- data/ext/ae-editor/langs/coderay.tokens +11 -3
- data/ext/ae-editor/langs/java.lang +1 -1
- data/ext/ae-editor/langs/ruby.lang +1 -1
- data/ext/ae-rad/ae-rad-palette.rb +1 -1
- data/ext/ae-ruby-debug/ae-ruby-debug.rb +13 -5
- data/ext/ae-search-in-files/ae-search-in-files.conf +1 -1
- data/ext/ae-search-in-files/ae-search-in-files.rb +10 -16
- data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.conf +1 -1
- data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.rb +7 -12
- data/lib/a-commons.rb +458 -251
- data/lib/a-contracts.rb +25 -10
- data/lib/a-core.rb +185 -77
- data/lib/a-tkcommons.rb +224 -77
- metadata +6 -4
@@ -1,17 +1,23 @@
|
|
1
1
|
#coderay.classes=annotation,attribute_name,attribute_name_fat,attribute_value,attribute_value_fat,bin,char,class,class_variable,color,comment,constant,content,definition,delimiter,directive,doc,doctype,doc_string,entity,error,escape,exception,float,function,global_variable,hex,important,include,inline,inline_delimiter,instance_variable,integer,interpreted,keyword,key,label,local_variable,modifier,oct,operator_fat,pre_constant,pre_type,predefined,preprocessor,pseudo_class,regexp,reserved,shell,string,symbol,tag,tag_fat,tag_special,type,variable,value,xml_text,insert,delete,change,head,
|
2
2
|
|
3
3
|
|
4
|
-
coderay.classes=
|
5
|
-
coderay.hightlight.reserved.foreground=>>>hightlight.reserved.foreground
|
6
|
-
coderay.hightlight.reserved.style=bold
|
4
|
+
coderay.classes=keyword,method,class,char,comment,instance_variable,class_variable,symbol,constant,string,content,integer
|
5
|
+
#coderay.hightlight.reserved.foreground=>>>hightlight.reserved.foreground
|
6
|
+
#coderay.hightlight.reserved.style=bold
|
7
|
+
coderay.hightlight.keyword.foreground=>>>hightlight.reserved.foreground
|
8
|
+
coderay.hightlight.keyword.style=bold
|
7
9
|
coderay.hightlight.method.foreground=>>>hightlight.method.foreground
|
8
10
|
coderay.hightlight.method.style=bold
|
11
|
+
#coderay.hightlight.ident.style=bold
|
12
|
+
#coderay.hightlight.delimiter.style=bold
|
9
13
|
coderay.hightlight.class.foreground=>>>hightlight.class.foreground
|
10
14
|
coderay.hightlight.class.style=bold
|
11
15
|
coderay.hightlight.module_name.foreground=>>>hightlight.class.foreground
|
12
16
|
coderay.hightlight.module_name.style=bold
|
13
17
|
coderay.hightlight.instance_variable.foreground=>>>hightlight.instance_variable.foreground
|
14
18
|
coderay.hightlight.instance_variable.style=bold
|
19
|
+
coderay.hightlight.class_variable.foreground=>>>hightlight.class_variable.foreground
|
20
|
+
coderay.hightlight.class_variable.style=bold
|
15
21
|
coderay.hightlight.constant.foreground=>>>hightlight.constant.foreground
|
16
22
|
coderay.hightlight.constant.style=bold
|
17
23
|
coderay.hightlight.global_variable.foreground=>>>hightlight.global_variable.foreground
|
@@ -39,3 +45,5 @@ coderay.hightlight.directive.style=bold
|
|
39
45
|
coderay.hightlight.type.foreground=>>>hightlight.reserved.foreground
|
40
46
|
coderay.hightlight.type.style=bold
|
41
47
|
coderay.hightlight.operator.style=bold
|
48
|
+
coderay.hightlight.predefined_type.foreground=>>>hightlight.class.foreground
|
49
|
+
coderay.hightlight.exception.foreground=>>>hightlight.exception.foreground
|
@@ -2,4 +2,4 @@ language=java
|
|
2
2
|
exts=java
|
3
3
|
scanner=coderay
|
4
4
|
@include=coderay.tokens
|
5
|
-
coderay.classes=keyword,directive,type,
|
5
|
+
coderay.classes=keyword,directive,type,predefined_type,operator,delimiter,method,class,char,comment,instance_variable,constant,string,content,integer,exception
|
@@ -194,7 +194,7 @@ class WrapperContainer < TkFrame
|
|
194
194
|
@selected_class = nil
|
195
195
|
@selected_require = nil
|
196
196
|
@selected_class_obj = nil
|
197
|
-
Arcadia.instance.layout.domain(Arcadia.instance['conf']['palette.frame'])['root'].
|
197
|
+
Arcadia.instance.layout.domain(Arcadia.instance['conf']['palette.frame'])['root'].top_text_clear
|
198
198
|
end
|
199
199
|
|
200
200
|
def add_palette(_lib_obj)
|
@@ -1570,9 +1570,12 @@ class RubyDebug < ArcadiaExt
|
|
1570
1570
|
|
1571
1571
|
def on_exit_query(_event)
|
1572
1572
|
if @rdc && @rdc.is_alive?
|
1573
|
-
query = (
|
1573
|
+
query = (Arcadia.dialog(self, 'icon' => 'question', 'type' => 'yes_no',
|
1574
1574
|
'title' => '(Arcadia) Debug',
|
1575
1575
|
'message' => "Debug in course, do you want to exit?")=='yes')
|
1576
|
+
# query = (Tk.messageBox('icon' => 'question', 'type' => 'yesno',
|
1577
|
+
# 'title' => '(Arcadia) Debug',
|
1578
|
+
# 'message' => "Debug in course, do you want to exit?")=='yes')
|
1576
1579
|
if query
|
1577
1580
|
debug_quit
|
1578
1581
|
_event.can_exit=true
|
@@ -1657,10 +1660,15 @@ class RubyDebug < ArcadiaExt
|
|
1657
1660
|
if @rdc
|
1658
1661
|
if @rdc.is_alive?
|
1659
1662
|
Thread.new{
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1663
|
-
|
1663
|
+
Arcadia.dialog(self,
|
1664
|
+
'type'=>'ok',
|
1665
|
+
'title' => "(Arcadia) Debug",
|
1666
|
+
'msg'=>"Debug in course, stop it before exit",
|
1667
|
+
'level'=>'info')
|
1668
|
+
# Tk.messageBox('icon' => 'info',
|
1669
|
+
# 'type' => 'ok',
|
1670
|
+
# 'title' => '(Arcadia) Debug',
|
1671
|
+
# 'message' => "Debug in course, stop it before exit")
|
1664
1672
|
}
|
1665
1673
|
else
|
1666
1674
|
begin
|
@@ -3,20 +3,13 @@
|
|
3
3
|
# by Antonio Galeone <antonio-galeone@rubyforge.org>
|
4
4
|
#
|
5
5
|
|
6
|
-
class
|
6
|
+
class SearchInFiles < ArcadiaExt
|
7
7
|
|
8
8
|
def on_before_build(_event)
|
9
|
-
Arcadia.attach_listener(SearchInFilesListener.new(self),SearchInFilesEvent)
|
10
|
-
end
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
class SearchInFilesListener
|
15
|
-
def initialize(_service)
|
16
|
-
@service = _service
|
17
9
|
create_find 'Search in files'
|
10
|
+
Arcadia.attach_listener(self, SearchInFilesEvent)
|
18
11
|
end
|
19
|
-
|
12
|
+
|
20
13
|
def on_before_search_in_files(_event)
|
21
14
|
if _event.what.nil?
|
22
15
|
if _event.dir
|
@@ -32,9 +25,9 @@ class SearchInFilesListener
|
|
32
25
|
|
33
26
|
#def on_after_search_in_files(_event)
|
34
27
|
#end
|
35
|
-
|
28
|
+
|
36
29
|
def create_find title
|
37
|
-
@find = FindFrame.new(
|
30
|
+
@find = FindFrame.new(self.arcadia.layout.root)
|
38
31
|
@find.on_close=proc{@find.hide}
|
39
32
|
@find.hide
|
40
33
|
@find.b_go.bind('1', proc{update_all_combo;do_find}) # add trigger to button
|
@@ -89,9 +82,9 @@ class SearchInFilesListener
|
|
89
82
|
return if @find.e_what.text.strip.length == 0 || @find.e_filter.text.strip.length == 0 || @find.e_dir.text.strip.length == 0
|
90
83
|
@find.hide
|
91
84
|
if !defined?(@search_output)
|
92
|
-
@search_output = SearchOutput.new(
|
85
|
+
@search_output = SearchOutput.new(self)
|
93
86
|
end
|
94
|
-
|
87
|
+
self.frame.show_anyway
|
95
88
|
Thread.new do
|
96
89
|
begin
|
97
90
|
MonitorLastUsedDir.set_last @find.e_dir.text # save it away TODO make it into a message
|
@@ -101,7 +94,7 @@ class SearchInFilesListener
|
|
101
94
|
_files = Dir[_filter]
|
102
95
|
_node = @search_output.new_result(_search_title, _files.length)
|
103
96
|
progress_stop=false
|
104
|
-
progress_bar = TkProgressframe.new(
|
97
|
+
progress_bar = TkProgressframe.new(self.arcadia.layout.root, _files.length)
|
105
98
|
progress_bar.title('Searching')
|
106
99
|
progress_bar.on_cancel=proc{progress_stop=true}
|
107
100
|
#@progress_bar.on_cancel=proc{cancel}
|
@@ -129,7 +122,7 @@ class SearchInFilesListener
|
|
129
122
|
#Arcadia.new_error_msg(self, e.message)
|
130
123
|
ensure
|
131
124
|
progress_bar.destroy if progress_bar
|
132
|
-
|
125
|
+
self.frame.show_anyway
|
133
126
|
end
|
134
127
|
end
|
135
128
|
end
|
@@ -343,6 +336,7 @@ class FindFrame < TkFloatTitledFrame
|
|
343
336
|
super
|
344
337
|
self.focus
|
345
338
|
@e_what.focus
|
339
|
+
@e_what_entry.select_throw
|
346
340
|
@e_what_entry.selection_range(0,'end')
|
347
341
|
end
|
348
342
|
end
|
@@ -3,16 +3,11 @@
|
|
3
3
|
# by Roger D. Pack
|
4
4
|
#
|
5
5
|
|
6
|
-
class
|
7
|
-
def on_before_build(_event)
|
8
|
-
Arcadia.attach_listener(AckInFilesListener.new(self),AckInFilesEvent)
|
9
|
-
end
|
10
|
-
end
|
6
|
+
class AckInFiles < SearchInFiles
|
11
7
|
|
12
|
-
|
13
|
-
def initialize(_service)
|
14
|
-
@service = _service
|
8
|
+
def on_before_build(_event)
|
15
9
|
create_find 'Ack in files'
|
10
|
+
Arcadia.attach_listener(self, AckInFilesEvent)
|
16
11
|
end
|
17
12
|
|
18
13
|
def on_before_ack_in_files(_event)
|
@@ -23,9 +18,9 @@ class AckInFilesListener < SearchInFilesListener
|
|
23
18
|
return if @find.e_what.text.strip.length == 0 || @find.e_filter.text.strip.length == 0 || @find.e_dir.text.strip.length == 0
|
24
19
|
@find.hide
|
25
20
|
if !defined?(@search_output)
|
26
|
-
@search_output = SearchOutput.new(
|
21
|
+
@search_output = SearchOutput.new(self)
|
27
22
|
else
|
28
|
-
|
23
|
+
self.frame.show
|
29
24
|
end
|
30
25
|
begin
|
31
26
|
# unfortunately, it uses regex instead of glob. Oh well.
|
@@ -40,13 +35,13 @@ class AckInFilesListener < SearchInFilesListener
|
|
40
35
|
_filter = @find.e_dir.text+'/**/'+@find.e_filter.text
|
41
36
|
_node = @search_output.new_result(_search_title, '')
|
42
37
|
progress_stop=false
|
43
|
-
@progress_bar = TkProgressframe.new(
|
38
|
+
@progress_bar = TkProgressframe.new(self.arcadia.layout.root, 2)
|
44
39
|
@progress_bar.title('Running')
|
45
40
|
|
46
41
|
answer = `#{command}`
|
47
42
|
answer_lines = answer.split("\n")
|
48
43
|
@progress_bar.destroy # destroy the old one
|
49
|
-
@progress_bar = TkProgressframe.new(
|
44
|
+
@progress_bar = TkProgressframe.new(self.arcadia.layout.root, answer_lines.length)
|
50
45
|
@progress_bar.title('Parsing')
|
51
46
|
@progress_bar.on_cancel=proc{progress_stop=true}
|
52
47
|
|
data/lib/a-commons.rb
CHANGED
@@ -12,45 +12,45 @@ require 'singleton'
|
|
12
12
|
|
13
13
|
|
14
14
|
class AbstractFrameWrapper
|
15
|
-
# def AbstractFrameWrapper.inherited(sub)
|
16
|
-
# unless sub.respond_to? :hinner_frame
|
17
|
-
# raise NoMethodError, "#{sub} needs to respond to `:hinner_frame'"
|
18
|
-
# end
|
19
|
-
# unless sub.respond_to? :title
|
20
|
-
# raise NoMethodError, "#{sub} needs to respond to `:title'"
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
# unless sub.respond_to? :show
|
24
|
-
# raise NoMethodError, "#{sub} needs to respond to `:show'"
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# unless sub.respond_to? :hide
|
28
|
-
# raise NoMethodError, "#{sub} needs to respond to `:hide'"
|
29
|
-
# end
|
30
|
-
#
|
31
|
-
# unless sub.respond_to? :free
|
32
|
-
# raise NoMethodError, "#{sub} needs to respond to `:free'"
|
33
|
-
# end
|
34
|
-
# end
|
15
|
+
# def AbstractFrameWrapper.inherited(sub)
|
16
|
+
# unless sub.respond_to? :hinner_frame
|
17
|
+
# raise NoMethodError, "#{sub} needs to respond to `:hinner_frame'"
|
18
|
+
# end
|
19
|
+
# unless sub.respond_to? :title
|
20
|
+
# raise NoMethodError, "#{sub} needs to respond to `:title'"
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# unless sub.respond_to? :show
|
24
|
+
# raise NoMethodError, "#{sub} needs to respond to `:show'"
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# unless sub.respond_to? :hide
|
28
|
+
# raise NoMethodError, "#{sub} needs to respond to `:hide'"
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# unless sub.respond_to? :free
|
32
|
+
# raise NoMethodError, "#{sub} needs to respond to `:free'"
|
33
|
+
# end
|
34
|
+
# end
|
35
35
|
|
36
36
|
def initialize
|
37
37
|
unless sub.respond_to? :hinner_frame
|
38
|
-
raise NoMethodError, "#{sub} needs to respond to `:hinner_frame'"
|
38
|
+
raise NoMethodError, "#{sub} needs to respond to `:hinner_frame'"
|
39
39
|
end
|
40
40
|
unless sub.respond_to? :title
|
41
|
-
raise NoMethodError, "#{sub} needs to respond to `:title'"
|
41
|
+
raise NoMethodError, "#{sub} needs to respond to `:title'"
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
unless sub.respond_to? :show
|
45
|
-
raise NoMethodError, "#{sub} needs to respond to `:show'"
|
45
|
+
raise NoMethodError, "#{sub} needs to respond to `:show'"
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
unless sub.respond_to? :hide
|
49
|
-
raise NoMethodError, "#{sub} needs to respond to `:hide'"
|
49
|
+
raise NoMethodError, "#{sub} needs to respond to `:hide'"
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
unless sub.respond_to? :free
|
53
|
-
raise NoMethodError, "#{sub} needs to respond to `:free'"
|
53
|
+
raise NoMethodError, "#{sub} needs to respond to `:free'"
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -58,12 +58,12 @@ end
|
|
58
58
|
|
59
59
|
#module AbstractFrameWrapper
|
60
60
|
# def hinner_frame
|
61
|
-
# raise NoMethodError, "#{self} needs to respond to `:hinner_frame'"
|
61
|
+
# raise NoMethodError, "#{self} needs to respond to `:hinner_frame'"
|
62
62
|
# end
|
63
63
|
#end
|
64
64
|
|
65
65
|
class FixedFrameWrapper < AbstractFrameWrapper
|
66
|
-
# include AbstractFrameWrapper
|
66
|
+
# include AbstractFrameWrapper
|
67
67
|
attr_accessor :domain
|
68
68
|
attr_reader :name
|
69
69
|
attr_reader :title
|
@@ -77,27 +77,31 @@ class FixedFrameWrapper < AbstractFrameWrapper
|
|
77
77
|
@index = _index
|
78
78
|
fixed_frame_forge
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
def fixed_frame_forge
|
82
82
|
@fixed_frame = Arcadia.layout.register_panel(self) if @fixed_frame.nil?
|
83
83
|
end
|
84
84
|
private :fixed_frame_forge
|
85
|
-
|
85
|
+
|
86
86
|
def hinner_frame
|
87
87
|
fixed_frame_forge
|
88
88
|
@fixed_frame
|
89
89
|
end
|
90
|
-
|
90
|
+
|
91
91
|
def root
|
92
92
|
fixed_frame_forge
|
93
|
-
Arcadia.layout.domain(@domain)
|
93
|
+
if Arcadia.layout.domain(@domain)
|
94
|
+
Arcadia.layout.domain(@domain)['root']
|
95
|
+
else
|
96
|
+
Arcadia.layout.domain('nil')['root']
|
97
|
+
end
|
94
98
|
end
|
95
|
-
|
96
|
-
# def top_text(_top_text=nil)
|
97
|
-
# fixed_frame_forge
|
98
|
-
# Arcadia.layout.domain(@domain)['root'].top_text(_top_text)
|
99
|
-
# #@arcadia.layout.domain_for_frame(@domain, @name)['root'].top_text(_title)
|
100
|
-
# end
|
99
|
+
|
100
|
+
# def top_text(_top_text=nil)
|
101
|
+
# fixed_frame_forge
|
102
|
+
# Arcadia.layout.domain(@domain)['root'].top_text(_top_text)
|
103
|
+
# #@arcadia.layout.domain_for_frame(@domain, @name)['root'].top_text(_title)
|
104
|
+
# end
|
101
105
|
|
102
106
|
def show
|
103
107
|
fixed_frame_forge
|
@@ -113,10 +117,10 @@ class FixedFrameWrapper < AbstractFrameWrapper
|
|
113
117
|
Arcadia.layout.register_panel(self, self.hinner_frame)
|
114
118
|
end
|
115
119
|
end
|
116
|
-
|
120
|
+
|
117
121
|
def hide
|
118
122
|
end
|
119
|
-
|
123
|
+
|
120
124
|
def raised?
|
121
125
|
Arcadia.layout.raised?(@domain, @name)
|
122
126
|
end
|
@@ -132,7 +136,7 @@ class FixedFrameWrapper < AbstractFrameWrapper
|
|
132
136
|
def resize
|
133
137
|
Arcadia.layout.domain(@domain)['root'].resize
|
134
138
|
end
|
135
|
-
|
139
|
+
|
136
140
|
def free
|
137
141
|
Arcadia.layout.unregister_panel(self)
|
138
142
|
@fixed_frame = nil
|
@@ -141,7 +145,7 @@ end
|
|
141
145
|
|
142
146
|
|
143
147
|
class FloatFrameWrapper < AbstractFrameWrapper
|
144
|
-
# include AbstractFrameWrapper
|
148
|
+
# include AbstractFrameWrapper
|
145
149
|
def initialize(_arcadia, _geometry=nil, _title=nil)
|
146
150
|
@arcadia = _arcadia
|
147
151
|
@geometry = _geometry
|
@@ -152,27 +156,27 @@ class FloatFrameWrapper < AbstractFrameWrapper
|
|
152
156
|
def float_frame_forge
|
153
157
|
if @obj.nil?
|
154
158
|
a = @geometry.scan(/[+-]*\d\d*%*/)
|
155
|
-
p_height = TkWinfo.screenheight(@arcadia.layout.root)
|
156
|
-
p_width = TkWinfo.screenwidth(@arcadia.layout.root)
|
159
|
+
p_height = TkWinfo.screenheight(@arcadia.layout.root)
|
160
|
+
p_width = TkWinfo.screenwidth(@arcadia.layout.root)
|
157
161
|
if a[0][-1..-1]=='%'
|
158
162
|
n = a[0][0..-2].to_i.abs
|
159
|
-
|
163
|
+
a[0] = (p_width/100*n).to_i
|
160
164
|
end
|
161
165
|
if a[1][-1..-1]=='%'
|
162
166
|
n = a[1][0..-2].to_i.abs
|
163
|
-
|
167
|
+
a[1] = (p_height/100*n).to_i
|
164
168
|
end
|
165
169
|
if a[2][-1..-1]=='%'
|
166
170
|
n = a[2][0..-2].to_i.abs
|
167
|
-
|
171
|
+
a[2] = (p_width/100*n).to_i
|
168
172
|
end
|
169
173
|
if a[3][-1..-1]=='%'
|
170
174
|
n = a[3][0..-2].to_i.abs
|
171
|
-
|
175
|
+
a[3] = (p_height/100*n).to_i
|
172
176
|
end
|
173
|
-
|
177
|
+
|
174
178
|
args = {'width'=>a[0], 'height'=>a[1], 'x'=>a[2], 'y'=>a[3]}
|
175
|
-
@obj = @arcadia.layout.
|
179
|
+
@obj = @arcadia.layout.add_float_frame(args)
|
176
180
|
@obj.title(@title) if @title
|
177
181
|
end
|
178
182
|
end
|
@@ -181,7 +185,7 @@ class FloatFrameWrapper < AbstractFrameWrapper
|
|
181
185
|
float_frame_forge
|
182
186
|
@obj.frame if @obj
|
183
187
|
end
|
184
|
-
|
188
|
+
|
185
189
|
def title(_title=nil)
|
186
190
|
float_frame_forge
|
187
191
|
@obj.title(_title) if @obj
|
@@ -189,16 +193,16 @@ class FloatFrameWrapper < AbstractFrameWrapper
|
|
189
193
|
|
190
194
|
def show
|
191
195
|
float_frame_forge
|
192
|
-
@obj.show if @obj
|
196
|
+
@obj.show if @obj
|
193
197
|
end
|
194
|
-
|
198
|
+
|
195
199
|
def hide
|
196
200
|
float_frame_forge
|
197
|
-
@obj.hide if @obj
|
201
|
+
@obj.hide if @obj
|
198
202
|
end
|
199
|
-
|
203
|
+
|
200
204
|
def free
|
201
|
-
@obj.destroy if @obj
|
205
|
+
@obj.destroy if @obj
|
202
206
|
@obj = nil
|
203
207
|
end
|
204
208
|
end
|
@@ -209,10 +213,6 @@ class ArcadiaExt
|
|
209
213
|
def initialize(_arcadia, _name=nil)
|
210
214
|
@arcadia = _arcadia
|
211
215
|
@arcadia.register(self)
|
212
|
-
Arcadia.attach_listener(self, BuildEvent)
|
213
|
-
Arcadia.attach_listener(self, InitializeEvent)
|
214
|
-
Arcadia.attach_listener(self, ExitQueryEvent)
|
215
|
-
Arcadia.attach_listener(self, FinalizeEvent)
|
216
216
|
@name = _name
|
217
217
|
@frames = Array.new
|
218
218
|
@frames_points = conf_array("#{_name}.frames")
|
@@ -221,39 +221,74 @@ class ArcadiaExt
|
|
221
221
|
@float_frames = Array.new
|
222
222
|
@float_geometries = conf_array("#{_name}.float_frames")
|
223
223
|
@float_labels = conf_array("#{_name}.float_labels")
|
224
|
+
Arcadia.attach_listener(self, BuildEvent)
|
225
|
+
Arcadia.attach_listener(self, InitializeEvent)
|
226
|
+
Arcadia.attach_listener(self, ExitQueryEvent)
|
227
|
+
Arcadia.attach_listener(self, FinalizeEvent)
|
224
228
|
#ObjectSpace.define_finalizer(self, self.method(:finalize).to_proc)
|
225
229
|
end
|
226
|
-
|
227
|
-
|
230
|
+
|
231
|
+
|
228
232
|
def conf_array(_name)
|
229
233
|
res = []
|
230
234
|
value = @arcadia['conf'][_name]
|
231
235
|
res.concat(value.split(',')) if value
|
232
236
|
res
|
233
237
|
end
|
234
|
-
|
238
|
+
|
239
|
+
def array_conf(_name, _array)
|
240
|
+
value = ''
|
241
|
+
_array.each{|e|
|
242
|
+
if value.length > 0
|
243
|
+
value = "#{value},#{e}"
|
244
|
+
else
|
245
|
+
value = "#{e}"
|
246
|
+
end
|
247
|
+
}
|
248
|
+
@arcadia['conf'][_name]=value
|
249
|
+
value
|
250
|
+
end
|
251
|
+
|
252
|
+
def add_to_conf_property(_name, _value)
|
253
|
+
a = conf_array(_name)
|
254
|
+
if !a.include?(_value)
|
255
|
+
a << _value
|
256
|
+
array_conf(_name,a)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def del_from_conf_property(_name, _value)
|
261
|
+
a = conf_array(_name)
|
262
|
+
a.delete(_value)
|
263
|
+
array_conf(_name,a)
|
264
|
+
end
|
265
|
+
|
235
266
|
def frame_def_visible?(_n=0)
|
236
267
|
@arcadia.layout.domains.include?(@frames_points[_n])
|
237
268
|
#@frames_points[_n] != '-1.-1'
|
238
269
|
end
|
239
|
-
|
270
|
+
|
240
271
|
def frame_visible?(_n=0)
|
241
272
|
@frames[_n] != nil && @frames[_n].hinner_frame && TkWinfo.mapped?(@frames[_n].hinner_frame)
|
242
273
|
end
|
243
|
-
|
274
|
+
|
244
275
|
def frame(_n=0,create_if_not_exist=true)
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
276
|
+
if @frames_points[_n].nil?
|
277
|
+
@frames_points[_n] = '0.0'
|
278
|
+
Arcadia['conf']["#{@name}.frames"]+=',0.0'
|
279
|
+
end
|
280
|
+
if @frames[_n] == nil && @frames_points[_n] && create_if_not_exist
|
281
|
+
(@frames_labels[_n].nil?)? _label = @name : _label = @frames_labels[_n]
|
282
|
+
(@frames_names[_n].nil?)? _name = @name : _name = @frames_names[_n]
|
283
|
+
@frames[_n] = FixedFrameWrapper.new(self, @frames_points[_n], _name, _label, _n)
|
284
|
+
end
|
250
285
|
return @frames[_n]
|
251
286
|
end
|
252
|
-
|
287
|
+
|
253
288
|
def frame_domain(_n=0)
|
254
289
|
if conf('frames')
|
255
|
-
|
256
|
-
else
|
290
|
+
frs = conf('frames').split(',')
|
291
|
+
else
|
257
292
|
frs = Array.new
|
258
293
|
end
|
259
294
|
ret = nil
|
@@ -265,8 +300,8 @@ class ArcadiaExt
|
|
265
300
|
|
266
301
|
def frame_domain_default(_n=0)
|
267
302
|
if conf_default('frames')
|
268
|
-
|
269
|
-
else
|
303
|
+
frs = conf_default('frames').split(',')
|
304
|
+
else
|
270
305
|
frs = Array.new
|
271
306
|
end
|
272
307
|
ret = nil
|
@@ -277,19 +312,19 @@ class ArcadiaExt
|
|
277
312
|
end
|
278
313
|
|
279
314
|
def float_frame(_n=0, _args=nil)
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
315
|
+
if @float_frames[_n].nil?
|
316
|
+
(@float_labels[_n].nil?)? _label = @name : _label = @float_labels[_n]
|
317
|
+
@float_frames[_n] = FloatFrameWrapper.new(@arcadia, @float_geometries[_n], _label)
|
318
|
+
end
|
319
|
+
@float_frames[_n]
|
285
320
|
end
|
286
321
|
|
287
322
|
def conf(_property)
|
288
|
-
|
323
|
+
@arcadia['conf'][@name+'.'+_property]
|
289
324
|
end
|
290
325
|
|
291
326
|
def conf_default(_property)
|
292
|
-
|
327
|
+
@arcadia['conf_without_local'][@name+'.'+_property]
|
293
328
|
end
|
294
329
|
|
295
330
|
def restore_default_conf(_property)
|
@@ -297,17 +332,17 @@ class ArcadiaExt
|
|
297
332
|
@arcadia['conf'][@name+'.'+_property] = @arcadia['conf_without_local'][@name+'.'+_property]
|
298
333
|
end
|
299
334
|
end
|
300
|
-
|
301
|
-
# def conf_global(_property)
|
302
|
-
# @arcadia['conf'][_property]
|
303
|
-
# end
|
304
|
-
|
335
|
+
|
336
|
+
# def conf_global(_property)
|
337
|
+
# @arcadia['conf'][_property]
|
338
|
+
# end
|
339
|
+
|
305
340
|
def exec(_method, _args=nil)
|
306
341
|
if self.respond_to(_method)
|
307
342
|
self.send(_method, _args)
|
308
343
|
end
|
309
344
|
end
|
310
|
-
|
345
|
+
|
311
346
|
def maximized?(_n=0)
|
312
347
|
ret= false
|
313
348
|
ret=@frames[_n].maximized? if @frames[_n]
|
@@ -317,23 +352,164 @@ class ArcadiaExt
|
|
317
352
|
def maximize(_n=0)
|
318
353
|
@frames[_n].maximize if @frames[_n]
|
319
354
|
end
|
320
|
-
|
355
|
+
|
321
356
|
def resize(_n=0)
|
322
357
|
@frames[_n].resize if @frames[_n]
|
323
358
|
end
|
324
359
|
end
|
325
360
|
|
361
|
+
class ArcadiaExtPlus < ArcadiaExt
|
362
|
+
attr_reader :index
|
363
|
+
|
364
|
+
def initialize(_arcadia, _name=nil)
|
365
|
+
@@instances = {} if !defined?(@@instances)
|
366
|
+
@@main_instance = {} if !defined?(@@main_instance)
|
367
|
+
@@active_instance = {} if !defined?(@@active_instance)
|
368
|
+
@@instances[self.class] = [] if @@instances[self.class] == nil
|
369
|
+
@@instances[self.class] << self
|
370
|
+
@@main_instance[self.class] = self if @@main_instance[self.class] == nil
|
371
|
+
Arcadia.attach_listener(self, ActivateInstanceEvent)
|
372
|
+
super(_arcadia, _name)
|
373
|
+
if self.frame != nil
|
374
|
+
self.frame.hinner_frame.bind_append("Enter", proc{activate})
|
375
|
+
if @@main_instance[self.class] == self
|
376
|
+
frame.root.add_state_button(
|
377
|
+
self.name,
|
378
|
+
'Duplicate',
|
379
|
+
proc{duplicate},
|
380
|
+
PLUS_EX_GIF,
|
381
|
+
'left')
|
382
|
+
activate(self, false)
|
383
|
+
else
|
384
|
+
frame.root.add_state_button(
|
385
|
+
self.name,
|
386
|
+
'Destroy',
|
387
|
+
proc{deduplicate},
|
388
|
+
MINUS_EX_GIF,
|
389
|
+
'left')
|
390
|
+
activate(self, false)
|
391
|
+
end
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
395
|
+
def ArcadiaExtPlus.instances(_class)
|
396
|
+
@@instances[_class]
|
397
|
+
end
|
398
|
+
|
399
|
+
def active_instance
|
400
|
+
@@active_instance[self.class]
|
401
|
+
end
|
402
|
+
|
403
|
+
def main_instance
|
404
|
+
@@main_instance[self.class]
|
405
|
+
end
|
406
|
+
|
407
|
+
def activate(_obj=self, _raise_event=true)
|
408
|
+
@@active_instance[self.class] = _obj
|
409
|
+
@@active_instance[self.class].frame.root.shift_on if @@active_instance[self.class].frame != nil
|
410
|
+
instances.each{|i|
|
411
|
+
i.frame.root.shift_off if i != @@active_instance[self.class] && i.frame != nil && i.frame.root != @@active_instance[self.class].frame.root
|
412
|
+
}
|
413
|
+
ActivateInstanceEvent.new(Arcadia.instance, 'name'=>self.name).go! if _raise_event
|
414
|
+
end
|
415
|
+
|
416
|
+
def activate_main
|
417
|
+
activate(@@main_instance[self.class])
|
418
|
+
end
|
419
|
+
|
420
|
+
def active?
|
421
|
+
@@active_instance[self.class] == self
|
422
|
+
end
|
423
|
+
|
424
|
+
def instances
|
425
|
+
@@instances[self.class]
|
426
|
+
end
|
427
|
+
|
428
|
+
def instance_index
|
429
|
+
instances.index(self)
|
430
|
+
end
|
431
|
+
|
432
|
+
def new_name
|
433
|
+
#"#{main_instance.name}#{instances.length}"
|
434
|
+
name = main_instance.name
|
435
|
+
i=0
|
436
|
+
while exist_name?(name)
|
437
|
+
i+=1
|
438
|
+
name = "#{main_instance.name}#{i}"
|
439
|
+
end
|
440
|
+
name
|
441
|
+
end
|
442
|
+
|
443
|
+
def exist_name?(_name)
|
444
|
+
exist = false
|
445
|
+
instances.each{|i|
|
446
|
+
exist = exist || i.name == _name
|
447
|
+
break if exist
|
448
|
+
}
|
449
|
+
exist
|
450
|
+
end
|
451
|
+
|
452
|
+
def duplicate(_name=new_name)
|
453
|
+
#create conf properties
|
454
|
+
Arcadia.conf_group_copy(@@main_instance[self.class].name, _name)
|
455
|
+
instance = clone(_name)
|
456
|
+
#initialize
|
457
|
+
Arcadia.process_event(InitializeEvent.new(Arcadia.instance), [instance])
|
458
|
+
add_to_conf_property("#{main_instance.name}.clones", _name)
|
459
|
+
end
|
460
|
+
|
461
|
+
def clone(_name)
|
462
|
+
#create
|
463
|
+
instance = self.class.new(Arcadia.instance, _name)
|
464
|
+
#build
|
465
|
+
Arcadia.process_event(BuildEvent.new(Arcadia.instance), [instance])
|
466
|
+
Arcadia.attach_listener(instance, ClearCacheInstanceEvent)
|
467
|
+
Arcadia.attach_listener(instance, DestroyInstanceEvent)
|
468
|
+
instance
|
469
|
+
end
|
470
|
+
|
471
|
+
def on_destroy_instance(_event)
|
472
|
+
Arcadia.detach_listener(self)
|
473
|
+
@arcadia.unregister(self)
|
474
|
+
@frames.each{|f| f.free }
|
475
|
+
end
|
476
|
+
|
477
|
+
# def on_before_layout_raising_frame(_event)
|
478
|
+
# if _event.extension_name == @name
|
479
|
+
# activate
|
480
|
+
# end
|
481
|
+
# end
|
482
|
+
|
483
|
+
def deduplicate
|
484
|
+
if (Arcadia.dialog(self, 'type'=>'yes_no',
|
485
|
+
'msg'=>"Shure delete '#{@name}'?",
|
486
|
+
'title' => "(Arcadia) Delete #{@name}",
|
487
|
+
'level' => 'question')=='yes')
|
488
|
+
exit_query_event = Arcadia.process_event(ExitQueryEvent.new(self, 'can_exit'=>true))
|
489
|
+
if exit_query_event.can_exit
|
490
|
+
activate_main
|
491
|
+
@@instances[self.class].delete(self) if @@instances[self.class]
|
492
|
+
Arcadia.del_conf_group(Arcadia['conf'],@name)
|
493
|
+
Arcadia.del_conf_group(Arcadia['pers'],@name)
|
494
|
+
del_from_conf_property("#{main_instance.name}.clones", @name)
|
495
|
+
Arcadia.process_event(ClearCacheInstanceEvent.new(Arcadia.instance), [self])
|
496
|
+
Arcadia.process_event(DestroyInstanceEvent.new(Arcadia.instance), [self])
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
end
|
326
502
|
|
327
503
|
class ObserverCallback
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
504
|
+
def initialize(_publisher, _subscriber, _method_update_to_call=:update)
|
505
|
+
@publisher = _publisher
|
506
|
+
@subscriber = _subscriber
|
507
|
+
@method=_method_update_to_call
|
508
|
+
@publisher.add_observer(self)
|
509
|
+
end
|
510
|
+
def update(*args)
|
511
|
+
@subscriber.send(@method,*args)
|
512
|
+
end
|
337
513
|
end
|
338
514
|
|
339
515
|
# +------------------------------------------+
|
@@ -346,7 +522,7 @@ class Event
|
|
346
522
|
attr_reader :time
|
347
523
|
def initialize(_sender, _args=nil)
|
348
524
|
@sender = _sender
|
349
|
-
if _args
|
525
|
+
if _args
|
350
526
|
_args.each do |key, value|
|
351
527
|
self.send(key+'=', value)
|
352
528
|
end
|
@@ -363,7 +539,7 @@ class Event
|
|
363
539
|
@breaked = false
|
364
540
|
@sender = _sender
|
365
541
|
@channel = '0'
|
366
|
-
if _args
|
542
|
+
if _args
|
367
543
|
_args.each do |key, value|
|
368
544
|
#self.send(key, value)
|
369
545
|
self.send(key.to_s+'=', value) if self.respond_to?(key.to_s)
|
@@ -372,11 +548,11 @@ class Event
|
|
372
548
|
@time = Time.new
|
373
549
|
@results = Array.new
|
374
550
|
end
|
375
|
-
|
551
|
+
|
376
552
|
def add_finalize_callback(_proc)
|
377
|
-
ObjectSpace.define_finalizer(self, _proc)
|
553
|
+
ObjectSpace.define_finalizer(self, _proc)
|
378
554
|
end
|
379
|
-
|
555
|
+
|
380
556
|
def add_result(_sender, _args=nil)
|
381
557
|
if self.class::Result
|
382
558
|
res = self.class::Result.new(_sender, _args)
|
@@ -386,39 +562,64 @@ class Event
|
|
386
562
|
@results << res
|
387
563
|
res
|
388
564
|
end
|
389
|
-
|
565
|
+
|
390
566
|
def is_breaked?
|
391
567
|
@breaked
|
392
568
|
end
|
393
|
-
|
569
|
+
|
394
570
|
def break
|
395
571
|
@breaked = true
|
396
572
|
end
|
397
|
-
|
573
|
+
|
398
574
|
end
|
399
575
|
|
400
576
|
module EventBus #(or SourceEvent)
|
401
|
-
def process_event(_event)
|
577
|
+
def process_event(_event, _listeners=nil)
|
578
|
+
# _listener rapresent a filter on @@listeners if != nil
|
402
579
|
return _event if !defined?(@@listeners)
|
403
580
|
event_classes = _event_class_stack(_event.class)
|
404
581
|
#before fase
|
405
582
|
event_classes.each do |_c|
|
406
|
-
|
583
|
+
if _listeners.nil?
|
584
|
+
_process_fase(_c, _event, @@listeners[_c], 'before')
|
585
|
+
else
|
586
|
+
listeners_to_process = []
|
587
|
+
_listeners.each{|lis|
|
588
|
+
listeners_to_process << lis if @@listeners[_c] && @@listeners[_c].include?(lis)
|
589
|
+
}
|
590
|
+
_process_fase(_c, _event, listeners_to_process, 'before')
|
591
|
+
end
|
407
592
|
break if _event.is_breaked? # not responding to this means "you need to pass in an instance, not a class name
|
408
593
|
end unless _event.is_breaked?
|
409
594
|
# fase
|
410
595
|
event_classes.each do |_c|
|
411
|
-
|
596
|
+
if _listeners.nil?
|
597
|
+
_process_fase(_c, _event, @@listeners[_c])
|
598
|
+
else
|
599
|
+
listeners_to_process = []
|
600
|
+
_listeners.each{|lis|
|
601
|
+
listeners_to_process << lis if @@listeners[_c] && @@listeners[_c].include?(lis)
|
602
|
+
}
|
603
|
+
_process_fase(_c, _event, listeners_to_process)
|
604
|
+
end
|
412
605
|
break if _event.is_breaked?
|
413
606
|
end unless _event.is_breaked?
|
414
607
|
#after fase
|
415
608
|
event_classes.each do |_c|
|
416
|
-
|
609
|
+
if _listeners.nil?
|
610
|
+
_process_fase(_c, _event, @@listeners[_c], 'after')
|
611
|
+
else
|
612
|
+
listeners_to_process = []
|
613
|
+
_listeners.each{|lis|
|
614
|
+
listeners_to_process << lis if @@listeners[_c] && @@listeners[_c].include?(lis)
|
615
|
+
}
|
616
|
+
_process_fase(_c, _event, listeners_to_process, 'after')
|
617
|
+
end
|
417
618
|
break if _event.is_breaked?
|
418
619
|
end unless _event.is_breaked?
|
419
620
|
_event
|
420
621
|
end
|
421
|
-
|
622
|
+
|
422
623
|
def broadcast_event(_event)
|
423
624
|
return _event if !defined?(@@listeners)
|
424
625
|
event_classes = _event_class_stack(_event.class)
|
@@ -426,47 +627,45 @@ module EventBus #(or SourceEvent)
|
|
426
627
|
_broadcast_fase(_c, _event)
|
427
628
|
end
|
428
629
|
end
|
429
|
-
|
630
|
+
|
430
631
|
def _event_class_stack(_class)
|
431
632
|
#p "------> chiamato _event_class_stack for class #{_class}"
|
432
633
|
res = Array.new
|
433
634
|
cur_class = _class
|
434
635
|
while cur_class != Object
|
435
|
-
|
436
|
-
|
437
|
-
|
636
|
+
#p "#{cur_class} son on #{cur_class.superclass}"
|
637
|
+
res << cur_class
|
638
|
+
cur_class = cur_class.superclass
|
438
639
|
end
|
439
640
|
return res
|
440
641
|
end
|
441
642
|
private :_event_class_stack
|
442
|
-
|
443
|
-
def _process_fase(_class, _event, _fase_name = nil)
|
444
|
-
|
445
|
-
return if @@listeners[_class].nil?
|
643
|
+
|
644
|
+
def _process_fase(_class, _event, _listeners=nil, _fase_name = nil)
|
645
|
+
return if _listeners.nil?
|
446
646
|
_fase_name.nil?? suf = '':suf = _fase_name
|
447
|
-
#method_name = 'on_'+suf+_class.to_s.downcase.gsub('event','')
|
448
647
|
method_name = _method_name(_class, suf)
|
449
|
-
#p _method_name(_event, suf)+' == '+method_name
|
450
|
-
#p method_name
|
451
648
|
if _class != _event.class
|
452
|
-
#sub_method_name = 'on_'+suf+_event.class.to_s.downcase.gsub('event','')
|
453
649
|
sub_method_name = _method_name(_event.class, suf)
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
650
|
+
_listeners.each do|_listener|
|
651
|
+
next if _listener.kind_of?(ArcadiaExtPlus) && !(_listener.active? || _class == ArcadiaSysEvent || _class.superclass == ArcadiaSysEvent || _event.class.kind_of?(ArcadiaSysEvent))
|
652
|
+
if _listener.respond_to?(sub_method_name)
|
653
|
+
_listener.send(sub_method_name, _event)
|
654
|
+
elsif _listener.respond_to?(method_name)
|
655
|
+
_listener.send(method_name, _event)
|
656
|
+
end
|
657
|
+
break if _event.is_breaked?
|
461
658
|
end
|
462
659
|
else
|
463
|
-
|
660
|
+
_listeners.each do|_listener|
|
661
|
+
next if _listener.kind_of?(ArcadiaExtPlus) && !(_listener.active? || (_event.kind_of?(ArcadiaSysEvent)))
|
464
662
|
_listener.send(method_name, _event) if _listener.respond_to?(method_name)
|
465
663
|
break if _event.is_breaked?
|
466
664
|
end
|
467
665
|
end
|
468
666
|
end
|
469
667
|
private :_process_fase
|
668
|
+
|
470
669
|
def _method_name(_class, _suf='')
|
471
670
|
_str = _class.to_s
|
472
671
|
_pre = _str[0..1]
|
@@ -482,9 +681,9 @@ module EventBus #(or SourceEvent)
|
|
482
681
|
sub_method_name = _method_name(_event.class)
|
483
682
|
@@listeners[_class].each do|_listener|
|
484
683
|
if _listener.respond_to?(sub_method_name)
|
485
|
-
|
684
|
+
Thread.new{_listener.send(sub_method_name, _event)}
|
486
685
|
elsif _listener.respond_to?(method_name)
|
487
|
-
|
686
|
+
Thread.new{_listener.send(method_name, _event)}
|
488
687
|
end
|
489
688
|
end
|
490
689
|
else
|
@@ -497,12 +696,19 @@ module EventBus #(or SourceEvent)
|
|
497
696
|
end
|
498
697
|
private :_broadcast_fase
|
499
698
|
|
500
|
-
def detach_listener(_listener, _class_event)
|
501
|
-
if
|
502
|
-
@@listeners[_class_event]
|
699
|
+
def detach_listener(_listener, _class_event=nil)
|
700
|
+
if _class_event != nil
|
701
|
+
if @@listeners[_class_event]
|
702
|
+
@@listeners[_class_event].delete(_listener)
|
703
|
+
end
|
704
|
+
else
|
705
|
+
#delete all the issues of listenere
|
706
|
+
@@listeners.each{|klass, header|
|
707
|
+
header.delete(_listener)
|
708
|
+
}
|
503
709
|
end
|
504
710
|
end
|
505
|
-
|
711
|
+
|
506
712
|
def attach_listener(_listener, _class_event)
|
507
713
|
@@listeners = {} unless defined? @@listeners
|
508
714
|
@@listeners[_class_event] = [] unless @@listeners.has_key?(_class_event)
|
@@ -514,7 +720,7 @@ end
|
|
514
720
|
|
515
721
|
module Cacheble
|
516
722
|
def self.extended(_obj)
|
517
|
-
_obj.__initialize_cache(_obj)
|
723
|
+
_obj.__initialize_cache(_obj)
|
518
724
|
end
|
519
725
|
|
520
726
|
def self.included(_obj)
|
@@ -524,15 +730,15 @@ module Cacheble
|
|
524
730
|
def __initialize_cache(_obj)
|
525
731
|
@@cache = Hash.new
|
526
732
|
end
|
527
|
-
|
733
|
+
|
528
734
|
def self.clear_cache
|
529
735
|
@@cache.clear
|
530
736
|
end
|
531
|
-
|
737
|
+
|
532
738
|
def self.set_cache(_key, _value)
|
533
739
|
@@cache[_key]=_value
|
534
740
|
end
|
535
|
-
|
741
|
+
|
536
742
|
def self.get_cache(_key, _value)
|
537
743
|
@@cache[_key]
|
538
744
|
end
|
@@ -569,12 +775,12 @@ module Configurable
|
|
569
775
|
_line = ''
|
570
776
|
end
|
571
777
|
end
|
572
|
-
|
778
|
+
|
573
779
|
var = _line.split('=')
|
574
780
|
if var.length > 1
|
575
781
|
_value = var[1].strip
|
576
782
|
var[2..-1].collect{|x| _value=_value+'='+x} if var.length > 2
|
577
|
-
if _link_hash
|
783
|
+
if _link_hash
|
578
784
|
_value = resolve_value(_value, _link_hash)
|
579
785
|
end
|
580
786
|
r_hash[var[0].strip]=_value
|
@@ -584,18 +790,18 @@ module Configurable
|
|
584
790
|
ensure
|
585
791
|
f.close unless f.nil?
|
586
792
|
end
|
587
|
-
return r_hash
|
793
|
+
return r_hash
|
588
794
|
else
|
589
795
|
puts 'warning--file does not exist', _property_file
|
590
796
|
end
|
591
797
|
end
|
592
|
-
|
593
|
-
# def one_line_format_as_hash(_line)
|
594
|
-
# ret = Hash.new
|
595
|
-
# end
|
596
|
-
#
|
597
|
-
# def hash_as_one_line_format(_name, _hash)
|
598
|
-
# end
|
798
|
+
|
799
|
+
# def one_line_format_as_hash(_line)
|
800
|
+
# ret = Hash.new
|
801
|
+
# end
|
802
|
+
#
|
803
|
+
# def hash_as_one_line_format(_name, _hash)
|
804
|
+
# end
|
599
805
|
|
600
806
|
def Configurable.properties_group(_group, _hash_source, _hash_suff='conf', _refresh=false)
|
601
807
|
group_key="#{_hash_suff}.#{_group}"
|
@@ -615,21 +821,21 @@ module Configurable
|
|
615
821
|
end
|
616
822
|
|
617
823
|
def resolve_value(_value, _hash_source)
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
824
|
+
if _value.length > 0
|
825
|
+
_v, _vadd = _value.split(ADD_SYMBOL)
|
826
|
+
else
|
827
|
+
_v = _value
|
828
|
+
end
|
829
|
+
if _v.length > 3 && _v[0..2]==LINK_SYMBOL
|
830
|
+
_v=_hash_source[_v[3..-1]] if _hash_source[_v[3..-1]]
|
831
|
+
_v=_v+_vadd if _vadd
|
832
|
+
end
|
833
|
+
return _v
|
628
834
|
end
|
629
|
-
|
835
|
+
|
630
836
|
def resolve_properties_link(_hash_target, _hash_source)
|
631
837
|
loop_level_max = 10
|
632
|
-
# _hash_adding = Hash.new
|
838
|
+
# _hash_adding = Hash.new
|
633
839
|
_keys_to_extend = Array.new
|
634
840
|
_hash_target.each{|k,value|
|
635
841
|
loop_level = 0
|
@@ -638,9 +844,9 @@ module Configurable
|
|
638
844
|
else
|
639
845
|
v= value
|
640
846
|
end
|
641
|
-
# p "value=#{value} class=#{value.class}"
|
642
|
-
# p "v=#{v} class=#{v.class}"
|
643
|
-
# p "vadd=#{vadd}"
|
847
|
+
# p "value=#{value} class=#{value.class}"
|
848
|
+
# p "v=#{v} class=#{v.class}"
|
849
|
+
# p "vadd=#{vadd}"
|
644
850
|
while loop_level < loop_level_max && v.length > 3 && v[0..2]==LINK_SYMBOL
|
645
851
|
if k[-1..-1]=='.'
|
646
852
|
_keys_to_extend << k
|
@@ -667,15 +873,15 @@ module Configurable
|
|
667
873
|
_hash_target.delete(k)
|
668
874
|
end
|
669
875
|
end
|
670
|
-
|
876
|
+
|
671
877
|
def make_value(_self_context=self, _value='')
|
672
878
|
value = _value.strip
|
673
879
|
if value[0..0]=='!'
|
674
|
-
value=_self_context.instance_eval(value[1..-1])
|
880
|
+
value=_self_context.instance_eval(value[1..-1])
|
675
881
|
end
|
676
882
|
value
|
677
883
|
end
|
678
|
-
|
884
|
+
|
679
885
|
end
|
680
886
|
|
681
887
|
module Persistable
|
@@ -702,7 +908,7 @@ module Persistable
|
|
702
908
|
begin
|
703
909
|
if f
|
704
910
|
if _persistent_key
|
705
|
-
|
911
|
+
f.syswrite(_persistent_key+'='+_persistent_value+"\n")
|
706
912
|
end
|
707
913
|
end
|
708
914
|
ensure
|
@@ -710,7 +916,7 @@ module Persistable
|
|
710
916
|
end
|
711
917
|
end
|
712
918
|
end
|
713
|
-
|
919
|
+
|
714
920
|
end
|
715
921
|
|
716
922
|
class Application
|
@@ -718,10 +924,10 @@ class Application
|
|
718
924
|
include Configurable
|
719
925
|
include Persistable
|
720
926
|
ApplicationParams = Struct.new( "ApplicationParams",
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
927
|
+
:name,
|
928
|
+
:version,
|
929
|
+
:config_file,
|
930
|
+
:persistent_file
|
725
931
|
)
|
726
932
|
|
727
933
|
def initialize(_ap=ApplicationParams.new)
|
@@ -742,47 +948,48 @@ class Application
|
|
742
948
|
publish('pers', properties_file2hash(self['applicationParams'].persistent_file)) if self['applicationParams'].persistent_file
|
743
949
|
yield(self) if block_given?
|
744
950
|
end
|
745
|
-
|
951
|
+
|
746
952
|
def Application.instance
|
747
953
|
@@instance
|
748
954
|
end
|
749
955
|
|
750
956
|
def Application.conf(_property)
|
751
|
-
|
957
|
+
@@instance['conf'][_property] if @@instance
|
752
958
|
end
|
753
959
|
|
754
960
|
def conf(_property)
|
755
|
-
|
961
|
+
self['conf'][_property]
|
756
962
|
end
|
757
|
-
|
963
|
+
|
758
964
|
def Application.sys_info
|
759
965
|
"[Platform = #{RUBY_PLATFORM}]\n[Ruby version = #{RUBY_VERSION}]"
|
760
966
|
end
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
if @@conf_groups
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
967
|
+
|
968
|
+
|
969
|
+
# def Application.conf_group(_group, _suff = 'conf')
|
970
|
+
# group_key="#{_suff}.#{_group}"
|
971
|
+
# @@conf_groups = Hash.new if !defined?(@@conf_groups)
|
972
|
+
# if @@conf_groups[group_key].nil?
|
973
|
+
# @@conf_groups[group_key] = Hash.new
|
974
|
+
# glen=_group.length
|
975
|
+
# @@instance['conf'].keys.sort.each{|k|
|
976
|
+
# if k[0..glen] == "#{_group}."
|
977
|
+
# @@conf_groups[group_key][k[glen+1..-1]]=@@instance['conf'][k]
|
978
|
+
# elsif @@conf_groups[group_key].length > 0
|
979
|
+
# break
|
980
|
+
# end
|
981
|
+
# }
|
982
|
+
# end
|
983
|
+
# @@conf_groups[_group]
|
984
|
+
# end
|
778
985
|
|
779
986
|
def Application.del_conf_group(_conf_hash, _group)
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
987
|
+
glen=_group.length
|
988
|
+
_conf_hash.keys.sort.each{|k|
|
989
|
+
if k[0..glen] == "#{_group}."
|
990
|
+
_conf_hash.delete(k)
|
991
|
+
end
|
992
|
+
}
|
786
993
|
end
|
787
994
|
|
788
995
|
def Application.del_conf(_k)
|
@@ -804,60 +1011,60 @@ class Application
|
|
804
1011
|
def local_file_config
|
805
1012
|
File.join(local_dir, File.basename(self['applicationParams'].config_file))
|
806
1013
|
end
|
807
|
-
|
1014
|
+
|
808
1015
|
def update_local_config
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
end
|
1016
|
+
# local_dir is ~/arcadia
|
1017
|
+
if FileTest.exist?(local_file_config)
|
1018
|
+
if FileTest.writable?(local_dir)
|
1019
|
+
f = File.new(local_file_config, "w")
|
1020
|
+
begin
|
1021
|
+
if f
|
1022
|
+
properties = self['conf']
|
1023
|
+
if properties
|
1024
|
+
properties.keys.sort.each{|key|
|
1025
|
+
if self['conf_without_local'][key] == self['conf'][key] || (self['origin_conf'][key] && self['origin_conf'][key].include?('>>>')) # || self['local_conf'][key].nil?
|
1026
|
+
f.syswrite("# #{key}=#{self['origin_conf'][key]}\n") # write it as a comment since it isn't a real change
|
1027
|
+
elsif self['conf'][key]
|
1028
|
+
f.syswrite("#{key}=#{self['conf'][key]}\n")
|
1029
|
+
end
|
1030
|
+
}
|
825
1031
|
end
|
826
|
-
ensure
|
827
|
-
f.close unless f.nil?
|
828
1032
|
end
|
1033
|
+
ensure
|
1034
|
+
f.close unless f.nil?
|
829
1035
|
end
|
830
1036
|
end
|
1037
|
+
end
|
831
1038
|
end
|
832
|
-
|
1039
|
+
|
833
1040
|
# this method load config file from local directory for personalizations
|
834
1041
|
def load_local_config(_create_if_not_exist=true)
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
end
|
1042
|
+
if FileTest.exist?(local_file_config)
|
1043
|
+
self['local_conf']= self.properties_file2hash(local_file_config)
|
1044
|
+
self['conf'].update(self['local_conf'])
|
1045
|
+
elsif _create_if_not_exist
|
1046
|
+
if FileTest.writable?(local_dir)
|
1047
|
+
f = File.new(local_file_config, "w")
|
1048
|
+
begin
|
1049
|
+
if f
|
1050
|
+
p = self['conf']
|
1051
|
+
if p
|
1052
|
+
p.keys.sort.each{|key|
|
1053
|
+
f.syswrite('#'+key+'='+self['conf'][key]+"\n")
|
1054
|
+
}
|
849
1055
|
end
|
850
|
-
ensure
|
851
|
-
f.close unless f.nil?
|
852
1056
|
end
|
853
|
-
|
854
|
-
|
855
|
-
Arcadia.dialog(self, 'type'=>'ok','title' => '(Arcadia)', 'msg' => msg, 'level'=>'error')
|
856
|
-
exit
|
1057
|
+
ensure
|
1058
|
+
f.close unless f.nil?
|
857
1059
|
end
|
1060
|
+
else
|
1061
|
+
msg = "Locad dir "+'"'+local_dir+'"'+" must be writable!"
|
1062
|
+
Arcadia.dialog(self, 'type'=>'ok','title' => '(Arcadia)', 'msg' => msg, 'level'=>'error')
|
1063
|
+
exit
|
858
1064
|
end
|
1065
|
+
end
|
859
1066
|
end
|
860
|
-
|
1067
|
+
|
861
1068
|
def load_theme(_name=nil)
|
862
1069
|
_theme_file = "conf/theme-#{_name}.conf" if !_name.nil?
|
863
1070
|
if _theme_file && File.exist?(_theme_file)
|
@@ -868,13 +1075,13 @@ class Application
|
|
868
1075
|
if _theme_res_file && File.exist?(_theme_res_file)
|
869
1076
|
begin
|
870
1077
|
require _theme_res_file
|
871
|
-
rescue Exception => e
|
1078
|
+
rescue Exception => e
|
872
1079
|
end
|
873
1080
|
|
874
1081
|
end
|
875
|
-
end
|
1082
|
+
end
|
876
1083
|
end
|
877
|
-
|
1084
|
+
|
878
1085
|
def local_dir
|
879
1086
|
home = File.expand_path '~'
|
880
1087
|
_local_dir = File.join(home,'.'+self['applicationParams'].name) if home
|
@@ -910,9 +1117,9 @@ class Application
|
|
910
1117
|
|
911
1118
|
def []=(_name, _value)
|
912
1119
|
@objs[_name] = _value
|
913
|
-
# if @objs[_name]
|
914
|
-
# @objs[_name] = _value
|
915
|
-
# end
|
1120
|
+
# if @objs[_name]
|
1121
|
+
# @objs[_name] = _value
|
1122
|
+
# end
|
916
1123
|
end
|
917
1124
|
|
918
1125
|
|