arcadia 0.12.2 → 0.13.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.
Files changed (57) hide show
  1. data/README +25 -14
  2. data/conf/LC/en-UK.LANG +3 -1
  3. data/conf/arcadia.conf +10 -0
  4. data/conf/arcadia.res.rb +29 -1
  5. data/ext/ae-editor/ae-editor.rb +239 -48
  6. data/ext/ae-file-history/ae-file-history.conf +11 -1
  7. data/ext/ae-file-history/ae-file-history.rb +120 -2
  8. data/ext/ae-ruby-debug/ae-ruby-debug.rb +6 -5
  9. data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +7 -3
  10. data/ext/ae-term/ae-term.rb +1 -1
  11. data/lib/a-commons.rb +72 -56
  12. data/lib/a-contracts.rb +23 -1
  13. data/lib/a-core.rb +136 -41
  14. data/lib/a-tkcommons.rb +127 -36
  15. data/tcl/fsdialog/fsdialog.tcl +2 -2
  16. data/tcl/ptwidgets-1.1.0/COPYRIGHT +10 -0
  17. data/tcl/ptwidgets-1.1.0/ChangeLog +194 -0
  18. data/tcl/ptwidgets-1.1.0/README +50 -0
  19. data/tcl/ptwidgets-1.1.0/common/stacktrace.tcl +29 -0
  20. data/tcl/ptwidgets-1.1.0/common/tokenframe.tcl +200 -0
  21. data/tcl/ptwidgets-1.1.0/doc/img/toggleswitch_off.png +0 -0
  22. data/tcl/ptwidgets-1.1.0/doc/img/toggleswitch_on.png +0 -0
  23. data/tcl/ptwidgets-1.1.0/doc/img/tokenentry.png +0 -0
  24. data/tcl/ptwidgets-1.1.0/doc/img/tokensearch_popup_example.png +0 -0
  25. data/tcl/ptwidgets-1.1.0/doc/img/tokensearch_popup_example2.png +0 -0
  26. data/tcl/ptwidgets-1.1.0/doc/img/wmarkentry.png +0 -0
  27. data/tcl/ptwidgets-1.1.0/doc/toggleswitch.html +402 -0
  28. data/tcl/ptwidgets-1.1.0/doc/tokenentry.html +1366 -0
  29. data/tcl/ptwidgets-1.1.0/doc/tokensearch.html +1549 -0
  30. data/tcl/ptwidgets-1.1.0/doc/wmarkentry.html +634 -0
  31. data/tcl/ptwidgets-1.1.0/library/toggleswitch.tcl +432 -0
  32. data/tcl/ptwidgets-1.1.0/library/tokenentry.tcl +2208 -0
  33. data/tcl/ptwidgets-1.1.0/library/tokensearch.tcl +2488 -0
  34. data/tcl/ptwidgets-1.1.0/library/wmarkentry.tcl +630 -0
  35. data/tcl/ptwidgets-1.1.0/pkgIndex.tcl +10 -0
  36. data/tcl/ptwidgets-1.1.0/test/Makefile +3 -0
  37. data/tcl/ptwidgets-1.1.0/test/run.tcl +3 -0
  38. data/tcl/ptwidgets-1.1.0/test/test.tcl +89 -0
  39. data/tcl/ptwidgets-1.1.0/test/toggleswitch.test +562 -0
  40. data/tcl/ptwidgets-1.1.0/test/tokenentry.test +1023 -0
  41. data/tcl/ptwidgets-1.1.0/test/tokensearch.test +1023 -0
  42. data/tcl/ptwidgets-1.1.0/test/wmarkentry.test +1325 -0
  43. data/tcl/themes/altTheme.tcl +101 -0
  44. data/tcl/themes/aquaTheme.tcl +59 -0
  45. data/tcl/themes/clamTheme.tcl +140 -0
  46. data/tcl/themes/classicTheme.tcl +108 -0
  47. data/tcl/themes/pkgIndex.tcl +3 -0
  48. data/tcl/themes/ttk.tcl +176 -0
  49. data/tcl/themes/vistaTheme.tcl +224 -0
  50. data/tcl/themes/winTheme.tcl +80 -0
  51. data/tcl/themes/xpTheme.tcl +65 -0
  52. data/tcl/tkfbox/folder.gif +0 -0
  53. data/tcl/tkfbox/textfile.gif +0 -0
  54. data/tcl/tkfbox/tkfbox.tcl +1 -0
  55. data/tcl/tkfbox/tkfbox.tcl~ +1 -0
  56. data/tcl/tkfbox/updir.xbm +1 -0
  57. metadata +43 -2
