arcadia 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/README +132 -134
  2. data/bin/arcadia +13 -0
  3. data/conf/arcadia.conf +196 -3
  4. data/conf/arcadia.init.rb +27 -6
  5. data/conf/arcadia.res.rb +10 -0
  6. data/ext/ae-complete-code/ae-complete-code.rb +76 -82
  7. data/ext/ae-doc-code/ae-doc-code.rb +295 -291
  8. data/ext/ae-editor/ae-editor.conf +88 -67
  9. data/ext/ae-editor/ae-editor.rb +400 -202
  10. data/ext/ae-editor/langs/conf.lang +16 -5
  11. data/ext/ae-editor/langs/lang.lang.bind +1 -1
  12. data/ext/ae-editor/langs/rb.lang +77 -41
  13. data/ext/ae-editor/langs/rbw.lang.bind +1 -1
  14. data/ext/ae-event-log/ae-event-log.rb +46 -45
  15. data/ext/ae-file-history/ae-file-history.conf +1 -1
  16. data/ext/ae-file-history/ae-file-history.rb +373 -298
  17. data/ext/ae-output/ae-output.conf +2 -0
  18. data/ext/ae-output/ae-output.rb +200 -202
  19. data/ext/ae-rad/ae-rad-inspector.rb +64 -70
  20. data/ext/ae-rad/ae-rad-palette.rb +14 -14
  21. data/ext/ae-rad/ae-rad.conf +2 -0
  22. data/ext/ae-rad/lib/tk/al-tk.rb +2991 -2987
  23. data/ext/ae-rad/lib/tk/al-tkarcadia.rb +26 -26
  24. data/ext/ae-ruby-debug/ae-ruby-debug.conf +8 -8
  25. data/ext/ae-ruby-debug/ae-ruby-debug.rb +1566 -1465
  26. data/ext/ae-search-in-files/ae-search-in-files.rb +294 -284
  27. data/ext/ae-shell/ae-shell.rb +20 -11
  28. data/{base → lib}/a-commons.rb +291 -80
  29. data/{base → lib}/a-contracts.rb +40 -18
  30. data/{arcadia.rb → lib/a-core.rb} +238 -148
  31. data/{base → lib}/a-tkcommons.rb +81 -63
  32. metadata +64 -65
  33. data/ext/ae-action-dispatcher/ae-action-dispatcher.conf +0 -6
  34. data/ext/ae-action-dispatcher/ae-action-dispatcher.rb +0 -22
  35. data/ext/ae-inspector/ae-inspector.conf +0 -7
  36. data/ext/ae-inspector/ae-inspector.rb +0 -1519
  37. data/ext/ae-palette/ae-palette.conf +0 -7
  38. data/ext/ae-palette/ae-palette.rb +0 -265
@@ -10,17 +10,17 @@ tabs=0.5c left
10
10
  tab-replace-width-space=2
11
11
 
12
12
  #tabs
13
- tabs.font=courier 11
14
- freebsd::tabs.font=courier 12
15
- win::tabs.font={Courier New} 9
16
- #tabs.side=bottom
13
+ #tabs.font=courier 11
14
+ #freebsd::tabs.font=courier 12
15
+ #win::tabs.font={Courier New} 9
16
+ ##tabs.side=bottom
17
17
  tabs.side=top
18
18
 
19
19
  # editor
20
- font=courier 11
21
- font.bold=courier 11 bold
22
- freebsd::font=courier 12
23
- freebsd::font.bold=courier 12 bold
20
+ #font=courier 11
21
+ #font.bold=courier 11 bold
22
+ #freebsd::font=courier 12
23
+ #freebsd::font.bold=courier 12 bold
24
24
  win::font={Courier New} 9
25
25
  win::font.bold={Courier New} 9 bold
26
26
  #+--------------------------------------------------
@@ -39,43 +39,62 @@ win::font.bold={Courier New} 9 bold
39
39
  #hightlight.goto.color.background=yellow
40
40
  #+--------------------------------------------------
41
41
  #+--------------------------------------------------
42
- color.background=#FFFFFF
43
- color.foreground=#7F7F7F
44
- color.insertbackground=#ff8000
45
- hightlight.keyword.color.foreground=#00007F
46
- hightlight.keyword.style=bold
47
- hightlight.method_name.color.foreground=#007F7F
48
- hightlight.method_name.style=bold
49
- hightlight.class_name.color.foreground=#0000FF
50
- hightlight.class_name.style=bold
51
- hightlight.module_name.color.foreground=#0000FF
52
- hightlight.module_name.style=bold
53
- hightlight.instance_variable.color.foreground=#7F7F7F
54
- hightlight.instance_variable.style=bold
55
- hightlight.comment.color.foreground=#007F00
56
- hightlight.string.color.foreground=#7F007F
57
- hightlight.number.color.foreground=#007F7F
58
- #hightlight.capitalize.color.foreground=#0000FF
59
- hightlight.operator.color.foreground=#000000
60
- hightlight.operator.style=bold
61
- hightlight.sel.color.foreground=black
62
- hightlight.sel.color.background=#68f914
63
- hightlight.sel.borderwidth=1
64
- hightlight.sel.relief=raised
65
- hightlight.debug.color.foreground=black
66
- hightlight.debug.color.background=#b3c1d9
67
- hightlight.debug.borderwidth=2
68
- hightlight.debug.relief=groove
69
- #hightlight.goto.color.foreground=blue
70
- hightlight.selected.color.background=yellow
71
- hightlight.tabs.color.foreground=black
72
- hightlight.tabs.color.background=#b1cfba
73
- hightlight.tabs.borderwidth=1
74
- hightlight.tabs.relief=raised
75
- hightlight.spaces.color.foreground=black
76
- hightlight.spaces.color.background=#d9f42b
77
- hightlight.spaces.borderwidth=1
78
- hightlight.spaces.relief=raised
42
+ hightlight.sel.foreground=>>>hightlight.1.foreground
43
+ hightlight.sel.background=>>>hightlight.1.background
44
+ hightlight.sel.borderwidth=>>>hightlight.1.borderwidth
45
+ hightlight.sel.relief=>>>hightlight.1.relief
46
+ hightlight.selected.background=>>>hightlight.2.background
47
+ hightlight.tabs.foreground=>>>hightlight.3.foreground
48
+ hightlight.tabs.background=>>>hightlight.3.background
49
+ hightlight.tabs.borderwidth=>>>hightlight.3.borderwidth
50
+ hightlight.tabs.relief=>>>hightlight.3.relief
51
+ hightlight.spaces.foreground=>>>hightlight.4.foreground
52
+ hightlight.spaces.background=>>>hightlight.4.background
53
+ hightlight.spaces.borderwidth=>>>hightlight.4.borderwidth
54
+ hightlight.spaces.relief=>>>hightlight.4.relief
55
+ #hightlight.debug.foreground=>>>hightlight.16.foreground
56
+ hightlight.debug.background=>>>hightlight.16.background
57
+ hightlight.debug.borderwidth=>>>hightlight.16.borderwidth
58
+ hightlight.debug.relief=>>>hightlight.16.relief
59
+
60
+
61
+ #color.background=#FFFFFF
62
+ #color.foreground=#7F7F7F
63
+ #color.insertbackground=#ff8000
64
+ #hightlight.keyword.foreground=#00007F
65
+ #hightlight.keyword.style=bold
66
+ #hightlight.method_name.foreground=#007F7F
67
+ #hightlight.method_name.style=bold
68
+ #hightlight.class_name.foreground=#0000FF
69
+ #hightlight.class_name.style=bold
70
+ #hightlight.module_name.foreground=#0000FF
71
+ #hightlight.module_name.style=bold
72
+ #hightlight.instance_variable.color.foreground=#7F7F7F
73
+ #hightlight.instance_variable.style=bold
74
+ #hightlight.comment.color.foreground=#007F00
75
+ #hightlight.string.color.foreground=#7F007F
76
+ #hightlight.number.color.foreground=#007F7F
77
+ ##hightlight.capitalize.color.foreground=#0000FF
78
+ #hightlight.operator.foreground=#000000
79
+ #hightlight.operator.style=bold
80
+ #hightlight.sel.foreground=black
81
+ #hightlight.sel.background=#68f914
82
+ #hightlight.sel.borderwidth=1
83
+ #hightlight.sel.relief=raised
84
+ #hightlight.debug.foreground=black
85
+ #hightlight.debug.background=#b3c1d9
86
+ #hightlight.debug.borderwidth=2
87
+ #hightlight.debug.relief=groove
88
+ ##hightlight.goto.color.foreground=blue
89
+ #hightlight.selected.background=yellow
90
+ #hightlight.tabs.foreground=black
91
+ #hightlight.tabs.background=#b1cfba
92
+ #hightlight.tabs.borderwidth=1
93
+ #hightlight.tabs.relief=raised
94
+ #hightlight.spaces.foreground=black
95
+ #hightlight.spaces.background=#d9f42b
96
+ #hightlight.spaces.borderwidth=1
97
+ #hightlight.spaces.relief=raised
79
98
  #+--------------------------------------------------
