arcadia 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +39 -38
- data/bin/arc +3 -0
- data/bin/arcadia +0 -1
- data/conf/arcadia.conf +54 -35
- data/conf/arcadia.init.rb +26 -3
- data/conf/arcadia.res.rb +56 -4
- data/ext/ae-breakpoints/ae-breakpoints.rb +1 -1
- data/ext/ae-dir-projects/ae-dir-projects.rb +113 -45
- data/ext/ae-editor/ae-editor.conf +6 -2
- data/ext/ae-editor/ae-editor.rb +1009 -616
- data/ext/ae-editor/langs/coderay.tokens +40 -0
- data/ext/ae-editor/langs/conf.lang +12 -10
- data/ext/ae-editor/langs/erb.lang.bind +1 -0
- data/ext/ae-editor/langs/java.lang +4 -0
- data/ext/ae-editor/langs/rb.lang +25 -55
- data/ext/ae-editor/langs/rhtml.lang +4 -0
- data/ext/ae-editor/langs/tokens.lang.bind +1 -0
- data/ext/ae-editor/langs/xml.lang +4 -0
- data/ext/ae-file-history/ae-file-history.rb +140 -32
- data/ext/ae-output/ae-output.rb +267 -262
- data/ext/ae-rad/ae-rad-inspector.rb +1 -1
- data/ext/ae-rad/ae-rad-libs.rb +15 -7
- data/ext/ae-rad/ae-rad.conf +4 -4
- data/ext/ae-rad/lib/tk/al-tk.rb +4 -3
- data/ext/ae-ruby-debug/ae-ruby-debug.conf +4 -2
- data/ext/ae-ruby-debug/ae-ruby-debug.rb +40 -15
- data/ext/ae-search-in-files/ae-search-in-files.rb +70 -14
- data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.conf +15 -0
- data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.rb +80 -0
- data/ext/ae-shell/ae-shell.conf +4 -1
- data/ext/ae-shell/ae-shell.rb +78 -43
- data/ext/test-shutdown-after-startup/test-shutdown-after-startup.conf +4 -0
- data/ext/test-shutdown-after-startup/test-shutdown-after-startup.rb +20 -0
- data/lib/a-commons.rb +118 -22
- data/lib/a-contracts.rb +46 -2
- data/lib/a-core.rb +970 -284
- data/lib/a-tkcommons.rb +16 -8
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ArrowButton.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/BWidget.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Button.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ButtonBox.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ComboBox.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Dialog.html +20 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/DragSite.html +6 -4
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/DropSite.html +15 -3
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/DynamicHelp.html +8 -5
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Entry.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Label.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/LabelEntry.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/LabelFrame.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ListBox.html +1 -1
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/MainFrame.html +8 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/MessageDlg.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/NoteBook.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PagesManager.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PanedWindow.html +21 -5
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PanelFrame.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PasswdDlg.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ProgressBar.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ProgressDlg.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ScrollView.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ScrollableFrame.html +5 -2
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ScrolledWindow.html +36 -4
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/SelectColor.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/SelectFont.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Separator.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/SpinBox.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/StatusBar.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/TitleFrame.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Tree.html +21 -31
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Widget.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/contents.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/index.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/navtree.html +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/options.htm +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/CHANGES.txt +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/ChangeLog +289 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/LICENSE.txt +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/README.txt +2 -2
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/arrow.tcl +1 -1
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/bitmap.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/button.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/buttonbox.tcl +23 -12
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/color.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/combobox.tcl +101 -25
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/basic.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/bwidget.xbm +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/demo.tcl +1 -1
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/dnd.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/manager.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/select.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/tmpldlg.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/tree.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/x1.xbm +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dialog.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dragsite.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dropsite.tcl +2 -1
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dynhelp.tcl +194 -33
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/entry.tcl +8 -5
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/font.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/bold.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/copy.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/cut.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/dragfile.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/dragicon.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/error.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/file.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/folder.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/hourglass.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/info.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/italic.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/minus.xbm +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/new.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/opcopy.xbm +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/open.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/openfold.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/oplink.xbm +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/opmove.xbm +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/overstrike.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/palette.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/passwd.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/paste.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/plus.xbm +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/print.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/question.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/redo.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/save.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/target.xbm +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/underline.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/undo.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/warning.gif +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/init.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/label.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/labelentry.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/labelframe.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/da.rc +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/de.rc +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/en.rc +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/es.rc +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/fr.rc +0 -0
- data/tcl/BWidget-1.9.0/lang/hu.rc +52 -0
- data/tcl/BWidget-1.9.0/lang/nl.rc +52 -0
- data/tcl/BWidget-1.9.0/lang/no.rc +52 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/listbox.tcl +89 -34
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/mainframe.tcl +14 -13
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/messagedlg.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/notebook.tcl +3 -1
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/pagesmgr.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/panedw.tcl +22 -18
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/panelframe.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/passwddlg.tcl +7 -3
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/pkgIndex.tcl +2 -2
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/progressbar.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/progressdlg.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/scrollframe.tcl +60 -24
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/scrollview.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/scrollw.tcl +13 -11
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/separator.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/spinbox.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/statusbar.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/tests/entry.test +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/titleframe.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/tree.tcl +51 -41
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/utils.tcl +26 -11
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/widget.tcl +53 -19
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/wizard.tcl +0 -0
- data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/xpm2image.tcl +0 -0
- metadata +170 -145
data/lib/a-contracts.rb
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
# +------------------------------------------+
|
|
13
13
|
|
|
14
14
|
class ArcadiaEvent < Event
|
|
15
|
+
# note--they all have attr_accessor :file, and :dir
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
class QuitEvent < ArcadiaEvent
|
|
@@ -20,12 +21,17 @@ end
|
|
|
20
21
|
# +------------------------------------------+
|
|
21
22
|
# Extention Event (raised only by Arcadia)
|
|
22
23
|
# do not raise!
|
|
24
|
+
# Every extensions listen on these events
|
|
23
25
|
# +------------------------------------------+
|
|
24
26
|
|
|
25
27
|
class BuildEvent < ArcadiaEvent
|
|
26
28
|
attr_accessor :name
|
|
27
29
|
end
|
|
28
30
|
|
|
31
|
+
# ExitQueryEvent is processed by arcadia-core
|
|
32
|
+
# before process FinalizeEvent during quiet face.
|
|
33
|
+
# If listener(Extension) set can_exit property to false then
|
|
34
|
+
# arcadia abort the quiet face.
|
|
29
35
|
class ExitQueryEvent < ArcadiaEvent
|
|
30
36
|
attr_accessor :can_exit
|
|
31
37
|
end
|
|
@@ -33,6 +39,19 @@ end
|
|
|
33
39
|
class FinalizeEvent < ArcadiaEvent
|
|
34
40
|
end
|
|
35
41
|
|
|
42
|
+
|
|
43
|
+
class NeedRubyGemWizardEvent < ArcadiaEvent
|
|
44
|
+
class Result < Result
|
|
45
|
+
attr_accessor :installed
|
|
46
|
+
end
|
|
47
|
+
attr_accessor :extension_name
|
|
48
|
+
attr_accessor :gem_name
|
|
49
|
+
attr_accessor :gem_repository
|
|
50
|
+
attr_accessor :gem_min_version
|
|
51
|
+
attr_accessor :gem_max_version
|
|
52
|
+
attr_accessor :gem_events
|
|
53
|
+
end
|
|
54
|
+
|
|
36
55
|
# +------------------------------------------+
|
|
37
56
|
# Generic Layout Event
|
|
38
57
|
#
|
|
@@ -76,10 +95,17 @@ class MoveBufferEvent < BufferEvent
|
|
|
76
95
|
attr_accessor :new_file
|
|
77
96
|
end
|
|
78
97
|
|
|
98
|
+
class CloseCurrentTabEvent < BufferEvent
|
|
99
|
+
end
|
|
100
|
+
|
|
79
101
|
class GoToLineBufferEvent < BufferEvent
|
|
80
102
|
attr_accessor :line
|
|
81
103
|
end
|
|
82
104
|
|
|
105
|
+
class PrettifyTextEvent < BufferEvent
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
83
109
|
class SearchBufferEvent < BufferEvent
|
|
84
110
|
class Result < Result
|
|
85
111
|
attr_accessor :row, :col
|
|
@@ -165,6 +191,17 @@ end
|
|
|
165
191
|
# +---------------------------------------------+
|
|
166
192
|
|
|
167
193
|
class SearchInFilesEvent < ArcadiaEvent
|
|
194
|
+
# this message actually does before, on, after
|
|
195
|
+
# in the time it takes to open the dialog
|
|
196
|
+
# the dialog then receives its input [i.e. all the messages are done before the search is through]
|
|
197
|
+
class Result < SearchBufferEvent::Result
|
|
198
|
+
attr_accessor :file
|
|
199
|
+
end
|
|
200
|
+
attr_accessor :what, :files_filter, :dir
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
class AckInFilesEvent < ArcadiaEvent
|
|
204
|
+
# don't subclass SearchInFilesEvent or listeners for SearchInFiles will also get our messages
|
|
168
205
|
class Result < SearchBufferEvent::Result
|
|
169
206
|
attr_accessor :file
|
|
170
207
|
end
|
|
@@ -197,6 +234,14 @@ class InputExitEvent < InputEvent
|
|
|
197
234
|
attr_accessor :receiver
|
|
198
235
|
end
|
|
199
236
|
|
|
237
|
+
# FocusEvent
|
|
238
|
+
# Events for executing operation on focused widget
|
|
239
|
+
class FocusEvent < ArcadiaEvent
|
|
240
|
+
attr_accessor :focus_widget
|
|
241
|
+
end
|
|
242
|
+
class CutTextEvent < FocusEvent; end
|
|
243
|
+
class CopyTextEvent < FocusEvent; end
|
|
244
|
+
class PasteTextEvent < FocusEvent; end
|
|
200
245
|
|
|
201
246
|
#class VirtualKeyboardEvent < ArcadiaEvent
|
|
202
247
|
#end
|
|
@@ -247,5 +292,4 @@ class ActionEvent < ArcadiaEvent
|
|
|
247
292
|
attr_accessor :receiver
|
|
248
293
|
attr_accessor :action
|
|
249
294
|
attr_accessor :action_args
|
|
250
|
-
end
|
|
251
|
-
|
|
295
|
+
end
|
data/lib/a-core.rb
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
# a-core.rb - Arcadia Ruby ide
|
|
3
3
|
# by Antonio Galeone <antonio-galeone@rubyforge.org>
|
|
4
4
|
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
# &require_dir_ref=..
|
|
6
|
+
# &require_omissis=conf/arcadia.init
|
|
7
|
+
# &require_omissis=tk
|
|
8
|
+
# &require_omissis=tk/label
|
|
9
|
+
# &require_omissis=tk/toplevel
|
|
12
10
|
|
|
13
11
|
require "conf/arcadia.res"
|
|
14
12
|
require 'tkextlib/bwidget'
|
|
@@ -23,7 +21,7 @@ class Arcadia < TkApplication
|
|
|
23
21
|
super(
|
|
24
22
|
ApplicationParams.new(
|
|
25
23
|
'arcadia',
|
|
26
|
-
'0.
|
|
24
|
+
'0.8.0',
|
|
27
25
|
'conf/arcadia.conf',
|
|
28
26
|
'conf/arcadia.pers'
|
|
29
27
|
)
|
|
@@ -32,11 +30,14 @@ class Arcadia < TkApplication
|
|
|
32
30
|
set_sysdefaultproperty
|
|
33
31
|
ArcadiaDialogManager.new(self)
|
|
34
32
|
ArcadiaActionDispatcher.new(self)
|
|
33
|
+
ArcadiaGemsWizard.new(self)
|
|
34
|
+
MonitorLastUsedDir.new
|
|
35
|
+
FocusEventManager.new
|
|
35
36
|
#self.load_local_config(false)
|
|
36
37
|
ObjectSpace.define_finalizer($arcadia, self.class.method(:finalize).to_proc)
|
|
37
38
|
publish('action.on_exit', proc{do_exit})
|
|
38
39
|
#_title = "Arcadia Ruby ide :: [Platform = #{RUBY_PLATFORM}] [Ruby version = #{RUBY_VERSION}] [TclTk version = #{tcltk_info.level}]"
|
|
39
|
-
_title = "Arcadia
|
|
40
|
+
_title = "Arcadia ide "
|
|
40
41
|
@root = TkRoot.new(
|
|
41
42
|
'background'=> self['conf']['background']
|
|
42
43
|
){
|
|
@@ -52,7 +53,8 @@ class Arcadia < TkApplication
|
|
|
52
53
|
'background'=> self['conf']['background']
|
|
53
54
|
).pack('fill'=>'x')
|
|
54
55
|
@mf_root = Tk::BWidget::MainFrame.new(@root,
|
|
55
|
-
'background'=> self['conf']['background']
|
|
56
|
+
'background'=> self['conf']['background'],
|
|
57
|
+
'height'=> 0
|
|
56
58
|
){
|
|
57
59
|
menu @main_menu_bar
|
|
58
60
|
}.pack(
|
|
@@ -74,8 +76,17 @@ class Arcadia < TkApplication
|
|
|
74
76
|
@splash.next_step('..prepare') if @splash
|
|
75
77
|
prepare
|
|
76
78
|
@splash.last_step('..load finish') if @splash
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
if self['conf']['geometry']
|
|
80
|
+
geometry = self['conf']['geometry']
|
|
81
|
+
else
|
|
82
|
+
start_width = (TkWinfo.screenwidth(@root)-4)
|
|
83
|
+
start_height = (TkWinfo.screenheight(@root)-20)
|
|
84
|
+
if RUBY_PLATFORM =~ /mswin|mingw/ # on doze don't go below the start gar
|
|
85
|
+
start_height -= 50
|
|
86
|
+
start_width -= 20
|
|
87
|
+
end
|
|
88
|
+
geometry = start_width.to_s+'x'+start_height.to_s+'+0+0'
|
|
89
|
+
end
|
|
79
90
|
@root.deiconify
|
|
80
91
|
@root.raise
|
|
81
92
|
@root.focus(true)
|
|
@@ -83,7 +94,7 @@ class Arcadia < TkApplication
|
|
|
83
94
|
Tk.update_idletasks
|
|
84
95
|
#sleep(1)
|
|
85
96
|
@splash.destroy if @splash
|
|
86
|
-
if @first_run
|
|
97
|
+
if @first_run # first ARCADIA ever
|
|
87
98
|
Arcadia.process_event(OpenBufferEvent.new(self,'file'=>'README'))
|
|
88
99
|
elsif ARGV.length > 0
|
|
89
100
|
ARGV.each{|_f|
|
|
@@ -96,11 +107,15 @@ class Arcadia < TkApplication
|
|
|
96
107
|
Arcadia.attach_listener(self, QuitEvent)
|
|
97
108
|
Arcadia.persistent("version", self['applicationParams'].version)
|
|
98
109
|
end
|
|
99
|
-
|
|
110
|
+
|
|
100
111
|
def on_quit(_event)
|
|
101
112
|
self.do_exit
|
|
102
113
|
end
|
|
103
114
|
|
|
115
|
+
def register(_ext)
|
|
116
|
+
@exts_i << _ext
|
|
117
|
+
end
|
|
118
|
+
|
|
104
119
|
def show_hide_toolbar
|
|
105
120
|
if @is_toolbar_show
|
|
106
121
|
@mf_root.show_toolbar(0,false)
|
|
@@ -122,11 +137,31 @@ class Arcadia < TkApplication
|
|
|
122
137
|
return (self['conf'][_name+'.active'] != nil && self['conf'][_name+'.active']=='yes')||
|
|
123
138
|
(self['conf'][_name+'.active'] == nil)
|
|
124
139
|
end
|
|
125
|
-
|
|
140
|
+
|
|
141
|
+
def ext_source_must_be_loaded?(_name)
|
|
142
|
+
ret = ext_active?(_name)
|
|
143
|
+
if !ret
|
|
144
|
+
@exts_dip.each{|key,val|
|
|
145
|
+
if val == _name
|
|
146
|
+
ret = ret || ext_active?(key)
|
|
147
|
+
end
|
|
148
|
+
break if ret
|
|
149
|
+
}
|
|
150
|
+
end
|
|
151
|
+
ret
|
|
152
|
+
end
|
|
153
|
+
|
|
126
154
|
def load_exts_conf
|
|
127
155
|
@exts = Array.new
|
|
156
|
+
@exts_i = Array.new
|
|
157
|
+
@exts_dip = Hash.new
|
|
158
|
+
@exts_loaded = Array.new
|
|
159
|
+
load_exts_conf_from('ext')
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def load_exts_conf_from(_dir='',_ext_root=nil)
|
|
128
163
|
dirs = Array.new
|
|
129
|
-
files = Dir[
|
|
164
|
+
files = Dir["#{_dir}/*"].concat(Dir[ENV["HOME"]+"/.arcadia/#{_dir}/*"]).sort
|
|
130
165
|
files.each{|f|
|
|
131
166
|
dirs << f if File.stat(f).directory? && FileTest.exist?(f+'/'+File.basename(f)+'.conf')
|
|
132
167
|
}
|
|
@@ -139,44 +174,169 @@ class Arcadia < TkApplication
|
|
|
139
174
|
if var_plat.length > 1
|
|
140
175
|
new_key = var_plat[0] + ':' + name + '.' + var_plat[1]
|
|
141
176
|
else
|
|
142
|
-
|
|
177
|
+
begin
|
|
178
|
+
new_key = name+'.'+key
|
|
179
|
+
rescue => e
|
|
180
|
+
puts 'is an extension missing a name?'
|
|
181
|
+
raise e
|
|
182
|
+
end
|
|
143
183
|
end
|
|
144
184
|
conf_hash2[new_key]= value
|
|
145
185
|
}
|
|
146
|
-
@exts << name
|
|
186
|
+
@exts << name
|
|
187
|
+
if _ext_root
|
|
188
|
+
@exts_dip[name] = _ext_root
|
|
189
|
+
end
|
|
147
190
|
self['conf'].update(conf_hash2)
|
|
191
|
+
self['origin_conf'].update(conf_hash2)
|
|
192
|
+
load_exts_conf_from("#{ext_dir}/ext",name)
|
|
148
193
|
}
|
|
149
194
|
end
|
|
150
195
|
|
|
196
|
+
def Arcadia.gem_available?(_gem)
|
|
197
|
+
if Gem.respond_to?(:available?)
|
|
198
|
+
return Gem.available?(_gem)
|
|
199
|
+
else
|
|
200
|
+
return !Gem.source_index.find_name(_gem).empty?
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def check_gems_dependences(_ext)
|
|
205
|
+
ret = true
|
|
206
|
+
gems_property = self['conf']["#{_ext}.gems"]
|
|
207
|
+
if gems_property
|
|
208
|
+
gems = gems_property.split(',').collect{| g | g.strip }
|
|
209
|
+
if gems && gems.length > 0
|
|
210
|
+
gems.each{|gem|
|
|
211
|
+
# consider gem only if it is not installed
|
|
212
|
+
if !Arcadia.gem_available?(gem)
|
|
213
|
+
repository_property = self['conf']["#{_ext}.gems.#{gem}.repository"]
|
|
214
|
+
events_property = self['conf']["#{_ext}.gems.#{gem}.events"]
|
|
215
|
+
args = Hash.new
|
|
216
|
+
args['extension_name']=_ext
|
|
217
|
+
args['gem_name']=gem
|
|
218
|
+
args['gem_repository']=repository_property if repository_property
|
|
219
|
+
args['gem_events']=events_property if events_property
|
|
220
|
+
if events_property
|
|
221
|
+
#EventWatcher.new
|
|
222
|
+
events_str = events_property.split(',')
|
|
223
|
+
events_str.each{|event_str|
|
|
224
|
+
EventWatcherForGem.new(eval(event_str),args)
|
|
225
|
+
}
|
|
226
|
+
else
|
|
227
|
+
_event = Arcadia.process_event(NeedRubyGemWizardEvent.new(self, args))
|
|
228
|
+
ret = ret && Arcadia.gem_available?(gem)
|
|
229
|
+
# if _event && _event.results
|
|
230
|
+
# ret = ret && _event.results[0].installed
|
|
231
|
+
# end
|
|
232
|
+
end
|
|
233
|
+
break if !ret
|
|
234
|
+
end
|
|
235
|
+
}
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
ret
|
|
239
|
+
end
|
|
240
|
+
|
|
151
241
|
def do_build
|
|
152
|
-
|
|
153
242
|
# create extensions
|
|
154
|
-
@exts.each{|extension|
|
|
155
|
-
if extension &&
|
|
156
|
-
|
|
157
|
-
|
|
243
|
+
Array.new.concat(@exts).each{|extension|
|
|
244
|
+
if extension && ext_source_must_be_loaded?(extension)
|
|
245
|
+
gems_installed = check_gems_dependences(extension)
|
|
246
|
+
if !gems_installed || !ext_load(extension)
|
|
247
|
+
@exts.delete(extension)
|
|
248
|
+
elsif !ext_active?(extension)
|
|
249
|
+
@exts.delete(extension)
|
|
250
|
+
elsif ext_active?(extension)
|
|
251
|
+
@splash.next_step('... creating '+extension) if @splash
|
|
252
|
+
@exts.delete(extension) unless
|
|
253
|
+
(((@exts_dip[extension] != nil && @exts_loaded.include?(@exts_dip[extension]))||@exts_dip[extension] == nil) && ext_create(extension))
|
|
254
|
+
end
|
|
158
255
|
end
|
|
159
256
|
}
|
|
160
|
-
|
|
257
|
+
begin
|
|
258
|
+
_build_event = Arcadia.process_event(BuildEvent.new(self))
|
|
259
|
+
rescue Exception
|
|
260
|
+
ret = false
|
|
261
|
+
msg = "During build event processing(#{$!.class.to_s}) : #{$!} at : #{$@.to_s}"
|
|
262
|
+
ans = Tk.messageBox('icon' => 'error', 'type' => 'abortretryignore',
|
|
263
|
+
'title' => "(Arcadia) Build face", 'parent' => @root,
|
|
264
|
+
'message' => msg)
|
|
265
|
+
if ans == 'abort'
|
|
266
|
+
raise
|
|
267
|
+
exit
|
|
268
|
+
elsif ans == 'retry'
|
|
269
|
+
retry
|
|
270
|
+
else
|
|
271
|
+
Tk.update
|
|
272
|
+
end
|
|
273
|
+
end
|
|
161
274
|
end
|
|
162
|
-
|
|
163
|
-
def
|
|
275
|
+
|
|
276
|
+
def load_maximised
|
|
277
|
+
lm = self['conf']['layout.maximized']
|
|
278
|
+
if lm
|
|
279
|
+
ext,index=lm.split(',')
|
|
280
|
+
maxed = false
|
|
281
|
+
if ext && index
|
|
282
|
+
ext = ext.strip
|
|
283
|
+
i=index.strip.to_i
|
|
284
|
+
@exts_i.each{|e|
|
|
285
|
+
if e.conf('name')==ext && !maxed
|
|
286
|
+
e.maximize(i)
|
|
287
|
+
maxed=true
|
|
288
|
+
break
|
|
289
|
+
end
|
|
290
|
+
}
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
def ext_load(_extension)
|
|
296
|
+
ret = true
|
|
164
297
|
begin
|
|
165
298
|
source = self['conf'][_extension+'.require']
|
|
166
|
-
class_name = self['conf'][_extension+'.class']
|
|
167
299
|
if source.strip.length > 0
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
300
|
+
require source
|
|
301
|
+
end
|
|
302
|
+
@exts_loaded << _extension
|
|
303
|
+
rescue Exception,LoadError
|
|
304
|
+
ret = false
|
|
305
|
+
msg = "Loading \"#{_extension}\" (#{$!.class.to_s}) : #{$!} at : #{$@.to_s}"
|
|
306
|
+
ans = Tk.messageBox('icon' => 'error', 'type' => 'abortretryignore',
|
|
307
|
+
'title' => "(Arcadia) Extensions '#{_extension}'", 'parent' => @root,
|
|
308
|
+
'message' => msg)
|
|
309
|
+
if ans == 'abort'
|
|
310
|
+
raise
|
|
311
|
+
exit
|
|
312
|
+
elsif ans == 'retry'
|
|
313
|
+
retry
|
|
314
|
+
else
|
|
315
|
+
Tk.update
|
|
171
316
|
end
|
|
317
|
+
end
|
|
318
|
+
ret
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
def ext_create(_extension)
|
|
322
|
+
ret = true
|
|
323
|
+
begin
|
|
324
|
+
class_name = self['conf'][_extension+'.class']
|
|
172
325
|
if class_name.strip.length > 0
|
|
173
|
-
|
|
326
|
+
klass = nil
|
|
327
|
+
begin
|
|
328
|
+
klass = eval(class_name)
|
|
329
|
+
rescue => e
|
|
330
|
+
puts 'does an extension class have the wrong name associated with it, in its conf file?, or is not listing the right .rb file?'
|
|
331
|
+
raise e
|
|
332
|
+
end
|
|
333
|
+
publish(_extension, klass.new(self, _extension))
|
|
174
334
|
end
|
|
175
|
-
rescue Exception
|
|
176
|
-
|
|
177
|
-
msg = "Loading "
|
|
335
|
+
rescue Exception,LoadError
|
|
336
|
+
ret = false
|
|
337
|
+
msg = "Loading \"#{_extension}\" (#{$!.class.to_s}) : #{$!} at : #{$@.to_s}"
|
|
178
338
|
ans = Tk.messageBox('icon' => 'error', 'type' => 'abortretryignore',
|
|
179
|
-
'title' =>
|
|
339
|
+
'title' => "(Arcadia) Extensions '#{_extension}'", 'parent' => @root,
|
|
180
340
|
'message' => msg)
|
|
181
341
|
if ans == 'abort'
|
|
182
342
|
raise
|
|
@@ -187,6 +347,7 @@ class Arcadia < TkApplication
|
|
|
187
347
|
Tk.update
|
|
188
348
|
end
|
|
189
349
|
end
|
|
350
|
+
ret
|
|
190
351
|
end
|
|
191
352
|
|
|
192
353
|
def ext_method(_extension, _method)
|
|
@@ -213,48 +374,51 @@ class Arcadia < TkApplication
|
|
|
213
374
|
suf = "layout.split"
|
|
214
375
|
elems = self['conf'][suf]
|
|
215
376
|
return if elems.nil?
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
@layout.add_cols_perc(pt[0].to_i, pt[1].to_i, w.to_i)
|
|
229
|
-
else
|
|
230
|
-
@layout.add_cols(pt[0].to_i, pt[1].to_i, w.to_i)
|
|
231
|
-
end
|
|
232
|
-
else
|
|
233
|
-
r = property.split('r')
|
|
234
|
-
if r && r.length == 2
|
|
235
|
-
pt = r[0].split('.')
|
|
236
|
-
perc = r[1].include?('%')
|
|
237
|
-
w = r[1].sub('%','')
|
|
377
|
+
if elems.strip.length > 0
|
|
378
|
+
groups = elems.split(',')
|
|
379
|
+
groups.each{|group|
|
|
380
|
+
if group
|
|
381
|
+
suf1 = suf+'.'+group
|
|
382
|
+
begin
|
|
383
|
+
property = self['conf'][suf1]
|
|
384
|
+
c = property.split('c')
|
|
385
|
+
if c && c.length == 2
|
|
386
|
+
pt = c[0].split('.')
|
|
387
|
+
perc = c[1].include?('%')
|
|
388
|
+
w = c[1].sub('%','')
|
|
238
389
|
if perc
|
|
239
|
-
@layout.
|
|
390
|
+
@layout.add_cols_perc(pt[0].to_i, pt[1].to_i, w.to_i)
|
|
240
391
|
else
|
|
241
|
-
@layout.
|
|
392
|
+
@layout.add_cols(pt[0].to_i, pt[1].to_i, w.to_i)
|
|
393
|
+
end
|
|
394
|
+
else
|
|
395
|
+
r = property.split('r')
|
|
396
|
+
if r && r.length == 2
|
|
397
|
+
pt = r[0].split('.')
|
|
398
|
+
perc = r[1].include?('%')
|
|
399
|
+
w = r[1].sub('%','')
|
|
400
|
+
if perc
|
|
401
|
+
@layout.add_rows_perc(pt[0].to_i, pt[1].to_i, w.to_i)
|
|
402
|
+
else
|
|
403
|
+
@layout.add_rows(pt[0].to_i, pt[1].to_i, w.to_i)
|
|
404
|
+
end
|
|
242
405
|
end
|
|
243
406
|
end
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
407
|
+
|
|
408
|
+
rescue Exception
|
|
409
|
+
msg = "Loading layout: (#{$!.class.to_s} : #{$!.to_s} at : #{$@.to_s})"
|
|
410
|
+
if Arcadia.dialog(self, 'type'=>'ok_cancel', 'level'=>'error','title' => '(Arcadia) Layout', 'msg'=>msg)=='cancel'
|
|
411
|
+
raise
|
|
412
|
+
exit
|
|
413
|
+
else
|
|
414
|
+
Tk.update
|
|
415
|
+
end
|
|
253
416
|
end
|
|
254
417
|
end
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
418
|
+
}
|
|
419
|
+
else
|
|
420
|
+
@layout.add_mono_panel
|
|
421
|
+
end
|
|
258
422
|
@layout.add_headers
|
|
259
423
|
end
|
|
260
424
|
|
|
@@ -265,6 +429,7 @@ class Arcadia < TkApplication
|
|
|
265
429
|
self.load_local_config
|
|
266
430
|
self.load_theme(self['conf']['theme'])
|
|
267
431
|
self.resolve_properties_link(self['conf'],self['conf'])
|
|
432
|
+
self.resolve_properties_link(self['origin_conf'],self['origin_conf'])
|
|
268
433
|
end
|
|
269
434
|
|
|
270
435
|
def set_sysdefaultproperty
|
|
@@ -287,13 +452,10 @@ class Arcadia < TkApplication
|
|
|
287
452
|
publish('buffers.code.in_memory',Hash.new)
|
|
288
453
|
publish('action.load_code_from_buffers', proc{TkBuffersChoise.new})
|
|
289
454
|
publish('output.action.run_last', proc{$arcadia['output'].run_last})
|
|
290
|
-
publish('main.action.open_file', proc{self['editor'].open_file(
|
|
455
|
+
publish('main.action.open_file', proc{self['editor'].open_file(Arcadia.open_file_dialog)})
|
|
291
456
|
@splash.next_step('... load obj controller') if @splash
|
|
292
457
|
@splash.next_step('... load editor') if @splash
|
|
293
458
|
publish('main.action.new_file',proc{$arcadia['editor'].open_buffer()})
|
|
294
|
-
publish('main.action.edit_cut',proc{$arcadia['editor'].raised.text.text_cut()})
|
|
295
|
-
publish('main.action.edit_copy',proc{$arcadia['editor'].raised.text.text_copy()})
|
|
296
|
-
publish('main.action.edit_paste',proc{$arcadia['editor'].raised.text.text_paste()})
|
|
297
459
|
@splash.next_step('... load actions') if @splash
|
|
298
460
|
#provvisorio
|
|
299
461
|
@keytest = KeyTest.new
|
|
@@ -355,45 +517,42 @@ class Arcadia < TkApplication
|
|
|
355
517
|
suf1 = suf+'.'+group
|
|
356
518
|
begin
|
|
357
519
|
context_path = self['conf']["#{suf1}.context_path"]
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
520
|
+
context_underline = self['conf']["#{suf1}.context_underline"]
|
|
521
|
+
# property = proc{|_str, _suf| self['conf']["#{_suf}.#{_str}"]}
|
|
522
|
+
# property_to_eval = proc{|_str, _suf|
|
|
523
|
+
# p = self['conf']["#{_suf}.#{_str}"]
|
|
524
|
+
# _self_on_eval.instance_eval(p) if p
|
|
525
|
+
# }
|
|
363
526
|
items = self['conf'][suf1].split(',')
|
|
364
527
|
items.each{|item|
|
|
365
528
|
suf2 = suf1+'.'+item
|
|
366
529
|
disabled = !self['conf']["#{suf2}.disabled"].nil?
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
event_args = property_to_eval.call('event_args',suf2)
|
|
378
|
-
image_data = property_to_eval.call('image_data',suf2)
|
|
379
|
-
item_args = {
|
|
380
|
-
'name'=>name,
|
|
381
|
-
'caption'=>caption,
|
|
382
|
-
'hint'=>hint,
|
|
383
|
-
'event_class' =>event_class,
|
|
384
|
-
'event_args' =>event_args,
|
|
385
|
-
'image_data' =>image_data,
|
|
386
|
-
'context'=>group,
|
|
387
|
-
'context_path'=>context_path
|
|
530
|
+
iprops=Arcadia.conf_group(suf2)
|
|
531
|
+
item_args = Hash.new
|
|
532
|
+
iprops.each{|k,v|
|
|
533
|
+
value = v.strip
|
|
534
|
+
if value[0..0]=='!'
|
|
535
|
+
item_args[k]=_self_on_eval.instance_eval(value[1..-1])
|
|
536
|
+
else
|
|
537
|
+
item_args[k]=value
|
|
538
|
+
end
|
|
388
539
|
}
|
|
540
|
+
# item_args['caption'] = item if item_args['caption'].nil?
|
|
541
|
+
item_args['name'] = item if item_args['name'].nil?
|
|
542
|
+
item_args['context'] = group
|
|
543
|
+
item_args['context_path'] = context_path
|
|
389
544
|
item_args['context_caption'] = groups_caption[gi] if groups_caption
|
|
545
|
+
item_args['context_underline'] = context_underline.strip.to_i if context_underline
|
|
390
546
|
i = _user_control.new_item(self, item_args)
|
|
391
547
|
i.enable=false if disabled
|
|
392
|
-
|
|
393
548
|
}
|
|
394
549
|
rescue Exception
|
|
395
550
|
msg = "Loading #{groups} ->#{items} (#{$!.class.to_s} : #{$!.to_s} at : #{$@.to_s})"
|
|
396
|
-
if Arcadia.dialog(self,
|
|
551
|
+
if Arcadia.dialog(self,
|
|
552
|
+
'type'=>'ok_cancel',
|
|
553
|
+
'title' => '(Arcadia) Toolbar',
|
|
554
|
+
'msg'=>msg,
|
|
555
|
+
'level'=>'error')=='cancel'
|
|
397
556
|
raise
|
|
398
557
|
exit
|
|
399
558
|
else
|
|
@@ -420,11 +579,89 @@ class Arcadia < TkApplication
|
|
|
420
579
|
|
|
421
580
|
def can_exit?
|
|
422
581
|
_event = Arcadia.process_event(ExitQueryEvent.new(self, 'can_exit'=>true))
|
|
423
|
-
|
|
582
|
+
_event.can_exit
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
def save_layout
|
|
586
|
+
self['conf']['geometry']= TkWinfo.geometry(@root)
|
|
587
|
+
Arcadia.del_conf_group('layout')
|
|
588
|
+
# resizing
|
|
589
|
+
@exts_i.each{|e|
|
|
590
|
+
found = false
|
|
591
|
+
if e.conf('frames')
|
|
592
|
+
frs = e.conf('frames').split(',')
|
|
593
|
+
else
|
|
594
|
+
frs = Array.new
|
|
595
|
+
end
|
|
596
|
+
frs.each_index{|i|
|
|
597
|
+
if e.maximized?(i)
|
|
598
|
+
self['conf']['layout.maximized']="#{e.conf('name')},#{i}"
|
|
599
|
+
e.resize(i)
|
|
600
|
+
found=true
|
|
601
|
+
break
|
|
602
|
+
end
|
|
603
|
+
}
|
|
604
|
+
break if found
|
|
605
|
+
}
|
|
606
|
+
# layouts
|
|
607
|
+
splits,doms,r,c = @layout.dump_geometry
|
|
608
|
+
header = ""
|
|
609
|
+
splits.each_index{|i|
|
|
610
|
+
header << i.to_s
|
|
611
|
+
header << ',' if i < splits.length-1
|
|
612
|
+
}
|
|
613
|
+
self['conf']['layout.split']= header
|
|
614
|
+
splits.each_with_index{|sp,i|
|
|
615
|
+
self['conf']["layout.split.#{i}"]=sp
|
|
616
|
+
}
|
|
617
|
+
# domains
|
|
618
|
+
@exts_i.each{|e|
|
|
619
|
+
if e.conf('frames')
|
|
620
|
+
frs = e.conf('frames').split(',')
|
|
621
|
+
else
|
|
622
|
+
frs = Array.new
|
|
623
|
+
end
|
|
624
|
+
str_frames=''
|
|
625
|
+
frs.each_index{|i|
|
|
626
|
+
f = e.frame(i,false)
|
|
627
|
+
if f
|
|
628
|
+
ff = f.hinner_frame
|
|
629
|
+
frame = ff.frame if ff
|
|
630
|
+
if frame && TkWinfo.parent(frame).instance_of?(Tk::BWidget::NoteBook)
|
|
631
|
+
frame=TkWinfo.parent(TkWinfo.parent(frame))
|
|
632
|
+
elsif frame.nil?
|
|
633
|
+
if str_frames.length > 0
|
|
634
|
+
str_frames << ','
|
|
635
|
+
end
|
|
636
|
+
str_frames << '-1.-1'
|
|
637
|
+
end
|
|
638
|
+
if doms[frame]
|
|
639
|
+
if str_frames.length > 0
|
|
640
|
+
str_frames << ','
|
|
641
|
+
end
|
|
642
|
+
str_frames << doms[frame]
|
|
643
|
+
end
|
|
644
|
+
else
|
|
645
|
+
end
|
|
646
|
+
}
|
|
647
|
+
if str_frames.length > 0
|
|
648
|
+
self['conf']["#{e.conf('name')}.frames"]=str_frames
|
|
649
|
+
# p "#{e.conf('name')}.frames=#{str_frames}"
|
|
650
|
+
end
|
|
651
|
+
}
|
|
652
|
+
# toolbar
|
|
653
|
+
if @is_toolbar_show
|
|
654
|
+
self['conf']['user_toolbar_show']='yes'
|
|
655
|
+
else
|
|
656
|
+
self['conf']['user_toolbar_show']='no'
|
|
657
|
+
end
|
|
658
|
+
|
|
424
659
|
end
|
|
425
|
-
|
|
660
|
+
|
|
426
661
|
def do_finalize
|
|
662
|
+
self.save_layout
|
|
427
663
|
_event = Arcadia.process_event(FinalizeEvent.new(self))
|
|
664
|
+
update_local_config
|
|
428
665
|
self.override_persistent(self['applicationParams'].persistent_file, self['pers'])
|
|
429
666
|
end
|
|
430
667
|
|
|
@@ -440,6 +677,10 @@ class Arcadia < TkApplication
|
|
|
440
677
|
def Arcadia.style(_class)
|
|
441
678
|
Configurable.properties_group(_class, Arcadia.instance['conf'])
|
|
442
679
|
end
|
|
680
|
+
|
|
681
|
+
def Arcadia.conf_group(_path)
|
|
682
|
+
Configurable.properties_group(_path, Arcadia.instance['conf'])
|
|
683
|
+
end
|
|
443
684
|
|
|
444
685
|
def Arcadia.persistent(_property, _value=nil, _immediate=false)
|
|
445
686
|
if @@instance
|
|
@@ -459,6 +700,41 @@ class Arcadia < TkApplication
|
|
|
459
700
|
return @@instance.layout
|
|
460
701
|
end
|
|
461
702
|
end
|
|
703
|
+
|
|
704
|
+
def Arcadia.open_file_dialog
|
|
705
|
+
Tk.getOpenFile 'initialdir' => MonitorLastUsedDir.get_last_dir
|
|
706
|
+
end
|
|
707
|
+
|
|
708
|
+
def Arcadia.is_windows?
|
|
709
|
+
RUBY_PLATFORM =~ /mingw|mswin/
|
|
710
|
+
end
|
|
711
|
+
|
|
712
|
+
|
|
713
|
+
def Arcadia.file_icon(_file_name)
|
|
714
|
+
if @@instance['file_icons'] == nil
|
|
715
|
+
@@instance['file_icons'] = Hash.new
|
|
716
|
+
@@instance['file_icons']['default']= TkPhotoImage.new('dat' => FILE_ICON_DEFAULT)
|
|
717
|
+
end
|
|
718
|
+
_base_name= File.basename(_file_name)
|
|
719
|
+
if _base_name.include?('.')
|
|
720
|
+
file_dn = _base_name.split('.')[-1]
|
|
721
|
+
else
|
|
722
|
+
file_dn = "no_ext"
|
|
723
|
+
end
|
|
724
|
+
if @@instance['file_icons'][file_dn].nil?
|
|
725
|
+
file_icon_name="FILE_ICON_#{file_dn.upcase}"
|
|
726
|
+
begin
|
|
727
|
+
if eval("defined?(#{file_icon_name})")
|
|
728
|
+
@@instance['file_icons'][file_dn]= TkPhotoImage.new('dat' => eval(file_icon_name))
|
|
729
|
+
else
|
|
730
|
+
@@instance['file_icons'][file_dn]= @@instance['file_icons']['default']
|
|
731
|
+
end
|
|
732
|
+
rescue Exception
|
|
733
|
+
@@instance['file_icons'][file_dn]= @@instance['file_icons']['default']
|
|
734
|
+
end
|
|
735
|
+
end
|
|
736
|
+
@@instance['file_icons'][file_dn]
|
|
737
|
+
end
|
|
462
738
|
|
|
463
739
|
# def Arcadia.res(_res)
|
|
464
740
|
# theme = Arcadia.instance['conf']['theme']
|
|
@@ -677,18 +953,27 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
|
677
953
|
SUF='user_menu'
|
|
678
954
|
class UserItem < UserItem
|
|
679
955
|
attr_accessor :menu
|
|
956
|
+
attr_accessor :underline
|
|
957
|
+
attr_accessor :type
|
|
680
958
|
def initialize(_sender, _args)
|
|
681
959
|
super(_sender, _args)
|
|
682
|
-
_image = TkPhotoImage.new('data' => @image_data) if @image_data
|
|
683
960
|
_command = proc{
|
|
684
961
|
Arcadia.process_event(@event_class.new(_sender, @event_args))
|
|
685
962
|
} if @event_class
|
|
686
963
|
#_menu = @menu[@parent]
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
964
|
+
item_args = Hash.new
|
|
965
|
+
item_args['image']=TkPhotoImage.new('data' => @image_data) if @image_data
|
|
966
|
+
item_args['label']=@caption
|
|
967
|
+
item_args['underline']=@underline.to_i if @underline != nil
|
|
968
|
+
item_args['compound']='left'
|
|
969
|
+
item_args['command']=_command
|
|
970
|
+
if @type.nil? && _commnad.nil? && @name == '-'
|
|
971
|
+
@type=:separator
|
|
972
|
+
item_args.clear
|
|
973
|
+
elsif @type.nil?
|
|
974
|
+
@type=:command
|
|
975
|
+
end
|
|
976
|
+
@item_obj = @menu.insert('end', @type ,item_args)
|
|
692
977
|
@index = @menu.index('last')
|
|
693
978
|
end
|
|
694
979
|
|
|
@@ -713,7 +998,7 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
|
713
998
|
# menu.font(Arcadia.conf('main.mainmenu.font'))
|
|
714
999
|
end
|
|
715
1000
|
|
|
716
|
-
def get_menu_context(_menubar, _context)
|
|
1001
|
+
def get_menu_context(_menubar, _context, _underline=nil)
|
|
717
1002
|
menubuttons = _menubar[0..-1]
|
|
718
1003
|
# cerchiamo il context
|
|
719
1004
|
m_i = -1
|
|
@@ -727,7 +1012,7 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
|
727
1012
|
if m_i > -1
|
|
728
1013
|
_menubar[m_i][1]
|
|
729
1014
|
else
|
|
730
|
-
_menubar.add_menu([[_context],[]])[1].delete(0)
|
|
1015
|
+
_menubar.add_menu([[_context,_underline],[]])[1].delete(0)
|
|
731
1016
|
end
|
|
732
1017
|
end
|
|
733
1018
|
|
|
@@ -737,15 +1022,18 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
|
737
1022
|
i_end = menu_context.index('end')
|
|
738
1023
|
if i_end
|
|
739
1024
|
0.upto(i_end){|j|
|
|
740
|
-
|
|
741
|
-
if
|
|
742
|
-
|
|
743
|
-
|
|
1025
|
+
type = menu_context.menutype(j)
|
|
1026
|
+
if type != 'separator'
|
|
1027
|
+
l = menu_context.entrycget(j,'label')
|
|
1028
|
+
if l == folder && type == 'cascade'
|
|
1029
|
+
s_i = j
|
|
1030
|
+
break
|
|
1031
|
+
end
|
|
744
1032
|
end
|
|
745
1033
|
}
|
|
746
1034
|
end
|
|
747
1035
|
end
|
|
748
|
-
if s_i > -1
|
|
1036
|
+
if s_i > -1 #&& menu_context.menutype(s_i) == 'cascade'
|
|
749
1037
|
sub = menu_context.entrycget(s_i, 'menu')
|
|
750
1038
|
else
|
|
751
1039
|
sub = TkMenu.new(
|
|
@@ -764,8 +1052,8 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
|
764
1052
|
sub
|
|
765
1053
|
end
|
|
766
1054
|
|
|
767
|
-
def get_menu(_menubar, _context, context_path)
|
|
768
|
-
context_menu = get_menu_context(_menubar, _context)
|
|
1055
|
+
def get_menu(_menubar, _context, context_path, context_underline=nil)
|
|
1056
|
+
context_menu = get_menu_context(_menubar, _context, context_underline)
|
|
769
1057
|
folders = context_path.split('/')
|
|
770
1058
|
sub = context_menu
|
|
771
1059
|
folders.each{|folder|
|
|
@@ -782,7 +1070,7 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
|
782
1070
|
else
|
|
783
1071
|
conte = _args['context']
|
|
784
1072
|
end
|
|
785
|
-
_args['menu']=get_menu(@menu, conte, _args['context_path'])
|
|
1073
|
+
_args['menu']=get_menu(@menu, conte, _args['context_path'], _args['context_underline'])
|
|
786
1074
|
super(_sender, _args)
|
|
787
1075
|
end
|
|
788
1076
|
|
|
@@ -790,7 +1078,7 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
|
790
1078
|
def build
|
|
791
1079
|
menu_spec_file = [
|
|
792
1080
|
['File', 0],
|
|
793
|
-
['Open', proc{Arcadia.process_event(OpenBufferEvent.new(self,'file'=>
|
|
1081
|
+
['Open', proc{Arcadia.process_event(OpenBufferEvent.new(self,'file'=>Arcadia.open_file_dialog))}, 0],
|
|
794
1082
|
['New', $arcadia['main.action.new_file'], 0],
|
|
795
1083
|
#['Save', proc{EditorContract.instance.save_file_raised(self)},0],
|
|
796
1084
|
['Save', proc{Arcadia.process_event(SaveBufferEvent.new(self))},0],
|
|
@@ -798,16 +1086,23 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
|
798
1086
|
'---',
|
|
799
1087
|
['Quit', $arcadia['action.on_exit'], 0]]
|
|
800
1088
|
menu_spec_edit = [['Edit', 0],
|
|
801
|
-
['Cut',
|
|
802
|
-
['Copy',
|
|
803
|
-
['Paste',
|
|
1089
|
+
['Cut', proc{Arcadia.process_event(CutTextEvent.new(self))}, 2],
|
|
1090
|
+
['Copy', proc{Arcadia.process_event(CopyTextEvent.new(self))}, 0],
|
|
1091
|
+
['Paste', proc{Arcadia.process_event(PasteTextEvent.new(self))}, 0],
|
|
1092
|
+
['Prettify Current', proc{Arcadia.process_event(PrettifyTextEvent.new(self))}, 0]]
|
|
1093
|
+
|
|
804
1094
|
menu_spec_search = [['Search', 0],
|
|
805
|
-
['Find ...', proc{Arcadia.process_event(SearchBufferEvent.new(self))}, 2],
|
|
1095
|
+
['Find/Replace ...', proc{Arcadia.process_event(SearchBufferEvent.new(self))}, 2],
|
|
806
1096
|
['Find in files...', proc{Arcadia.process_event(SearchInFilesEvent.new(self))}, 2],
|
|
1097
|
+
['Ack in files...', proc{Arcadia.process_event(AckInFilesEvent.new(self))}, 2],
|
|
807
1098
|
['Go to line ...', proc{Arcadia.process_event(GoToLineBufferEvent.new(self))}, 2]]
|
|
808
|
-
menu_spec_view = [['View', 0],['Show/Hide Toolbar', proc{$arcadia.show_hide_toolbar}, 2]
|
|
1099
|
+
menu_spec_view = [['View', 0],['Show/Hide Toolbar', proc{$arcadia.show_hide_toolbar}, 2],
|
|
1100
|
+
['Close current tab', proc{Arcadia.process_event(CloseCurrentTabEvent.new(self))}, 0],
|
|
1101
|
+
]
|
|
809
1102
|
menu_spec_tools = [['Tools', 0],
|
|
810
|
-
['Keys-test', $arcadia['action.test.keys'], 2]
|
|
1103
|
+
['Keys-test', $arcadia['action.test.keys'], 2],
|
|
1104
|
+
['Edit prefs', proc{Arcadia.process_event(OpenBufferEvent.new(self,'file'=>$arcadia.local_file_config))}, 0],
|
|
1105
|
+
['Load from edited prefs', proc{$arcadia.load_local_config}, 0]
|
|
811
1106
|
]
|
|
812
1107
|
menu_spec_help = [['Help', 0],
|
|
813
1108
|
['About', $arcadia['action.show_about'], 2],]
|
|
@@ -823,14 +1118,16 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
|
823
1118
|
# hh = 25
|
|
824
1119
|
# @last_post = nil
|
|
825
1120
|
# chs.each{|ch|
|
|
826
|
-
# ch.bind_append("Enter", proc{|x,y,rx,ry|
|
|
827
|
-
# @last_post.unpost if @last_post
|
|
1121
|
+
# ch.bind_append("Enter", proc{|x,y,rx,ry|
|
|
1122
|
+
# @last_post.unpost if @last_post && @last_post != ch.menu
|
|
828
1123
|
# ch.menu.post(x-rx,y-ry+hh)
|
|
829
1124
|
# @last_post=ch.menu}, "%X %Y %x %y")
|
|
830
1125
|
# ch.bind_append("Leave", proc{
|
|
831
1126
|
# @last_post.unpost if @last_post
|
|
1127
|
+
# @last_post=nil
|
|
832
1128
|
# })
|
|
833
1129
|
# }
|
|
1130
|
+
|
|
834
1131
|
#})
|
|
835
1132
|
end
|
|
836
1133
|
|
|
@@ -891,8 +1188,20 @@ class ArcadiaAboutSplash < TkToplevel
|
|
|
891
1188
|
foreground '#ffffff'
|
|
892
1189
|
font Arcadia.instance['conf']['splash.credits.font']
|
|
893
1190
|
justify 'left'
|
|
894
|
-
|
|
1191
|
+
anchor 'w'
|
|
1192
|
+
place('width' => '210','x' => 100,'y' => 95,'height' => 25)
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
@tkLabelCredits = TkLabel.new(self){
|
|
1196
|
+
text 'Contributors: Roger D. Pack'
|
|
1197
|
+
background _bgcolor
|
|
1198
|
+
foreground '#ffffff'
|
|
1199
|
+
font Arcadia.instance['conf']['splash.credits.font']
|
|
1200
|
+
justify 'left'
|
|
1201
|
+
anchor 'w'
|
|
1202
|
+
place('width' => '210','x' => 100,'y' => 115,'height' => 25)
|
|
895
1203
|
}
|
|
1204
|
+
|
|
896
1205
|
@tkLabelStep = TkLabel.new(self){
|
|
897
1206
|
text ''
|
|
898
1207
|
background _bgcolor
|
|
@@ -900,19 +1209,20 @@ class ArcadiaAboutSplash < TkToplevel
|
|
|
900
1209
|
font Arcadia.instance['conf']['splash.banner.font']
|
|
901
1210
|
justify 'left'
|
|
902
1211
|
anchor 'w'
|
|
903
|
-
place('width'=>-5,'relwidth' => 1,'x' => 5,'y' => 160,'height' =>
|
|
1212
|
+
place('width'=>-5,'relwidth' => 1,'x' => 5,'y' => 160,'height' => 45)
|
|
904
1213
|
}
|
|
905
1214
|
@progress = TkVariable.new
|
|
906
1215
|
reset
|
|
907
|
-
_width =
|
|
908
|
-
_height =
|
|
1216
|
+
_width = 380
|
|
1217
|
+
_height = 240
|
|
909
1218
|
#_width = 0;_height = 0
|
|
910
1219
|
_x = TkWinfo.screenwidth(self)/2 - _width / 2
|
|
911
1220
|
_y = TkWinfo.screenheight(self)/2 - _height / 2
|
|
912
1221
|
geometry = _width.to_s+'x'+_height.to_s+'+'+_x.to_s+'+'+_y.to_s
|
|
913
1222
|
Tk.tk_call('wm', 'geometry', self, geometry )
|
|
1223
|
+
#bind("ButtonPress-1", proc{self.destroy})
|
|
914
1224
|
bind("Double-Button-1", proc{self.destroy})
|
|
915
|
-
info =
|
|
1225
|
+
info = TkApplication.sys_info
|
|
916
1226
|
set_sysinfo(info)
|
|
917
1227
|
end
|
|
918
1228
|
|
|
@@ -972,6 +1282,204 @@ class ArcadiaActionDispatcher
|
|
|
972
1282
|
|
|
973
1283
|
end
|
|
974
1284
|
|
|
1285
|
+
class ArcadiaSh < TkToplevel
|
|
1286
|
+
attr_reader :wait, :result
|
|
1287
|
+
def initialize
|
|
1288
|
+
super
|
|
1289
|
+
title 'ArcadiaSh'
|
|
1290
|
+
geometry = '800x200+10+10'
|
|
1291
|
+
geometry(geometry)
|
|
1292
|
+
@text = TkScrollText.new(self, Arcadia.style('text')){
|
|
1293
|
+
wrap 'none'
|
|
1294
|
+
undo true
|
|
1295
|
+
insertofftime 200
|
|
1296
|
+
insertontime 200
|
|
1297
|
+
highlightthickness 0
|
|
1298
|
+
insertbackground #000000
|
|
1299
|
+
insertwidth 6
|
|
1300
|
+
}
|
|
1301
|
+
@text.set_focus
|
|
1302
|
+
@text.tag_configure('error', 'foreground' => '#d93421')
|
|
1303
|
+
@text.tag_configure('response', 'foreground' => '#2c51d9')
|
|
1304
|
+
@text.show
|
|
1305
|
+
@text.show_v_scroll
|
|
1306
|
+
@text.show_h_scroll
|
|
1307
|
+
#@input_buffer = ''
|
|
1308
|
+
@wait = true
|
|
1309
|
+
@result = false
|
|
1310
|
+
prompt
|
|
1311
|
+
@text.bind_append("KeyPress"){|e| input(e.keysym)}
|
|
1312
|
+
end
|
|
1313
|
+
|
|
1314
|
+
def exec_buffer
|
|
1315
|
+
@text.set_insert("end")
|
|
1316
|
+
input_buffer = @text.get(@index_cmd_begin,"insert")
|
|
1317
|
+
out("\n")
|
|
1318
|
+
exec(input_buffer)
|
|
1319
|
+
end
|
|
1320
|
+
|
|
1321
|
+
def input(_char)
|
|
1322
|
+
case _char
|
|
1323
|
+
when 'Return'
|
|
1324
|
+
Thread.new{exec_buffer}
|
|
1325
|
+
Tk.callback_break
|
|
1326
|
+
end
|
|
1327
|
+
end
|
|
1328
|
+
|
|
1329
|
+
def prompt
|
|
1330
|
+
@b_exit = TkButton.new(@text,
|
|
1331
|
+
'command'=>proc{@wait=false},
|
|
1332
|
+
'text'=>'Exit',
|
|
1333
|
+
'padx'=>0,
|
|
1334
|
+
'pady'=>0,
|
|
1335
|
+
'width'=>5,
|
|
1336
|
+
'foreground' => 'white',
|
|
1337
|
+
'background' => '#d92328',
|
|
1338
|
+
'relief'=>'flat')
|
|
1339
|
+
TkTextWindow.new(@text, "end", 'window'=> @b_exit)
|
|
1340
|
+
@b_exec = TkButton.new(@text,
|
|
1341
|
+
'command'=>proc{Thread.new{exec_buffer}},
|
|
1342
|
+
'text'=>'Exec',
|
|
1343
|
+
'padx'=>0,
|
|
1344
|
+
'pady'=>0,
|
|
1345
|
+
'width'=>5,
|
|
1346
|
+
'foreground' => 'white',
|
|
1347
|
+
'background' => '#1ba626',
|
|
1348
|
+
'relief'=>'flat')
|
|
1349
|
+
TkTextWindow.new(@text, "end", 'window'=> @b_exec)
|
|
1350
|
+
out("\n")
|
|
1351
|
+
out(">>> ")
|
|
1352
|
+
@index_cmd_begin = @text.index('insert')
|
|
1353
|
+
end
|
|
1354
|
+
|
|
1355
|
+
def exec_prompt(_cmd)
|
|
1356
|
+
out("#{_cmd}\n")
|
|
1357
|
+
exec(_cmd)
|
|
1358
|
+
end
|
|
1359
|
+
|
|
1360
|
+
def prepare_exec(_cmd)
|
|
1361
|
+
#@input_buffer=_cmd
|
|
1362
|
+
out("#{_cmd}")
|
|
1363
|
+
end
|
|
1364
|
+
|
|
1365
|
+
def exec(_cmd)
|
|
1366
|
+
return if _cmd.nil? || _cmd.length ==0
|
|
1367
|
+
@b_exec.destroy if defined?(@b_exec)
|
|
1368
|
+
out("submitted...\n")
|
|
1369
|
+
case _cmd
|
|
1370
|
+
when 'clear'
|
|
1371
|
+
@text.delete('0.0','end')
|
|
1372
|
+
else
|
|
1373
|
+
begin
|
|
1374
|
+
if RUBY_PLATFORM =~ /mingw|mswin/
|
|
1375
|
+
p = IO::popen("#{_cmd} 2>&1")
|
|
1376
|
+
out(p.read, 'response')
|
|
1377
|
+
@result = true
|
|
1378
|
+
else
|
|
1379
|
+
require "open3"
|
|
1380
|
+
Open3.popen3("#{_cmd}"){|stdin, stdout, stderr|
|
|
1381
|
+
stdout.each do |line|
|
|
1382
|
+
out(line,'response')
|
|
1383
|
+
@result = true
|
|
1384
|
+
end
|
|
1385
|
+
stderr.each do |line|
|
|
1386
|
+
out(line,'error')
|
|
1387
|
+
@result = false
|
|
1388
|
+
end
|
|
1389
|
+
|
|
1390
|
+
}
|
|
1391
|
+
end
|
|
1392
|
+
rescue Exception => e
|
|
1393
|
+
out("#{e.message}\n",'error')
|
|
1394
|
+
@result = false
|
|
1395
|
+
end
|
|
1396
|
+
end
|
|
1397
|
+
@b_exit.destroy if defined?(@b_exit)
|
|
1398
|
+
prompt
|
|
1399
|
+
@text.see('end')
|
|
1400
|
+
end
|
|
1401
|
+
|
|
1402
|
+
def out(_str,*tags)
|
|
1403
|
+
@text.insert('end',_str,*tags)
|
|
1404
|
+
end
|
|
1405
|
+
|
|
1406
|
+
end
|
|
1407
|
+
|
|
1408
|
+
class EventWatcherForGem
|
|
1409
|
+
include EventBus
|
|
1410
|
+
def initialize(_event, _details)
|
|
1411
|
+
@event=_event
|
|
1412
|
+
@details=_details
|
|
1413
|
+
enhance
|
|
1414
|
+
Arcadia.attach_listener(self, _event)
|
|
1415
|
+
end
|
|
1416
|
+
def enhance
|
|
1417
|
+
implementation=%Q{
|
|
1418
|
+
class << self
|
|
1419
|
+
def #{_method_name(@event, 'before')}(_event)
|
|
1420
|
+
_event.break
|
|
1421
|
+
new_event = Arcadia.process_event(NeedRubyGemWizardEvent.new(self, @details))
|
|
1422
|
+
if new_event && new_event.results
|
|
1423
|
+
ok=new_event.results[0].installed
|
|
1424
|
+
_event.break if !ok
|
|
1425
|
+
end
|
|
1426
|
+
end
|
|
1427
|
+
end
|
|
1428
|
+
}
|
|
1429
|
+
eval(implementation)
|
|
1430
|
+
end
|
|
1431
|
+
end
|
|
1432
|
+
|
|
1433
|
+
class ArcadiaGemsWizard
|
|
1434
|
+
include Autils
|
|
1435
|
+
def initialize(_arcadia)
|
|
1436
|
+
@arcadia = _arcadia
|
|
1437
|
+
Arcadia.attach_listener(self, NeedRubyGemWizardEvent)
|
|
1438
|
+
end
|
|
1439
|
+
|
|
1440
|
+
def on_need_ruby_gem_wizard(_event)
|
|
1441
|
+
# ... todo implamentation
|
|
1442
|
+
msg = "Appears that gem : '#{_event.gem_name}' required by : '#{_event.extension_name}' is not installed!\n Do you want to try install it now?"
|
|
1443
|
+
ans = Tk.messageBox('icon' => 'error', 'type' => 'yesno',
|
|
1444
|
+
'title' => "(Arcadia) Extensions '#{_event.extension_name}'",
|
|
1445
|
+
'message' => msg)
|
|
1446
|
+
if ans == 'yes'
|
|
1447
|
+
_event.add_result(self, 'installed'=>try_to_install_gem(_event.gem_name,_event.gem_repository))
|
|
1448
|
+
else
|
|
1449
|
+
_event.add_result(self, 'installed'=>false)
|
|
1450
|
+
end
|
|
1451
|
+
end
|
|
1452
|
+
|
|
1453
|
+
# def try_to_install_gem(name, repository=nil, version = '>0')
|
|
1454
|
+
# ret = false
|
|
1455
|
+
# require 'rubygems/command.rb'
|
|
1456
|
+
# require 'rubygems/dependency_installer.rb'
|
|
1457
|
+
#
|
|
1458
|
+
# inst.install name, version
|
|
1459
|
+
# # TODO WIZARD
|
|
1460
|
+
# # TODO accept repository, too
|
|
1461
|
+
# end
|
|
1462
|
+
|
|
1463
|
+
def try_to_install_gem(name, repository=nil, version = '>0')
|
|
1464
|
+
ret = false
|
|
1465
|
+
|
|
1466
|
+
sh=ArcadiaSh.new
|
|
1467
|
+
cmd = "gem install #{name}"
|
|
1468
|
+
cmd="sudo #{cmd}" if !is_windows?
|
|
1469
|
+
cmd+=" --source=#{repository}" if repository
|
|
1470
|
+
sh.prepare_exec(cmd)
|
|
1471
|
+
while sh.wait
|
|
1472
|
+
Tk.update
|
|
1473
|
+
#sleep(1)
|
|
1474
|
+
end
|
|
1475
|
+
ret=sh.result
|
|
1476
|
+
sh.destroy
|
|
1477
|
+
Gem.clear_paths
|
|
1478
|
+
ret
|
|
1479
|
+
end
|
|
1480
|
+
|
|
1481
|
+
end
|
|
1482
|
+
|
|
975
1483
|
|
|
976
1484
|
class ArcadiaDialogManager
|
|
977
1485
|
def initialize(_arcadia)
|
|
@@ -985,7 +1493,11 @@ class ArcadiaDialogManager
|
|
|
985
1493
|
type = 'ok'
|
|
986
1494
|
end
|
|
987
1495
|
res_array = type.split('_')
|
|
988
|
-
|
|
1496
|
+
if _event.level.nil? || _event.level.length == 0
|
|
1497
|
+
icon = 'info'
|
|
1498
|
+
else
|
|
1499
|
+
icon = _event.level
|
|
1500
|
+
end
|
|
989
1501
|
tktype = type.gsub('_','').downcase
|
|
990
1502
|
|
|
991
1503
|
tkdialog = Tk::BWidget::MessageDlg.new(
|
|
@@ -1034,9 +1546,9 @@ class ArcadiaLayout
|
|
|
1034
1546
|
@frames = Array.new
|
|
1035
1547
|
@frames[0] = Array.new
|
|
1036
1548
|
@frames[0][0] = _frame
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1549
|
+
# @domains = Array.new
|
|
1550
|
+
# @domains[0] = Array.new
|
|
1551
|
+
# @domains[0][0] = '_domain_root_'
|
|
1040
1552
|
@panels = Hash.new
|
|
1041
1553
|
@panels['_domain_root_']= Hash.new
|
|
1042
1554
|
@panels['_domain_root_']['root']= _frame
|
|
@@ -1044,6 +1556,7 @@ class ArcadiaLayout
|
|
|
1044
1556
|
@autotab = _autotab
|
|
1045
1557
|
@headed = false
|
|
1046
1558
|
@wrappers=Hash.new
|
|
1559
|
+
@splitters=Array.new
|
|
1047
1560
|
#ArcadiaContractListener.new(self, MainContract, :do_main_event)
|
|
1048
1561
|
end
|
|
1049
1562
|
|
|
@@ -1087,16 +1600,17 @@ class ArcadiaLayout
|
|
|
1087
1600
|
ret = @panels[_domain]['sons'].values[0]
|
|
1088
1601
|
end
|
|
1089
1602
|
ret
|
|
1090
|
-
|
|
1091
|
-
|
|
1603
|
+
end
|
|
1604
|
+
|
|
1092
1605
|
def _prepare_rows(_row,_col, _height, _perc=false, _top_name=nil, _bottom_name=nil)
|
|
1093
1606
|
if (@frames[_row][_col] != nil)
|
|
1094
1607
|
#source_domains = all_domains(@frames[_row][_col])
|
|
1095
1608
|
#source_domains = others_domains(@frames[_row][_col], false)
|
|
1096
1609
|
_h = AGTkOSplittedFrames.new(self.root,@frames[_row][_col],_height, @arcadia['conf']['layout.splitter.length'].to_i,_perc)
|
|
1610
|
+
@splitters << _h
|
|
1097
1611
|
if @frames[_row + 1] == nil
|
|
1098
1612
|
@frames[_row + 1] = Array.new
|
|
1099
|
-
|
|
1613
|
+
# @domains[_row + 1] = Array.new
|
|
1100
1614
|
end
|
|
1101
1615
|
@frames[_row][_col] = _h.top_frame
|
|
1102
1616
|
|
|
@@ -1108,7 +1622,7 @@ class ArcadiaLayout
|
|
|
1108
1622
|
@panels[_top_name]['root_splitted_frames'] = _h
|
|
1109
1623
|
end
|
|
1110
1624
|
@panels[_top_name]['splitted_frames'] = _h
|
|
1111
|
-
|
|
1625
|
+
# @domains[_row][_col] = _top_name
|
|
1112
1626
|
|
|
1113
1627
|
_bottom_name = (_row+1).to_s+'.'+_col.to_s if _bottom_name == nil
|
|
1114
1628
|
|
|
@@ -1124,10 +1638,19 @@ class ArcadiaLayout
|
|
|
1124
1638
|
@panels[_bottom_name]['root_splitted_frames'] = _h
|
|
1125
1639
|
end
|
|
1126
1640
|
@panels[_bottom_name]['splitted_frames'] = _h
|
|
1127
|
-
|
|
1641
|
+
# @domains[_row + 1][_col] = _bottom_name
|
|
1642
|
+
end
|
|
1643
|
+
end
|
|
1644
|
+
private :_prepare_rows
|
|
1645
|
+
|
|
1646
|
+
def add_mono_panel(_name=nil)
|
|
1647
|
+
if (@frames[0][0] != nil)
|
|
1648
|
+
_name = '0.0' if _name.nil?
|
|
1649
|
+
@panels[_name] = Hash.new
|
|
1650
|
+
@panels[_name]['root'] = @frames[0][0]
|
|
1651
|
+
@panels[_name]['sons'] = Hash.new
|
|
1128
1652
|
end
|
|
1129
1653
|
end
|
|
1130
|
-
private :_prepare_rows
|
|
1131
1654
|
|
|
1132
1655
|
def add_rows(_row,_col, _height, _top_name=nil, _bottom_name=nil)
|
|
1133
1656
|
_prepare_rows(_row,_col, _height, false, _top_name, _bottom_name)
|
|
@@ -1157,14 +1680,14 @@ class ArcadiaLayout
|
|
|
1157
1680
|
# end
|
|
1158
1681
|
|
|
1159
1682
|
def all_domains(_frame)
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1683
|
+
splitted_adapter = find_splitted_frame(_frame)
|
|
1684
|
+
consider_it = splitted_adapter.kind_of?(AGTkSplittedFrames)
|
|
1685
|
+
if consider_it
|
|
1686
|
+
ret = domains_on_frame(splitted_adapter.frame2).concat(domains_on_frame(splitted_adapter.frame1))
|
|
1687
|
+
else
|
|
1688
|
+
ret = Array.new
|
|
1689
|
+
end
|
|
1690
|
+
ret
|
|
1168
1691
|
end
|
|
1169
1692
|
|
|
1170
1693
|
def all_domains_cols(_frame)
|
|
@@ -1185,12 +1708,12 @@ class ArcadiaLayout
|
|
|
1185
1708
|
ret
|
|
1186
1709
|
end
|
|
1187
1710
|
|
|
1188
|
-
|
|
1189
1711
|
def _prepare_cols(_row,_col, _width, _perc=false, _left_name=nil, _right_name=nil)
|
|
1190
1712
|
if (@frames[_row][_col] != nil)
|
|
1191
1713
|
#source_domains = all_domains(@frames[_row][_col])
|
|
1192
1714
|
#source_domains = others_domains(@frames[_row][_col])
|
|
1193
1715
|
_w = AGTkVSplittedFrames.new(self.root,@frames[_row][_col],_width,@arcadia['conf']['layout.splitter.length'].to_i,_perc)
|
|
1716
|
+
@splitters << _w
|
|
1194
1717
|
@frames[_row][_col] = _w.left_frame
|
|
1195
1718
|
#@frames[_row][_col + 1] = _w.right_frame
|
|
1196
1719
|
|
|
@@ -1202,7 +1725,7 @@ class ArcadiaLayout
|
|
|
1202
1725
|
@panels[_left_name]['root_splitted_frames'] = _w
|
|
1203
1726
|
end
|
|
1204
1727
|
@panels[_left_name]['splitted_frames'] = _w
|
|
1205
|
-
|
|
1728
|
+
# @domains[_row][_col] = _left_name
|
|
1206
1729
|
|
|
1207
1730
|
_right_name = _row.to_s+'.'+(_col+1).to_s if _right_name == nil
|
|
1208
1731
|
if !@panels[_right_name].nil?
|
|
@@ -1217,7 +1740,7 @@ class ArcadiaLayout
|
|
|
1217
1740
|
@panels[_right_name]['root_splitted_frames'] = _w
|
|
1218
1741
|
end
|
|
1219
1742
|
@panels[_right_name]['splitted_frames'] = _w
|
|
1220
|
-
|
|
1743
|
+
# @domains[_row][_col + 1] = _right_name
|
|
1221
1744
|
end
|
|
1222
1745
|
end
|
|
1223
1746
|
private :_prepare_cols
|
|
@@ -1233,37 +1756,35 @@ class ArcadiaLayout
|
|
|
1233
1756
|
if @panels[d] !=nil
|
|
1234
1757
|
shift_right(_row,_col+1)
|
|
1235
1758
|
end
|
|
1236
|
-
Arcadia.console(self,'msg'=>"shifto a destra #{dj} (su #{d})")
|
|
1237
1759
|
@panels[d] = @panels[dj]
|
|
1238
1760
|
#-------------------------------
|
|
1239
1761
|
#@panels[d]['root'].set_domain(d)
|
|
1240
1762
|
#-------------------------------
|
|
1241
1763
|
@panels[d]['sons'].each{|name,ffw| ffw.domain=d}
|
|
1242
1764
|
@frames[_row][_col+1] = @frames[_row][_col]
|
|
1243
|
-
|
|
1765
|
+
# @domains[_row][_col+1] = @domains[_row][_col]
|
|
1244
1766
|
|
|
1245
1767
|
@panels.delete(dj)
|
|
1246
1768
|
#@panels[dj] = nil
|
|
1247
1769
|
@frames[_row][_col] = nil
|
|
1248
|
-
|
|
1770
|
+
# @domains[_row][_col] = nil
|
|
1249
1771
|
end
|
|
1250
1772
|
|
|
1251
1773
|
def shift_left(_row,_col)
|
|
1252
1774
|
d = domain_name(_row, _col)
|
|
1253
1775
|
dj = domain_name(_row, _col+1)
|
|
1254
1776
|
if @panels[dj] !=nil
|
|
1255
|
-
Arcadia.console(self,'msg'=>"shifto a sinista #{dj} (su #{d})")
|
|
1256
1777
|
@panels[d] = @panels[dj]
|
|
1257
1778
|
#-------------------------------
|
|
1258
1779
|
#@panels[d]['root'].set_domain(d)
|
|
1259
1780
|
#-------------------------------
|
|
1260
1781
|
@panels[d]['sons'].each{|name,ffw| ffw.domain=d}
|
|
1261
1782
|
@frames[_row][_col] = @frames[_row][_col+1]
|
|
1262
|
-
|
|
1783
|
+
# @domains[_row][_col] = @domains[_row][_col+1]
|
|
1263
1784
|
|
|
1264
1785
|
@panels.delete(dj) # = nil
|
|
1265
1786
|
@frames[_row][_col+1] = nil
|
|
1266
|
-
|
|
1787
|
+
# @domains[_row][_col+1] = nil
|
|
1267
1788
|
shift_left(_row,_col+1)
|
|
1268
1789
|
end
|
|
1269
1790
|
|
|
@@ -1273,18 +1794,17 @@ class ArcadiaLayout
|
|
|
1273
1794
|
d = domain_name(_row, _col)
|
|
1274
1795
|
dj = domain_name(_row+1, _col)
|
|
1275
1796
|
if @panels[dj] !=nil
|
|
1276
|
-
Arcadia.console(self,'msg'=>"shifto su #{dj} (su #{d})")
|
|
1277
1797
|
@panels[d] = @panels[dj]
|
|
1278
1798
|
#-------------------------------
|
|
1279
1799
|
#@panels[d]['root'].set_domain(d)
|
|
1280
1800
|
#-------------------------------
|
|
1281
1801
|
@panels[d]['sons'].each{|name,ffw| ffw.domain=d}
|
|
1282
1802
|
@frames[_row][_col] = @frames[_row+1][_col]
|
|
1283
|
-
|
|
1803
|
+
# @domains[_row][_col] = @domains[_row+1][_col]
|
|
1284
1804
|
|
|
1285
1805
|
@panels.delete(dj) # = nil
|
|
1286
1806
|
@frames[_row+1][_col] = nil
|
|
1287
|
-
|
|
1807
|
+
# @domains[_row+1][_col] = nil
|
|
1288
1808
|
|
|
1289
1809
|
shift_top(_row+1,_col)
|
|
1290
1810
|
end
|
|
@@ -1298,7 +1818,6 @@ class ArcadiaLayout
|
|
|
1298
1818
|
if @panels[d] !=nil
|
|
1299
1819
|
shift_bottom(_row+1,_col)
|
|
1300
1820
|
end
|
|
1301
|
-
Arcadia.console(self,'msg'=>"shifto giu #{dj} (su #{d})")
|
|
1302
1821
|
@panels[d] = @panels[dj]
|
|
1303
1822
|
#-------------------------------
|
|
1304
1823
|
#@panels[d]['root'].set_domain(d)
|
|
@@ -1306,15 +1825,15 @@ class ArcadiaLayout
|
|
|
1306
1825
|
@panels[d]['sons'].each{|name,ffw| ffw.domain=d}
|
|
1307
1826
|
if @frames[_row + 1] == nil
|
|
1308
1827
|
@frames[_row + 1] = Array.new
|
|
1309
|
-
|
|
1828
|
+
# @domains[_row + 1] = Array.new
|
|
1310
1829
|
end
|
|
1311
1830
|
@frames[_row+1][_col] = @frames[_row][_col]
|
|
1312
|
-
|
|
1831
|
+
# @domains[_row+1][_col] = @domains[_row][_col]
|
|
1313
1832
|
|
|
1314
1833
|
@panels.delete(dj)
|
|
1315
1834
|
#@panels[dj] = nil
|
|
1316
1835
|
@frames[_row][_col] = nil
|
|
1317
|
-
|
|
1836
|
+
# @domains[_row][_col] = nil
|
|
1318
1837
|
end
|
|
1319
1838
|
|
|
1320
1839
|
def add_cols(_row,_col, _width, _left_name=nil, _right_name=nil)
|
|
@@ -1370,7 +1889,6 @@ class ArcadiaLayout
|
|
|
1370
1889
|
if saved_root_splitted_frames
|
|
1371
1890
|
@panels[_domain]['root_splitted_frames']=saved_root_splitted_frames
|
|
1372
1891
|
end
|
|
1373
|
-
|
|
1374
1892
|
build_invert_menu(true)
|
|
1375
1893
|
end
|
|
1376
1894
|
|
|
@@ -1495,7 +2013,7 @@ class ArcadiaLayout
|
|
|
1495
2013
|
}
|
|
1496
2014
|
end
|
|
1497
2015
|
end
|
|
1498
|
-
|
|
2016
|
+
ret_doms
|
|
1499
2017
|
end
|
|
1500
2018
|
|
|
1501
2019
|
def close_runtime_old(_domain)
|
|
@@ -1584,7 +2102,7 @@ class ArcadiaLayout
|
|
|
1584
2102
|
else
|
|
1585
2103
|
@panels.delete(_domain)
|
|
1586
2104
|
@frames[_row.to_i][_col.to_i] = nil
|
|
1587
|
-
|
|
2105
|
+
# @domains[_row.to_i][_col.to_i] = nil
|
|
1588
2106
|
# ref_r,ref_c = ref_source_domain.split('.')
|
|
1589
2107
|
# real_r,real_c=source_domain.split('.')
|
|
1590
2108
|
# gap_r = ref_r.to_i - real_r.to_i
|
|
@@ -1614,10 +2132,10 @@ class ArcadiaLayout
|
|
|
1614
2132
|
@panels.delete(source_domain)
|
|
1615
2133
|
if vertical
|
|
1616
2134
|
@frames[_row.to_i][_col.to_i+1] = nil
|
|
1617
|
-
|
|
2135
|
+
# @domains[_row.to_i][_col.to_i+1] = nil
|
|
1618
2136
|
else
|
|
1619
2137
|
@frames[_row.to_i+1][_col.to_i] = nil
|
|
1620
|
-
|
|
2138
|
+
# @domains[_row.to_i+1][_col.to_i] = nil
|
|
1621
2139
|
end
|
|
1622
2140
|
else
|
|
1623
2141
|
p "secondo quadrante"
|
|
@@ -1630,15 +2148,15 @@ class ArcadiaLayout
|
|
|
1630
2148
|
splitted_adapter.destroy
|
|
1631
2149
|
@panels[destination_domain]['root']=splitted_adapter_frame
|
|
1632
2150
|
@frames[_row.to_i][_col.to_i] = splitted_adapter_frame
|
|
1633
|
-
|
|
2151
|
+
# @domains[_row.to_i][_col.to_i] = destination_domain
|
|
1634
2152
|
build_titled_frame(destination_domain)
|
|
1635
2153
|
@panels.delete(source_domain)
|
|
1636
2154
|
if vertical
|
|
1637
2155
|
@frames[_row.to_i][_col.to_i+1] = nil
|
|
1638
|
-
|
|
2156
|
+
# @domains[_row.to_i][_col.to_i+1] = nil
|
|
1639
2157
|
else
|
|
1640
2158
|
@frames[_row.to_i+1][_col.to_i] = nil
|
|
1641
|
-
|
|
2159
|
+
# @domains[_row.to_i+1][_col.to_i] = nil
|
|
1642
2160
|
end
|
|
1643
2161
|
source_save.each{|name,ffw|
|
|
1644
2162
|
ffw.domain = destination_domain
|
|
@@ -1661,7 +2179,6 @@ class ArcadiaLayout
|
|
|
1661
2179
|
end
|
|
1662
2180
|
end
|
|
1663
2181
|
else # CLOSE OTHER
|
|
1664
|
-
# verifichiamo se la contro parte è uno splitter_adapter
|
|
1665
2182
|
other_ds = domains_on_frame(@panels[_domain]['splitted_frames'].frame1)
|
|
1666
2183
|
if other_ds.length == 1
|
|
1667
2184
|
other_dom = other_ds[0]
|
|
@@ -1688,7 +2205,7 @@ class ArcadiaLayout
|
|
|
1688
2205
|
other_root_splitted_adapter.attach_frame(splitted_adapter_frame)
|
|
1689
2206
|
|
|
1690
2207
|
@frames[_row.to_i][_col.to_i] = nil
|
|
1691
|
-
|
|
2208
|
+
# @domains[_row.to_i][_col.to_i] = nil
|
|
1692
2209
|
@panels.delete(_domain)
|
|
1693
2210
|
else
|
|
1694
2211
|
p "quarto quadrante"
|
|
@@ -1702,7 +2219,7 @@ class ArcadiaLayout
|
|
|
1702
2219
|
@panels[other_dom]['root']=splitted_adapter_frame
|
|
1703
2220
|
|
|
1704
2221
|
@frames[_row.to_i][_col.to_i] = nil
|
|
1705
|
-
|
|
2222
|
+
# @domains[_row.to_i][_col.to_i] = nil
|
|
1706
2223
|
build_titled_frame(other_dom)
|
|
1707
2224
|
@panels.delete(_domain)
|
|
1708
2225
|
|
|
@@ -1719,13 +2236,13 @@ class ArcadiaLayout
|
|
|
1719
2236
|
end
|
|
1720
2237
|
other_row,other_col = other_dom.split('.')
|
|
1721
2238
|
@frames[other_row.to_i][other_col.to_i] = splitted_adapter_frame
|
|
1722
|
-
|
|
2239
|
+
# @domains[other_row.to_i][other_col.to_i] = other_dom
|
|
1723
2240
|
# if vertical
|
|
1724
2241
|
# @frames[_row.to_i][_col.to_i-1] = splitted_adapter_frame
|
|
1725
|
-
#
|
|
2242
|
+
# # @domains[_row.to_i][_col.to_i-1] = other_dom
|
|
1726
2243
|
# else
|
|
1727
2244
|
# @frames[_row.to_i-1][_col.to_i] = splitted_adapter_frame
|
|
1728
|
-
#
|
|
2245
|
+
# # @domains[_row.to_i-1][_col.to_i] = other_dom
|
|
1729
2246
|
# end
|
|
1730
2247
|
end
|
|
1731
2248
|
|
|
@@ -1794,7 +2311,7 @@ class ArcadiaLayout
|
|
|
1794
2311
|
|
|
1795
2312
|
@panels.delete(_domain)
|
|
1796
2313
|
@frames[_row.to_i][_col.to_i] = nil
|
|
1797
|
-
|
|
2314
|
+
# @domains[_row.to_i][_col.to_i] = nil
|
|
1798
2315
|
|
|
1799
2316
|
if other_root_splitted_adapter
|
|
1800
2317
|
if other_root_splitted_adapter != @panels[other_domain]['splitted_frames']
|
|
@@ -1806,6 +2323,7 @@ class ArcadiaLayout
|
|
|
1806
2323
|
end
|
|
1807
2324
|
other_root_splitted_adapter.detach_frame
|
|
1808
2325
|
splitted_adapter.detach_frame
|
|
2326
|
+
@splitters.delete(splitted_adapter)
|
|
1809
2327
|
splitted_adapter.destroy
|
|
1810
2328
|
other_root_splitted_adapter.attach_frame(splitted_adapter_frame)
|
|
1811
2329
|
else
|
|
@@ -1868,6 +2386,7 @@ class ArcadiaLayout
|
|
|
1868
2386
|
:hidemargin => true
|
|
1869
2387
|
)
|
|
1870
2388
|
end
|
|
2389
|
+
|
|
1871
2390
|
end
|
|
1872
2391
|
|
|
1873
2392
|
def build_titled_frame(domain)
|
|
@@ -1893,12 +2412,28 @@ class ArcadiaLayout
|
|
|
1893
2412
|
end
|
|
1894
2413
|
end
|
|
1895
2414
|
|
|
2415
|
+
def domains
|
|
2416
|
+
ret = Array.new
|
|
2417
|
+
@panels.keys.each{|dom|
|
|
2418
|
+
if dom != '_domain_root_' && @panels[dom] && @panels[dom]['root']
|
|
2419
|
+
ret << dom
|
|
2420
|
+
end
|
|
2421
|
+
}
|
|
2422
|
+
ret
|
|
2423
|
+
end
|
|
2424
|
+
|
|
1896
2425
|
def add_headers
|
|
1897
|
-
@
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
2426
|
+
@panels.keys.each{|dom|
|
|
2427
|
+
if dom != '_domain_root_' && @panels[dom] && @panels[dom]['root']
|
|
2428
|
+
build_titled_frame(dom)
|
|
2429
|
+
end
|
|
1901
2430
|
}
|
|
2431
|
+
|
|
2432
|
+
# @domains.each{|row|
|
|
2433
|
+
# row.each{|domain|
|
|
2434
|
+
# build_titled_frame(domain)
|
|
2435
|
+
# }
|
|
2436
|
+
# }
|
|
1902
2437
|
@headed = true
|
|
1903
2438
|
end
|
|
1904
2439
|
|
|
@@ -1919,7 +2454,7 @@ class ArcadiaLayout
|
|
|
1919
2454
|
source_domain = @wrappers[_source_name].domain
|
|
1920
2455
|
source_has_domain = !source_domain.nil?
|
|
1921
2456
|
tt2= @panels[source_domain]['root'].top_text if source_has_domain
|
|
1922
|
-
if source_has_domain && @panels[source_domain]['sons'].length ==1 && @panels[_target_domain]['sons'].length > 0
|
|
2457
|
+
if @arcadia.conf('layout.exchange_panel_if_no_tabbed')=='true' && source_has_domain && @panels[source_domain]['sons'].length ==1 && @panels[_target_domain]['sons'].length > 0
|
|
1923
2458
|
# change ------
|
|
1924
2459
|
ffw1 = raised_fixed_frame(_target_domain)
|
|
1925
2460
|
ffw2 = @panels[source_domain]['sons'].values[0]
|
|
@@ -1981,36 +2516,68 @@ class ArcadiaLayout
|
|
|
1981
2516
|
#domain_root = @panels[_domain_name]['sons'][_frame_name]
|
|
1982
2517
|
@panels.keys.each{|dom|
|
|
1983
2518
|
if dom != '_domain_root_' && dom != _ffw.domain && @panels[dom] && @panels[dom]['root']
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
2519
|
+
titledFrame = @panels[dom]['root']
|
|
2520
|
+
if titledFrame.instance_of?(TkTitledFrame)
|
|
2521
|
+
menu = @panels[dom]['root'].menu_button('ext').cget('menu')
|
|
2522
|
+
menu.insert('0',:command,
|
|
2523
|
+
:label=>_ffw.title,
|
|
2524
|
+
:image=>TkPhotoImage.new('dat'=>ARROW_LEFT_GIF),
|
|
2525
|
+
:compound=>'left',
|
|
2526
|
+
:command=>proc{change_domain(dom, _ffw.name)},
|
|
2527
|
+
:hidemargin => true
|
|
2528
|
+
)
|
|
2529
|
+
end
|
|
1992
2530
|
end
|
|
1993
2531
|
}
|
|
2532
|
+
if @panels[_ffw.domain]
|
|
2533
|
+
titledFrame = @panels[_ffw.domain]['root']
|
|
2534
|
+
if titledFrame.instance_of?(TkTitledFrame)
|
|
2535
|
+
mymenu = titledFrame.menu_button('ext').cget('menu')
|
|
2536
|
+
index = mymenu.index('end').to_i
|
|
2537
|
+
if @panels.keys.length > 2
|
|
2538
|
+
i=index-3
|
|
2539
|
+
else
|
|
2540
|
+
i=index-2
|
|
2541
|
+
end
|
|
2542
|
+
if i >= 0
|
|
2543
|
+
index = i.to_s
|
|
2544
|
+
end
|
|
2545
|
+
mymenu.insert(index,:command,
|
|
2546
|
+
:label=>"close \"#{_ffw.title}\"",
|
|
2547
|
+
:image=>TkPhotoImage.new('dat'=>CLOSE_FRAME_GIF),
|
|
2548
|
+
:compound=>'left',
|
|
2549
|
+
:command=>proc{unregister_panel(_ffw, false, true)},
|
|
2550
|
+
:hidemargin => true
|
|
2551
|
+
)
|
|
2552
|
+
end
|
|
2553
|
+
end
|
|
2554
|
+
|
|
1994
2555
|
end
|
|
1995
2556
|
|
|
1996
2557
|
|
|
1997
2558
|
def build_invert_menu(refresh_commons_items=false)
|
|
1998
2559
|
@panels.keys.each{|dom|
|
|
1999
2560
|
if dom != '_domain_root_' && @panels[dom] && @panels[dom]['root']
|
|
2000
|
-
|
|
2001
|
-
if
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
i=menu.index('end').to_i-4
|
|
2561
|
+
titledFrame = @panels[dom]['root']
|
|
2562
|
+
if titledFrame.instance_of?(TkTitledFrame)
|
|
2563
|
+
menu = titledFrame.menu_button('ext').cget('menu')
|
|
2564
|
+
if refresh_commons_items
|
|
2565
|
+
@panels[dom]['root'].menu_button('ext').cget('menu').delete('0','end')
|
|
2566
|
+
add_commons_menu_items(dom, menu)
|
|
2007
2567
|
else
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2568
|
+
index = menu.index('end').to_i
|
|
2569
|
+
if @panels.keys.length > 2
|
|
2570
|
+
i=index-4
|
|
2571
|
+
else
|
|
2572
|
+
i=index-3
|
|
2573
|
+
end
|
|
2574
|
+
if i >= 0
|
|
2575
|
+
end_index = i.to_s
|
|
2576
|
+
@panels[dom]['root'].menu_button('ext').cget('menu').delete('0',end_index)
|
|
2577
|
+
end
|
|
2013
2578
|
end
|
|
2579
|
+
# index = menu.index('end').to_i
|
|
2580
|
+
# @panels[dom]['root'].menu_button('ext').cget('menu').delete('2','end') if index > 1
|
|
2014
2581
|
end
|
|
2015
2582
|
end
|
|
2016
2583
|
}
|
|
@@ -2018,79 +2585,8 @@ class ArcadiaLayout
|
|
|
2018
2585
|
@wrappers.each{|name,ffw|
|
|
2019
2586
|
process_frame(ffw) #if ffw.domain
|
|
2020
2587
|
}
|
|
2588
|
+
|
|
2021
2589
|
end
|
|
2022
|
-
|
|
2023
|
-
# def register_panel_old(_domain_name, _name, _title)
|
|
2024
|
-
# p = @panels[_domain_name]
|
|
2025
|
-
# if p!=nil
|
|
2026
|
-
# num = p['sons'].length
|
|
2027
|
-
# if @headed
|
|
2028
|
-
# p['root'].title(_title)
|
|
2029
|
-
# if !p['root'].frame.instance_of?(TkFrameAdapter)
|
|
2030
|
-
# wrapper = TkFrameAdapter.new(self.root, Arcadia.style('frame'))
|
|
2031
|
-
# wrapper.attach_frame(p['root'].frame)
|
|
2032
|
-
# p['root'].frame=wrapper
|
|
2033
|
-
# end
|
|
2034
|
-
# root_frame = p['root'].frame
|
|
2035
|
-
# process_register_panel(_domain_name)
|
|
2036
|
-
# else
|
|
2037
|
-
# root_frame = p['root']
|
|
2038
|
-
# end
|
|
2039
|
-
# if (num == 0 && @autotab)
|
|
2040
|
-
# api = ArcadiaPanelInfo.new(_name,_title,nil)
|
|
2041
|
-
# api.frame = TkFrame.new(root_frame, Arcadia.style('panel')).place('x'=>0, 'y'=>0, 'relwidth'=>1, 'relheight'=>1)
|
|
2042
|
-
# p['sons'][_name] = api
|
|
2043
|
-
# return api.frame
|
|
2044
|
-
# else
|
|
2045
|
-
# if num == 1 && @autotab && p['notebook'] == nil
|
|
2046
|
-
# p['notebook'] = Tk::BWidget::NoteBook.new(root_frame, Arcadia.style('tabpanel')){
|
|
2047
|
-
# tabbevelsize 0
|
|
2048
|
-
# internalborderwidth 0
|
|
2049
|
-
# pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes')
|
|
2050
|
-
# }
|
|
2051
|
-
# api = p['sons'].values[0]
|
|
2052
|
-
# api_tab_frame = p['notebook'].insert('end',
|
|
2053
|
-
# api.name,
|
|
2054
|
-
# 'text'=>api.title,
|
|
2055
|
-
# 'raisecmd'=>proc{
|
|
2056
|
-
# p['root'].title(api.title)
|
|
2057
|
-
# p['root'].top_text('')
|
|
2058
|
-
# changed
|
|
2059
|
-
# notify_observers('RAISE', api.name)
|
|
2060
|
-
# }
|
|
2061
|
-
# )
|
|
2062
|
-
# api.frame.place('in'=>api_tab_frame, 'x'=>0, 'y'=>0, 'relwidth'=>1, 'relheight'=>1)
|
|
2063
|
-
# api.frame.raise
|
|
2064
|
-
# elsif (num==0 && !@autotab)
|
|
2065
|
-
# p['notebook'] = Tk::BWidget::NoteBook.new(root_frame){
|
|
2066
|
-
# tabbevelsize 0
|
|
2067
|
-
# internalborderwidth 0
|
|
2068
|
-
# pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes')
|
|
2069
|
-
# }
|
|
2070
|
-
# end
|
|
2071
|
-
# _panel = p['notebook'].insert('end',_name ,
|
|
2072
|
-
# 'text'=>_title,
|
|
2073
|
-
# 'raisecmd'=>proc{
|
|
2074
|
-
# p['root'].title(_title)
|
|
2075
|
-
# changed
|
|
2076
|
-
# notify_observers('RAISE', _name)
|
|
2077
|
-
# }
|
|
2078
|
-
# )
|
|
2079
|
-
# p['sons'][_name] = ArcadiaPanelInfo.new(_name,_title,_panel)
|
|
2080
|
-
# p['notebook'].raise(_name)
|
|
2081
|
-
# return _panel
|
|
2082
|
-
# end
|
|
2083
|
-
# else
|
|
2084
|
-
# Arcadia.dialog(self,
|
|
2085
|
-
# 'type'=>'ok',
|
|
2086
|
-
# 'msg'=>"domain #{_domain_name} do not exist\nfor '#{_title}'!",
|
|
2087
|
-
# 'level'=>'warning'
|
|
2088
|
-
# )
|
|
2089
|
-
# float_frame = new_float_frame
|
|
2090
|
-
# float_frame.title(_title)
|
|
2091
|
-
# return float_frame.frame
|
|
2092
|
-
# end
|
|
2093
|
-
# end
|
|
2094
2590
|
|
|
2095
2591
|
def register_panel(_ffw, _adapter=nil)
|
|
2096
2592
|
_domain_name = _ffw.domain
|
|
@@ -2135,8 +2631,7 @@ class ArcadiaLayout
|
|
|
2135
2631
|
'raisecmd'=>proc{
|
|
2136
2632
|
pan['root'].title(api.title)
|
|
2137
2633
|
pan['root'].top_text('')
|
|
2138
|
-
|
|
2139
|
-
|
|
2634
|
+
Arcadia.process_event(LayoutRaisingFrameEvent.new(self,'extension_name'=>pan['sons'][api.name].extension, 'frame_name'=>pan['sons'][api.name].name))
|
|
2140
2635
|
# changed
|
|
2141
2636
|
# notify_observers('RAISE', api.name)
|
|
2142
2637
|
}
|
|
@@ -2180,7 +2675,6 @@ class ArcadiaLayout
|
|
|
2180
2675
|
_ffw.domain = nil
|
|
2181
2676
|
process_frame(_ffw)
|
|
2182
2677
|
return TkFrameAdapter.new(self.root, Arcadia.style('frame'))
|
|
2183
|
-
|
|
2184
2678
|
#
|
|
2185
2679
|
# Arcadia.dialog(self,
|
|
2186
2680
|
# 'type'=>'ok',
|
|
@@ -2262,6 +2756,198 @@ class ArcadiaLayout
|
|
|
2262
2756
|
_frame.place(_args)
|
|
2263
2757
|
return _frame
|
|
2264
2758
|
end
|
|
2759
|
+
|
|
2760
|
+
def dump_splitter(_splitter)
|
|
2761
|
+
ret = ''
|
|
2762
|
+
if _splitter.instance_of?(AGTkVSplittedFrames)
|
|
2763
|
+
w = TkWinfo.width(_splitter.frame1)
|
|
2764
|
+
ret = "c#{w}"
|
|
2765
|
+
elsif _splitter.instance_of?(AGTkOSplittedFrames)
|
|
2766
|
+
h = TkWinfo.height(_splitter.frame1)
|
|
2767
|
+
ret = "r#{h}"
|
|
2768
|
+
end
|
|
2769
|
+
ret
|
|
2770
|
+
end
|
|
2771
|
+
|
|
2772
|
+
def splitter_frame_on_frame(_frame)
|
|
2773
|
+
ret=nil
|
|
2774
|
+
@splitters.each{|sp|
|
|
2775
|
+
if sp.frame == _frame
|
|
2776
|
+
ret = sp
|
|
2777
|
+
break
|
|
2778
|
+
end
|
|
2779
|
+
}
|
|
2780
|
+
ret
|
|
2781
|
+
end
|
|
2782
|
+
|
|
2783
|
+
def get_hinner_frame(_frame)
|
|
2784
|
+
ret = _frame
|
|
2785
|
+
# child = TkWinfo.children(_frame)[0]
|
|
2786
|
+
TkWinfo.children(_frame).each{|child|
|
|
2787
|
+
if child.instance_of?(TkTitledFrame)
|
|
2788
|
+
ret = child.frame
|
|
2789
|
+
break
|
|
2790
|
+
end
|
|
2791
|
+
}
|
|
2792
|
+
# if child.instance_of?(TkTitledFrame)
|
|
2793
|
+
# ret = child.frame
|
|
2794
|
+
# end
|
|
2795
|
+
ret
|
|
2796
|
+
end
|
|
2797
|
+
|
|
2798
|
+
def shift_domain_column(_r,_c,_dom)
|
|
2799
|
+
Hash.new.update(_dom).each{|k,d|
|
|
2800
|
+
dr,dc=d.split('.')
|
|
2801
|
+
if dc.to_i >= _c && dr.to_i == _r
|
|
2802
|
+
#shift_domain_column(_r,dc.to_i+1,_dom)
|
|
2803
|
+
p "== #{d} --> #{domain_name(_r,dc.to_i+1)}"
|
|
2804
|
+
_dom[k]= domain_name(_r,dc.to_i+1)
|
|
2805
|
+
end
|
|
2806
|
+
}
|
|
2807
|
+
end
|
|
2808
|
+
|
|
2809
|
+
def shift_domain_row(_r,_c,_dom)
|
|
2810
|
+
Hash.new.update(_dom).each{|k,d|
|
|
2811
|
+
dr,dc=d.split('.')
|
|
2812
|
+
if dr.to_i >= _r && dc.to_i == _c
|
|
2813
|
+
#shift_domain_row(dr.to_i+1,_c,_dom)
|
|
2814
|
+
p "shift_domain_row == #{d} --> #{domain_name(dr.to_i+1,_c)}"
|
|
2815
|
+
_dom[k]=domain_name(dr.to_i+1,_c)
|
|
2816
|
+
end
|
|
2817
|
+
}
|
|
2818
|
+
end
|
|
2819
|
+
|
|
2820
|
+
def gap_domain_column(_r,_c,_dom)
|
|
2821
|
+
ret = _c
|
|
2822
|
+
Hash.new.update(_dom).each{|k,d|
|
|
2823
|
+
dr,dc=d.split('.')
|
|
2824
|
+
if dc.to_i == _c && dr.to_i == _r
|
|
2825
|
+
ret = gap_domain_column(_r,dc.to_i+1,_dom)
|
|
2826
|
+
end
|
|
2827
|
+
}
|
|
2828
|
+
ret
|
|
2829
|
+
end
|
|
2830
|
+
|
|
2831
|
+
def gap_domain_row(_r,_c,_dom)
|
|
2832
|
+
ret = _r
|
|
2833
|
+
Hash.new.update(_dom).each{|k,d|
|
|
2834
|
+
dr,dc=d.split('.')
|
|
2835
|
+
if dr.to_i == _r && dc.to_i == _c
|
|
2836
|
+
ret = gap_domain_row(dr.to_i+1,_c,_dom)
|
|
2837
|
+
end
|
|
2838
|
+
}
|
|
2839
|
+
ret
|
|
2840
|
+
end
|
|
2841
|
+
|
|
2842
|
+
|
|
2843
|
+
def dump_geometry(_r=0,_c=0,_frame=root)
|
|
2844
|
+
spl = Array.new
|
|
2845
|
+
dom = Hash.new
|
|
2846
|
+
ret = [nil,nil,nil,nil]
|
|
2847
|
+
sp = splitter_frame_on_frame(_frame)
|
|
2848
|
+
if sp
|
|
2849
|
+
spl << "#{domain_name(_r,_c)}#{dump_splitter(sp)}"
|
|
2850
|
+
dom[get_hinner_frame(sp.frame1)]=domain_name(_r,_c)
|
|
2851
|
+
sspl,ddom,rr,cc = dump_geometry(_r, _c, sp.frame1)
|
|
2852
|
+
spl.concat(sspl)
|
|
2853
|
+
dom.update(ddom)
|
|
2854
|
+
if sp.instance_of?(AGTkVSplittedFrames)
|
|
2855
|
+
_c=cc+1
|
|
2856
|
+
_c=gap_domain_column(_r,_c,dom)
|
|
2857
|
+
else
|
|
2858
|
+
_r=rr+1
|
|
2859
|
+
_r=gap_domain_row(_r,_c,dom)
|
|
2860
|
+
end
|
|
2861
|
+
dom[get_hinner_frame(sp.frame2)]=domain_name(_r,_c)
|
|
2862
|
+
sspl,ddom,rr,cc = dump_geometry(_r, _c, sp.frame2)
|
|
2863
|
+
spl.concat(sspl)
|
|
2864
|
+
dom.update(ddom)
|
|
2865
|
+
elsif _frame==root
|
|
2866
|
+
dom[get_hinner_frame(root)]=domain_name(_r,_c)
|
|
2867
|
+
end
|
|
2868
|
+
ret[0]=spl
|
|
2869
|
+
ret[1]=dom
|
|
2870
|
+
ret[2]=_r
|
|
2871
|
+
ret[3]=_c
|
|
2872
|
+
ret
|
|
2873
|
+
end
|
|
2874
|
+
end
|
|
2875
|
+
|
|
2876
|
+
#
|
|
2877
|
+
# receives messages and tracks the
|
|
2878
|
+
# by Roger D. Pack
|
|
2879
|
+
class MonitorLastUsedDir
|
|
2880
|
+
|
|
2881
|
+
def initialize
|
|
2882
|
+
for event in [SaveBufferEvent, AckInFilesEvent, SearchInFilesEvent, OpenBufferEvent] do
|
|
2883
|
+
Arcadia.attach_listener(self, event)
|
|
2884
|
+
end
|
|
2885
|
+
end
|
|
2886
|
+
|
|
2887
|
+
def on_after_save_as_buffer(_event)
|
|
2888
|
+
MonitorLastUsedDir.set_last _event.new_file
|
|
2889
|
+
end
|
|
2890
|
+
|
|
2891
|
+
def on_after_ack_in_files _event
|
|
2892
|
+
MonitorLastUsedDir.set_last _event.dir
|
|
2893
|
+
end
|
|
2894
|
+
|
|
2895
|
+
# we want this one...but...not at startup time...hmm.
|
|
2896
|
+
def on_after_open_buffer _event
|
|
2897
|
+
MonitorLastUsedDir.set_last _event.file
|
|
2898
|
+
end
|
|
2899
|
+
|
|
2900
|
+
alias :on_after_search_in_files :on_after_ack_in_files
|
|
2901
|
+
|
|
2902
|
+
def self.get_last_dir
|
|
2903
|
+
current = $arcadia['pers']['last.used.dir']
|
|
2904
|
+
if current != nil && current != ''
|
|
2905
|
+
current
|
|
2906
|
+
else
|
|
2907
|
+
$pwd # startup dir
|
|
2908
|
+
end
|
|
2909
|
+
end
|
|
2910
|
+
|
|
2911
|
+
def MonitorLastUsedDir.set_last to_this # TODO set as private...
|
|
2912
|
+
return if to_this.nil? or to_this == ''
|
|
2913
|
+
if(File.directory?(to_this))
|
|
2914
|
+
to_this_dir = to_this
|
|
2915
|
+
elsif File.directory? File.dirname(to_this)
|
|
2916
|
+
# filename,
|
|
2917
|
+
to_this_dir = File.dirname(to_this)
|
|
2918
|
+
end
|
|
2919
|
+
$arcadia['pers']['last.used.dir'] = File.expand_path(to_this_dir)
|
|
2920
|
+
end
|
|
2921
|
+
|
|
2265
2922
|
end
|
|
2266
2923
|
|
|
2924
|
+
class FocusEventManager
|
|
2925
|
+
def initialize
|
|
2926
|
+
Arcadia.attach_listener(self, FocusEvent)
|
|
2927
|
+
end
|
|
2928
|
+
|
|
2929
|
+
def on_focus(_event)
|
|
2930
|
+
_event.focus_widget=Tk.focus
|
|
2931
|
+
case _event
|
|
2932
|
+
when CutTextEvent
|
|
2933
|
+
do_cut(_event.focus_widget)
|
|
2934
|
+
when CopyTextEvent
|
|
2935
|
+
do_copy(_event.focus_widget)
|
|
2936
|
+
when PasteTextEvent
|
|
2937
|
+
do_paste(_event.focus_widget)
|
|
2938
|
+
end
|
|
2939
|
+
end
|
|
2940
|
+
|
|
2941
|
+
def do_cut(_focused_widget)
|
|
2942
|
+
_focused_widget.text_cut if _focused_widget.respond_to?(:text_cut)
|
|
2943
|
+
end
|
|
2944
|
+
|
|
2945
|
+
def do_copy(_focused_widget)
|
|
2946
|
+
_focused_widget.text_copy if _focused_widget.respond_to?(:text_copy)
|
|
2947
|
+
end
|
|
2267
2948
|
|
|
2949
|
+
def do_paste(_focused_widget)
|
|
2950
|
+
_focused_widget.text_paste if _focused_widget.respond_to?(:text_paste)
|
|
2951
|
+
end
|
|
2952
|
+
|
|
2953
|
+
end
|