@@ -8,4 +8,14 @@ class=FilesHistrory
8
8
 
9
9
  file.name=arcadia.history
10
10
  length=20
11
- view=tree
11
+ view=tree
12
+
13
+ bookmarks.range=10
14
+
15
+ user_toolbar.contexts=bookmarks
16
+ user_toolbar.bookmarks.context_path=file
17
+ user_toolbar.bookmarks=bm
18
+ user_toolbar.bookmarks.bm.name=togglebm
19
+ user_toolbar.bookmarks.bm.hint=!Arcadia.text('ext.file_history.toggle_bookmark')
20
+ user_toolbar.bookmarks.bm.image_data=!BOOKMARK_GIF
21
+ user_toolbar.bookmarks.bm.event_class=!ToggleBookmarkEvent
@@ -86,12 +86,16 @@ class FilesHistrory < ArcadiaExt
86
86
  end
87
87
 
88
88
  def on_before_build(_event)
89
+ @bookmarks =Array.new
89
90
  Arcadia.attach_listener(self, BufferRaisedEvent)
91
+ Arcadia.attach_listener(self, BookmarkEvent)
90
92
  end
91
93
 
92
94
  def on_build(_event)
93
95
  @h_stack = Hash.new
94
96
  @h_stack_changed = false
97
+ @bookmarks_frame = TkFrame.new(self.frame.hinner_frame)
98
+ @history_frame = TkFrame.new(self.frame.hinner_frame).pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes')
95
99
  @panel = self.frame.root.add_panel(self.frame.name, "sync");