80
99
 
81
100
 
@@ -83,28 +102,30 @@ hightlight.spaces.relief=raised
83
102
  #line_number_panel.color.background=#6e6e6e
84
103
  #line_number_panel.color.foreground=white
85
104
 
86
- line_number_panel.color.background=#e1e1e1
87
- #line_number_panel.color.background=#FFFFFF
88
- line_number_panel.color.foreground=#333333
89
-
90
-
91
- # tree explorer
92
- explorer_panel.tree.color.background=#ffffff
93
- explorer_panel.tree.color.foreground=white
94
- #explorer_panel.tabs.side=bottom
105
+ #line_number_panel.color.background=#e1e1e1
106
+ ##line_number_panel.color.background=#FFFFFF
107
+ #line_number_panel.color.foreground=#333333
108
+ #
109
+ #
110
+ tree explorer
111
+ #explorer_panel.tree.color.background=#ffffff
112
+ #explorer_panel.tree.color.foreground=white
113
+ ##explorer_panel.tabs.side=bottom
95
114
  explorer_panel.tabs.side=top
96
-
97
- explorer_panel.tree.font=courier 11
98
- freebsd::explorer_panel.tree.font=courier 12
99
- win::explorer_panel.tree.font={Courier New} 9
100
- explorer_panel.tree.class.color.foreground=#a42019
101
- explorer_panel.tree.class.font=times 10 bold
102
- win::explorer_panel.tree.class.font=times 10 bold
103
- explorer_panel.tree.def.color.foreground=blue
104
- explorer_panel.tree.def.font=times 10
105
- win::explorer_panel.tree.def.font=times 10
106
- explorer_panel.tree.module.color.foreground=#1b691e
107
- explorer_panel.tree.module.font=times 8 bold
108
- win::explorer_panel.tree.module.font={Courier New} 9 bold
115
+ #
116
+ #explorer_panel.tree.font=courier 11
117
+ #freebsd::explorer_panel.tree.font=courier 12
118
+ #win::explorer_panel.tree.font={Courier New} 9
119
+ #explorer_panel.tree.class.color.foreground=#a42019
120
+ #explorer_panel.tree.class.font=times 10 bold
121
+ #win::explorer_panel.tree.class.font=times 10 bold
122
+ #explorer_panel.tree.def.color.foreground=blue
123
+ #explorer_panel.tree.def.font=times 10
124
+ #win::explorer_panel.tree.def.font=times 10
125
+ #explorer_panel.tree.module.color.foreground=#1b691e
126
+ #explorer_panel.tree.module.font=times 8 bold
127
+ #win::explorer_panel.tree.module.font={Courier New} 9 bold
109
128
 
110
129
  #:::::::::::::::: Editor group ::::::::::::::::::::::<end>
130
+ popup.bind.shortcut=Button-3
131
+ arm::popup.bind.shortcut=F4
@@ -5,7 +5,7 @@
5
5
 
6
6
  require 'tk'
7
7
  require 'tktext'
8
- require 'base/a-tkcommons'
8
+ require 'lib/a-tkcommons'
9
9
 
10
10
 
11
11
  class TreeNode
@@ -29,6 +29,15 @@ class TreeNode
29
29
  end
30
30
  end
31
31
 
32
+ #class TkArcadiaText < TkText
33
+ #
34
+ # def insert(insert, chars,*tags)
35
+ # super(insert, chars,*tags)
36
+ # self.modified=true
37
+ # # event_generate("<Modified>")
38
+ # end
39
+ #end
40
+
32
41
  class AgEditor
33
42
  include Configurable
34
43
  attr_reader :file
@@ -39,26 +48,42 @@ class AgEditor
39
48
  @controller = _controller
40
49
  @page_frame = _page_frame
41
50
  @set_mod = false
42
- @font = @controller.conf('font')
43
- @font_bold = @controller.conf('font.bold')
51
+ # @font = @controller.conf('font')
52
+ # @font_bold = @controller.conf('font.bold')
53
+ @font = Arcadia.conf('edit.font')
54
+ @font_bold = "#{Arcadia.conf('edit.font')} bold"
44
55
  @font_metrics = TkFont.new(@font).metrics
45
56
  @font_metrics_bold = TkFont.new(@font_bold).metrics
46
57
  @highlighting = false
47
58
  @classbrowsing = false
48
59
  @find = @controller.get_find
49
60
  @read_only=false
61
+ @loading=false
50
62
  end
51
-
63
+
64
+ def hide_exp
65
+ @fm.hide_left if @fm
66
+ end
67
+
68
+ def is_exp_hide?
69
+ if @fm.nil?
70
+ return true
71
+ else
72
+ @fm.is_left_hide?
73
+ end
74
+ end
75
+
52
76
  def initialize_tree(_frame)
53
77
  @classbrowsing = true
54
- @nb = Tk::BWidget::NoteBook.new(_frame){
78
+
79
+ @nb = Tk::BWidget::NoteBook.new(_frame, Arcadia.style('tabpanel')){
80
+ # activeforeground 'red'
81
+ # activebackground 'yellow'
82
+ # borderwidth 1
83
+ # font $arcadia['conf']['editor.tabs.font']
55
84
  tabbevelsize 0
56
85
  internalborderwidth 0
57
- activeforeground 'red'
58
- activebackground 'yellow'
59
- borderwidth 1
60
86
  side $arcadia['conf']['editor.explorer_panel.tabs.side']
61
- font $arcadia['conf']['editor.tabs.font']
62
87
  pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes')
63
88
  }
64
89
  @nb_tab_exp = @nb.insert('end','exp' ,'text'=>'Source Tree' )
@@ -69,7 +94,8 @@ class AgEditor
69
94
  _hinner_text = @tree_exp.itemcget(_line,'text').strip
70
95
  _editor_line = @text.get(_index, _index+ ' lineend')
71
96
  if !_editor_line.include?(_hinner_text)
72
- Arcadia.new_msg(self, "... rebuild tree \n")
97
+ Arcadia.console(self, 'msg'=>"... rebuild tree \n")
98
+ #Arcadia.new_msg(self, "... rebuild tree \n")
73
99
  if @tree_thread && @tree_thread.alive?
74
100
  @tree_thread.exit
75
101
  end
@@ -84,9 +110,11 @@ class AgEditor
84
110
  @text.tag_remove('selected','1.0','end')
85
111
  @text.tag_add('selected',_line.to_s+'.0',(_line+1).to_s+'.0')
86
112
  }
