arcadia 0.13.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{README → README.md} +60 -53
- data/conf/LC/en-UK.LANG +10 -4
- data/conf/arcadia.conf +221 -83
- data/conf/arcadia.res.rb +165 -175
- data/conf/theme-dark.conf +1 -1
- data/conf/theme-dark.res.rb +0 -123
- data/ext/ae-breakpoints/ae-breakpoints.rb +4 -3
- data/ext/ae-dir-projects/ae-dir-projects.conf +27 -1
- data/ext/ae-dir-projects/ae-dir-projects.rb +120 -70
- data/ext/ae-editor/ae-editor.conf +2 -2
- data/ext/ae-editor/ae-editor.rb +610 -303
- data/ext/ae-file-history/ae-file-history.rb +60 -39
- data/ext/ae-output/ae-output.rb +52 -27
- data/ext/ae-ruby-debug/ae-ruby-debug.conf +3 -1
- data/ext/ae-ruby-debug/ae-ruby-debug.rb +18 -11
- data/ext/ae-search-in-files/ae-search-in-files.conf +2 -2
- data/ext/ae-search-in-files/ae-search-in-files.rb +124 -77
- data/ext/ae-shell/ae-shell.conf +1 -1
- data/ext/ae-shell/ae-shell.rb +18 -81
- data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +78 -81
- data/ext/ae-term/ae-term.rb +9 -7
- data/lib/a-commons.rb +125 -17
- data/lib/a-contracts.rb +6 -2
- data/lib/a-core.rb +441 -405
- data/lib/a-tkcommons.rb +1237 -45
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ArrowButton.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/BWidget.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Button.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ButtonBox.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ComboBox.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Dialog.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/DragSite.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/DropSite.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/DynamicHelp.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Entry.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Label.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/LabelEntry.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/LabelFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ListBox.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/MainFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/MessageDlg.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/NoteBook.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/PagesManager.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/PanedWindow.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/PanelFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/PasswdDlg.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ProgressBar.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ProgressDlg.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ScrollView.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ScrollableFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ScrolledWindow.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/SelectColor.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/SelectFont.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Separator.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/SpinBox.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/StatusBar.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/TitleFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Tree.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Widget.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/contents.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/index.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/navtree.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/options.htm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/CHANGES.txt +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/ChangeLog +65 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/LICENSE.txt +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/README.txt +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/arrow.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/bitmap.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/button.tcl +0 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/buttonbox.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/color.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/combobox.tcl +40 -16
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/basic.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/bwidget.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/demo.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/dnd.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/manager.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/select.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/tmpldlg.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/tree.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/x1.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/dialog.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/dragsite.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/dropsite.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/dynhelp.tcl +3 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/entry.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/font.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/bold.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/copy.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/cut.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/dragfile.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/dragicon.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/error.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/file.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/folder.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/hourglass.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/info.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/italic.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/minus.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/new.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/opcopy.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/open.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/openfold.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/oplink.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/opmove.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/overstrike.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/palette.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/passwd.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/paste.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/plus.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/print.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/question.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/redo.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/save.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/target.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/underline.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/undo.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/warning.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/init.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/label.tcl +0 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/labelentry.tcl +0 -3
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/labelframe.tcl +0 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/da.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/de.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/en.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/es.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/fr.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/hu.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/nl.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/no.rc +59 -58
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/pl.rc +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/listbox.tcl +17 -4
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/mainframe.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/messagedlg.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/notebook.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/pagesmgr.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/panedw.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/panelframe.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/passwddlg.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/pkgIndex.tcl +2 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/progressbar.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/progressdlg.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/scrollframe.tcl +6 -6
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/scrollview.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/scrollw.tcl +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/separator.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/spinbox.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/statusbar.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/tests/entry.test +2 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/titleframe.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/tree.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/utils.tcl +0 -0
- data/tcl/bwidget-1.9.8/widget-old.tcl +1651 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/widget.tcl +64 -36
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/wizard.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/xpm2image.tcl +0 -0
- metadata +196 -195
@@ -107,13 +107,14 @@ class Breakpoints < ArcadiaExt
|
|
107
107
|
end
|
108
108
|
|
109
109
|
def build_popup
|
110
|
-
_pop_up = TkMenu.new(
|
110
|
+
#_pop_up = TkMenu.new(
|
111
|
+
_pop_up = Arcadia.wf.menu(
|
111
112
|
:parent=>@tree_break,
|
112
113
|
:tearoff=>0,
|
113
114
|
:title => 'Menu'
|
114
115
|
)
|
115
|
-
_pop_up.extend(TkAutoPostMenu)
|
116
|
-
_pop_up.configure(Arcadia.style('menu'))
|
116
|
+
#_pop_up.extend(TkAutoPostMenu)
|
117
|
+
#_pop_up.configure(Arcadia.style('menu'))
|
117
118
|
_title_item = _pop_up.insert('end',
|
118
119
|
:command,
|
119
120
|
:label=>'...',
|
@@ -6,4 +6,30 @@ active=yes
|
|
6
6
|
require=ext/ae-dir-projects/ae-dir-projects
|
7
7
|
class=DirProjects
|
8
8
|
|
9
|
-
file.name=arcadia.projects
|
9
|
+
file.name=arcadia.projects
|
10
|
+
|
11
|
+
|
12
|
+
user_toolbar.contexts=dir_project
|
13
|
+
user_toolbar.dir_project.context_path=file
|
14
|
+
user_toolbar.dir_project=newp,openp,search,xterm
|
15
|
+
#,openp,search,xterm
|
16
|
+
|
17
|
+
user_toolbar.dir_project.newp.name=newp
|
18
|
+
user_toolbar.dir_project.newp.hint=!Arcadia.text('ext.dir_projects.button.new.hint')
|
19
|
+
user_toolbar.dir_project.newp.image_data=!NEW_GIF
|
20
|
+
user_toolbar.dir_project.newp.action=ActionEvent.new(self,'action'=>do_new_project)
|
21
|
+
|
22
|
+
user_toolbar.dir_project.openp.name=openp
|
23
|
+
user_toolbar.dir_project.openp.hint=!Arcadia.text('ext.dir_projects.button.open.hint')
|
24
|
+
user_toolbar.dir_project.openp.image_data=!OPEN_PROJECT_GIF
|
25
|
+
user_toolbar.dir_project.openp.action=ActionEvent.new(self,'action'=>do_open_project)
|
26
|
+
|
27
|
+
user_toolbar.dir_project.search.name=search
|
28
|
+
user_toolbar.dir_project.search.hint=!Arcadia.text('ext.dir_projects.button.search.hint')
|
29
|
+
user_toolbar.dir_project.search.image_data=!SEARCH_FILES_GIF
|
30
|
+
user_toolbar.dir_project.search.action=ActionEvent.new(self,'action'=>do_search_files)
|
31
|
+
|
32
|
+
user_toolbar.dir_project.xterm.name=xterm
|
33
|
+
user_toolbar.dir_project.xterm.hint=!Arcadia.text('ext.dir_projects.button.term.hint')
|
34
|
+
user_toolbar.dir_project.xterm.image_data=!TERMINAL_GIF
|
35
|
+
user_toolbar.dir_project.xterm.action=ActionEvent.new(self,'action'=>do_open_term)
|
@@ -45,68 +45,81 @@ class DirProjects < ArcadiaExtPlus
|
|
45
45
|
@h_stack = Array.new
|
46
46
|
@opened_folder = Array.new
|
47
47
|
#--- button_box
|
48
|
-
@button_box = Tk::BWidget::ButtonBox.new(self.frame.hinner_frame){
|
49
|
-
homogeneous true
|
50
|
-
spacing 0
|
51
|
-
padx 0
|
52
|
-
pady 0
|
53
|
-
background Arcadia.conf('panel.background')
|
54
|
-
}.place('x'=>0)
|
55
|
-
TkWinfo.parent(@button_box).configure(:background => Arcadia.conf('panel.background'))
|
48
|
+
# @button_box = Tk::BWidget::ButtonBox.new(self.frame.hinner_frame){
|
49
|
+
# homogeneous true
|
50
|
+
# spacing 0
|
51
|
+
# padx 0
|
52
|
+
# pady 0
|
53
|
+
# background Arcadia.conf('panel.background')
|
54
|
+
# }.place('x'=>0)
|
55
|
+
# TkWinfo.parent(@button_box).configure(:background => Arcadia.conf('panel.background'))
|
56
56
|
|
57
|
-
@button_box.add(Arcadia.style('toolbarbutton').update({
|
58
|
-
'name'=>'new_proj',
|
59
|
-
'anchor' => 'center',
|
60
|
-
'command'=>proc{self.do_new_project},
|
61
|
-
'helptext'=>Arcadia.text('ext.dir_projects.button.new.hint'),
|
62
|
-
'image'=> Arcadia.image_res(NEW_GIF)})
|
63
|
-
)
|
57
|
+
# @button_box.add(Arcadia.style('toolbarbutton').update({
|
58
|
+
# 'name'=>'new_proj',
|
59
|
+
# 'anchor' => 'center',
|
60
|
+
# 'command'=>proc{self.do_new_project},
|
61
|
+
# 'helptext'=>Arcadia.text('ext.dir_projects.button.new.hint'),
|
62
|
+
# 'image'=> Arcadia.image_res(NEW_GIF)})
|
63
|
+
# )
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
# @button_box.add(Arcadia.style('toolbarbutton').update({
|
68
|
+
# 'name'=>'open_proj',
|
69
|
+
# 'anchor' => 'center',
|
70
|
+
# 'command'=>proc{self.do_open_project},
|
71
|
+
# 'helptext'=>Arcadia.text('ext.dir_projects.button.open.hint'),
|
72
|
+
# 'image'=> Arcadia.image_res(OPEN_PROJECT_GIF)})
|
73
|
+
# )
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
# @button_box.add(Arcadia.style('toolbarbutton').update({
|
78
|
+
# 'name'=>'parent_folder',
|
79
|
+
# 'anchor' => 'center',
|
80
|
+
# 'command'=>proc{self.do_goto_parent_folder},
|
81
|
+
# 'helptext'=>Arcadia.text('ext.dir_projects.button.up.hint'),
|
82
|
+
# 'image'=> Arcadia.image_res(PARENTFOLDER_GIF)})
|
83
|
+
# )
|
64
84
|
|
65
|
-
@button_box.add(Arcadia.style('toolbarbutton').update({
|
66
|
-
'name'=>'open_proj',
|
67
|
-
'anchor' => 'center',
|
68
|
-
'command'=>proc{self.do_open_project},
|
69
|
-
'helptext'=>Arcadia.text('ext.dir_projects.button.open.hint'),
|
70
|
-
'image'=> Arcadia.image_res(OPEN_PROJECT_GIF)})
|
71
|
-
)
|
72
85
|
|
73
|
-
@button_box.add(Arcadia.style('toolbarbutton').update({
|
74
|
-
'name'=>'parent_folder',
|
75
|
-
'anchor' => 'center',
|
76
|
-
'command'=>proc{self.do_goto_parent_folder},
|
77
|
-
'helptext'=>Arcadia.text('ext.dir_projects.button.up.hint'),
|
78
|
-
'image'=> Arcadia.image_res(PARENTFOLDER_GIF)})
|
79
|
-
)
|
80
86
|
|
81
|
-
@button_box.add(Arcadia.style('toolbarbutton').update({
|
82
|
-
'name'=>'search_in_files',
|
83
|
-
'anchor' => 'center',
|
84
|
-
'command'=>proc{self.do_search_files},
|
85
|
-
'helptext'=>Arcadia.text('ext.dir_projects.button.search.hint'),
|
86
|
-
'image'=> Arcadia.image_res(SEARCH_FILES_GIF)})
|
87
|
-
)
|
87
|
+
# @button_box.add(Arcadia.style('toolbarbutton').update({
|
88
|
+
# 'name'=>'search_in_files',
|
89
|
+
# 'anchor' => 'center',
|
90
|
+
# 'command'=>proc{self.do_search_files},
|
91
|
+
# 'helptext'=>Arcadia.text('ext.dir_projects.button.search.hint'),
|
92
|
+
# 'image'=> Arcadia.image_res(SEARCH_FILES_GIF)})
|
93
|
+
# )
|
88
94
|
|
89
|
-
@button_box.add(Arcadia.style('toolbarbutton').update({
|
90
|
-
'name'=>'terminal',
|
91
|
-
'anchor' => 'center',
|
92
|
-
'command'=>proc{self.do_open_term},
|
93
|
-
'helptext'=>Arcadia.text('ext.dir_projects.button.term.hint'),
|
94
|
-
'image'=> Arcadia.image_res(TERMINAL_GIF)})
|
95
|
-
)
|
96
95
|
|
96
|
+
|
97
|
+
# @button_box.add(Arcadia.style('toolbarbutton').update({
|
98
|
+
# 'name'=>'terminal',
|
99
|
+
# 'anchor' => 'center',
|
100
|
+
# 'command'=>proc{self.do_open_term},
|
101
|
+
# 'helptext'=>Arcadia.text('ext.dir_projects.button.term.hint'),
|
102
|
+
# 'image'=> Arcadia.image_res(TERMINAL_GIF)})
|
103
|
+
# )
|
104
|
+
|
105
|
+
|
106
|
+
|
97
107
|
#--- button_box
|
108
|
+
|
109
|
+
|
98
110
|
@panel = self.frame.root.add_panel(self.frame.name, "sync");
|
99
|
-
@cb_sync = TkCheckButton.new(@panel, Arcadia.style('checkbox').update('background'=>@panel.background)){
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
offrelief 'flat'
|
111
|
+
# @cb_sync = TkCheckButton.new(@panel, Arcadia.style('checkbox').update('background'=>@panel.background)){
|
112
|
+
|
113
|
+
@cb_sync = Arcadia.wf.titlecontextcheckbutton(@panel){
|
114
|
+
variable TkVariable.new
|
104
115
|
image Arcadia.image_res(SYNC_GIF)
|
105
116
|
pack
|
106
117
|
}
|
118
|
+
|
119
|
+
@cb_sync.hint=Arcadia.text('ext.dir_projects.button.link.hint')
|
107
120
|
|
108
|
-
Tk::BWidget::DynamicHelp::add(@cb_sync,
|
109
|
-
'text'=>Arcadia.text('ext.dir_projects.button.link.hint'))
|
121
|
+
# Tk::BWidget::DynamicHelp::add(@cb_sync,
|
122
|
+
# 'text'=>Arcadia.text('ext.dir_projects.button.link.hint'))
|
110
123
|
|
111
124
|
do_check = proc {
|
112
125
|
if @cb_sync.cget('onvalue')==@cb_sync.cget('variable').value.to_i
|
@@ -139,6 +152,16 @@ class DirProjects < ArcadiaExtPlus
|
|
139
152
|
shure_delete_node(_selected)
|
140
153
|
end
|
141
154
|
}
|
155
|
+
|
156
|
+
self.frame.root.add_button(self.frame.name, Arcadia.text('ext.dir_projects.button.up.hint'), proc{self.do_goto_parent_folder}, ARROW_UP_GIF)
|
157
|
+
# self.frame.root.add_sep(self.frame.name,1)
|
158
|
+
# self.frame.root.add_button(self.frame.name, Arcadia.text('ext.dir_projects.button.term.hint'), proc{self.do_open_term}, TERMINAL_GIF)
|
159
|
+
# self.frame.root.add_sep(self.frame.name,1)
|
160
|
+
# self.frame.root.add_button(self.frame.name, Arcadia.text('ext.dir_projects.button.search.hint'), proc{self.do_search_files}, SEARCH_FILES_GIF)
|
161
|
+
# self.frame.root.add_sep(self.frame.name,1)
|
162
|
+
# self.frame.root.add_button(self.frame.name, Arcadia.text('ext.dir_projects.button.open.hint'), proc{Tk.callback_break;self.do_open_project}, OPEN_PROJECT_GIF)
|
163
|
+
# self.frame.root.add_sep(self.frame.name,1)
|
164
|
+
# self.frame.root.add_button(self.frame.name, Arcadia.text('ext.dir_projects.button.new.hint'), proc{self.do_new_project}, NEW_GIF)
|
142
165
|
|
143
166
|
|
144
167
|
do_open_folder_cmd = proc{|_node| do_open_folder(_node)}
|
@@ -152,7 +175,8 @@ class DirProjects < ArcadiaExtPlus
|
|
152
175
|
crosscloseimage Arcadia.image_res(PLUS_GIF)
|
153
176
|
crossopenimage Arcadia.image_res(MINUS_GIF)
|
154
177
|
}
|
155
|
-
@htree.extend(TkScrollableWidget).show(0,24)
|
178
|
+
# @htree.extend(TkScrollableWidget).show(0,24)
|
179
|
+
@htree.extend(TkScrollableWidget).show(0,0)
|
156
180
|
self.pop_up_menu_tree
|
157
181
|
@image_kdir = Arcadia.image_res(ICON_FOLDER_OPEN_GIF)
|
158
182
|
@image_kdir_closed = Arcadia.image_res(FOLDER_GIF)
|
@@ -289,21 +313,23 @@ class DirProjects < ArcadiaExtPlus
|
|
289
313
|
end
|
290
314
|
|
291
315
|
def pop_up_menu_tree
|
292
|
-
|
316
|
+
#@pop_up_tree = TkMenu.new(
|
317
|
+
@pop_up_tree = Arcadia.wf.menu(
|
293
318
|
:parent=>@htree,
|
294
319
|
:tearoff=>0,
|
295
320
|
:title => Arcadia.text('ext.dir_projects.menu.title')
|
296
321
|
)
|
297
|
-
|
298
|
-
|
322
|
+
#@pop_up_tree.extend(TkAutoPostMenu)
|
323
|
+
#@pop_up_tree.configure(Arcadia.style('menu'))
|
299
324
|
#----- new submenu
|
300
|
-
sub_new = TkMenu.new(
|
325
|
+
#sub_new = TkMenu.new(
|
326
|
+
sub_new = Arcadia.wf.menu(
|
301
327
|
:parent=>@pop_up_tree,
|
302
328
|
:tearoff=>0,
|
303
329
|
:title => Arcadia.text('ext.dir_projects.menu.new')
|
304
330
|
)
|
305
|
-
sub_new.extend(TkAutoPostMenu)
|
306
|
-
sub_new.configure(Arcadia.style('menu'))
|
331
|
+
#sub_new.extend(TkAutoPostMenu)
|
332
|
+
#sub_new.configure(Arcadia.style('menu'))
|
307
333
|
sub_new.insert('end',
|
308
334
|
:command,
|
309
335
|
:label=>Arcadia.text('ext.dir_projects.menu.new_dir_proj'),
|
@@ -343,13 +369,14 @@ class DirProjects < ArcadiaExtPlus
|
|
343
369
|
)
|
344
370
|
#-----------------
|
345
371
|
#----- refactor submenu
|
346
|
-
sub_ref = TkMenu.new(
|
372
|
+
#sub_ref = TkMenu.new(
|
373
|
+
sub_ref = Arcadia.wf.menu(
|
347
374
|
:parent=>@pop_up_tree,
|
348
375
|
:tearoff=>0,
|
349
376
|
:title => Arcadia.text('ext.dir_projects.menu.refactor')
|
350
377
|
)
|
351
|
-
sub_ref.extend(TkAutoPostMenu)
|
352
|
-
sub_ref.configure(Arcadia.style('menu'))
|
378
|
+
#sub_ref.extend(TkAutoPostMenu)
|
379
|
+
#sub_ref.configure(Arcadia.style('menu'))
|
353
380
|
sub_ref.insert('end',
|
354
381
|
:command,
|
355
382
|
:label=>Arcadia.text('ext.dir_projects.menu.refactor.rename'),
|
@@ -369,7 +396,8 @@ class DirProjects < ArcadiaExtPlus
|
|
369
396
|
_selected = @htree.selected
|
370
397
|
if _selected
|
371
398
|
_idir = File.split(_selected)[0]
|
372
|
-
_dir=Tk.chooseDirectory('initialdir'=>_idir,'mustexist'=>true)
|
399
|
+
#_dir=Tk.chooseDirectory('initialdir'=>_idir,'mustexist'=>true)
|
400
|
+
_dir=Arcadia.select_dir_dialog(_idir, true)
|
373
401
|
do_move(_selected, _dir) if _dir && File.exists?(_dir)
|
374
402
|
end
|
375
403
|
}
|
@@ -383,13 +411,14 @@ class DirProjects < ArcadiaExtPlus
|
|
383
411
|
|
384
412
|
#-----------------
|
385
413
|
#----- search submenu
|
386
|
-
sub_ref_search = TkMenu.new(
|
414
|
+
#sub_ref_search = TkMenu.new(
|
415
|
+
sub_ref_search = Arcadia.wf.menu(
|
387
416
|
:parent=>@pop_up_tree,
|
388
417
|
:tearoff=>0,
|
389
418
|
:title => Arcadia.text('ext.dir_projects.menu.search')
|
390
419
|
)
|
391
|
-
sub_ref_search.extend(TkAutoPostMenu)
|
392
|
-
sub_ref_search.configure(Arcadia.style('menu'))
|
420
|
+
#sub_ref_search.extend(TkAutoPostMenu)
|
421
|
+
#sub_ref_search.configure(Arcadia.style('menu'))
|
393
422
|
sub_ref_search.insert('end',
|
394
423
|
:command,
|
395
424
|
:label=>Arcadia.text('ext.dir_projects.menu.search.find'),
|
@@ -498,7 +527,8 @@ class DirProjects < ArcadiaExtPlus
|
|
498
527
|
end
|
499
528
|
|
500
529
|
def do_search_files
|
501
|
-
|
530
|
+
active_instance.do_search_files if active_instance != self
|
531
|
+
_target = @htree.selected || MonitorLastUsedDir.get_last_dir
|
502
532
|
if _target
|
503
533
|
_target = File.dirname(_target) if File.ftype(_target) == 'file'
|
504
534
|
Arcadia.process_event(SearchInFilesEvent.new(self,'dir'=>_target))
|
@@ -506,7 +536,8 @@ class DirProjects < ArcadiaExtPlus
|
|
506
536
|
end
|
507
537
|
|
508
538
|
def do_open_term
|
509
|
-
|
539
|
+
active_instance.do_open_term if active_instance != self
|
540
|
+
_target = @htree.selected || MonitorLastUsedDir.get_last_dir
|
510
541
|
if _target
|
511
542
|
_target = File.dirname(_target) if File.ftype(_target) == 'file'
|
512
543
|
TermEvent.new(self,'dir'=>_target, 'title'=>_target).go!
|
@@ -557,8 +588,10 @@ class DirProjects < ArcadiaExtPlus
|
|
557
588
|
# end
|
558
589
|
|
559
590
|
def do_new_project(_parent_folder_node=nil)
|
591
|
+
active_instance.do_new_project if active_instance != self
|
560
592
|
if _parent_folder_node.nil?
|
561
|
-
_parent_folder_node=Tk.chooseDirectory 'initialdir' => MonitorLastUsedDir.get_last_dir
|
593
|
+
#_parent_folder_node=Tk.chooseDirectory 'initialdir' => MonitorLastUsedDir.get_last_dir
|
594
|
+
_parent_folder_node=Arcadia.select_dir_dialog(MonitorLastUsedDir.get_last_dir)
|
562
595
|
end
|
563
596
|
if _parent_folder_node && File.exists?(node2file(_parent_folder_node)) && File.ftype(node2file(_parent_folder_node)) == 'directory'
|
564
597
|
tmp_node_name = "#{node2file(_parent_folder_node)}#{File::SEPARATOR}_new_project_"
|
@@ -584,8 +617,11 @@ class DirProjects < ArcadiaExtPlus
|
|
584
617
|
end
|
585
618
|
|
586
619
|
def do_open_project(_proj_name=nil)
|
620
|
+
active_instance.do_open_project if active_instance != self
|
621
|
+
|
587
622
|
if _proj_name.nil?
|
588
|
-
_proj_name=Tk.chooseDirectory 'initialdir' => MonitorLastUsedDir.get_last_dir
|
623
|
+
#_proj_name=Tk.chooseDirectory 'initialdir' => MonitorLastUsedDir.get_last_dir
|
624
|
+
_proj_name=Arcadia.select_dir_dialog(MonitorLastUsedDir.get_last_dir)
|
589
625
|
add_project(_proj_name) if _proj_name && File.exists?(_proj_name)
|
590
626
|
end
|
591
627
|
end
|
@@ -935,11 +971,26 @@ class DirProjects < ArcadiaExtPlus
|
|
935
971
|
del_project_from_file(_dir)
|
936
972
|
end
|
937
973
|
|
938
|
-
|
974
|
+
def sort_files_name(_files=nil)
|
975
|
+
return if _files.nil?
|
976
|
+
sorted = []
|
977
|
+
names = []
|
978
|
+
files_hash = {}
|
979
|
+
_files.each{|file|
|
980
|
+
name = File.split(file)[1]
|
981
|
+
names << name
|
982
|
+
files_hash[name]=file
|
983
|
+
}
|
984
|
+
names.sort!
|
985
|
+
names.each{|n| sorted << files_hash[n]}
|
986
|
+
sorted
|
987
|
+
end
|
988
|
+
|
939
989
|
def load_projects
|
940
990
|
f = File::open(projects_file,'r')
|
941
991
|
begin
|
942
992
|
_lines = f.readlines.collect!{| line | line.chomp}
|
993
|
+
_lines = sort_files_name(_lines)
|
943
994
|
ensure
|
944
995
|
f.close unless f.nil?
|
945
996
|
end
|
@@ -983,7 +1034,6 @@ class DirProjects < ArcadiaExtPlus
|
|
983
1034
|
begin
|
984
1035
|
_lines.each{|_line|
|
985
1036
|
if _line != _project
|
986
|
-
p _line
|
987
1037
|
f.syswrite(_line+"\n")
|
988
1038
|
end
|
989
1039
|
}
|
@@ -23,12 +23,12 @@ tabs.side=top
|
|
23
23
|
complete-code=yes
|
24
24
|
close-last-if-not-modified=yes
|
25
25
|
max-file-open=3 #TODO
|
26
|
-
use-tabs=
|
26
|
+
use-tabs=no
|
27
27
|
explorer_panel.tabs.side=top
|
28
28
|
|
29
29
|
#:::::::::::::::: Editor group ::::::::::::::::::::::<end>
|
30
30
|
popup.bind.shortcut=Button-3
|
31
|
-
|
31
|
+
ARM::popup.bind.shortcut=F4
|
32
32
|
#keybinding.Control-Shift-KeyPress[Y]=ActionEvent.new(self,'action'=>close_raised)
|
33
33
|
|
34
34
|
# menu items
|
data/ext/ae-editor/ae-editor.rb
CHANGED
@@ -96,20 +96,12 @@ class SourceStructure
|
|
96
96
|
|
97
97
|
end
|
98
98
|
|
99
|
-
class
|
100
|
-
|
101
|
-
def initialize(_file, _ctags_string='ctags', _row_rif = nil, _language=nil)
|
99
|
+
class FileSourceStructure < SourceStructure
|
100
|
+
def initialize(_file, _row_rif = nil)
|
102
101
|
super()
|
103
102
|
@file = _file
|
104
|
-
@
|
105
|
-
@language = (_language.nil?)?nil:_language.capitalize
|
106
|
-
@classes = Hash.new
|
107
|
-
@last_root = @root
|
108
|
-
@last_class_node = @root
|
109
|
-
@last_node = @root
|
110
|
-
@blank_rows = []
|
103
|
+
@blank_rows = []
|
111
104
|
initialize_blank_rows(_row_rif) if !_row_rif.nil?
|
112
|
-
build_structure
|
113
105
|
end
|
114
106
|
|
115
107
|
def initialize_blank_rows(_row = nil)
|
@@ -120,6 +112,163 @@ class CtagsSourceStructure < SourceStructure
|
|
120
112
|
}
|
121
113
|
@blank_rows << _row if _row
|
122
114
|
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
module RubySourceStructureUtils
|
119
|
+
attr_reader :injected_row
|
120
|
+
def scheletor_from_node(_node, _source='', _injected_source='', _injected_class='')
|
121
|
+
_hinner_source = ''
|
122
|
+
#_sons = _node.sons.sort
|
123
|
+
_sons = _node.sons
|
124
|
+
for inode in 0.._sons.length - 1
|
125
|
+
_son = _sons[inode]
|
126
|
+
if _son.kind == 'class'
|
127
|
+
_hinner_source = "#{_hinner_source}#{_son.helptext}\n"
|
128
|
+
elsif _son.kind == 'module'
|
129
|
+
_hinner_source = "#{_hinner_source}#{_son.helptext}\n"
|
130
|
+
elsif _son.kind == 'method' && ((_son.label != 'initialize') || (_son.label == 'initialize') && _son.args)
|
131
|
+
_hinner_source = "#{_hinner_source} def #{_son.label}#{_son.args}\n"
|
132
|
+
_hinner_source = "#{_hinner_source} end\n"
|
133
|
+
elsif _son.kind == 'singleton method'
|
134
|
+
_hinner_source = "#{_hinner_source} def #{_son.label}\n"
|
135
|
+
_hinner_source = "#{_hinner_source} end\n"
|
136
|
+
end
|
137
|
+
_hinner_source= scheletor_from_node(_son, _hinner_source, _injected_source, _injected_class)
|
138
|
+
end
|
139
|
+
_source = "#{_source}#{_hinner_source}" if _hinner_source.strip.length>0
|
140
|
+
if _node.kind == 'class' && _node.label == _injected_class
|
141
|
+
_source = "#{_source} def initialize\n #{_injected_source} end\n"
|
142
|
+
@injected_row = _source.split("\n").length-2
|
143
|
+
elsif _node.kind == 'class'
|
144
|
+
_source = "#{_source} def initialize\n end\n"
|
145
|
+
end
|
146
|
+
_source = "#{_source}end\n" if _node.kind == 'class' || _node.kind == 'module'
|
147
|
+
_source
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
class RubyGrepFileSourceStructure < FileSourceStructure
|
152
|
+
include RubySourceStructureUtils
|
153
|
+
def initialize(_file, _row_rif = nil)
|
154
|
+
super(_file, _row_rif)
|
155
|
+
@last_class_node = @root
|
156
|
+
@last_node = @root
|
157
|
+
@last_end_node_row = 0
|
158
|
+
@last_class_node_row = 0
|
159
|
+
@last_end_indentation = 0
|
160
|
+
@last_class_indentation = 0
|
161
|
+
build_structure
|
162
|
+
end
|
163
|
+
|
164
|
+
def build_structure
|
165
|
+
output = grep
|
166
|
+
output.each {|line|
|
167
|
+
row, other = line.split(':')
|
168
|
+
|
169
|
+
indent = 0
|
170
|
+
l0 = other.length
|
171
|
+
if l0 > 0
|
172
|
+
indent = l0 - other.lstrip.length
|
173
|
+
end
|
174
|
+
|
175
|
+
other.strip! if other
|
176
|
+
key_word, other = other.split
|
177
|
+
other.strip! if other
|
178
|
+
next if !['class','module','def','end'].include?(key_word)
|
179
|
+
if key_word == 'end'
|
180
|
+
@last_end_node_row = row
|
181
|
+
@last_end_indentation = indent
|
182
|
+
next
|
183
|
+
end
|
184
|
+
# hinner class
|
185
|
+
if ['class','module','def'].include?(key_word) && @last_class_node != @root && @last_class_node.parent != @root && ((@last_class_indentation.to_i - @last_end_indentation.to_i).abs <= 1)
|
186
|
+
@last_class_node = @last_class_node.parent
|
187
|
+
@last_class_node_row = row
|
188
|
+
end
|
189
|
+
# kind
|
190
|
+
if ['class','module'].include?(key_word)
|
191
|
+
kind = key_word
|
192
|
+
if @last_end_node_row.to_i > @last_class_node_row.to_i || @last_class_node == @root
|
193
|
+
parent = @root
|
194
|
+
else
|
195
|
+
parent = @last_class_node
|
196
|
+
@last_class_indentation = indent
|
197
|
+
end
|
198
|
+
elsif ['def'].include?(key_word)
|
199
|
+
kind = 'method'
|
200
|
+
parent = @last_class_node
|
201
|
+
end
|
202
|
+
#name
|
203
|
+
name = other.split('(')[0].strip
|
204
|
+
next if name == '<<' && kind == 'class'
|
205
|
+
#helptext
|
206
|
+
helptext = line.strip
|
207
|
+
#singleton
|
208
|
+
if kind == 'method' && name.split('.')[0] == parent.label
|
209
|
+
kind = 'singleton method'
|
210
|
+
name = name.sub("#{parent.label}.",'')
|
211
|
+
end
|
212
|
+
# create node
|
213
|
+
node = SourceTreeNode.new(parent, kind)
|
214
|
+
node.label = name
|
215
|
+
node.helptext = helptext
|
216
|
+
node.args = ''
|
217
|
+
node.rif = row
|
218
|
+
ln_rif = node.rif.to_i - 1
|
219
|
+
while @blank_rows.include?(ln_rif) && ln_rif > 0
|
220
|
+
ln_rif = ln_rif - 1
|
221
|
+
end
|
222
|
+
@last_node.rif_end = ln_rif.to_s
|
223
|
+
|
224
|
+
if ['class','module'].include?(key_word)
|
225
|
+
@last_class_node = node
|
226
|
+
@last_class_node_row = row
|
227
|
+
end
|
228
|
+
node.sortable = true
|
229
|
+
@last_node = node
|
230
|
+
}
|
231
|
+
end
|
232
|
+
|
233
|
+
def grep
|
234
|
+
_cmd_ = "|grep -nE '^class\s|\sclass\s|^module\s|\smodule\s|^def\s|\sdef\s|^end\s|\send\s|^end$|\send$' #{@file}"
|
235
|
+
to_ret = ''
|
236
|
+
begin
|
237
|
+
open(_cmd_, "r"){|f|
|
238
|
+
to_ret = f.readlines
|
239
|
+
}
|
240
|
+
rescue RuntimeError => e
|
241
|
+
Arcadia.runtime_error(e)
|
242
|
+
end
|
243
|
+
to_ret
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
class CtagsFileSourceStructure < FileSourceStructure
|
249
|
+
SUPPORTED_LANG = ['Ant','Asm','Asp','Awk','Basic','BETA','C','C++','C#','Cobol','DosBatch','Eiffel','Erlang','Flex','Fortran','HTML','Java','JavaScript','Lisp','Lua','Make','MatLab','OCaml','Pascal','Perl','PHP','Python','REXX','Ruby','Scheme','Sh','SLang','SML','SQL','Tcl','Tex','Vera','Verilog','VHDL','Vim','YACC']
|
250
|
+
def initialize(_file, _ctags_string='ctags', _row_rif = nil, _language=nil)
|
251
|
+
super(_file, _row_rif)
|
252
|
+
#@file = _file
|
253
|
+
@ctags_string = _ctags_string
|
254
|
+
@language = (_language.nil?)?nil:_language.capitalize
|
255
|
+
@classes = Hash.new
|
256
|
+
@last_root = @root
|
257
|
+
@last_class_node = @root
|
258
|
+
@last_node = @root
|
259
|
+
#@blank_rows = []
|
260
|
+
#initialize_blank_rows(_row_rif) if !_row_rif.nil?
|
261
|
+
build_structure
|
262
|
+
end
|
263
|
+
|
264
|
+
# def initialize_blank_rows(_row = nil)
|
265
|
+
# File::open(@file,'rb'){ |file|
|
266
|
+
# file.readlines.each_with_index{| line, i |
|
267
|
+
# @blank_rows << i+1 if line.strip == ''
|
268
|
+
# }
|
269
|
+
# }
|
270
|
+
# @blank_rows << _row if _row
|
271
|
+
# end
|
123
272
|
|
124
273
|
def build_structure
|
125
274
|
output = ctags
|
@@ -187,47 +336,17 @@ class CtagsSourceStructure < SourceStructure
|
|
187
336
|
end
|
188
337
|
end
|
189
338
|
|
339
|
+
class RubyCtagsFileSourceStructure < CtagsFileSourceStructure
|
340
|
+
include RubySourceStructureUtils
|
190
341
|
|
191
|
-
class RubyCtagsSourceStructure < CtagsSourceStructure
|
192
|
-
attr_reader :injected_row
|
193
|
-
|
194
342
|
def initialize(_file, _ctags_string='ctags', _row_rif = nil)
|
195
343
|
super(_file, _ctags_string, _row_rif, 'Ruby')
|
196
344
|
end
|
197
|
-
|
198
|
-
def scheletor_from_node(_node, _source='', _injected_source='', _injected_class='')
|
199
|
-
_hinner_source = ''
|
200
|
-
#_sons = _node.sons.sort
|
201
|
-
_sons = _node.sons
|
202
|
-
for inode in 0.._sons.length - 1
|
203
|
-
_son = _sons[inode]
|
204
|
-
if _son.kind == 'class'
|
205
|
-
_hinner_source = "#{_hinner_source}#{_son.helptext}\n"
|
206
|
-
elsif _son.kind == 'module'
|
207
|
-
_hinner_source = "#{_hinner_source}#{_son.helptext}\n"
|
208
|
-
elsif _son.kind == 'method' && ((_son.label != 'initialize') || (_son.label == 'initialize') && _son.args)
|
209
|
-
_hinner_source = "#{_hinner_source} def #{_son.label}#{_son.args}\n"
|
210
|
-
_hinner_source = "#{_hinner_source} end\n"
|
211
|
-
elsif _son.kind == 'singleton method'
|
212
|
-
_hinner_source = "#{_hinner_source} def #{_son.label}\n"
|
213
|
-
_hinner_source = "#{_hinner_source} end\n"
|
214
|
-
end
|
215
|
-
_hinner_source= scheletor_from_node(_son, _hinner_source, _injected_source, _injected_class)
|
216
|
-
end
|
217
|
-
_source = "#{_source}#{_hinner_source}" if _hinner_source.strip.length>0
|
218
|
-
if _node.kind == 'class' && _node.label == _injected_class
|
219
|
-
_source = "#{_source} def initialize\n #{_injected_source} end\n"
|
220
|
-
@injected_row = _source.split("\n").length-2
|
221
|
-
elsif _node.kind == 'class'
|
222
|
-
_source = "#{_source} def initialize\n end\n"
|
223
|
-
end
|
224
|
-
_source = "#{_source}end\n" if _node.kind == 'class' || _node.kind == 'module'
|
225
|
-
_source
|
226
|
-
end
|
227
345
|
end
|
228
346
|
|
229
|
-
class
|
230
|
-
|
347
|
+
class RubySourceStructureParser < SourceStructure
|
348
|
+
include RubySourceStructureUtils
|
349
|
+
# attr_reader :injected_row
|
231
350
|
|
232
351
|
def initialize(_source)
|
233
352
|
super()
|
@@ -331,45 +450,46 @@ class RubySourceStructure < SourceStructure
|
|
331
450
|
end
|
332
451
|
|
333
452
|
|
334
|
-
def scheletor_from_node(_node, _source='', _injected_source='', _injected_class='')
|
335
|
-
_hinner_source = ''
|
336
|
-
#_sons = _node.sons.sort
|
337
|
-
_sons = _node.sons
|
338
|
-
for inode in 0.._sons.length - 1
|
339
|
-
_son = _sons[inode]
|
340
|
-
if _son.kind == 'class'
|
341
|
-
_hinner_source = "#{_hinner_source}class #{_son.helptext}\n"
|
342
|
-
elsif _son.kind == 'module'
|
343
|
-
_hinner_source = "#{_hinner_source}module #{_son.helptext}\n"
|
344
|
-
elsif _son.kind == 'method' && _son.helptext != 'initialize'
|
345
|
-
|
346
|
-
_hinner_source = "#{_hinner_source} def #{_son.helptext}\n"
|
347
|
-
_hinner_source = "#{_hinner_source} end\n"
|
348
|
-
elsif _son.kind == 'singleton method'
|
349
|
-
_hinner_source = "#{_hinner_source} def #{_son.helptext}\n"
|
350
|
-
_hinner_source = "#{_hinner_source} end\n"
|
351
|
-
end
|
352
|
-
_hinner_source= scheletor_from_node(_son, _hinner_source, _injected_source, _injected_class)
|
353
|
-
end
|
354
|
-
_source = "#{_source}#{_hinner_source}" if _hinner_source.strip.length>0
|
355
|
-
if _node.kind == 'class' && _node.label == _injected_class
|
356
|
-
_source = "#{_source} def initialize\n #{_injected_source} end\n"
|
357
|
-
@injected_row = _source.split("\n").length-2
|
358
|
-
end
|
359
|
-
_source = "#{_source}end\n" if _node.kind == 'class' || _node.kind == 'module'
|
360
|
-
_source
|
361
|
-
end
|
362
|
-
|
363
|
-
|
364
|
-
def classies
|
365
|
-
end
|
366
|
-
def modules
|
367
|
-
end
|
368
|
-
def class_methods(_class)
|
369
|
-
end
|
453
|
+
# def scheletor_from_node(_node, _source='', _injected_source='', _injected_class='')
|
454
|
+
# _hinner_source = ''
|
455
|
+
# #_sons = _node.sons.sort
|
456
|
+
# _sons = _node.sons
|
457
|
+
# for inode in 0.._sons.length - 1
|
458
|
+
# _son = _sons[inode]
|
459
|
+
# if _son.kind == 'class'
|
460
|
+
# _hinner_source = "#{_hinner_source}class #{_son.helptext}\n"
|
461
|
+
# elsif _son.kind == 'module'
|
462
|
+
# _hinner_source = "#{_hinner_source}module #{_son.helptext}\n"
|
463
|
+
# elsif _son.kind == 'method' && _son.helptext != 'initialize'
|
464
|
+
#
|
465
|
+
# _hinner_source = "#{_hinner_source} def #{_son.helptext}\n"
|
466
|
+
# _hinner_source = "#{_hinner_source} end\n"
|
467
|
+
# elsif _son.kind == 'singleton method'
|
468
|
+
# _hinner_source = "#{_hinner_source} def #{_son.helptext}\n"
|
469
|
+
# _hinner_source = "#{_hinner_source} end\n"
|
470
|
+
# end
|
471
|
+
# _hinner_source= scheletor_from_node(_son, _hinner_source, _injected_source, _injected_class)
|
472
|
+
# end
|
473
|
+
# _source = "#{_source}#{_hinner_source}" if _hinner_source.strip.length>0
|
474
|
+
# if _node.kind == 'class' && _node.label == _injected_class
|
475
|
+
# _source = "#{_source} def initialize\n #{_injected_source} end\n"
|
476
|
+
# @injected_row = _source.split("\n").length-2
|
477
|
+
# end
|
478
|
+
# _source = "#{_source}end\n" if _node.kind == 'class' || _node.kind == 'module'
|
479
|
+
# _source
|
480
|
+
# end
|
481
|
+
#
|
482
|
+
#
|
483
|
+
# def classies
|
484
|
+
# end
|
485
|
+
# def modules
|
486
|
+
# end
|
487
|
+
# def class_methods(_class)
|
488
|
+
# end
|
370
489
|
end
|
371
490
|
|
372
491
|
class CompleteCode
|
492
|
+
LEFT_CHARS=['"','(','[','{',"'",'=','>','<',"\\","/",":","+","-"]
|
373
493
|
attr_reader :filter
|
374
494
|
def initialize(_editor, _row, _col)
|
375
495
|
@editor = _editor
|
@@ -382,6 +502,8 @@ class CompleteCode
|
|
382
502
|
end
|
383
503
|
|
384
504
|
def focus_word(focus_segment)
|
505
|
+
focus_segment_parts = focus_segment.split
|
506
|
+
focus_segment = focus_segment_parts[-1] if focus_segment_parts && focus_segment_parts.length > 1
|
385
507
|
focus_world = ''
|
386
508
|
char = focus_segment[-1..-1]
|
387
509
|
while [")","]","}"].include?(char)
|
@@ -389,7 +511,8 @@ class CompleteCode
|
|
389
511
|
focus_segment = focus_segment[0..-2]
|
390
512
|
end
|
391
513
|
j = focus_segment.length - 1
|
392
|
-
|
514
|
+
|
515
|
+
while !LEFT_CHARS.include?(char) && j >= 0
|
393
516
|
focus_world = "#{char}#{focus_world}"
|
394
517
|
j=j-1
|
395
518
|
char = focus_segment[j..j]
|
@@ -433,14 +556,14 @@ class CompleteCode
|
|
433
556
|
|
434
557
|
def refresh_words
|
435
558
|
@words.clear
|
436
|
-
_re = /[\s\t\n"'(\[\{
|
559
|
+
_re = /[\s\t\n"'(\[\{=><\\\/\:\+\-]#{@filter}[a-zA-Z0-9\-_]*/
|
437
560
|
m = _re.match(@source)
|
438
561
|
while m && (_txt=m.post_match)
|
439
562
|
can = m[0].strip
|
440
563
|
if can.include?(' ')
|
441
564
|
can = can.split[1].strip
|
442
565
|
end
|
443
|
-
if
|
566
|
+
if LEFT_CHARS.include?(can[0..0])
|
444
567
|
can = can[1..-1].strip
|
445
568
|
end
|
446
569
|
@words << can if can != @filter && !@words.include?(can)
|
@@ -474,15 +597,19 @@ class RubyCompleteCode < CompleteCode
|
|
474
597
|
# @row = _row.to_i
|
475
598
|
# @col = _col.to_i
|
476
599
|
super
|
477
|
-
if _editor && _editor.has_ctags?
|
600
|
+
if _editor && (_editor.has_ctags? || OS.unix?)
|
478
601
|
tmp_file = _editor.create_temp_file
|
479
602
|
begin
|
480
|
-
|
603
|
+
if _editor.has_ctags?
|
604
|
+
@ss = RubyCtagsFileSourceStructure.new(tmp_file, _editor.ctags_string, _row.to_i)
|
605
|
+
elsif OS.unix?
|
606
|
+
@ss = RubyGrepFileSourceStructure.new(tmp_file, _row.to_i)
|
607
|
+
end
|
481
608
|
ensure
|
482
609
|
File.delete(tmp_file)
|
483
610
|
end
|
484
611
|
else
|
485
|
-
@ss =
|
612
|
+
@ss = RubySourceStructureParser.new(@source)
|
486
613
|
end
|
487
614
|
# @filter=''
|
488
615
|
# @words = Array.new
|
@@ -781,11 +908,12 @@ end
|
|
781
908
|
|
782
909
|
|
783
910
|
class TkTextListBox < TkText
|
911
|
+
SEP = '@@@'
|
784
912
|
def initialize(parent=nil, keys={})
|
785
913
|
super(parent, keys)
|
786
914
|
wrap 'none'
|
787
915
|
tag_configure('selected','background' =>Arcadia.conf('hightlight.sel.background'),'borderwidth'=>1, 'relief'=>'raised')
|
788
|
-
tag_configure('class', 'foreground' => Arcadia.conf('hightlight.
|
916
|
+
tag_configure('class', 'foreground' => Arcadia.conf('hightlight.class_variable.foreground'))
|
789
917
|
@count = 0
|
790
918
|
@selected = -1
|
791
919
|
self.bind_append('KeyPress'){|e| key_press(e)}
|
@@ -793,20 +921,23 @@ class TkTextListBox < TkText
|
|
793
921
|
self.bind_append("ButtonPress-1", proc{|x,y| button_press(x,y)}, "%x %y")
|
794
922
|
end
|
795
923
|
|
924
|
+
def length
|
925
|
+
@count
|
926
|
+
end
|
796
927
|
|
797
928
|
def insert(index, chars, *tags)
|
798
929
|
super(index, chars, *tags)
|
799
930
|
end
|
800
931
|
|
801
|
-
def add(chars)
|
802
|
-
meth_str, class_str = chars.split(
|
932
|
+
def add(chars, *tags)
|
933
|
+
meth_str, class_str = chars.split(TkTextListBox::SEP)
|
803
934
|
if meth_str && meth_str.strip.length>0 && class_str
|
804
935
|
insert('end', "#{meth_str}")
|
805
936
|
insert('end', "-#{class_str}\n", 'class')
|
806
937
|
elsif meth_str && meth_str.strip.length==0 && class_str
|
807
938
|
insert('end', "-#{class_str}\n")
|
808
939
|
else
|
809
|
-
insert('end', "#{chars}\n")
|
940
|
+
insert('end', "#{chars}\n", *tags)
|
810
941
|
end
|
811
942
|
@count = @count+1
|
812
943
|
end
|
@@ -867,16 +998,25 @@ class AgEditorOutlineToolbar
|
|
867
998
|
def initialize(_controller)
|
868
999
|
@controller = _controller
|
869
1000
|
@panel = @controller.main_instance.frame(1).root.add_panel(@controller.main_instance.frame(1).name, "sync");
|
870
|
-
@cb_sync = TkCheckButton.new(@panel, Arcadia.style('checkbox').update('background'=>@panel.background)){
|
871
|
-
text 'Sync'
|
872
|
-
justify 'left'
|
873
|
-
indicatoron 0
|
874
|
-
offrelief 'flat'
|
1001
|
+
# @cb_sync = TkCheckButton.new(@panel, Arcadia.style('checkbox').update('background'=>@panel.background)){
|
1002
|
+
# text 'Sync'
|
1003
|
+
# justify 'left'
|
1004
|
+
# indicatoron 0
|
1005
|
+
# offrelief 'flat'
|
1006
|
+
# image Arcadia.image_res(SYNC_GIF)
|
1007
|
+
# pack
|
1008
|
+
# }
|
1009
|
+
# Tk::BWidget::DynamicHelp::add(@cb_sync,
|
1010
|
+
# 'text'=> Arcadia.text('ext.editor.button.link.hint'))
|
1011
|
+
|
1012
|
+
@cb_sync = Arcadia.wf.titlecontextcheckbutton(@panel){
|
1013
|
+
variable TkVariable.new
|
875
1014
|
image Arcadia.image_res(SYNC_GIF)
|
876
1015
|
pack
|
877
|
-
}
|
878
|
-
|
879
|
-
|
1016
|
+
}
|
1017
|
+
|
1018
|
+
@cb_sync.hint=Arcadia.text('ext.editor.button.link.hint')
|
1019
|
+
|
880
1020
|
|
881
1021
|
do_check = proc {
|
882
1022
|
if @cb_sync.cget('onvalue')==@cb_sync.cget('variable').value.to_i
|
@@ -976,6 +1116,8 @@ class AgEditorOutline
|
|
976
1116
|
end
|
977
1117
|
@tree_exp.close_tree(to_open) if _close_if_opened && to_open && !@opened
|
978
1118
|
@tree_exp.see(_node.rif)
|
1119
|
+
rescue RuntimeError => e
|
1120
|
+
Arcadia.runtime_error(e)
|
979
1121
|
ensure
|
980
1122
|
@tree_exp.selectcommand(_proc)
|
981
1123
|
@selecting_node = false
|
@@ -1044,6 +1186,8 @@ class AgEditorOutline
|
|
1044
1186
|
crossopenimage Arcadia.image_res(ARROWDOWN_GIF)
|
1045
1187
|
}
|
1046
1188
|
@tree_exp.extend(TkScrollableWidget)
|
1189
|
+
@tree_exp.bind_append("Enter", proc{@tree_exp.focus})
|
1190
|
+
|
1047
1191
|
self.show
|
1048
1192
|
pop_up_menu_tree
|
1049
1193
|
end
|
@@ -1084,13 +1228,15 @@ class AgEditorOutline
|
|
1084
1228
|
elsif _son.kind == 'singleton method'
|
1085
1229
|
_image = @image_singleton_method
|
1086
1230
|
end
|
1087
|
-
|
1088
|
-
'
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1231
|
+
if !@tree_exp.exist?(_son.rif)
|
1232
|
+
@tree_exp.insert('end', _son.parent.rif ,_son.rif, {
|
1233
|
+
'text' => _son.label ,
|
1234
|
+
'helptext' => _son.helptext,
|
1235
|
+
#'font'=>$arcadia['conf']['editor.explorer_panel.tree.font'],
|
1236
|
+
'image'=> _image
|
1237
|
+
}.update(Arcadia.style('treeitem'))
|
1093
1238
|
)
|
1239
|
+
end
|
1094
1240
|
if (_label_match) && (_label_match.strip == _son.label.strip)
|
1095
1241
|
@selected = _son
|
1096
1242
|
end
|
@@ -1112,19 +1258,27 @@ class AgEditorOutline
|
|
1112
1258
|
@tree_exp.delete(@tree_exp.nodes('root'))
|
1113
1259
|
end
|
1114
1260
|
_txt = @editor.text.get('1.0','end')
|
1115
|
-
if @editor.has_ctags?
|
1261
|
+
if @editor.has_ctags? || (OS.unix? && @lang == 'ruby')
|
1116
1262
|
if @editor.file && !@editor.modified?
|
1117
|
-
|
1263
|
+
if @editor.has_ctags?
|
1264
|
+
@ss = CtagsFileSourceStructure.new(@editor.file, @editor.ctags_string)
|
1265
|
+
elsif OS.unix?
|
1266
|
+
@ss = RubyGrepFileSourceStructure.new(@editor.file)
|
1267
|
+
end
|
1118
1268
|
else
|
1119
1269
|
tmp_file = @editor.create_temp_file
|
1120
1270
|
begin
|
1121
|
-
|
1271
|
+
if @editor.has_ctags?
|
1272
|
+
@ss = CtagsFileSourceStructure.new(tmp_file, @editor.ctags_string, @lang)
|
1273
|
+
elsif OS.unix?
|
1274
|
+
@ss = RubyGrepFileSourceStructure.new(tmp_file)
|
1275
|
+
end
|
1122
1276
|
ensure
|
1123
1277
|
File.delete(tmp_file)
|
1124
1278
|
end
|
1125
1279
|
end
|
1126
1280
|
else
|
1127
|
-
@ss =
|
1281
|
+
@ss = RubySourceStructureParser.new(_txt)
|
1128
1282
|
end
|
1129
1283
|
@selected = nil
|
1130
1284
|
build_tree_from_node(@ss.root, _label_sel)
|
@@ -1136,14 +1290,15 @@ class AgEditorOutline
|
|
1136
1290
|
end
|
1137
1291
|
|
1138
1292
|
def pop_up_menu_tree
|
1139
|
-
|
1293
|
+
#@pop_up_tree = TkMenu.new(
|
1294
|
+
@pop_up_tree = Arcadia.wf.menu(
|
1140
1295
|
:parent=>@tree_exp,
|
1141
1296
|
:tearoff=>0,
|
1142
1297
|
:title => 'Menu tree'
|
1143
1298
|
)
|
1144
|
-
@pop_up_tree.extend(TkAutoPostMenu)
|
1145
|
-
@pop_up_tree.configure(Arcadia.style('menu'))
|
1146
|
-
|
1299
|
+
# @pop_up_tree.extend(TkAutoPostMenu)
|
1300
|
+
# @pop_up_tree.configure(Arcadia.style('menu'))
|
1301
|
+
|
1147
1302
|
@pop_up_tree.insert('end',
|
1148
1303
|
:command,
|
1149
1304
|
:label=> Arcadia.text('ext.editor.outline.menu.rebuild'),
|
@@ -1163,6 +1318,7 @@ end
|
|
1163
1318
|
|
1164
1319
|
class AgEditor
|
1165
1320
|
attr_accessor :file
|
1321
|
+
attr_accessor :start_index
|
1166
1322
|
attr_accessor :line_numbers_visible
|
1167
1323
|
attr_accessor :id
|
1168
1324
|
attr_reader :read_only
|
@@ -1172,7 +1328,9 @@ class AgEditor
|
|
1172
1328
|
attr_reader :last_tmp_file
|
1173
1329
|
attr_reader :lang
|
1174
1330
|
attr_reader :file_info
|
1175
|
-
attr_reader :outline
|
1331
|
+
attr_reader :outline
|
1332
|
+
attr_reader :file_loaded
|
1333
|
+
attr_reader :edit_initialized
|
1176
1334
|
def initialize(_controller, _page_frame)
|
1177
1335
|
@controller = _controller
|
1178
1336
|
@page_frame = _page_frame
|
@@ -1193,6 +1351,9 @@ class AgEditor
|
|
1193
1351
|
@line_numbers_visible = @controller.conf('line-numbers') == 'yes'
|
1194
1352
|
@id = -1
|
1195
1353
|
@file_info = Hash.new
|
1354
|
+
@file_loaded = false
|
1355
|
+
@edit_initialized = false
|
1356
|
+
@start_index='1.0'
|
1196
1357
|
end
|
1197
1358
|
|
1198
1359
|
def set_controller(_controller)
|
@@ -1207,14 +1368,14 @@ class AgEditor
|
|
1207
1368
|
!@highlighting || (@last_line_end && @last_line_end > 0)
|
1208
1369
|
end
|
1209
1370
|
|
1210
|
-
|
1211
|
-
|
1212
1371
|
def show_line_numbers
|
1213
1372
|
if !@line_numbers_visible
|
1214
1373
|
#@fm1.hide_right
|
1215
1374
|
@fm1.show_left
|
1216
1375
|
@line_numbers_visible = true
|
1217
1376
|
do_line_update
|
1377
|
+
@need_recalc=true
|
1378
|
+
resize_line_num
|
1218
1379
|
end
|
1219
1380
|
end
|
1220
1381
|
|
@@ -1290,6 +1451,7 @@ class AgEditor
|
|
1290
1451
|
Arcadia.runtime_error(e)
|
1291
1452
|
#p "RuntimeError : #{e.message}"
|
1292
1453
|
end
|
1454
|
+
@edit_initialized = true
|
1293
1455
|
end
|
1294
1456
|
|
1295
1457
|
def create_temp_file
|
@@ -1506,7 +1668,7 @@ class AgEditor
|
|
1506
1668
|
end
|
1507
1669
|
|
1508
1670
|
if _key && _class && _key.strip.length > 0 && _class.strip.length > 0
|
1509
|
-
_item = "#{_key.strip}
|
1671
|
+
_item = "#{_key.strip} #{TkTextListBox::SEP} #{_class.strip}"
|
1510
1672
|
elsif _key && _key.strip.length > 0
|
1511
1673
|
_item = "#{_key.strip}"
|
1512
1674
|
else
|
@@ -1538,7 +1700,12 @@ class AgEditor
|
|
1538
1700
|
@raised_listbox_frame.destroy
|
1539
1701
|
#_menu.destroy
|
1540
1702
|
@text.focus
|
1541
|
-
@text.
|
1703
|
+
if @text.get("#{begin_index_for_complete} linestart", "#{begin_index_for_complete} wordstart").strip == "" ||
|
1704
|
+
@text.get("#{begin_index_for_complete} wordstart", "#{begin_index_for_complete} wordstart + 1 chars") != " "
|
1705
|
+
@text.delete("#{begin_index_for_complete} wordstart",'insert')
|
1706
|
+
else
|
1707
|
+
@text.delete("#{begin_index_for_complete} wordstart + 1 chars",'insert')
|
1708
|
+
end
|
1542
1709
|
# workaround for @ char
|
1543
1710
|
_value = _value.strip
|
1544
1711
|
if _value[0..0] !=_target[0..0] && _value[1..1] == _target[0..0]
|
@@ -1746,7 +1913,9 @@ class AgEditor
|
|
1746
1913
|
else
|
1747
1914
|
_dir = MonitorLastUsedDir.get_last_dir
|
1748
1915
|
end
|
1749
|
-
Arcadia.
|
1916
|
+
_file = Arcadia.open_file_dialog(_dir)
|
1917
|
+
Arcadia.process_event(OpenBufferEvent.new(self,'file'=>_file)) if _file
|
1918
|
+
Tk.callback_break
|
1750
1919
|
break
|
1751
1920
|
when 's'
|
1752
1921
|
save
|
@@ -1958,7 +2127,7 @@ class AgEditor
|
|
1958
2127
|
if _r.length>0
|
1959
2128
|
_text=@text.get(_r[0][0],_r[0][1])
|
1960
2129
|
if _text.length > 0
|
1961
|
-
@controller.get_find.e_what.
|
2130
|
+
@controller.get_find.e_what.value=_text
|
1962
2131
|
end
|
1963
2132
|
else
|
1964
2133
|
end
|
@@ -1977,6 +2146,8 @@ class AgEditor
|
|
1977
2146
|
|
1978
2147
|
def do_enter
|
1979
2148
|
check_file_last_access_time
|
2149
|
+
find = @controller.get_find
|
2150
|
+
find.use(self) if find
|
1980
2151
|
end
|
1981
2152
|
|
1982
2153
|
def initialize_text_binding
|
@@ -2067,6 +2238,10 @@ class AgEditor
|
|
2067
2238
|
},
|
2068
2239
|
"%x %y")
|
2069
2240
|
|
2241
|
+
@text_line_num_resized = false
|
2242
|
+
@text_line_num.bind("Map", proc{resize_line_num if !@text_line_num_resized })
|
2243
|
+
|
2244
|
+
|
2070
2245
|
#@text_line_num.configure('font', @font);
|
2071
2246
|
@text_line_num.tag_configure('line_num',
|
2072
2247
|
'foreground' => '#FFFFFF',
|
@@ -2076,13 +2251,14 @@ class AgEditor
|
|
2076
2251
|
)
|
2077
2252
|
|
2078
2253
|
#--- menu
|
2079
|
-
_pop_up = TkMenu.new(
|
2254
|
+
# _pop_up = TkMenu.new(
|
2255
|
+
_pop_up = Arcadia.wf.menu(
|
2080
2256
|
:parent=>@text_line_num,
|
2081
2257
|
:tearoff=>0,
|
2082
2258
|
:title => 'Menu'
|
2083
2259
|
)
|
2084
|
-
_pop_up.extend(TkAutoPostMenu)
|
2085
|
-
_pop_up.configure(Arcadia.style('menu'))
|
2260
|
+
#_pop_up.extend(TkAutoPostMenu)
|
2261
|
+
#_pop_up.configure(Arcadia.style('menu'))
|
2086
2262
|
#Arcadia.instance.main_menu.update_style(@pop_up)
|
2087
2263
|
_title_item = _pop_up.insert('end',
|
2088
2264
|
:command,
|
@@ -2129,7 +2305,7 @@ class AgEditor
|
|
2129
2305
|
|
2130
2306
|
_pop_up.popup(_x,_y)
|
2131
2307
|
})
|
2132
|
-
|
2308
|
+
|
2133
2309
|
end
|
2134
2310
|
|
2135
2311
|
def file_line_to_text_line_num_line(_line)
|
@@ -2341,13 +2517,14 @@ class AgEditor
|
|
2341
2517
|
end
|
2342
2518
|
|
2343
2519
|
def pop_up_menu
|
2344
|
-
|
2520
|
+
#@pop_up = TkMenu.new(
|
2521
|
+
@pop_up = Arcadia.wf.menu(
|
2345
2522
|
:parent=>@text,
|
2346
2523
|
:tearoff=>0,
|
2347
2524
|
:title => 'Menu'
|
2348
2525
|
)
|
2349
|
-
|
2350
|
-
|
2526
|
+
#@pop_up.extend(TkAutoPostMenu)
|
2527
|
+
#@pop_up.configure(Arcadia.style('menu'))
|
2351
2528
|
|
2352
2529
|
@pop_up.insert('end',
|
2353
2530
|
:command,
|
@@ -2527,7 +2704,8 @@ class AgEditor
|
|
2527
2704
|
if _r.length>0
|
2528
2705
|
_data=@text.get(_r[0][0],_r[0][1])
|
2529
2706
|
if _data.length > 0
|
2530
|
-
file =
|
2707
|
+
file = Arcadia.save_file_dialog
|
2708
|
+
#Tk.getSaveFile("filetypes"=>[["Image", [".gif"]],["All Files", [".*"]]])
|
2531
2709
|
if file
|
2532
2710
|
require 'base64'
|
2533
2711
|
decoded = Base64.decode64(_data)
|
@@ -2548,13 +2726,14 @@ class AgEditor
|
|
2548
2726
|
@pop_up.insert('end', :separator)
|
2549
2727
|
|
2550
2728
|
#---- debug menu
|
2551
|
-
_sub_debug = TkMenu.new(
|
2729
|
+
#_sub_debug = TkMenu.new(
|
2730
|
+
_sub_debug = Arcadia.wf.menu(
|
2552
2731
|
:parent=>@pop_up,
|
2553
2732
|
:tearoff=>0,
|
2554
2733
|
:title => 'Debug'
|
2555
2734
|
)
|
2556
|
-
_sub_debug.extend(TkAutoPostMenu)
|
2557
|
-
_sub_debug.configure(Arcadia.style('menu'))
|
2735
|
+
#_sub_debug.extend(TkAutoPostMenu)
|
2736
|
+
#_sub_debug.configure(Arcadia.style('menu'))
|
2558
2737
|
_sub_debug.insert('end',
|
2559
2738
|
:command,
|
2560
2739
|
:label=>Arcadia.text('ext.editor.text.menu.eval_selected'),
|
@@ -2580,13 +2759,14 @@ class AgEditor
|
|
2580
2759
|
|
2581
2760
|
|
2582
2761
|
#---- code menu
|
2583
|
-
_sub_code = TkMenu.new(
|
2762
|
+
#_sub_code = TkMenu.new(
|
2763
|
+
_sub_code = Arcadia.wf.menu(
|
2584
2764
|
:parent=>@pop_up,
|
2585
2765
|
:tearoff=>0,
|
2586
2766
|
:title => 'Code'
|
2587
2767
|
)
|
2588
|
-
_sub_code.extend(TkAutoPostMenu)
|
2589
|
-
_sub_code.configure(Arcadia.style('menu'))
|
2768
|
+
#_sub_code.extend(TkAutoPostMenu)
|
2769
|
+
#_sub_code.configure(Arcadia.style('menu'))
|
2590
2770
|
_sub_code.insert('end',
|
2591
2771
|
:command,
|
2592
2772
|
:label=>Arcadia.text('ext.editor.text.menu.set_wrap'),
|
@@ -2959,7 +3139,7 @@ class AgEditor
|
|
2959
3139
|
|
2960
3140
|
# modify in this instance means the (...) in the tab header of each file
|
2961
3141
|
def modified?
|
2962
|
-
return !(@buffer === text_value)
|
3142
|
+
return @text != nil && !(@buffer === text_value)
|
2963
3143
|
end
|
2964
3144
|
|
2965
3145
|
def set_modify
|
@@ -3014,6 +3194,21 @@ class AgEditor
|
|
3014
3194
|
def zone_of_row(_row)
|
3015
3195
|
((_row) / @highlight_zone_length).to_i + 1
|
3016
3196
|
end
|
3197
|
+
|
3198
|
+
def visible_line_begin
|
3199
|
+
line_begin_index = @text.index('@0,0')
|
3200
|
+
line_begin = line_begin_index.split('.')[0].to_i
|
3201
|
+
line_begin
|
3202
|
+
end
|
3203
|
+
|
3204
|
+
def visible_line_end
|
3205
|
+
line_end = @text.index('@0,'+TkWinfo.height(@text).to_s).split('.')[0].to_i + 1
|
3206
|
+
line_end
|
3207
|
+
end
|
3208
|
+
|
3209
|
+
def visible_lines
|
3210
|
+
visible_line_end - visible_line_begin
|
3211
|
+
end
|
3017
3212
|
|
3018
3213
|
def do_line_update
|
3019
3214
|
#re num in @text_line_num the portion of visibled screen of @text
|
@@ -3106,7 +3301,7 @@ class AgEditor
|
|
3106
3301
|
@line_num_rx_e, @line_num_ry_e, @line_num_width_e, @line_num_heigth_e = @text_line_num.bbox("0.1 lineend - 1 chars");
|
3107
3302
|
if @line_num_width_e.nil?
|
3108
3303
|
@line_num_width_e = @font.split()[-1].strip.to_i
|
3109
|
-
@need_recalc = true
|
3304
|
+
@need_recalc = true
|
3110
3305
|
# linfo_x, linfo_y, linfo_w, linfo_h, linfo_b = @text_line_num.dlineinfo('0.1')
|
3111
3306
|
# if linfo_w
|
3112
3307
|
# @line_num_width_e = linfo_w.to_f/(line_end_chars+1.5)
|
@@ -3125,6 +3320,7 @@ class AgEditor
|
|
3125
3320
|
@last_line_end_chars = -1
|
3126
3321
|
end
|
3127
3322
|
end
|
3323
|
+
@text_line_num_resized = true
|
3128
3324
|
end
|
3129
3325
|
end
|
3130
3326
|
|
@@ -3281,6 +3477,7 @@ class AgEditor
|
|
3281
3477
|
save true
|
3282
3478
|
end
|
3283
3479
|
else
|
3480
|
+
mkdir_recursive(File.dirname(@file)) if !File.exists?(File.dirname(@file))
|
3284
3481
|
f = File.new(@file, "wb")
|
3285
3482
|
begin
|
3286
3483
|
if f
|
@@ -3301,8 +3498,27 @@ class AgEditor
|
|
3301
3498
|
end
|
3302
3499
|
end
|
3303
3500
|
|
3501
|
+
def mkdir_recursive(_dir)
|
3502
|
+
dir_seg = _dir.split(File::SEPARATOR)
|
3503
|
+
incr_dir = ""
|
3504
|
+
res = ""
|
3505
|
+
0.upto(dir_seg.length-1){|j|
|
3506
|
+
if res == File::SEPARATOR
|
3507
|
+
res=res+dir_seg[j]
|
3508
|
+
elsif res.length == 0 && dir_seg[j].length == 0
|
3509
|
+
res=File::SEPARATOR+dir_seg[j]
|
3510
|
+
elsif res.length == 0 && dir_seg[j].length > 0
|
3511
|
+
res=dir_seg[j]
|
3512
|
+
else
|
3513
|
+
res=res+File::SEPARATOR+dir_seg[j]
|
3514
|
+
end
|
3515
|
+
Dir.mkdir(res) if !File.exists?(res)
|
3516
|
+
}
|
3517
|
+
end
|
3518
|
+
|
3304
3519
|
def save_as
|
3305
|
-
file =
|
3520
|
+
file = Arcadia.save_file_dialog
|
3521
|
+
#Tk.getSaveFile("filetypes"=>[["Ruby Files", [".rb", ".rbw"]],["All Files", [".*"]]])
|
3306
3522
|
file = nil if file == "" # cancelled
|
3307
3523
|
if file
|
3308
3524
|
new_file_name(file)
|
@@ -3370,9 +3586,8 @@ class AgEditor
|
|
3370
3586
|
ftime = File.mtime(@file)
|
3371
3587
|
if @file_info['mtime'] != ftime
|
3372
3588
|
msg = Arcadia.text('ext.editor.text.d.file_changed.msg', [@file])
|
3373
|
-
|
3374
|
-
|
3375
|
-
'message' => msg)
|
3589
|
+
title = Arcadia.text('ext.editor.text.d.file_changed.title')
|
3590
|
+
ans = Arcadia.hinner_dialog(self, 'type'=>'yes_no', 'msg'=> msg, 'title' => title, 'level' => 'error')
|
3376
3591
|
if ans == 'yes'
|
3377
3592
|
reload
|
3378
3593
|
else
|
@@ -3381,9 +3596,8 @@ class AgEditor
|
|
3381
3596
|
end
|
3382
3597
|
elsif !file_exist
|
3383
3598
|
msg = Arcadia.text('ext.editor.text.d.file_deleted.msg', [@file])
|
3384
|
-
|
3385
|
-
|
3386
|
-
'message' => msg) == 'yes'
|
3599
|
+
title = Arcadia.text('ext.editor.text.d.file_deleted.title')
|
3600
|
+
if Arcadia.hinner_dialog(self, 'type'=>'yes_no', 'msg'=> msg, 'title' => title, 'level' => 'error') == 'yes'
|
3387
3601
|
save
|
3388
3602
|
else
|
3389
3603
|
@file = nil
|
@@ -3438,7 +3652,7 @@ class AgEditor
|
|
3438
3652
|
# else
|
3439
3653
|
# @fm1 = AGTkVSplittedFrames.new(@page_frame,_w2)
|
3440
3654
|
# end
|
3441
|
-
@fm1 = AGTkVSplittedFrames.new(@page_frame, @page_frame,0,
|
3655
|
+
@fm1 = AGTkVSplittedFrames.new(@page_frame, @page_frame,0,0,false,false)
|
3442
3656
|
@fm1.splitter_frame.configure('relief'=>'flat')
|
3443
3657
|
@fm1.bind_append("Enter", proc{@controller.activate})
|
3444
3658
|
initialize_text(@fm1.right_frame)
|
@@ -3469,6 +3683,7 @@ class AgEditor
|
|
3469
3683
|
def load_file(_filename = nil)
|
3470
3684
|
#if filename is nil then open a new tab
|
3471
3685
|
@loading=true
|
3686
|
+
initialize_editing(Arcadia.file_extension(_filename) || 'rb') if !@edit_initialized
|
3472
3687
|
@dos_line_endings=false
|
3473
3688
|
begin
|
3474
3689
|
@file = _filename
|
@@ -3485,6 +3700,7 @@ class AgEditor
|
|
3485
3700
|
@dos_line_endings=true if file.read.include?("\r\n") # pesky windows line endings
|
3486
3701
|
}
|
3487
3702
|
end
|
3703
|
+
@file_loaded = true
|
3488
3704
|
set_read_only(!File.stat(_filename).writable?)
|
3489
3705
|
reset(false)
|
3490
3706
|
refresh
|
@@ -3493,6 +3709,23 @@ class AgEditor
|
|
3493
3709
|
end
|
3494
3710
|
end
|
3495
3711
|
|
3712
|
+
def load_file_if_not_loaded
|
3713
|
+
if @file && !@file_loaded
|
3714
|
+
load_file(@file)
|
3715
|
+
if @start_index
|
3716
|
+
vl = visible_lines
|
3717
|
+
if vl && vl > 0
|
3718
|
+
text_see("#{@start_index} + #{vl/2 -1} lines")
|
3719
|
+
else
|
3720
|
+
text_see(@start_index)
|
3721
|
+
end
|
3722
|
+
end
|
3723
|
+
do_line_update
|
3724
|
+
@need_recalc=true
|
3725
|
+
resize_line_num
|
3726
|
+
end
|
3727
|
+
end
|
3728
|
+
|
3496
3729
|
def set_read_only(_value)
|
3497
3730
|
if @read_only != _value
|
3498
3731
|
@read_only = _value
|
@@ -3519,6 +3752,7 @@ end
|
|
3519
3752
|
|
3520
3753
|
class AgMultiEditorView
|
3521
3754
|
#attr_reader :enb
|
3755
|
+
attr_reader :usetabs
|
3522
3756
|
def initialize(_parent=nil, _frame=nil, _usetabs=true)
|
3523
3757
|
@parent = _parent
|
3524
3758
|
@frame = _frame
|
@@ -3552,6 +3786,12 @@ class AgMultiEditorView
|
|
3552
3786
|
@enb.bind_append("Map",refresh_after_map)
|
3553
3787
|
end
|
3554
3788
|
|
3789
|
+
# def initialize_notabs
|
3790
|
+
# @frame_notabs = TkFrame.new(@frame.hinner_frame, Arcadia.style('panel')){
|
3791
|
+
# pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes')
|
3792
|
+
# }
|
3793
|
+
# end
|
3794
|
+
|
3555
3795
|
def switch_2_tabs
|
3556
3796
|
raised = raise
|
3557
3797
|
@usetabs = true
|
@@ -3706,7 +3946,7 @@ class AgMultiEditorView
|
|
3706
3946
|
else
|
3707
3947
|
adapted_frame = _adapter
|
3708
3948
|
end
|
3709
|
-
adapted_frame.attach_frame(frame)
|
3949
|
+
adapted_frame.attach_frame(frame, @parent)
|
3710
3950
|
adapted_frame.raise
|
3711
3951
|
@pages[_name]={'frame'=>adapted_frame, 'file'=>_file, 'text'=>_title, 'image' => _image, 'raisecmd'=>_raise_proc}
|
3712
3952
|
adapted_frame
|
@@ -3726,13 +3966,14 @@ class AgMultiEditorView
|
|
3726
3966
|
def add_menu_button(_name, _buffer_string)
|
3727
3967
|
@buffer_menu_button = @frame.root.add_menu_button(
|
3728
3968
|
_name, 'files', nil, 'right',
|
3729
|
-
{
|
3730
|
-
|
3969
|
+
{
|
3970
|
+
#'relief'=>:flat,
|
3971
|
+
# 'borderwidth'=>1,
|
3731
3972
|
'compound'=> 'left',
|
3732
|
-
|
3733
|
-
|
3734
|
-
|
3735
|
-
|
3973
|
+
# 'anchor'=>'w',
|
3974
|
+
# 'font'=> "#{Arcadia.conf('titlelabel.font')} italic",
|
3975
|
+
# 'activebackground'=>Arcadia.conf('titlelabel.background'),
|
3976
|
+
# 'foreground' => Arcadia.conf('titlecontext.foreground'),
|
3736
3977
|
'textvariable'=> _buffer_string
|
3737
3978
|
}
|
3738
3979
|
)
|
@@ -4032,8 +4273,8 @@ class CoderayHighlightScanner < HighlightScanner
|
|
4032
4273
|
elsif !([:open, :close, :begin_group,:end_group].include?(tok[0])&& tok[1].class==Symbol)
|
4033
4274
|
toklength = tok[0].length
|
4034
4275
|
t_begin="#{row}.#{col}"
|
4035
|
-
if tok[0].include?("\n")
|
4036
|
-
|
4276
|
+
#if tok[0].include?("\n")
|
4277
|
+
if tok[0].to_s.include?("\n")
|
4037
4278
|
ar = tok[0].split("\n")
|
4038
4279
|
row+=tok[0].count("\n")
|
4039
4280
|
begin_gap = ar[-1]
|
@@ -4067,9 +4308,22 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4067
4308
|
attr_reader :has_ctags, :ctags_string
|
4068
4309
|
attr_reader :main_frame
|
4069
4310
|
|
4070
|
-
|
4311
|
+
|
4312
|
+
def has_ctags_exuberant?
|
4313
|
+
ret = false
|
4071
4314
|
Arcadia.is_windows? ? @ctags_string="lib/ctags.exe" : @ctags_string='ctags'
|
4072
|
-
|
4315
|
+
ctags_file = Arcadia.which(@ctags_string)
|
4316
|
+
if !ctags_file.nil?
|
4317
|
+
output = ArcadiaUtils.exec("#{ctags_file} --version")
|
4318
|
+
ret = output && output.include?('Exuberant Ctags')
|
4319
|
+
end
|
4320
|
+
ret
|
4321
|
+
end
|
4322
|
+
|
4323
|
+
def on_before_build(_event)
|
4324
|
+
#Arcadia.is_windows? ? @ctags_string="lib/ctags.exe" : @ctags_string='ctags'
|
4325
|
+
#@has_ctags = !Arcadia.which(@ctags_string).nil?
|
4326
|
+
@has_ctags = has_ctags_exuberant?
|
4073
4327
|
if !@has_ctags
|
4074
4328
|
msg = Arcadia.text("ext.editor.e.ctags.msg")
|
4075
4329
|
ArcadiaProblemEvent.new(self, "type"=>ArcadiaProblemEvent::DEPENDENCE_MISSING_TYPE,"title"=>Arcadia.text("ext.editor.e.ctags.title"), "detail"=>msg).go!
|
@@ -4090,23 +4344,41 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4090
4344
|
# Arcadia.attach_listener(self, StartDebugEvent)
|
4091
4345
|
Arcadia.attach_listener(self, FocusEvent)
|
4092
4346
|
Arcadia.attach_listener(self, BookmarkEvent)
|
4347
|
+
Arcadia.attach_listener(self, LayoutChangedDomainEvent)
|
4093
4348
|
end
|
4094
4349
|
|
4095
|
-
|
4096
|
-
|
4097
|
-
|
4098
|
-
|
4099
|
-
|
4100
|
-
|
4101
|
-
|
4102
|
-
|
4103
|
-
# else
|
4104
|
-
# _event.file = current_editor.create_temp_file
|
4105
|
-
# end
|
4106
|
-
# end
|
4107
|
-
# end
|
4108
|
-
# end
|
4350
|
+
def unmap_last_frame
|
4351
|
+
@last_fa = @main_frame.page_frame(@main_frame.raise)
|
4352
|
+
if @last_fa
|
4353
|
+
@last_fa.refresh_layout_manager
|
4354
|
+
@last_fa_layout_manager = @last_fa.layout_manager
|
4355
|
+
@last_fa.unmap(@last_fa_layout_manager)
|
4356
|
+
end
|
4357
|
+
end
|
4109
4358
|
|
4359
|
+
def on_layout_changed_domain(_event)
|
4360
|
+
# workaround for a problem in stack rendering with usetabs == false
|
4361
|
+
if @main_frame && !@main_frame.usetabs && self.frame_domain(0) == _event.old_domain
|
4362
|
+
if _event.old_domain == _event.new_domain
|
4363
|
+
if self.frame_raised?(0)
|
4364
|
+
if !@last_fa.nil?
|
4365
|
+
@last_fa.refresh_layout_manager
|
4366
|
+
@last_fa.map(@last_fa_layout_manager)
|
4367
|
+
@last_fa = nil
|
4368
|
+
end
|
4369
|
+
else
|
4370
|
+
unmap_last_frame
|
4371
|
+
end
|
4372
|
+
else
|
4373
|
+
if !@last_fa.nil?
|
4374
|
+
@last_fa.refresh_layout_manager
|
4375
|
+
@last_fa.map(@last_fa_layout_manager)
|
4376
|
+
@last_fa = nil
|
4377
|
+
end
|
4378
|
+
end
|
4379
|
+
end
|
4380
|
+
end
|
4381
|
+
|
4110
4382
|
def on_before_run_cmd(_event)
|
4111
4383
|
_filename = _event.file
|
4112
4384
|
_event.persistent = true
|
@@ -4216,7 +4488,9 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4216
4488
|
self.name,
|
4217
4489
|
'Close current',
|
4218
4490
|
proc{self.activate;Arcadia.process_event(CloseCurrentTabEvent.new(self))},
|
4219
|
-
CLOSE_DOCUMENT_GIF
|
4491
|
+
#CLOSE_DOCUMENT_GIF
|
4492
|
+
CLOSE_FRAME_GIF
|
4493
|
+
)
|
4220
4494
|
frame.root.add_sep(self.name, 1)
|
4221
4495
|
@buffer_number = TkVariable.new
|
4222
4496
|
@buffer_string = TkVariable.new
|
@@ -4281,7 +4555,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4281
4555
|
end
|
4282
4556
|
}
|
4283
4557
|
end
|
4284
|
-
instance.move_buffer_here(raised_name)
|
4558
|
+
#instance.move_buffer_here(raised_name)
|
4285
4559
|
instance
|
4286
4560
|
end
|
4287
4561
|
|
@@ -4406,8 +4680,8 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4406
4680
|
make_buffer_string("") if @buffer_menu.index('end').nil?
|
4407
4681
|
if _sender == self
|
4408
4682
|
instances.each{|i|
|
4409
|
-
if i != self
|
4410
|
-
i.del_buffer_menu_item(_file, self)
|
4683
|
+
if i != self || instances.count == 1
|
4684
|
+
i.del_buffer_menu_item(_file, self) if instances.count > 1
|
4411
4685
|
i.refresh_buffer_string
|
4412
4686
|
end
|
4413
4687
|
}
|
@@ -4494,6 +4768,10 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4494
4768
|
reset_status if @main_frame.pages.empty?
|
4495
4769
|
end
|
4496
4770
|
|
4771
|
+
# def on_after_initialize(_event)
|
4772
|
+
# @editors.each{|e| e.resize_line_num}
|
4773
|
+
# end
|
4774
|
+
|
4497
4775
|
def on_exit_query(_event)
|
4498
4776
|
_event.can_exit=true
|
4499
4777
|
return if _event.sender.instance_of?(AgMultiEditor) && _event.sender != self
|
@@ -4511,9 +4789,8 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4511
4789
|
if [CutTextEvent, PasteTextEvent, UndoTextEvent, RedoTextEvent].include?(_event.class)
|
4512
4790
|
if raised.highlighting
|
4513
4791
|
raised.refresh_visible_highlighting
|
4514
|
-
else
|
4515
|
-
raised.check_modify
|
4516
4792
|
end
|
4793
|
+
raised.check_modify
|
4517
4794
|
end
|
4518
4795
|
end
|
4519
4796
|
end
|
@@ -4560,9 +4837,6 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4560
4837
|
lang_exts.each{|ext|
|
4561
4838
|
@langs_hash_by_ext[ext] = lang_props
|
4562
4839
|
} if lang_exts
|
4563
|
-
|
4564
|
-
|
4565
|
-
|
4566
4840
|
end
|
4567
4841
|
}
|
4568
4842
|
end
|
@@ -4611,13 +4885,14 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4611
4885
|
|
4612
4886
|
|
4613
4887
|
def pop_up_menu
|
4614
|
-
|
4888
|
+
#@pop_up = TkMenu.new(
|
4889
|
+
@pop_up = Arcadia.wf.menu(
|
4615
4890
|
:parent=> self.frame.hinner_frame,
|
4616
4891
|
:tearoff=>0,
|
4617
4892
|
:title => 'Menu'
|
4618
4893
|
)
|
4619
|
-
|
4620
|
-
|
4894
|
+
#@pop_up.extend(TkAutoPostMenu)
|
4895
|
+
#@pop_up.configure(Arcadia.style('menu'))
|
4621
4896
|
#Arcadia.instance.main_menu.update_style(@pop_up)
|
4622
4897
|
|
4623
4898
|
|
@@ -4756,7 +5031,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4756
5031
|
@bookmarks << {:file=>"__TMP__#{_event.id}",:from_line=>_event.from_row, :to_line=>_event.to_row}
|
4757
5032
|
_e = @editors[_event.id]
|
4758
5033
|
end
|
4759
|
-
if _e
|
5034
|
+
if _e && _e.text
|
4760
5035
|
index_from = "#{_event.from_row}.0"
|
4761
5036
|
index_to = "#{_event.to_row}.0 lineend"
|
4762
5037
|
_event.content = _e.text.get(index_from, index_to)
|
@@ -4882,18 +5157,18 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4882
5157
|
end
|
4883
5158
|
if _event.kind_of?(OpenBufferTransientEvent)
|
4884
5159
|
if conf('close-last-if-not-modified')=="yes"
|
4885
|
-
|
4886
|
-
|
4887
|
-
|
4888
|
-
|
5160
|
+
if defined?(@last_transient_file) && !@last_transient_file.nil? && @last_transient_file != _event.file
|
5161
|
+
_e = @tabs_editor[tab_name(@last_transient_file)]
|
5162
|
+
if _e && !_e.modified_from_opening?
|
5163
|
+
close_editor(_e)
|
5164
|
+
end
|
5165
|
+
end
|
5166
|
+
if !editor_exist?(_event.file)
|
5167
|
+
@last_transient_file = _event.file
|
5168
|
+
else
|
5169
|
+
@last_transient_file = nil
|
5170
|
+
_event.transient = false
|
4889
5171
|
end
|
4890
|
-
end
|
4891
|
-
if !editor_exist?(_event.file)
|
4892
|
-
@last_transient_file = _event.file
|
4893
|
-
else
|
4894
|
-
@last_transient_file = nil
|
4895
|
-
_event.transient = false
|
4896
|
-
end
|
4897
5172
|
else
|
4898
5173
|
_event.transient = false
|
4899
5174
|
end
|
@@ -4999,11 +5274,13 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
4999
5274
|
end
|
5000
5275
|
|
5001
5276
|
def show_hide_current_line_numbers
|
5277
|
+
return if !self.frame_raised?(0)
|
5002
5278
|
_e = active_instance.raised
|
5003
5279
|
_e.show_hide_line_numbers if _e
|
5004
5280
|
end
|
5005
5281
|
|
5006
5282
|
def show_hide_tabs
|
5283
|
+
return if !self.frame_raised?(0)
|
5007
5284
|
if active?
|
5008
5285
|
if @usetabs
|
5009
5286
|
@main_frame.switch_2_notabs
|
@@ -5027,7 +5304,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5027
5304
|
@tabs_editor.each_value{|editor|
|
5028
5305
|
if editor.file != nil
|
5029
5306
|
#_insert_index = editor.text.index('insert')
|
5030
|
-
_insert_index = editor.text.index('@0,0')
|
5307
|
+
_insert_index = editor.text.nil?? editor.start_index : editor.text.index('@0,0')
|
5031
5308
|
_files=_files+'|' if _files.strip.length > 0
|
5032
5309
|
_files=_files + "#{editor.file};#{_insert_index};#{editor.line_numbers_visible.to_s}"
|
5033
5310
|
end
|
@@ -5116,10 +5393,15 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5116
5393
|
end
|
5117
5394
|
|
5118
5395
|
def on_layout_raising_frame(_event)
|
5119
|
-
if _event.extension_name == "editor" && _event.frame_name=="editor_outline"
|
5396
|
+
if _event.extension_name && _event.extension_name == "editor" && _event.frame_name=="editor_outline"
|
5120
5397
|
_e = raised
|
5121
5398
|
change_outline(_e, true) if _e
|
5122
5399
|
end
|
5400
|
+
if Arcadia.extension(_event.extension_name) && frame_domain == Arcadia.extension(_event.extension_name).frame_domain
|
5401
|
+
if @main_frame && !@main_frame.usetabs
|
5402
|
+
unmap_last_frame
|
5403
|
+
end
|
5404
|
+
end
|
5123
5405
|
end
|
5124
5406
|
|
5125
5407
|
# def update(_kind,_name)
|
@@ -5131,27 +5413,34 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5131
5413
|
|
5132
5414
|
def open_last_files
|
5133
5415
|
@batch_files = true
|
5416
|
+
last_ed = nil
|
5134
5417
|
if Arcadia.persistent("#{@name}.files.open")
|
5135
5418
|
_files_index =Arcadia.persistent("#{@name}.files.open").split("|")
|
5136
5419
|
_files_index.each do |value|
|
5137
5420
|
_file,_index,_line_numbers_visible_as_string = value.split(';')
|
5138
5421
|
if _file && _index
|
5139
|
-
ed = open_file(_file,_index,false)
|
5422
|
+
ed = open_file(_file,_index,false, false)
|
5140
5423
|
else
|
5141
|
-
ed = open_file(_file)
|
5424
|
+
ed = open_file(_file,'1.0', false, false)
|
5142
5425
|
end
|
5143
5426
|
if ed && _line_numbers_visible_as_string && ed.line_numbers_visible
|
5144
5427
|
ed.line_numbers_visible = _line_numbers_visible_as_string == 'true'
|
5145
5428
|
end
|
5429
|
+
last_ed = ed
|
5146
5430
|
end
|
5147
5431
|
end
|
5148
5432
|
@batch_files = false
|
5433
|
+
change_outline(last_ed) if last_ed
|
5149
5434
|
to_raise_file = Arcadia.persistent("#{@name}.files.last")
|
5150
5435
|
if to_raise_file
|
5436
|
+
ed_to_raise = @tabs_editor[self.tab_file_name(to_raise_file)]
|
5437
|
+
ed_to_raise.load_file_if_not_loaded if ed_to_raise
|
5151
5438
|
raise_file(to_raise_file,0)
|
5152
5439
|
else
|
5153
5440
|
_first_page = @main_frame.pages[0] if @main_frame.pages.length > 0
|
5154
5441
|
if _first_page
|
5442
|
+
ed_to_raise = @tabs_editor[_first_page]
|
5443
|
+
ed_to_raise.load_file_if_not_loaded if ed_to_raise
|
5155
5444
|
@main_frame.raise(_first_page) if frame_def_visible?
|
5156
5445
|
@main_frame.see(_first_page)
|
5157
5446
|
end
|
@@ -5291,7 +5580,6 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5291
5580
|
|
5292
5581
|
def make_buffer_string(_str=nil)
|
5293
5582
|
value = "[#{@buffer_number.value}] #{_str}"
|
5294
|
-
#@buffer_menu_button.configure(:text => )
|
5295
5583
|
@last_buffer_str = _str
|
5296
5584
|
@buffer_string.value = value
|
5297
5585
|
end
|
@@ -5330,6 +5618,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5330
5618
|
mod_buffer_menu_item(@tabs_editor[p_name].file, _new_text, _new_file, self)
|
5331
5619
|
else
|
5332
5620
|
mod_buffer_menu_item(unname_modified(tab_title_by_tab_name(p_name)), _new_text, nil, self)
|
5621
|
+
@last_fa.refresh_layout_manager if @last_fa
|
5333
5622
|
end
|
5334
5623
|
# mod_buffer_menu_item(@main_frame.page(p_name)['file'], _new_text)
|
5335
5624
|
@main_frame.page_title(p_name, _new_text)
|
@@ -5390,7 +5679,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5390
5679
|
if _editor
|
5391
5680
|
@last_e = raise_editor(_editor, @last_index, false, false)
|
5392
5681
|
else
|
5393
|
-
@last_e = open_file(_filename, @last_index, false
|
5682
|
+
@last_e = open_file(_filename, @last_index, false)
|
5394
5683
|
end
|
5395
5684
|
#@last_e.hide_exp
|
5396
5685
|
@last_e.mark_debug(@last_index) if @last_e
|
@@ -5407,7 +5696,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5407
5696
|
end
|
5408
5697
|
|
5409
5698
|
def change_outline(_e, _raised=false)
|
5410
|
-
return if defined?(@@last_outline_e) && @@last_outline_e == _e
|
5699
|
+
return if (defined?(@@last_outline_e) && @@last_outline_e == _e)
|
5411
5700
|
_raised = _raised || main_instance.frame(1).raised?
|
5412
5701
|
if !@batch_files && _raised
|
5413
5702
|
@@last_outline_e.hide_outline if defined?(@@last_outline_e)
|
@@ -5424,6 +5713,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5424
5713
|
_new_caption = '...'
|
5425
5714
|
if _index != -1
|
5426
5715
|
_e = @tabs_editor[resolve_tab_name(_name)]
|
5716
|
+
_e.load_file_if_not_loaded if _e
|
5427
5717
|
change_outline(_e) if _e
|
5428
5718
|
if _e && _e.file != nil
|
5429
5719
|
_new_caption = _e.file
|
@@ -5469,7 +5759,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5469
5759
|
size_str = "#{size} b"
|
5470
5760
|
end
|
5471
5761
|
@@statusbar_items['file_name'].text(File.basename(raised.file))
|
5472
|
-
@@statusbar_items['file_mtime'].text = raised.file_info['mtime'].localtime
|
5762
|
+
@@statusbar_items['file_mtime'].text = raised.file_info['mtime'].localtime if raised.file_info['mtime']
|
5473
5763
|
@@statusbar_items['file_size'].text = size_str
|
5474
5764
|
#@statusbar_item.text("#{File.basename(raised.file)} | #{raised.file_info['mtime'].localtime} | #{size_str}")
|
5475
5765
|
else
|
@@ -5544,7 +5834,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5544
5834
|
end
|
5545
5835
|
end
|
5546
5836
|
|
5547
|
-
def open_file(_filename = nil, _text_index='1.0', _mark_selected=true,
|
5837
|
+
def open_file(_filename = nil, _text_index='1.0', _mark_selected=true, _load_file=true)
|
5548
5838
|
return if _filename == nil || !File.exist?(_filename) || File.ftype(_filename) != 'file'
|
5549
5839
|
_basefilename = File.basename(_filename)
|
5550
5840
|
_tab_name = self.tab_file_name(_filename)
|
@@ -5554,12 +5844,26 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5554
5844
|
if _exist_buffer
|
5555
5845
|
open_buffer(_tab_name)
|
5556
5846
|
# ??? _text_index = nil
|
5847
|
+
if !@tabs_editor[_tab_name].file_loaded
|
5848
|
+
@tabs_editor[_tab_name].reset_highlight
|
5849
|
+
begin
|
5850
|
+
@tabs_editor[_tab_name].load_file_if_not_loaded
|
5851
|
+
rescue RuntimeError => e
|
5852
|
+
close_editor(@tabs_editor[_tab_name], true)
|
5853
|
+
Arcadia.runtime_error(e)
|
5854
|
+
end
|
5855
|
+
end
|
5557
5856
|
else
|
5558
5857
|
# @tabs_file[_tab_name]= _filename
|
5559
|
-
open_buffer(_tab_name, _basefilename, _filename)
|
5858
|
+
open_buffer(_tab_name, _basefilename, _filename, nil, false)
|
5560
5859
|
@tabs_editor[_tab_name].reset_highlight
|
5561
5860
|
begin
|
5562
|
-
|
5861
|
+
if _load_file
|
5862
|
+
@tabs_editor[_tab_name].load_file(_filename)
|
5863
|
+
else
|
5864
|
+
@tabs_editor[_tab_name].file = _filename
|
5865
|
+
@tabs_editor[_tab_name].start_index = _text_index
|
5866
|
+
end
|
5563
5867
|
rescue RuntimeError => e
|
5564
5868
|
#Arcadia.dialog(self,'type'=>'ok', 'level'=>'error','title' => 'RuntimeError', 'msg'=>"RuntimeError : #{e.message}")
|
5565
5869
|
#p "RuntimeError : #{e.message}"
|
@@ -5569,11 +5873,13 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5569
5873
|
change_outline_frame_caption(File.basename(_filename)) if _filename
|
5570
5874
|
end
|
5571
5875
|
editor = @tabs_editor[_tab_name]
|
5572
|
-
if
|
5573
|
-
editor
|
5574
|
-
|
5876
|
+
if editor && _load_file
|
5877
|
+
if _text_index != nil && _text_index != '1.0' && editor
|
5878
|
+
editor.text_see(_text_index)
|
5879
|
+
editor.mark_selected(_text_index) if _mark_selected
|
5880
|
+
end
|
5881
|
+
editor.do_line_update if editor && !editor.highlighted?
|
5575
5882
|
end
|
5576
|
-
editor.do_line_update if editor && !editor.highlighted?
|
5577
5883
|
return editor
|
5578
5884
|
end
|
5579
5885
|
|
@@ -5582,8 +5888,11 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5582
5888
|
#@raw_buffer_name[_name]=_name
|
5583
5889
|
end
|
5584
5890
|
|
5585
|
-
def open_buffer(_buffer_name = nil, _title = nil, _filename=nil, _lang=nil)
|
5891
|
+
def open_buffer(_buffer_name = nil, _title = nil, _filename=nil, _lang=nil, _initialize_editing=true)
|
5586
5892
|
#_index = @main_frame.index(resolve_tab_name(_buffer_name))
|
5893
|
+
if frame_visible? && !frame_raised?
|
5894
|
+
@arcadia.layout.change_domain(frame_domain, @name)
|
5895
|
+
end
|
5587
5896
|
if @main_frame.exist_buffer?(resolve_tab_name(_buffer_name))
|
5588
5897
|
_tab = @main_frame.page_frame(resolve_tab_name(_buffer_name))
|
5589
5898
|
#@main_frame.raise(resolve_tab_name(_buffer_name)) if frame_visible?
|
@@ -5614,7 +5923,6 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5614
5923
|
_image = Arcadia.file_icon(_title)
|
5615
5924
|
end
|
5616
5925
|
_tab = @main_frame.add_page(_buffer_name, _filename, _title, _image, proc{do_buffer_raise(_buffer_name, _title)})
|
5617
|
-
# @raw_buffer_name[_buffer_name]=_buffer_name
|
5618
5926
|
if _filename
|
5619
5927
|
add_buffer_menu_item(_filename)
|
5620
5928
|
else
|
@@ -5622,27 +5930,17 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5622
5930
|
end
|
5623
5931
|
_e = AgEditor.new(self, _tab)
|
5624
5932
|
register_editor(_e, _buffer_name, _filename)
|
5625
|
-
|
5626
|
-
|
5627
|
-
|
5628
|
-
|
5629
|
-
|
5630
|
-
ext='rb' if ext.nil?
|
5631
|
-
_e.initialize_editing(ext, _lang)
|
5632
|
-
_e.text.set_focus
|
5933
|
+
if _initialize_editing
|
5934
|
+
ext= Arcadia.file_extension(_title) || 'rb'
|
5935
|
+
_e.initialize_editing(ext, _lang)
|
5936
|
+
_e.text.set_focus
|
5937
|
+
end
|
5633
5938
|
end
|
5634
5939
|
begin
|
5635
5940
|
if raised != @tabs_editor[resolve_tab_name(_buffer_name)]
|
5636
|
-
@main_frame.raise(resolve_tab_name(_buffer_name)) if frame_visible?
|
5941
|
+
@main_frame.raise(resolve_tab_name(_buffer_name)) #if frame_visible?
|
5637
5942
|
@main_frame.see(resolve_tab_name(_buffer_name))
|
5638
5943
|
end
|
5639
|
-
# if raised != @tabs_editor[resolve_tab_name(_buffer_name)]
|
5640
|
-
# @main_frame.move(resolve_tab_name(_buffer_name), 0)
|
5641
|
-
# @main_frame.raise(resolve_tab_name(_buffer_name)) if frame_visible?
|
5642
|
-
# @main_frame.see(resolve_tab_name(_buffer_name))
|
5643
|
-
# else
|
5644
|
-
# @main_frame.move(resolve_tab_name(_buffer_name), 0)
|
5645
|
-
# end
|
5646
5944
|
rescue Exception => e
|
5647
5945
|
Arcadia.runtime_error(e)
|
5648
5946
|
end
|
@@ -5667,6 +5965,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5667
5965
|
|
5668
5966
|
def raise_editor(_editor = nil, _text_index='0.0', _mark_selected=true, _exp=true)
|
5669
5967
|
return if _editor == nil
|
5968
|
+
#_editor.load_file_if_not_loaded
|
5670
5969
|
_tab_name = nil
|
5671
5970
|
@tabs_editor.each{|tn,e|
|
5672
5971
|
if e == _editor
|
@@ -5742,7 +6041,7 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5742
6041
|
def close_editor(_editor, _force=false)
|
5743
6042
|
if _force || can_close_editor?(_editor)
|
5744
6043
|
file = _editor.file
|
5745
|
-
index = _editor.text.index("@0,0")
|
6044
|
+
index = _editor.text.nil?? _editor.start_index : _editor.text.index("@0,0")
|
5746
6045
|
r,c = index.split('.')
|
5747
6046
|
_editor.destroy_outline
|
5748
6047
|
change_outline_frame_caption('') if raised==_editor
|
@@ -5780,7 +6079,11 @@ class AgMultiEditor < ArcadiaExtPlus
|
|
5780
6079
|
else
|
5781
6080
|
ind = _index-1
|
5782
6081
|
end
|
5783
|
-
|
6082
|
+
if TkWinfo.mapped?(@main_frame.root_frame)
|
6083
|
+
@main_frame.raise(@main_frame.pages[ind])
|
6084
|
+
editor = @tabs_editor[@main_frame.pages[ind]]
|
6085
|
+
#editor.load_file_if_not_loaded if editor
|
6086
|
+
end
|
5784
6087
|
else
|
5785
6088
|
frame.root.top_text_clear if TkWinfo.mapped?(frame.hinner_frame)
|
5786
6089
|
make_buffer_string("")
|
@@ -5836,20 +6139,22 @@ class Findview < TkFloatTitledFrame
|
|
5836
6139
|
place('x' => 8,'y' => y0,'height' => 19)
|
5837
6140
|
}
|
5838
6141
|
y0 = y0 + d
|
5839
|
-
@e_what = Tk::BWidget::ComboBox.new(self.frame, Arcadia.style('combobox')){
|
5840
|
-
|
6142
|
+
# @e_what = Tk::BWidget::ComboBox.new(self.frame, Arcadia.style('combobox')){
|
6143
|
+
@e_what = Arcadia.wf.combobox(self.frame){
|
6144
|
+
# editable true
|
5841
6145
|
justify 'left'
|
5842
|
-
|
5843
|
-
|
5844
|
-
|
5845
|
-
|
5846
|
-
|
6146
|
+
# autocomplete 'true'
|
6147
|
+
# expand 'tab'
|
6148
|
+
exportselection true
|
6149
|
+
width 100
|
6150
|
+
takefocus true
|
5847
6151
|
place('relwidth' => 1, 'width'=>-16,'x' => 8,'y' => y0,'height' => 19)
|
5848
6152
|
}
|
5849
|
-
|
5850
|
-
|
5851
|
-
|
5852
|
-
@e_what_entry.
|
6153
|
+
|
6154
|
+
@e_what.extend(TkInputThrow)
|
6155
|
+
|
6156
|
+
# @e_what_entry = TkWinfo.children(@e_what)[0]
|
6157
|
+
# @e_what_entry.extend(TkInputThrow)
|
5853
6158
|
|
5854
6159
|
|
5855
6160
|
y0 = y0 + d
|
@@ -5859,40 +6164,45 @@ class Findview < TkFloatTitledFrame
|
|
5859
6164
|
}
|
5860
6165
|
y0 = y0 + d
|
5861
6166
|
|
5862
|
-
@e_with = Tk::BWidget::ComboBox.new(self.frame, Arcadia.style('combobox')){
|
5863
|
-
|
6167
|
+
# @e_with = Tk::BWidget::ComboBox.new(self.frame, Arcadia.style('combobox')){
|
6168
|
+
@e_with = Arcadia.wf.combobox(self.frame){
|
6169
|
+
# editable true
|
5864
6170
|
justify 'left'
|
5865
|
-
|
5866
|
-
|
5867
|
-
|
5868
|
-
|
6171
|
+
# autocomplete 'true'
|
6172
|
+
# expand 'tab'
|
6173
|
+
exportselection true
|
6174
|
+
width 100
|
6175
|
+
takefocus true
|
5869
6176
|
place('relwidth' => 1, 'width'=>-16,'x' => 8,'y' => y0,'height' => 19)
|
5870
6177
|
}
|
5871
|
-
|
5872
|
-
|
5873
|
-
|
6178
|
+
|
6179
|
+
@e_with.extend(TkInputThrow)
|
6180
|
+
|
6181
|
+
# @e_with_entry = TkWinfo.children(@e_with)[0]
|
6182
|
+
# @e_with_entry.extend(TkInputThrow)
|
6183
|
+
|
5874
6184
|
y0 = y0 + d
|
5875
|
-
@cb_reg = TkCheckButton.new(self.frame, Arcadia.style('checkbox')){|_cb_reg|
|
6185
|
+
# @cb_reg = TkCheckButton.new(self.frame, Arcadia.style('checkbox')){|_cb_reg|
|
6186
|
+
@cb_reg = Arcadia.wf.checkbutton(self.frame){|_cb_reg|
|
5876
6187
|
text Arcadia.text('ext.editor.search.label.use_regexp')
|
5877
|
-
|
5878
|
-
|
5879
|
-
#pack('side'=>'left', 'anchor'=>'e')
|
6188
|
+
# justify 'left'
|
6189
|
+
variable TkVariable.new
|
5880
6190
|
place('x' => 8,'y' => y0,'height' => 22)
|
5881
6191
|
}
|
5882
6192
|
y0 = y0 + d
|
5883
|
-
|
6193
|
+
#@cb_back = TkCheckButton.new(self.frame, Arcadia.style('checkbox')){|_cb_reg|
|
6194
|
+
@cb_back = Arcadia.wf.checkbutton(self.frame){|_cb_reg|
|
5884
6195
|
text Arcadia.text('ext.editor.search.label.search_back')
|
5885
|
-
|
5886
|
-
|
5887
|
-
#pack('side'=>'left', 'anchor'=>'e')
|
6196
|
+
variable TkVariable.new
|
6197
|
+
# justify 'left'
|
5888
6198
|
place('x' => 8,'y' => y0,'height' => 22)
|
5889
6199
|
}
|
5890
6200
|
y0 = y0 + d
|
5891
|
-
|
6201
|
+
#@cb_ignore_case = TkCheckButton.new(self.frame, Arcadia.style('checkbox')){|_cb_reg|
|
6202
|
+
@cb_ignore_case = Arcadia.wf.checkbutton(self.frame){|_cb_reg|
|
5892
6203
|
text Arcadia.text('ext.editor.search.label.ignore_case')
|
5893
|
-
|
5894
|
-
|
5895
|
-
#pack('side'=>'left', 'anchor'=>'e')
|
6204
|
+
# justify 'left'
|
6205
|
+
variable TkVariable.new
|
5896
6206
|
place('x' => 8,'y' => y0,'height' => 22)
|
5897
6207
|
}
|
5898
6208
|
|
@@ -5901,45 +6211,39 @@ class Findview < TkFloatTitledFrame
|
|
5901
6211
|
y0 = y0 + d
|
5902
6212
|
@buttons_frame = TkFrame.new(self.frame, Arcadia.style('panel')).pack('fill'=>'x', 'side'=>'bottom')
|
5903
6213
|
|
5904
|
-
|
6214
|
+
#@b_replace_all = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
|
6215
|
+
@b_replace_all = Arcadia.wf.button(@buttons_frame){|_b_go|
|
5905
6216
|
state 'disabled'
|
5906
|
-
default 'disabled'
|
6217
|
+
# default 'disabled'
|
5907
6218
|
text Arcadia.text('ext.editor.search.label.replace_all')
|
5908
|
-
|
5909
|
-
|
5910
|
-
#width 15
|
6219
|
+
# justify 'center'
|
6220
|
+
width 10
|
5911
6221
|
pack('side'=>'right','ipadx'=>5, 'padx'=>5)
|
5912
|
-
#place('width' => 50,'x' => 0,'y' => y0,'height' => 23,'bordermode' => 'inside')
|
5913
6222
|
}
|
5914
6223
|
|
5915
6224
|
|
5916
|
-
@b_replace = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
|
6225
|
+
# @b_replace = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
|
6226
|
+
@b_replace = Arcadia.wf.button(@buttons_frame){|_b_go|
|
5917
6227
|
state 'disabled'
|
5918
|
-
|
6228
|
+
# default 'disabled'
|
5919
6229
|
text Arcadia.text('ext.editor.search.label.replace')
|
5920
|
-
|
5921
|
-
|
5922
|
-
#width 15
|
6230
|
+
# justify 'center'
|
6231
|
+
width 10
|
5923
6232
|
pack('side'=>'right','ipadx'=>5, 'padx'=>5)
|
5924
|
-
#place('width' => 50,'x' => 0,'y' => y0,'height' => 23,'bordermode' => 'inside')
|
5925
6233
|
}
|
5926
6234
|
|
5927
6235
|
|
5928
|
-
@b_go = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
|
6236
|
+
# @b_go = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
|
6237
|
+
@b_go = Arcadia.wf.button(@buttons_frame){|_b_go|
|
5929
6238
|
compound 'none'
|
5930
|
-
default 'disabled'
|
6239
|
+
# default 'disabled'
|
5931
6240
|
text Arcadia.text('ext.editor.search.label.find_next')
|
5932
|
-
|
5933
|
-
|
5934
|
-
#overrelief 'raised'
|
5935
|
-
justify 'center'
|
5936
|
-
#relief 'ridge'
|
5937
|
-
#width 15
|
6241
|
+
# justify 'center'
|
6242
|
+
width 10
|
5938
6243
|
pack('side'=>'right','ipadx'=>5, 'padx'=>5)
|
5939
|
-
#place('width' => 50,'x' => 0,'y' => y0,'height' => 23,'bordermode' => 'inside')
|
5940
6244
|
}
|
5941
6245
|
#place('x'=>0,'y'=>0,'relheight'=> 1,'relwidth'=> 1)
|
5942
|
-
place('x'=>100,'y'=>100,'height'=> 240,'width'=>
|
6246
|
+
place('x'=>100,'y'=>100,'height'=> 240,'width'=> 310)
|
5943
6247
|
|
5944
6248
|
end
|
5945
6249
|
|
@@ -5947,8 +6251,10 @@ class Findview < TkFloatTitledFrame
|
|
5947
6251
|
super
|
5948
6252
|
self.focus
|
5949
6253
|
@e_what.focus
|
5950
|
-
@
|
5951
|
-
@
|
6254
|
+
@e_what.select_throw
|
6255
|
+
@e_what.selection_range(0,'end')
|
6256
|
+
# @e_what_entry.select_throw
|
6257
|
+
# @e_what_entry.selection_range(0,'end')
|
5952
6258
|
end
|
5953
6259
|
|
5954
6260
|
|
@@ -5972,7 +6278,8 @@ class Finder < Findview
|
|
5972
6278
|
|
5973
6279
|
@b_replace_all.bind('1', proc{hide; do_replace_all})
|
5974
6280
|
|
5975
|
-
@e_what_entry.bind_append('KeyRelease'){|e|
|
6281
|
+
# @e_what_entry.bind_append('KeyRelease'){|e|
|
6282
|
+
@e_what.bind_append('KeyRelease'){|e|
|
5976
6283
|
case e.keysym
|
5977
6284
|
when 'Return'
|
5978
6285
|
@find_action.call
|
@@ -5981,10 +6288,7 @@ class Finder < Findview
|
|
5981
6288
|
widget_state
|
5982
6289
|
end
|
5983
6290
|
}
|
5984
|
-
|
5985
|
-
e2.bind_append('KeyPress'){|e|
|
5986
|
-
widget_state
|
5987
|
-
}
|
6291
|
+
|
5988
6292
|
@last_index='insert'
|
5989
6293
|
|
5990
6294
|
@goto_line_dialog = GoToLine.new(_frame).hide
|
@@ -6010,6 +6314,7 @@ class Finder < Findview
|
|
6010
6314
|
self.editor.check_modify
|
6011
6315
|
end
|
6012
6316
|
end
|
6317
|
+
update_combo(@e_with) if @e_with.value.length > 0
|
6013
6318
|
end
|
6014
6319
|
|
6015
6320
|
def do_replace_all
|
@@ -6031,6 +6336,7 @@ class Finder < Findview
|
|
6031
6336
|
break
|
6032
6337
|
end
|
6033
6338
|
end
|
6339
|
+
update_combo(@e_with) if @e_with.value.length > 0
|
6034
6340
|
end
|
6035
6341
|
|
6036
6342
|
def widget_state
|
@@ -6087,20 +6393,24 @@ class Finder < Findview
|
|
6087
6393
|
use(@controller.raised)
|
6088
6394
|
end
|
6089
6395
|
|
6090
|
-
def update_combo(
|
6091
|
-
|
6092
|
-
|
6093
|
-
|
6396
|
+
def update_combo(_combobox=nil)
|
6397
|
+
return if _combobox.nil?
|
6398
|
+
values = _combobox.cget('values')
|
6399
|
+
if (values != nil && !values.include?(_combobox.value))
|
6400
|
+
values << _combobox.value
|
6401
|
+
_combobox.values=values
|
6402
|
+
# @e_what.insert('end', @e_what.value)
|
6094
6403
|
end
|
6095
6404
|
end
|
6096
6405
|
|
6097
6406
|
def do_find(_istart=nil)
|
6407
|
+
|
6098
6408
|
@forwards = @cb_back.cget('onvalue') != @cb_back.cget('variable').value.to_i
|
6099
6409
|
_found = false
|
6100
6410
|
@idx1 = nil
|
6101
6411
|
@idx2 = nil
|
6102
|
-
if @e_what.
|
6103
|
-
update_combo(@e_what
|
6412
|
+
if @e_what.value.length > 0
|
6413
|
+
update_combo(@e_what)
|
6104
6414
|
if !_istart && self.editor.text.index('insert')!=nil
|
6105
6415
|
_istart ='insert'
|
6106
6416
|
elsif defined?(@last_index)
|
@@ -6120,12 +6430,12 @@ class Finder < Findview
|
|
6120
6430
|
if @cb_ignore_case.cget('onvalue')==@cb_ignore_case.cget('variable').value.to_i
|
6121
6431
|
options << 'nocase'
|
6122
6432
|
end
|
6123
|
-
_index = self.editor.text.tksearch(options,@e_what.
|
6433
|
+
_index = self.editor.text.tksearch(options,@e_what.value,_istart)
|
6124
6434
|
|
6125
6435
|
if _index && _index.length>0
|
6126
6436
|
self.editor.text.see(_index)
|
6127
6437
|
_row, _col = _index.split('.')
|
6128
|
-
_index_sel_end = _row.to_i.to_s+'.'+(_col.to_i+@e_what.
|
6438
|
+
_index_sel_end = _row.to_i.to_s+'.'+(_col.to_i+@e_what.value.length).to_i.to_s
|
6129
6439
|
if @forwards
|
6130
6440
|
@last_index= _index_sel_end
|
6131
6441
|
else
|
@@ -6134,14 +6444,11 @@ class Finder < Findview
|
|
6134
6444
|
self.editor.text.tag_add('sel', _index,_index_sel_end)
|
6135
6445
|
self.editor.text.set_insert(_index)
|
6136
6446
|
@idx1 =_index
|
6137
|
-
|
6447
|
+
@idx2 =_index_sel_end
|
6138
6448
|
_found = true
|
6139
6449
|
@controller.chrono_bookmark_add(self.editor.file, _index)
|
6140
6450
|
else
|
6141
|
-
|
6142
|
-
Arcadia.hinner_dialog(self, 'type'=>'ok', 'msg'=> _message)
|
6143
|
-
|
6144
|
-
# TkDialog2.new('message'=>_message, 'buttons'=>['Ok']).show()
|
6451
|
+
Arcadia.hinner_dialog(self, 'type'=>'ok', 'msg'=> Arcadia.text('ext.editor.search.notfound',[@e_what.value, self.editor.tab_title]))
|
6145
6452
|
end
|
6146
6453
|
|
6147
6454
|
else
|