96
100
  @cb_sync = TkCheckButton.new(@panel, Arcadia.style('checkbox').update('background'=>@panel.background)){
97
101
  text 'Sync'
@@ -152,7 +156,7 @@ class FilesHistrory < ArcadiaExt
152
156
  @font_b = "#{Arcadia.conf('treeitem.font')} bold"
153
157
  @font_italic = "#{Arcadia.conf('treeitem.font')} italic"
154
158
 
155
- @htree = BWidgetTreePatched.new(self.frame.hinner_frame, Arcadia.style('treepanel')){
159
+ @htree = BWidgetTreePatched.new(@history_frame, Arcadia.style('treepanel')){
156
160
  showlines false
157
161
  deltay 18
158
162
  crosscloseimage Arcadia.image_res(PLUS_GIF)
@@ -190,7 +194,7 @@ class FilesHistrory < ArcadiaExt
190
194
  build_tree
191
195
  pop_up_menu_tree
192
196
 
193
- @hlist = TkText.new(self.frame.hinner_frame, Arcadia.style('text')){|j|
197
+ @hlist = TkText.new(@history_frame, Arcadia.style('text')){|j|
194
198
  wrap 'none'
195
199
  font @font_italic
196
200
  cursor nil
@@ -206,7 +210,93 @@ class FilesHistrory < ArcadiaExt
206
210
  @hlist.show
207
211
  end
208
212
  end
213
+
214
+ def on_initialize(_event)
215
+ load_persistent_bookmarks
216
+ end
217
+
218
+
219
+ def on_bookmark(_event)
220
+ return if _event.file.nil?
221
+ case _event
222
+ when ToggleBookmarkEvent
223
+ self.frame.show_anyway
224
+ # set or unset ?
225
+ to_set = true
226
+ to_del_detail = nil
227
+ @bookmarks.each{|detail|
228
+ if detail[:file] == _event.file && (_event.from_row.to_i >= detail[:from_line].to_i - _event.range) && (_event.to_row.to_i <= detail[:to_line].to_i + _event.range)
229
+ to_set = false
230
+ to_del_detail = detail
231
+ end
232
+ break if !to_set
233
+ }
234
+ if to_set
235
+ SetBookmarkEvent.new(self,
236
+ 'file'=>_event.file,
237
+ 'from_row'=>_event.from_row,
238
+ 'to_row'=>_event.to_row,
239
+ 'range'=>_event.range,
240
+ 'persistent'=>_event.persistent,
241
+ 'id'=>_event.id).go!
242
+ else
243
+ UnsetBookmarkEvent.new(self,
244
+ 'file'=>_event.file,
245
+ 'from_row'=>to_del_detail[:from_line],
246
+ 'to_row'=>to_del_detail[:to_line],
247
+ 'range'=>_event.range,
248
+ 'persistent'=>_event.persistent,
249
+ 'id'=>_event.id).go!
250
+ end
251
+ when SetBookmarkEvent
252
+ @bookmarks_frame.pack('before'=>@history_frame,'side' =>'top','anchor'=>'nw', 'fill'=>'x', :padx=>0, :pady=>0) if @bookmarks.empty?
253
+ if _event.persistent
254
+ bookmark = {:file=>_event.file}
255
+ caption = File.basename(_event.file)
256
+ else
257
+ bookmark = {:file=>"__TMP__#{_event.id}"}
258
+ caption = _event.id
259
+ end
260
+ caption = "#{caption} [#{_event.from_row}, #{_event.to_row}]"
261
+ bookmark[:from_line] = _event.from_row
262
+ bookmark[:to_line] = _event.to_row
263
+ bookmark[:persistent] = _event.persistent
264
+ bookmark[:widget] = Tk::BWidget::Button.new(@bookmarks_frame, Arcadia.style('toolbarbutton')){
265
+ image Arcadia.image_res(BOOKMARK_GIF)
266
+ compound 'left'
267
+ anchor "w"
268
+ command proc{OpenBufferTransientEvent.new(self,'file'=>_event.file, 'row'=> _event.from_row).go!}
269
+ #width 20
270
+ #height 20
271
+ helptext _event.content
272
+ text caption
273
+ }.pack('side' =>'top','anchor'=>'nw', 'fill'=>'x', :padx=>0, :pady=>0)
274
+
275
+ Tk::BWidget::Button.new(bookmark[:widget], Arcadia.style('toolbarbutton')){
276
+ image TkPhotoImage.new('dat' => CLOSE_GIF)
277
+ command proc{UnsetBookmarkEvent.new(self,
278
+ 'file'=>_event.file,
279
+ 'from_row'=>_event.from_row,
280
+ 'to_row'=>_event.to_row).go!}
281
+ #width 20
282
+ height 16
283
+ }.pack('side' =>'right','anchor'=>'e', 'fill'=>'y', :padx=>0, :pady=>0)
284
+
285
+ @bookmarks << bookmark
286
+ when UnsetBookmarkEvent
287
+ @bookmarks.delete_if{|b|
288
+ if (b[:file]==_event.file && b[:from_line]==_event.from_row)
289
+ b[:widget].destroy
290
+ true
291
+ else
292
+ false
293
+ end
294
+ }
295
+ @bookmarks_frame.unpack if @bookmarks.empty?
296
+ end
209
297
 
298
+ end
299
+
210
300
  def toggle_list_tree
211
301
  Tk::BWidget::DynamicHelp::delete(@btoggle_list_tree)
212
302
  if @is_tree
@@ -433,6 +523,8 @@ class FilesHistrory < ArcadiaExt
433
523
  @hlist.tag_configure(tag_name, 'underline'=>false)
434
524
  }
435
525
  )
526
+ TkTextImage.new(@hlist, 'end', 'image'=> Arcadia.file_icon(_file))
527
+ @hlist.insert("end", " ")
436
528
  @hlist.insert("end", "#{File.basename(_file)}\n", tag_name)
437
529
  @hlist.tag_bind(tag_name,"ButtonPress-1", proc{OpenBufferTransientEvent.new(self,'file'=>_file).go!})
438
530
  end
@@ -614,6 +706,14 @@ class FilesHistrory < ArcadiaExt
614
706
  end
615
707
 
616
708
  def on_finalize(_event)
709
+ bookmarks = '';
710
+ @bookmarks.each{|bm|
711
+ if bm[:file] != nil && bm[:persistent]
712
+ bookmarks="#{bookmarks}|" if bookmarks.strip.length > 0
713
+ bookmarks="#{bookmarks}#{bm[:file]}@@@#{bm[:from_line]}@@@#{bm[:to_line]}"
714
+ end
715
+ }
716
+ Arcadia.persistent('bookmarks', bookmarks)
617
717
  if @is_tree
618
718
  conf('view','tree')
619
719
  else
@@ -648,6 +748,24 @@ class FilesHistrory < ArcadiaExt
648
748
  end
649
749
  end
650
750
 
751
+ def load_persistent_bookmarks
752
+ b = Arcadia.persistent('bookmarks')
753
+ if b
754
+ bm_list =b.split("|")
755
+ bm_list.each do |bm|
756
+ file,from_line,to_line = bm.split('@@@')
757
+ if file && from_line && to_line
758
+ SetBookmarkEvent.new(self,
759
+ 'file'=>file,
760
+ 'from_row'=>from_line.to_i,
761
+ 'to_row'=>to_line.to_i,
762
+ 'persistent'=>true).go!
763
+ end
764
+ end
765
+ end
766
+ end
767
+
768
+
651
769
  def create_history_file(_content=nil)
652
770
  dir,fil =File.split(File.expand_path(history_file))
653
771
  if !File.exist?(dir)
@@ -833,20 +833,19 @@ class RubyDebugServer
833
833
  set_alive(false)
834
834
  notify(RDS_QUIET)
835
835
  Kernel.system('y')
836
-
837
836
  if _debug_event.persistent == false && File.basename(_debug_event.file)[0..1] == '~~'
838
837
  File.delete(_debug_event.file) if File.exist?(_debug_event.file)
839
838
  end
840
-
841
839
  Kernel.exit!
842
840
  else
841
+ set_alive(false)
842
+ notify(RDS_QUIET)
843
843
  Kernel.exit!
844
- Arcadia.console(self, 'msg'=>"#{$?.inspect}", 'level'=>'debug')
844
+ Arcadia.console(self, 'msg'=>"#{$!.inspect}", 'level'=>'debug')
845
845
  end
846
846
  end
847
847
  end
848
848
  rescue Exception => e
849
-
850
849
  Arcadia.console(self, 'msg'=>Arcadia.text('ext.ruby_debug.server.e.on_start', [e.class, e.message]), 'level'=>'debug')
851
850
  #Arcadia.new_debug_msg(self,"Error on start_server : #{e.class}:#{e.message}")
852
851
  end
@@ -1012,6 +1011,7 @@ class RubyDebugClient
1012
1011
  begin
1013
1012
  #sleep(2)
1014
1013
  @session = TCPSocket.new(@server, @port)
1014
+ #@session = IO.popen("|rdebug -c --cport #{@port}",'r+')
1015
1015
  @pend = false
1016
1016
  rescue Errno::ECONNREFUSED,Errno::EBADF => e
1017
1017
  sleep(1)
@@ -1078,6 +1078,7 @@ class RubyDebugClient
1078
1078
  return false if @busy
1079
1079
  if is_alive?
1080
1080
  @busy = true
1081
+ #p "sending #{_command}"
1081
1082
  @session.puts(_command) if socket_session
1082
1083
  else
1083
1084
  start_session if !@pend
@@ -1087,7 +1088,7 @@ class RubyDebugClient
1087
1088
  rescue Errno::ECONNABORTED,Errno::ECONNRESET, Errno::EPIPE => e
1088
1089
  notify("quit_yes")
1089
1090
  #DebugContract.instance.debug_end(self)
1090
- Arcadia.console(self, 'msg'=>Arcadia.text('ext.ruby_debug.client.e.abort_session', [e.class, e.inspect]), 'level'=>'debug')
1091
+ Arcadia.console(self, 'msg'=>Arcadia.text('ext.ruby_debug.client.e.abort_session', [_command, e.class, e.inspect]), 'level'=>'debug')
1091
1092
  @session = nil
1092
1093
  @pend = true
1093
1094
  false
@@ -54,11 +54,10 @@ end
54
54
  class SubProcessWidget < Tk::BWidget::Button
55
55
  attr_reader :event
56
56
  def initialize(_parent=nil, _event=nil, *args)
57
- super(Arcadia['toolbar'].frame, Arcadia.style('button').update("background"=>'black',"activebackground"=>'black', 'relief'=>'groove'))
57
+ super(Arcadia['toolbar'].frame, Arcadia.style('button').update("compound"=>'left', "background"=>'black',"activebackground"=>'black', 'relief'=>'groove'))
58
58
  @parent = _parent
59
59
  @event = _event
60
60
  b_command = proc{
61
-
62
61
  message = Arcadia.text('ext.spi.d.kill.msg', [_event.pid, _event.name])
63
62
  r=Arcadia.dialog(self,
64
63
  'type'=>'yes_no',
@@ -69,7 +68,12 @@ class SubProcessWidget < Tk::BWidget::Button
69
68
  _event.abort_action.call
70
69
  end
71
70
  }
72
- command b_command
71
+ command b_command
72
+ begin
73
+ text File.basename(_event.name)
74
+ rescue
75
+ text _event.name
76
+ end
73
77
  helptext "#{_event.name} [pid #{_event.pid}]"
74
78
  pack('side' =>'left', :padx=>2, :pady=>0)
75
79
  Tk::Anigif.image(self, "#{Dir.pwd}/ext/ae-subprocess-inspector/process.res")
@@ -130,7 +130,7 @@ class Term < ArcadiaExtPlus
130
130
 
131
131
  def do_run_external_term(_dir)
132
132
  if Arcadia.is_windows?
133
- system("cd #{_dir} & start cdm")
133
+ system("cd #{_dir} & start cmd")
134
134
  else
135
135
  system("cd #{_dir}; xterm &")
136
136
  end
@@ -215,15 +215,15 @@ class ArcadiaExt
215
215
  attr_reader :name
216
216
  def initialize(_arcadia, _name=nil)
217
217
  @arcadia = _arcadia
218
- @arcadia.register(self)
219
218
  @name = _name
219
+ @arcadia.register(self)
220
220
  @frames = Array.new
221
- @frames_points = conf_array("#{_name}.frames")
222
- @frames_labels = conf_array("#{_name}.frames.labels")
223
- @frames_names = conf_array("#{_name}.frames.names")
221
+ @frames_points = conf_array("frames")
222
+ @frames_labels = conf_array("frames.labels")
223
+ @frames_names = conf_array("frames.names")
224
224
  @float_frames = Array.new
225
- @float_geometries = conf_array("#{_name}.float_frames")
226
- @float_labels = conf_array("#{_name}.float_labels")
225
+ @float_geometries = conf_array("float_frames")
226
+ @float_labels = conf_array("float_labels")
227
227
  Arcadia.attach_listener(self, BuildEvent)
228
228
  Arcadia.attach_listener(self, InitializeEvent)
229
229
  Arcadia.attach_listener(self, ExitQueryEvent)
@@ -236,23 +236,25 @@ class ArcadiaExt
236
236
  end
237
237
 
238
238
  def conf_array(_name)
239
- res = []
240
- value = @arcadia['conf'][_name]
241
- res.concat(value.split(',')) if value
242
- res
239
+ # res = []
240
+ # value = @arcadia['conf'][_name]
241
+ # res.concat(value.split(',')) if value
242
+ # res
243
+ Application.conf_array("#{@name}.#{_name}")
243
244
  end
244
245
 
245
246
  def array_conf(_name, _array)
246
- value = ''
247
- _array.each{|e|
248
- if value.length > 0
249
- value = "#{value},#{e}"
250
- else
251
- value = "#{e}"
252
- end
253
- }
254
- @arcadia['conf'][_name]=value
255
- value
247
+ # value = ''
248
+ # _array.each{|e|
249
+ # if value.length > 0
250
+ # value = "#{value},#{e}"
251
+ # else
252
+ # value = "#{e}"
253
+ # end
254
+ # }
255
+ # @arcadia['conf'][_name]=value
256
+ # value
257
+ Application.array_conf("#{@name}.#{_name}", _array)
256
258
  end
257
259
 
258
260
  def add_to_conf_property(_name, _value)
@@ -269,6 +271,10 @@ class ArcadiaExt
269
271
  array_conf(_name,a)
270
272
  end
271
273
 
274
+ def frame_title(_n=0)
275
+ @frames_labels[_n] if @frames[_n] != nil
276
+ end
277
+
272
278
  def frame_def_visible?(_n=0)
273
279
  @arcadia.layout.domains.include?(@frames_points[_n])
274
280
  #@frames_points[_n] != '-1.-1'
@@ -398,26 +404,6 @@ class ArcadiaExtPlus < ArcadiaExt
398
404
  Arcadia.attach_listener(self, ActivateInstanceEvent)
399
405
  super(_arcadia, _name)
400
406
  @@active_instance[self.class] = self if @@active_instance[self.class] == nil
401
- # if self.frame != nil
402
- # self.frame.hinner_frame.bind_append("Enter", proc{activate})
403
- # if @@main_instance[self.class] == self
404
- # frame.root.add_state_button(
405
- # self.name,
406
- # 'Duplicate',
407
- # proc{duplicate},
408
- # PLUS_EX_GIF,
409
- # 'left')
410
- # activate(self, false)
411
- # else
412
- # frame.root.add_state_button(
413
- # self.name,
414
- # 'Destroy',
415
- # proc{deduplicate},
416
- # MINUS_EX_GIF,
417
- # 'left')
418
- # activate(self, false)
419
- # end
420
- # end
421
407
  end
422
408
 
423
409
  def frame(_n=0,create_if_not_exist=true)
@@ -426,13 +412,13 @@ class ArcadiaExtPlus < ArcadiaExt
426
412
  @frame_initialize = true
427
413
  fr.hinner_frame.bind_append("Enter", proc{activate})
428
414
  if main_instance?
429
- fr.root.add_state_button(
430
- self.name,
431
- 'Duplicate',
432
- proc{duplicate},
433
- PLUS_EX_GIF,
434
- 'left')
435
- activate(self, false)
415
+ # fr.root.add_state_button(
416
+ # self.name,
417
+ # 'Duplicate',
418
+ # proc{duplicate},
419
+ # PLUS_EX_GIF,
420
+ # 'left')
421
+ # activate(self, false)
436
422
  else
437
423
  fr.root.add_state_button(
438
424
  self.name,
@@ -508,17 +494,25 @@ class ArcadiaExtPlus < ArcadiaExt
508
494
  exist
509
495
  end
510
496
 
511
- def duplicate(_name=new_name)
497
+ def duplicate(_name=nil, _dom=nil, _confirm_on_exit=true)
498
+ _name = new_name if _name.nil?
499
+ @confirm_on_exit = _confirm_on_exit
512
500
  #create conf properties
513
501
  Arcadia.conf_group_copy(@@main_instance[self.class].name, _name)
514
- instance = clone(_name)
502
+ if !_dom.nil?
503
+ doms = Application.conf_array("#{_name}.frames")
504
+ doms[0] = _dom
505
+ Application.array_conf("#{_name}.frames", doms)
506
+ end
507
+ instance = clone(_name, _dom)
515
508
  #initialize
516
509
  Arcadia.process_event(InitializeEvent.new(Arcadia.instance), [instance])
517
- add_to_conf_property("#{main_instance.name}.clones", _name)
510
+ #add_to_conf_property("#{main_instance.name}.clones", _name)
511
+ main_instance.add_to_conf_property("clones", _name)
518
512
  instance
519
513
  end
520
514
 
521
- def clone(_name)
515
+ def clone(_name, _dom=nil)
522
516
  #create
523
517
  instance = self.class.new(Arcadia.instance, _name)
524
518
  #build
@@ -545,21 +539,22 @@ class ArcadiaExtPlus < ArcadiaExt
545
539
  @@instances[self.class].delete(self) if @@instances[self.class]
546
540
  Arcadia.del_conf_group(Arcadia['conf'],@name)
547
541
  Arcadia.del_conf_group(Arcadia['pers'],@name)
548
- del_from_conf_property("#{main_instance.name}.clones", @name)
542
+ #del_from_conf_property("#{main_instance.name}.clones", @name)
543
+ main_instance.del_from_conf_property("clones", @name)
549
544
  Arcadia.process_event(ClearCacheInstanceEvent.new(Arcadia.instance), [self])
550
545
  Arcadia.process_event(DestroyInstanceEvent.new(Arcadia.instance), [self])
551
546
  end
552
547
 
553
548
  def deduplicate
554
- if (Arcadia.dialog(self, 'type'=>'yes_no',
549
+ can_exit=true
550
+ if @confirm_on_exit && (Arcadia.dialog(self, 'type'=>'yes_no',
555
551
  'msg'=>Arcadia.text('main.d.confirm_delete_ext_instance.msg', [@name]),
556
552
  'title' => Arcadia.text('main.d.confirm_delete_ext_instance.title', [@name]),
557
553
  'level' => 'question')=='yes')
558
554
  exit_query_event = Arcadia.process_event(ExitQueryEvent.new(self, 'can_exit'=>true))
559
- if exit_query_event.can_exit
560
- clean_instance
561
- end
555
+ can_exit = exit_query_event.can_exit
562
556
  end
557
+ clean_instance if can_exit
563
558
  end
564
559
 
565
560
  end
@@ -1113,6 +1108,27 @@ class Application
1113
1108
  def Application.del_conf(_k)
1114
1109
  @@instance['conf'].delete(_k)
1115
1110
  end
1111
+
1112
+ def Application.conf_array(_name)
1113
+ res = []
1114
+ value = @@instance['conf'][_name]
1115
+ res.concat(value.split(',')) if value
1116
+ res
1117
+ end
1118
+
1119
+ def Application.array_conf(_name, _array)
1120
+ value = ''
1121
+ _array.each{|e|
1122
+ if value.length > 0
1123
+ value = "#{value},#{e}"
1124
+ else
1125
+ value = "#{e}"
1126
+ end
1127
+ }
1128
+ @@instance['conf'][_name]=value
1129
+ value
1130
+ end
1131
+
1116
1132
 
1117
1133
  def prepare
1118
1134
  end