87
- @tree_exp = Tk::BWidget::Tree.new(@nb_tab_exp){
88
- background '#FFFFFF'
89
- relief 'flat'
113
+ @tree_exp = Tk::BWidget::Tree.new(@nb_tab_exp, Arcadia.style('treepanel')){
114
+ #background Arcadia.conf('edit.background')
115
+ #relief Arcadia.conf('edit.relief')
116
+ #highlightbackground Arcadia.conf('edit.highlightbackground')
117
+ #borderwidth Arcadia.conf('edit.borderwidth')
90
118
  showlines false
91
119
  deltay 18
92
120
  dragenabled true
@@ -95,7 +123,7 @@ class AgEditor
95
123
  }
96
124
 
97
125
  _c_explo = proc{|*args| @tree_exp.yview(*args)}
98
- _s_explo = TkScrollbar.new(@nb_tab_exp){|s|
126
+ _s_explo = TkScrollbar.new(@nb_tab_exp, Arcadia.style('scrollbar')){|s|
99
127
  width 8
100
128
  command _c_explo
101
129
  }.pack('side'=>'right', 'fill'=>'y')
@@ -108,6 +136,8 @@ class AgEditor
108
136
  :parent=>@tree_exp,
109
137
  :title => 'Menu tree'
110
138
  )
139
+ @pop_up_tree.configure(Arcadia.style('menu'))
140
+ #Arcadia.instance.main_menu.update_style(@pop_up_tree)
111
141
  @pop_up_tree.insert('end',
112
142
  :command,
113
143
  :label=>'Rebuild',
@@ -125,20 +155,19 @@ class AgEditor
125
155
 
126
156
 
127
157
  def initialize_text(_frame)
128
- @v_scroll = TkScrollbar.new(_frame,
129
- 'orient'=>'vertical',
130
- 'relief'=>'flat'
158
+ @v_scroll = TkScrollbar.new(_frame,{
159
+ 'orient'=>'vertical'}.update(Arcadia.style('scrollbar'))
131
160
  ).pack('side' => 'right', 'fill' => 'y')
132
- @text = TkText.new(@fm1.right_frame){|j|
161
+ @text = TkText.new(@fm1.right_frame, Arcadia.style('edit')){|j|
133
162
  wrap 'none'
134
- relief 'flat'
163
+ # relief 'flat'
135
164
  undo true
136
165
  insertofftime 200
137
166
  insertontime 200
138
- insertbackground $arcadia['conf']['editor.color.insertbackground']
139
- background $arcadia['conf']['editor.color.background']
140
- foreground $arcadia['conf']['editor.color.foreground']
141
- highlightcolor $arcadia['conf']['editor.color.background']
167
+ # insertbackground $arcadia['conf']['editor.color.insertbackground']
168
+ # background $arcadia['conf']['editor.color.background']
169
+ # foreground $arcadia['conf']['editor.color.foreground']
170
+ # highlightcolor $arcadia['conf']['editor.color.background']
142
171
  highlightthickness 0
143
172
  insertwidth 3
144
173
  exportselection true
@@ -154,7 +183,7 @@ class AgEditor
154
183
  'bordermode'=>'outside'
155
184
  )
156
185
  }
157
- @text.configure('font', @font);
186
+ # @text.configure('font', @font);
158
187
 
159
188
  do_tag_configure_global('debug')
160
189
  @text.tag_configure('eval','foreground' => 'yellow', 'background' =>'red','borderwidth'=>1, 'relief'=>'raised')
@@ -187,10 +216,6 @@ class AgEditor
187
216
  @text.tag_bind('selected', 'Enter', proc{@text.tag_remove('selected','1.0','end')})
188
217
 
189
218
  @text.bind("Enter", proc{check_file_last_access_time})
190
- # @text.bind("ButtonPress-1", proc{
191
- # _code = $arcadia['rad'].palette.give_me_code
192
- # @text.insert('insert', _code) if _code
193
- # })
194
219
 
195
220
  @text.bind("Control-KeyPress"){|e|
196
221
  case e.keysym
@@ -349,22 +374,17 @@ class AgEditor
349
374
  end
350
375
  end
351
376
  }
377
+
378
+
379
+ @text.bind("<Modified>"){|e|
380
+ check_modify
381
+ }
352
382
 
353
383
  @text.bind("KeyRelease"){|e|
354
384
  case e.keysym
355
385
  when 'Control_L','Return', 'Control_V', 'BackSpace', 'Delete'
356
- if modified?
357
- set_modify
358
- else
359
- reset_modify
360
- end
361
386
  do_line_update
362
- when 'Right','Left','Down', 'Up'
363
- # do nil
364
- else
365
- check_modify
366
387
  end
367
-
368
388
  case e.keysym
369
389
  when 'Return'
370
390
  _index = @text.index('insert')
@@ -388,6 +408,7 @@ class AgEditor
388
408
  rehighlightline(@text.index('insert').split('.')[0].to_i)
389
409
  end
390
410
  end
411
+ check_modify
391
412
  }
392
413
 
393
414
 
@@ -416,12 +437,14 @@ class AgEditor
416
437
  end
417
438
  }
418
439
 
440
+ @text.bind_append("1",proc{Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>@text))})
441
+
419
442
  end
420
443
 
421
444
  def initialize_line_number(_frame)
422
- @text_line_num = TkText.new(_frame){
445
+ @text_line_num = TkText.new(_frame, Arcadia.style('linepanel')){
423
446
  wrap 'none'
424
- relief 'flat'
447
+ #relief 'flat'
425
448
  undo false
426
449
  takefocus 0
427
450
  insertofftime 0
@@ -429,11 +452,13 @@ class AgEditor
429
452
  autoseparators true
430
453
  cursor nil
431
454
  insertwidth 0
432
- background $arcadia['conf']['editor.line_number_panel.color.background']
433
- #background $arcadia['conf']['editor.color.background']
434
- foreground $arcadia['conf']['editor.line_number_panel.color.foreground']
435
- highlightcolor $arcadia['conf']['editor.line_number_panel.color.background']
436
- highlightthickness 0
455
+ font Arcadia.conf('edit.font')
456
+ #background Arcadia.conf('panel.background')
457
+ #foreground Arcadia.conf('panel.foreground')
458
+ #background $arcadia['conf']['editor.line_number_panel.color.background']
459
+ #foreground $arcadia['conf']['editor.line_number_panel.color.foreground']
460
+ #highlightcolor $arcadia['conf']['editor.line_number_panel.color.background']
461
+ #highlightthickness 0
437
462
  place(
438
463
  'x'=>0,
439
464
  'y'=>0,
@@ -464,7 +489,7 @@ class AgEditor
464
489
  },
465
490
  "%x %y")
466
491
 
467
- @text_line_num.configure('font', @font);
492
+ #@text_line_num.configure('font', @font);
468
493
  @text_line_num.tag_configure('line_num',
469
494
  'foreground' => '#FFFFFF',
470
495
  'background' =>'#0000a0',
@@ -513,11 +538,11 @@ class AgEditor
513
538
 
514
539
  def do_tag_configure(_name)
515
540
  h = Hash.new
516
- if @lang_hash['hightlight.'+_name+'.color.foreground']
517
- h['foreground']=@lang_hash['hightlight.'+_name+'.color.foreground']
541
+ if @lang_hash['hightlight.'+_name+'.foreground']
542
+ h['foreground']=@lang_hash['hightlight.'+_name+'.foreground']
518
543
  end
519
- if @lang_hash['hightlight.'+_name+'.color.background']
520
- h['background']=@lang_hash['hightlight.'+_name+'.color.background']
544
+ if @lang_hash['hightlight.'+_name+'.background']
545
+ h['background']=@lang_hash['hightlight.'+_name+'.background']
521
546
  end
522
547
  if @lang_hash['hightlight.'+_name+'.style']== 'bold'
523
548
  h['font']=@font_bold
@@ -535,11 +560,11 @@ class AgEditor
535
560
 
536
561
  def do_tag_configure_global(_name)
537
562
  h = Hash.new
538
- if $arcadia['conf']['editor.hightlight.'+_name+'.color.foreground']
539
- h['foreground']=$arcadia['conf']['editor.hightlight.'+_name+'.color.foreground']
563
+ if $arcadia['conf']['editor.hightlight.'+_name+'.foreground']
564
+ h['foreground']=$arcadia['conf']['editor.hightlight.'+_name+'.foreground']
540
565
  end
541
- if $arcadia['conf']['editor.hightlight.'+_name+'.color.background']
542
- h['background']=$arcadia['conf']['editor.hightlight.'+_name+'.color.background']
566
+ if $arcadia['conf']['editor.hightlight.'+_name+'.background']
567
+ h['background']=$arcadia['conf']['editor.hightlight.'+_name+'.background']
543
568
  end
544
569
  if $arcadia['conf']['editor.hightlight.'+_name+'.style']== 'bold'
545
570
  h['font']=@font_bold
@@ -557,9 +582,21 @@ class AgEditor
557
582
  def pop_up_menu
558
583
  @pop_up = TkMenu.new(
559
584
  :parent=>@text,
560
- :tearoff=>1,
585
+ :tearoff=>0,
561
586
  :title => 'Menu'
562
587
  )
588
+ @pop_up.configure(Arcadia.style('menu'))
589
+
590
+ @pop_up.insert('end',
591
+ :command,
592
+ :state=>'disabled',
593
+ :background=>Arcadia.conf('titlelabel.background'),
594
+ :font => "#{Arcadia.conf('menu.font')} bold",
595
+ :hidemargin => true
596
+ )
597
+
598
+
599
+ #Arcadia.instance.main_menu.update_style(@pop_up)
563
600
  @pop_up.insert('end',
564
601
  :command,
565
602
  :label=>'Save as',
@@ -573,6 +610,8 @@ class AgEditor
573
610
  :command=> proc{save}
574
611
  )
575
612
 
613
+ @pop_up.insert('end', :separator)
614
+
576
615
  @pop_up.insert('end',
577
616
  :command,
578
617
  :label=>'Close',
@@ -594,6 +633,50 @@ class AgEditor
594
633
  :command=> proc{@controller.close_all_editor(self)}
595
634
  )
596
635
 
636
+ @pop_up.insert('end', :separator)
637
+
638
+ @pop_up.insert('end',
639
+ :command,
640
+ :label=>'Copy',
641
+ :hidemargin => false,
642
+ :command=> proc{
643
+ @text.event_generate("Control-KeyPress",:keysym=>'c')
644
+ @text.event_generate("Control-KeyRelease",:keysym=>'c')
645
+ }
646
+ )
647
+
648
+ @pop_up.insert('end',
649
+ :command,
650
+ :label=>'Cut',
651
+ :hidemargin => false,
652
+ :command=> proc{
653
+ @text.event_generate("Control-KeyPress",:keysym=>'x')
654
+ @text.event_generate("Control-KeyRelease",:keysym=>'x')
655
+ }
656
+ )
657
+
658
+
659
+ @pop_up.insert('end',
660
+ :command,
661
+ :label=>'Paste',
662
+ :hidemargin => false,
663
+ :command=> proc{
664
+ @text.event_generate("Control-KeyPress",:keysym=>'v')
665
+ @text.event_generate("Control-KeyRelease",:keysym=>'v')
666
+ }
667
+ )
668
+
669
+
670
+ @pop_up.insert('end',
671
+ :command,
672
+ :label=>'Undo',
673
+ :hidemargin => false,
674
+ :command=> proc{
675
+ @text.event_generate("Control-KeyPress",:keysym=>'z')
676
+ @text.event_generate("Control-KeyRelease",:keysym=>'z')
677
+ }
678
+ )
679
+
597
680
 
598
681
  @pop_up.insert('end', :separator)
599
682
 
@@ -614,6 +697,44 @@ class AgEditor
614
697
  }
615
698
  )
616
699
 
700
+ @pop_up.insert('end',
701
+ :command,
702
+ :label=>'Data image',
703
+ :hidemargin => false,
704
+ :command=> proc{
705
+ file = Tk.getOpenFile
706
+ if file
707
+ require 'base64'
708
+ f = File.open(file,"rb")
709
+ data = f.read
710
+ f.close
711
+ encoded = Base64.encode64( data )
712
+ @text.insert('insert', File.basename(file).gsub('.gif','_gif').gsub('-','_').upcase + "=<<EOS\n")
713
+ @text.insert('insert', "#{encoded}")
714
+ @text.insert('insert', "EOS\n")
715
+ end
716
+ }
717
+ )
718
+
719
+ @pop_up.insert('end',
720
+ :command,
721
+ :label=>'View image from data',
722
+ :hidemargin => false,
723
+ :command=> proc{
724
+ _r = @text.tag_ranges('sel')
725
+ if _r.length>0
726
+ _data=@text.get(_r[0][0],_r[0][1])
727
+ if _data.length > 0
728
+
729
+ _b = TkButton.new(@text,
730
+ 'command'=>proc{_b.destroy},
731
+ 'image'=> TkPhotoImage.new('data' => _data),
732
+ 'relief'=>'groove')
733
+ TkTextWindow.new(@text, _r[0][1], 'window'=> _b)
734
+ end
735
+ end
736
+ }
737
+ )
617
738
 
618
739
  @pop_up.insert('end', :separator)
619
740
 
@@ -623,7 +744,7 @@ class AgEditor
623
744
  :tearoff=>0,
624
745
  :title => 'Debug'
625
746
  )
626
-
747
+ _sub_debug.configure(Arcadia.style('menu'))
627
748
  _sub_debug.insert('end',
628
749
  :command,
629
750
  :label=>'Eval selected',
@@ -654,7 +775,7 @@ class AgEditor
654
775
  :tearoff=>0,
655
776
  :title => 'Code'
656
777
  )
657
-
778
+ _sub_code.configure(Arcadia.style('menu'))
658
779
  _sub_code.insert('end',
659
780
  :command,
660
781
  :label=>'Set wrap',
@@ -721,14 +842,12 @@ class AgEditor
721
842
  :menu=>_sub_code,
722
843
  :hidemargin => false
723
844
  )
724
-
725
-
726
-
727
-
728
- @text.bind("Button-3",
845
+
846
+ @text.bind(@controller.conf('popup.bind.shortcut'),
729
847
  proc{|x,y|
730
848
  _x = TkWinfo.pointerx(@text)
731
849
  _y = TkWinfo.pointery(@text)
850
+ @pop_up.entryconfigure(0, 'label'=>File.basename(@file)) if @file
732
851
  @pop_up.popup(_x,_y)
733
852
  },
734
853
  "%x %y")
@@ -854,9 +973,9 @@ class AgEditor
854
973
  @tree_exp.insert('end', _son.parent.rif ,_son.rif, {
855
974
  'text' => _son.label ,
856
975
  'helptext' => _son.helptext,
857
- 'font'=>$arcadia['conf']['editor.explorer_panel.tree.font'],
976
+ #'font'=>$arcadia['conf']['editor.explorer_panel.tree.font'],
858
977
  'image'=> _image
859
- }
978
+ }.update(Arcadia.style('treeitem'))
860
979
  )
861
980
  if (_label_match) && (_label_match.strip == _son.label.strip)
862
981
  @selected = _son
@@ -1162,6 +1281,7 @@ class AgEditor
1162
1281
 
1163
1282
 
1164
1283
  def highlightline(_row, _line, _check_mod = false)
1284
+ #p "highlightline #{_row} _line=#{_line}"
1165
1285
  if _check_mod
1166
1286
  check_modify
1167
1287
  end
@@ -1175,6 +1295,7 @@ class AgEditor
1175
1295
  _ibegin = _row.to_s+'.'+(m_c.begin(0)).to_s
1176
1296
  _iend = _row.to_s+'.'+(_line.length - 1).to_s
1177
1297
  @text.tag_add(c,_ibegin, _iend)
1298
+ #p "tag_add found #{c}"
1178
1299
  _txt = m_c.pre_match
1179
1300
  end
1180
1301
  end
@@ -1197,6 +1318,9 @@ class AgEditor
1197
1318
  def rehighlightline(_row)
1198
1319
  _ibegin = _row.to_s+'.0'
1199
1320
  _iend = (_row+1).to_s+'.0'
1321
+ #p "rehighlightline _ibegin=#{_ibegin}"
1322
+ #p "rehighlightline _iend=#{_iend}"
1323
+ #p "_line = #{@text.get(_ibegin, _iend)}"
1200
1324
  @h_classes.each{|c| @text.tag_remove(c,_ibegin, _iend)}
1201
1325
  _line = @text.get(_ibegin, _iend)
1202
1326
  highlightline(_row, _line)
@@ -1217,42 +1341,49 @@ class AgEditor
1217
1341
  return _row
1218
1342
  end
1219
1343
 
1344
+ def zone_of_row(_row)
1345
+ ((_row) / @highlight_zone_length).to_i + 1
1346
+ end
1347
+
1220
1348
  def do_line_update
1221
1349
  #re num in @text_line_num the portion of visibled screen of @text
1222
- if @text_line_num
1223
- line_begin = @text.index('@0,0').split('.')[0].to_i
1224
- line_end = @text.index('@0,'+TkWinfo.height(@text).to_s).split('.')[0].to_i + 1
1225
- # breakpoint
1226
- b = @controller.breakpoint_lines_on_file(@file)
1227
- @text_line_num.delete('1.0','end')
1228
- for j in line_begin...line_end
1229
- #nline = j.to_s.rjust(6)
1230
- nline = j.to_s.rjust(7)
1231
- _index = @text_line_num.index('end')
1232
- if @highlighting && @is_line_bold[j]
1233
- @text_line_num.insert('end', "#{nline}\n",'bold_case')
1234
- else
1235
- @text_line_num.insert('end', "#{nline}\n")
1350
+ return if @loading
1351
+ if @text_line_num
1352
+ line_begin = @text.index('@0,0').split('.')[0].to_i
1353
+ line_end = @text.index('@0,'+TkWinfo.height(@text).to_s).split('.')[0].to_i + 1
1354
+ # breakpoint
1355
+ b = @controller.breakpoint_lines_on_file(@file)
1356
+ if @highlighting
1357
+ _zone_begin = ((line_begin) / @highlight_zone_length).to_i + 1
1358
+ _zone_end = ((line_end) / @highlight_zone_length).to_i + 1
1359
+ #Arcadia.new_msg(self, "for lines #{line_begin}..#{line_end} \n
1360
+ _zone_begin=#{_zone_begin} ; _zone_end=#{_zone_end}")
1361
+ (_zone_begin >=@last_zone_begin)?_zone_begin.upto(_zone_end+1){|_zone|
1362
+ highlight_zone(_zone)
1363
+ }:_zone_end.downto(_zone_begin-1){|_zone|
1364
+ highlight_zone(_zone)
1365
+ }
1366
+ @last_line_begin = line_begin
1367
+ @last_line_end = line_end
1368
+ @last_zone_begin = _zone_begin
1369
+ @last_zone_end = _zone_end
1236
1370
  end
1237
- if b.include?(j.to_s)
1238
- @text_line_num.tag_add('breakpoint',_index+' -1 lines',_index+' -1 lines lineend')
1371
+
1372
+ @text_line_num.delete('1.0','end')
1373
+ for j in line_begin...line_end
1374
+ #nline = j.to_s.rjust(6)
1375
+ nline = j.to_s.rjust(7)
1376
+ _index = @text_line_num.index('end')
1377
+ if @highlighting && @is_line_bold[j]
1378
+ @text_line_num.insert('end', "#{nline}\n",'bold_case')
1379
+ else
1380
+ @text_line_num.insert('end', "#{nline}\n")
1381
+ end
1382
+ if b.include?(j.to_s)
1383
+ @text_line_num.tag_add('breakpoint',_index+' -1 lines',_index+' -1 lines lineend')
1384
+ end
1239
1385
  end
1240
1386
  end
1241
-
1242
- if @highlighting
1243
- _zone_begin = ((line_begin) / @highlight_zone_length).to_i + 1
1244
- _zone_end = ((line_end) / @highlight_zone_length).to_i + 1
1245
- (_zone_begin >=@last_zone_begin)?_zone_begin.upto(_zone_end+1){|_zone|
1246
- highlight_zone(_zone)
1247
- }:_zone_end.downto(_zone_begin-1){|_zone|
1248
- highlight_zone(_zone)
1249
- }
1250
- @last_line_begin = line_begin
1251
- @last_line_end = line_end
1252
- @last_zone_begin = _zone_begin
1253
- @last_zone_end = _zone_end
1254
- end
1255
- end
1256
1387
  end
1257
1388
 
1258
1389
  def highlight_zone_new(_zone)
@@ -1265,8 +1396,8 @@ class AgEditor
1265
1396
  end
1266
1397
 
1267
1398
 
1268
- def highlight_zone(_zone)
1269
- if !@highlight_zone[_zone]
1399
+ def highlight_zone(_zone, _force_highlight=false)
1400
+ if !@highlight_zone[_zone] || _force_highlight
1270
1401
  _b = @highlight_zone_length*(_zone - 1)
1271
1402
  _e = @highlight_zone_length*(_zone) #+ 1
1272
1403
  for j in _b..._e
@@ -1321,6 +1452,12 @@ class AgEditor
1321
1452
  def save
1322
1453
  if !@file
1323
1454
  save_as
1455
+ elsif @read_only
1456
+ Arcadia.dialog(self,
1457
+ 'type' => 'ok',
1458
+ 'title' =>"#{@file}:read-only",
1459
+ 'msg' =>"The file : #{@file} is read-only!",
1460
+ 'level' =>'warning')
1324
1461
  else
1325
1462
  f = File.new(@file, "w")
1326
1463
  begin
@@ -1371,34 +1508,62 @@ class AgEditor
1371
1508
  end
1372
1509
  end
1373
1510
  end
1374
-
1375
- def init_editing(_ext='rb')
1376
- # find file lang
1377
- _ext='' if _ext.nil?
1378
- lang_file = File.dirname(__FILE__)+'/langs/'+_ext+'.lang'
1379
- if File.exist?(lang_file)
1380
- @lang_hash = properties_file2hash(lang_file)
1381
- elsif File.exist?(lang_file+'.bind')
1382
- b= properties_file2hash(lang_file+'.bind')
1383
- lang_file_bind = File.dirname(__FILE__)+'/langs/'+b['bind']
1384
- if b && File.exist?(lang_file_bind)
1385
- @lang_hash = properties_file2hash(lang_file_bind)
1511
+
1512
+ def languages_hash(_ext=nil)
1513
+ @@langs_hash = Hash.new if !defined?(@@langs_hash)
1514
+ return nil if _ext.nil?
1515
+ if @@langs_hash[_ext].nil?
1516
+ #_ext='' if _ext.nil?
1517
+ lang_file = File.dirname(__FILE__)+'/langs/'+_ext+'.lang'
1518
+ if File.exist?(lang_file)
1519
+ @@langs_hash[_ext] = properties_file2hash(lang_file)
1520
+ elsif File.exist?(lang_file+'.bind')
1521
+ b= properties_file2hash(lang_file+'.bind')
1522
+ if b
1523
+ if @@langs_hash[b['bind']].nil?
1524
+ lang_file_bind = File.dirname(__FILE__)+'/langs/'+b['bind']+".lang"
1525
+ if File.exist?(lang_file_bind)
1526
+ @@langs_hash[b['bind']]=properties_file2hash(lang_file_bind)
1527
+ @@langs_hash[_ext]=@@langs_hash[b['bind']]
1528
+ end
1529
+ else
1530
+ @@langs_hash[_ext]=@@langs_hash[b['bind']]
1531
+ end
1532
+ end
1386
1533
  end
1387
- else
1388
- @lang = nil
1534
+ self.resolve_properties_link(@@langs_hash[_ext], Arcadia.instance['conf']) if @@langs_hash[_ext]
1389
1535
  end
1390
- if _ext=='rb'
1391
- @fm = AGTkVSplittedFrames.new(@page_frame,150)
1392
- @fm1 = AGTkVSplittedFrames.new(@fm.right_frame,60)
1536
+ @@langs_hash[_ext]
1537
+ end
1538
+
1539
+ def init_editing(_ext='rb', _w1=150, _w2=60)
1540
+ # find file lang
1541
+ # _ext='' if _ext.nil?
1542
+ # lang_file = File.dirname(__FILE__)+'/langs/'+_ext+'.lang'
1543
+ # if File.exist?(lang_file)
1544
+ # @lang_hash = properties_file2hash(lang_file)
1545
+ # elsif File.exist?(lang_file+'.bind')
1546
+ # b= properties_file2hash(lang_file+'.bind')
1547
+ # lang_file_bind = File.dirname(__FILE__)+'/langs/'+b['bind']
1548
+ # if b && File.exist?(lang_file_bind)
1549
+ # @lang_hash = properties_file2hash(lang_file_bind)
1550
+ # end
1551
+ # else
1552
+ # @lang = nil
1553
+ # end
1554
+ @lang_hash = languages_hash(_ext)
1555
+ if !_ext.nil? && (_ext=='rb'||_ext=='rbw')
1556
+ @fm = AGTkVSplittedFrames.new(@page_frame,_w1)
1557
+ @fm1 = AGTkVSplittedFrames.new(@fm.right_frame,_w2)
1393
1558
  initialize_tree(@fm.left_frame)
1394
1559
  else
1395
- @fm1 = AGTkVSplittedFrames.new(@page_frame,60)
1560
+ @fm1 = AGTkVSplittedFrames.new(@page_frame,_w2)
1396
1561
  end
1397
1562
  @fm1.splitter_frame.configure('relief'=>'flat')
1398
1563
  initialize_text(@fm1.right_frame)
1399
- initialize_text_binding
1400
1564
  initialize_highlight
1401
1565
  initialize_line_number(@fm1.left_frame)
1566
+ initialize_text_binding
1402
1567
  end
1403
1568
 
1404
1569
  def file_extension(_filename=nil)
@@ -1410,27 +1575,32 @@ class AgEditor
1410
1575
 
1411
1576
  def load_file(_filename = nil)
1412
1577
  #if filename is nil then open a new tab
1413
- @file = _filename
1414
- if _filename
1415
- #init_editing(file_extension(_filename))
1416
- File::open(_filename,'r'){ |file|
1417
- @text.insert('end',file.readlines.collect!{| line | line.chomp+"\n" }.to_s)
1418
- }
1578
+ @loading=true
1579
+ begin
1580
+ @file = _filename
1581
+ if _filename
1582
+ #init_editing(file_extension(_filename))
1583
+ File::open(_filename,'r'){ |file|
1584
+ @text.insert('end',file.readlines.collect!{| line | line.chomp+"\n" }.to_s)
1585
+ #@text.insert('end',file.read)
1586
+ }
1587
+ end
1588
+ set_read_only(!File.stat(_filename).writable?)
1589
+ reset
1590
+ refresh
1591
+ ensure
1592
+ @loading=false
1419
1593
  end
1420
- set_read_only(!File.stat(_filename).writable?)
1421
-
1422
- reset
1423
- refresh
1424
1594
  end
1425
1595
 
1426
1596
  def set_read_only(_value)
1427
1597
  if @read_only != _value
1428
1598
  @read_only = _value
1429
1599
  if @read_only
1430
- @text.configure('state'=>'disabled')
1600
+ #@text.configure('state'=>'disabled')
1431
1601
  @controller.change_tab_set_read_only(@page_frame)
1432
1602
  else
1433
- @text.configure('state'=>'normal')
1603
+ #@text.configure('state'=>'normal')
1434
1604
  @controller.change_tab_reset_read_only(@page_frame)
1435
1605
  end
1436
1606
  end
@@ -1443,22 +1613,21 @@ class AgEditor
1443
1613
  end
1444
1614
 
1445
1615
  def refresh
1446
- build_tree if @classbrowsing
1616
+ build_tree if @classbrowsing && !is_exp_hide?
1447
1617
  end
1448
1618
  end
1449
1619
 
1450
1620
  class AgMultiEditorView
1451
1621
  attr_reader :enb
1452
1622
  def initialize(parent=nil)
1453
- @enb = Tk::BWidget::NoteBook.new(parent){
1623
+ @enb = Tk::BWidget::NoteBook.new(parent,Arcadia.style('tabpanel')){
1454
1624
  tabbevelsize 0
1455
1625
  internalborderwidth 2
1456
- activeforeground 'red'
1457
- activebackground 'yellow'
1458
- #background 'black'
1459
- borderwidth 1
1460
- side $arcadia['conf']['editor.tabs.side']
1461
- font $arcadia['conf']['editor.tabs.font']
1626
+ # activeforeground 'red'
1627
+ # activebackground 'yellow'
1628
+ #borderwidth 1
1629
+ side Arcadia.conf('editor.tabs.side')
1630
+ font Arcadia.conf('editor.tabs.font')
1462
1631
  pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes')
1463
1632
  }
1464
1633
  end
@@ -1473,10 +1642,10 @@ class AgMultiEditor < ArcadiaExt
1473
1642
  #ArcadiaContractListener.new(self, DebugContract, :do_debug_event)
1474
1643
  #ArcadiaContractListener.new(self, EditorContract, :do_editor_event)
1475
1644
  #ArcadiaContractListener.new(self, MainContract, :do_main_event)
1476
- Arcadia.add_listener(self, BufferEvent)
1477
- Arcadia.add_listener(self, DebugEvent)
1478
- Arcadia.add_listener(self, RunRubyFileEvent)
1479
- Arcadia.add_listener(self, StartDebugEvent)
1645
+ Arcadia.attach_listener(self, BufferEvent)
1646
+ Arcadia.attach_listener(self, DebugEvent)
1647
+ Arcadia.attach_listener(self, RunRubyFileEvent)
1648
+ Arcadia.attach_listener(self, StartDebugEvent)
1480
1649
  end
1481
1650
 
1482
1651
  def on_before_run_ruby_file(_event)
@@ -1496,7 +1665,7 @@ class AgMultiEditor < ArcadiaExt
1496
1665
  end
1497
1666
 
1498
1667
  def on_build(_event)
1499
- @main_frame = AgMultiEditorView.new(self.frame)
1668
+ @main_frame = AgMultiEditorView.new(self.frame.hinner_frame)
1500
1669
  @tabs_file =Hash.new
1501
1670
  @tabs_editor =Hash.new
1502
1671
  @breakpoints =Array.new
@@ -1514,18 +1683,21 @@ class AgMultiEditor < ArcadiaExt
1514
1683
  :tearoff=>0,
1515
1684
  :title => 'Menu'
1516
1685
  )
1686
+ @pop_up.configure(Arcadia.style('menu'))
1687
+ #Arcadia.instance.main_menu.update_style(@pop_up)
1517
1688
  @pop_up.insert('end',
1518
1689
  :command,
1519
1690
  :label=>'...',
1520
1691
  :state=>'disabled',
1521
- :background=>'blue',
1522
- :font => conf('font.bold'),
1692
+ :background=>Arcadia.conf('titlelabel.background'),
1693
+ :font => "#{Arcadia.conf('menu.font')} bold",
1523
1694
  :hidemargin => true
1524
1695
  )
1696
+
1525
1697
  @c = @pop_up.insert('end',
1526
1698
  :command,
1527
1699
  :label=>'Close',
1528
- :font => conf('font'),
1700
+ #:font => conf('font'),
1529
1701
  :hidemargin => false,
1530
1702
  :command=> proc{
1531
1703
  if @selected_tab_name_from_popup != nil
@@ -1537,7 +1709,7 @@ class AgMultiEditor < ArcadiaExt
1537
1709
  @c = @pop_up.insert('end',
1538
1710
  :command,
1539
1711
  :label=>'Close others',
1540
- :font => conf('font'),
1712
+ #:font => conf('font'),
1541
1713
  :hidemargin => false,
1542
1714
  :command=> proc{
1543
1715
  if @selected_tab_name_from_popup != nil
@@ -1549,7 +1721,7 @@ class AgMultiEditor < ArcadiaExt
1549
1721
  @c = @pop_up.insert('end',
1550
1722
  :command,
1551
1723
  :label=>'Close all',
1552
- :font => conf('font'),
1724
+ #:font => conf('font'),
1553
1725
  :hidemargin => false,
1554
1726
  :command=> proc{
1555
1727
  if @selected_tab_name_from_popup != nil
@@ -1558,7 +1730,7 @@ class AgMultiEditor < ArcadiaExt
1558
1730
  end
1559
1731
  }
1560
1732
  )
1561
-
1733
+
1562
1734
  @main_frame.enb.tabbind("Button-3",
1563
1735
  proc{|*x|
1564
1736
  _x = TkWinfo.pointerx(@main_frame.enb)
@@ -1602,8 +1774,10 @@ class AgMultiEditor < ArcadiaExt
1602
1774
  when StartDebugEvent
1603
1775
  self.debug_begin
1604
1776
  when StepDebugEvent
1605
- if _event.command == :quit
1777
+ if _event.command == :quit_yes
1606
1778
  self.debug_end
1779
+ elsif _event.command == :quit_no
1780
+ @last_e.mark_debug(@last_index) if @last_e
1607
1781
  end
1608
1782
  when SetBreakpointEvent
1609
1783
  @breakpoints << {:file=>_event.file,:line=>_event.row}
@@ -1613,12 +1787,18 @@ class AgMultiEditor < ArcadiaExt
1613
1787
  end
1614
1788
 
1615
1789
  def on_debug_step_info(_event)
1790
+ #Arcadia.new_debug_msg(self, "file: #{_event.file}:#{_event.row}")
1616
1791
  if _event.file
1617
1792
  self.open_file_in_debug(_event.file, _event.row)
1618
1793
  end
1619
1794
  end
1620
1795
 
1796
+ # def on_before_buffer(_event)
1797
+ # Arcadia.new_error_msg(self, "on_before_buffer #{_event.class}")
1798
+ # end
1799
+
1621
1800
  def on_buffer(_event)
1801
+ #Arcadia.new_error_msg(self, "on_buffer #{_event.class}")
1622
1802
  case _event
1623
1803
  when NewBufferEvent
1624
1804
  self.open_buffer
@@ -1639,7 +1819,8 @@ class AgMultiEditor < ArcadiaExt
1639
1819
  #add_reverse_item(_e)
1640
1820
  end
1641
1821
  else
1642
- self.open_file(Tk.getOpenFile)
1822
+ _event.file = Tk.getOpenFile
1823
+ self.open_file(_event.file)
1643
1824
  end
1644
1825
  when CloseBufferEvent
1645
1826
  if _event.file
@@ -1702,24 +1883,20 @@ class AgMultiEditor < ArcadiaExt
1702
1883
  if candidates.length > 1
1703
1884
  _rx, _ry, _widht, heigth = _text.bbox(_begin_index);
1704
1885
  _x = _rx + TkWinfo.rootx(_text)
1705
- _y = _ry + TkWinfo.rooty(_text) + TkFont.new(conf('font')).metrics[2][1]
1886
+ _y = _ry + TkWinfo.rooty(_text) + TkFont.new(conf('edit.font')).metrics[2][1]
1706
1887
 
1707
1888
  _xroot = _x - TkWinfo.rootx(@arcadia.layout.root)
1708
1889
  _yroot = _y - TkWinfo.rooty(@arcadia.layout.root)
1709
1890
 
1710
1891
  _max_height = TkWinfo.screenheight(@arcadia.layout.root) - _y - 5
1711
1892
 
1712
- @raised_listbox = TkListbox.new(@arcadia.layout.root,
1713
- 'takefocus'=>true,
1714
- :background=>conf('color.background'),
1715
- :foreground=>conf('color.foreground'),
1716
- :selectbackground=>'yellow',
1717
- :selectforeground=>'red',
1718
- :activestyle=>'none',
1719
- :font => conf('font'),
1720
- :borderwidth=>1
1893
+ @raised_listbox = TkListbox.new(@arcadia.layout.root, {
1894
+ :takefocus=>true,
1895
+ :selectbackground=>Arcadia.conf('hightlight.1.background'),
1896
+ :selectforeground=>Arcadia.conf('hightlight.1.foreground'),
1897
+ :activestyle=>'none'}.update(Arcadia.style('edit'))
1721
1898
  )
1722
- _font = TkFont.new(conf('font'))
1899
+ _font = TkFont.new(conf('edit.font'))
1723
1900
  _char_height = _font.metrics[2][1]
1724
1901
  _width = 0
1725
1902
  _docs_entries = Hash.new
@@ -1772,7 +1949,7 @@ class AgMultiEditor < ArcadiaExt
1772
1949
  @find.hide
1773
1950
  end
1774
1951
 
1775
- def finalize
1952
+ def on_finalize(_event)
1776
1953
  _files =''
1777
1954
  @tabs_editor.each_value{|editor|
1778
1955
  _files=_files+'|'+ editor.file if editor.file != nil
@@ -1890,14 +2067,22 @@ class AgMultiEditor < ArcadiaExt
1890
2067
  # return nil
1891
2068
  # end
1892
2069
  end
2070
+
2071
+ def name_read_only(_name)
2072
+ '[READ-ONLY] '+_name
2073
+ end
1893
2074
 
2075
+ def unname_read_only(_name)
2076
+ return _name.gsub("[READ-ONLY] ",'')
2077
+ end
2078
+
1894
2079
  def change_tab_set_read_only(_tab)
1895
- _new_name = '[READ-ONLY] '+@main_frame.enb.itemcget(page_name(_tab), 'text')
2080
+ _new_name = name_read_only(@main_frame.enb.itemcget(page_name(_tab), 'text'))
1896
2081
  change_tab_title(_tab, _new_name)
1897
2082
  end
1898
2083
 
1899
2084
  def change_tab_reset_read_only(_tab)
1900
- _new_name = @main_frame.enb.itemcget(page_name(_tab), 'text').gsub!("[READ-ONLY] ",'')
2085
+ _new_name = unname_read_only(@main_frame.enb.itemcget(page_name(_tab), 'text'))
1901
2086
  if _new_name
1902
2087
  change_tab_title(_tab, _new_name)
1903
2088
  end
@@ -1943,6 +2128,7 @@ class AgMultiEditor < ArcadiaExt
1943
2128
  #debug_reset
1944
2129
  @editors_in_debug.each{|e|
1945
2130
  close_editor(e)
2131
+ p "close editor #{e.file}"
1946
2132
  }
1947
2133
  end
1948
2134
 
@@ -1957,11 +2143,14 @@ class AgMultiEditor < ArcadiaExt
1957
2143
  if _filename && _line
1958
2144
  @last_index = _line.to_s+'.0'
1959
2145
  _editor_exist = editor_exist?(_filename)
1960
- @last_e = open_file(_filename, @last_index, false)
2146
+ @last_e = open_file(_filename, @last_index, false, false)
2147
+ #@last_e.hide_exp
2148
+ @last_e.mark_debug(@last_index) if @last_e
1961
2149
  if !_editor_exist
1962
2150
  @editors_in_debug << @last_e
2151
+ # workaround for hightlight
2152
+ @last_e.do_line_update
1963
2153
  end
1964
- @last_e.mark_debug(@last_index) if @last_e
1965
2154
  end
1966
2155
  end
1967
2156
 
@@ -1982,7 +2171,7 @@ class AgMultiEditor < ArcadiaExt
1982
2171
  end
1983
2172
  end
1984
2173
  if @arcadia.layout.headed?
1985
- frame_title(_new_caption)
2174
+ frame.title(_new_caption)
1986
2175
  #@arcadia.layout.domain(@arcadia['conf'][@name+'.frame'])['root'].top_text(_new_caption)
1987
2176
  end
1988
2177
  _title = @tabs_file[_name] != nil ? File.basename(@tabs_file[_name]) :_name
@@ -1994,8 +2183,11 @@ class AgMultiEditor < ArcadiaExt
1994
2183
  _basefilename = File.basename(_filename)
1995
2184
  #_basename = _basefilename.split('.')[0]+'_'+_basefilename.split('.')[1]
1996
2185
 
1997
-
1998
- _index = @main_frame.enb.index(self.tab_name(_filename))
2186
+ _name = self.tab_name(_filename)
2187
+ _index = @main_frame.enb.index(_name)
2188
+ if _index == -1
2189
+ _index = @main_frame.enb.index(name_read_only(_name))
2190
+ end
1999
2191
  return _index != -1
2000
2192
  end
2001
2193
 
@@ -2010,7 +2202,7 @@ class AgMultiEditor < ArcadiaExt
2010
2202
  tab_name(_fstr)
2011
2203
  end
2012
2204
 
2013
- def open_file(_filename = nil, _text_index='1.0', _mark_selected=true)
2205
+ def open_file(_filename = nil, _text_index='1.0', _mark_selected=true, _exp=true)
2014
2206
  return if _filename == nil || !File.exist?(_filename) || File.ftype(_filename) != 'file'
2015
2207
  _basefilename = File.basename(_filename)
2016
2208
  _tab_name = self.tab_file_name(_filename)
@@ -2020,8 +2212,13 @@ class AgMultiEditor < ArcadiaExt
2020
2212
  if _exist_buffer
2021
2213
  open_buffer(_tab_name)
2022
2214
  else
2023
- open_buffer(_tab_name, _basefilename)
2024
2215
  @tabs_file[_tab_name]= _filename
2216
+ if _exp
2217
+ open_buffer(_tab_name, _basefilename)
2218
+ else
2219
+ open_buffer(_tab_name, _basefilename,0)
2220
+ end
2221
+ #@tabs_file[_tab_name]= _filename
2025
2222
  @tabs_editor[_tab_name].load_file(_filename)
2026
2223
  end
2027
2224
 
@@ -2034,7 +2231,7 @@ class AgMultiEditor < ArcadiaExt
2034
2231
  end
2035
2232
 
2036
2233
 
2037
- def open_buffer(_buffer_name = nil, _title = nil)
2234
+ def open_buffer(_buffer_name = nil, _title = nil, w1=150)
2038
2235
  _index = @main_frame.enb.index(_buffer_name)
2039
2236
  if _buffer_name == nil
2040
2237
  _buffer_name = tab_name('new')
@@ -2059,8 +2256,8 @@ class AgMultiEditor < ArcadiaExt
2059
2256
  'raisecmd'=>proc{do_buffer_raise(_buffer_name, _title)}
2060
2257
  )
2061
2258
  _e = AgEditor.new(self, _tab)
2062
- _e.init_editing(_e.file_extension(_title))
2063
- @tabs_file[_buffer_name]= nil
2259
+ _e.init_editing(_e.file_extension(_title), w1)
2260
+ #@tabs_file[_buffer_name]= nil
2064
2261
  @tabs_editor[_buffer_name]=_e
2065
2262
  end
2066
2263
  @main_frame.enb.move(_buffer_name, 1)
@@ -2106,7 +2303,7 @@ class AgMultiEditor < ArcadiaExt
2106
2303
  if !@main_frame.enb.pages.empty?
2107
2304
  @main_frame.enb.raise(@main_frame.enb.pages[_index-1])
2108
2305
  else
2109
- frame_title('')
2306
+ frame.title('')
2110
2307
  end
2111
2308
  end
2112
2309
 
@@ -2130,18 +2327,16 @@ class Findview < TkFloatTitledFrame
2130
2327
  #stop_resizing
2131
2328
  y0 = 10
2132
2329
  d = 23
2133
- TkLabel.new(self.frame){
2330
+ TkLabel.new(self.frame, Arcadia.style('label')){
2134
2331
  text 'Find what:'
2135
2332
  place('x' => 8,'y' => y0,'height' => 19)
2136
2333
  }
2137
2334
  y0 = y0 + d
2138
- @e_what = Tk::BWidget::ComboBox.new(self.frame){
2335
+ @e_what = Tk::BWidget::ComboBox.new(self.frame, Arcadia.style('combobox')){
2139
2336
  editable true
2140
2337
  justify 'left'
2141
- relief 'ridge'
2338
+ #relief 'ridge'
2142
2339
  autocomplete 'true'
2143
- #insertbackground '#FFFFFF'
2144
- entrybg '#FFFFFF'
2145
2340
  expand 'tab'
2146
2341
  takefocus 'true'
2147
2342
  #pack('padx'=>10, 'fill'=>'x')
@@ -2149,52 +2344,54 @@ class Findview < TkFloatTitledFrame
2149
2344
  }
2150
2345
  @e_what_entry = TkWinfo.children(@e_what)[0]
2151
2346
 
2347
+ @e_what_entry.bind_append("1",proc{Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>@e_what_entry))})
2348
+
2152
2349
  y0 = y0 + d
2153
- TkLabel.new(self.frame){
2350
+ TkLabel.new(self.frame, Arcadia.style('label')){
2154
2351
  text 'Replace with:'
2155
2352
  place('x' => 8,'y' => y0,'height' => 19)
2156
2353
  }
2157
2354
  y0 = y0 + d
2158
2355
 
2159
- @e_with = Tk::BWidget::ComboBox.new(self.frame){
2356
+ @e_with = Tk::BWidget::ComboBox.new(self.frame, Arcadia.style('combobox')){
2160
2357
  editable true
2161
2358
  justify 'left'
2162
- relief 'ridge'
2163
2359
  autocomplete 'true'
2164
- #insertbackground '#FFFFFF'
2165
- entrybg '#FFFFFF'
2166
2360
  expand 'tab'
2167
2361
  takefocus 'true'
2168
2362
  #pack('padx'=>10, 'fill'=>'x')
2169
2363
  place('relwidth' => 1, 'width'=>-16,'x' => 8,'y' => y0,'height' => 19)
2170
2364
  }
2365
+ @e_with_entry = TkWinfo.children(@e_with)[0]
2366
+
2367
+ @e_with_entry.bind_append("1",proc{Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>@e_with_entry))})
2171
2368
 
2172
2369
  y0 = y0 + d
2173
- @cb_reg = TkCheckButton.new(self.frame){|_cb_reg|
2370
+ @cb_reg = TkCheckButton.new(self.frame, Arcadia.style('checkbox')){|_cb_reg|
2174
2371
  text 'Use Regular Expression'
2175
2372
  justify 'left'
2176
- relief 'flat'
2373
+ #relief 'flat'
2177
2374
  #pack('side'=>'left', 'anchor'=>'e')
2178
2375
  place('x' => 8,'y' => y0,'height' => 22)
2179
2376
  }
2180
2377
  y0 = y0 + d
2181
- @cb_back = TkCheckButton.new(self.frame){|_cb_reg|
2378
+ @cb_back = TkCheckButton.new(self.frame, Arcadia.style('checkbox')){|_cb_reg|
2182
2379
  text 'Search backwards'
2183
2380
  justify 'left'
2184
- relief 'flat'
2381
+ #relief 'flat'
2185
2382
  #pack('side'=>'left', 'anchor'=>'e')
2186
2383
  place('x' => 8,'y' => y0,'height' => 22)
2187
2384
  }
2188
2385
 
2189
2386
  y0 = y0 + d
2190
2387
  y0 = y0 + d
2191
- @buttons_frame = TkFrame.new(self.frame).pack('fill'=>'x', 'side'=>'bottom')
2388
+ @buttons_frame = TkFrame.new(self.frame, Arcadia.style('panel')).pack('fill'=>'x', 'side'=>'bottom')
2192
2389
 
2193
- @b_replace_all = TkButton.new(@buttons_frame){|_b_go|
2390
+ @b_replace_all = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
2194
2391
  state 'disabled'
2195
2392
  default 'disabled'
2196
2393
  text 'Replace All'
2197
- overrelief 'raised'
2394
+ #overrelief 'raised'
2198
2395
  justify 'center'
2199
2396
  #width 15
2200
2397
  pack('side'=>'right','ipadx'=>5, 'padx'=>5)
@@ -2202,11 +2399,11 @@ class Findview < TkFloatTitledFrame
2202
2399
  }
2203
2400
 
2204
2401
 
2205
- @b_replace = TkButton.new(@buttons_frame){|_b_go|
2402
+ @b_replace = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
2206
2403
  state 'disabled'
2207
2404
  default 'disabled'
2208
2405
  text 'Replace'
2209
- overrelief 'raised'
2406
+ #overrelief 'raised'
2210
2407
  justify 'center'
2211
2408
  #width 15
2212
2409
  pack('side'=>'right','ipadx'=>5, 'padx'=>5)
@@ -2214,13 +2411,13 @@ class Findview < TkFloatTitledFrame
2214
2411
  }
2215
2412
 
2216
2413
 
2217
- @b_go = TkButton.new(@buttons_frame){|_b_go|
2414
+ @b_go = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
2218
2415
  compound 'none'
2219
2416
  default 'disabled'
2220
2417
  text 'Find Next'
2221
2418
  #background '#ffffff'
2222
2419
  #image TkPhotoImage.new('dat' => FIND_GIF)
2223
- overrelief 'raised'
2420
+ #overrelief 'raised'
2224
2421
  justify 'center'
2225
2422
  #relief 'ridge'
2226
2423
  #width 15
@@ -2465,27 +2662,28 @@ class GoToLine < TkFloatTitledFrame
2465
2662
  #stop_resizing
2466
2663
  y0 = 10
2467
2664
  d = 23
2468
- TkLabel.new(self.frame){
2665
+ TkLabel.new(self.frame, Arcadia.style('label')){
2469
2666
  text 'Go to line:'
2470
2667
  place('x' => 8,'y' => y0,'height' => 19)
2471
2668
  }
2472
2669
  y0 = y0 + d
2473
- @e_line = TkEntry.new(self.frame){
2670
+ @e_line = TkEntry.new(self.frame, Arcadia.style('edit')){
2474
2671
  justify 'left'
2475
- relief 'ridge'
2672
+ #relief 'ridge'
2476
2673
  place('relwidth' => 1, 'width'=>-16,'x' => 8,'y' => y0,'height' => 19)
2477
2674
  }
2675
+ @e_line.bind_append("1",proc{Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>@e_line))})
2478
2676
 
2479
2677
  y0 = y0 + d
2480
2678
  y0 = y0 + d
2481
- @buttons_frame = TkFrame.new(self.frame).pack('fill'=>'x', 'side'=>'bottom')
2679
+ @buttons_frame = TkFrame.new(self.frame, Arcadia.style('panel')).pack('fill'=>'x', 'side'=>'bottom')
2482
2680
 
2483
- @b_go = TkButton.new(@buttons_frame){|_b_go|
2681
+ @b_go = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
2484
2682
  compound 'none'
2485
2683
  default 'disabled'
2486
2684
  text 'Go'
2487
- overrelief 'raised'
2488
- justify 'center'
2685
+ #overrelief 'raised'
2686
+ #justify 'center'
2489
2687
  pack('side'=>'right','ipadx'=>5, 'padx'=>5)
2490
2688
  }
2491
2689
  place('x'=>150,'y'=>150,'height'=> 120,'width'=> 100)