arcadia 1.0.0 → 1.1.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.
- checksums.yaml +4 -4
- data/README.md +90 -28
- data/conf/LC/en-UK.LANG +6 -0
- data/conf/LC/ru-RU.LANG +0 -0
- data/conf/arcadia.conf +8 -4
- data/conf/arcadia.res.rb +86 -1
- data/conf/theme-dark.conf +2 -1
- data/ext/ae-breakpoints/ae-breakpoints.rb +1 -1
- data/ext/ae-dir-projects/ae-dir-projects.rb +42 -6
- data/ext/ae-editor/ae-editor.rb +227 -120
- data/ext/ae-editor/langs/coderay.tokens +0 -0
- data/ext/ae-editor/langs/conf.lang +0 -0
- data/ext/ae-editor/langs/css.lang +0 -0
- data/ext/ae-editor/langs/html.lang +0 -0
- data/ext/ae-editor/langs/java.lang +0 -0
- data/ext/ae-editor/langs/python.lang +0 -0
- data/ext/ae-editor/langs/ruby.lang +0 -0
- data/ext/ae-editor/langs/text.lang +0 -0
- data/ext/ae-editor/langs/xml.lang +0 -0
- data/ext/ae-editor/lib/rbeautify.rb +0 -0
- data/ext/ae-file-history/ae-file-history.rb +4 -3
- data/ext/ae-output/ae-output.rb +44 -31
- data/ext/ae-ruby-debug/ae-ruby-debug.conf +3 -2
- data/ext/ae-ruby-debug/ae-ruby-debug.rb +1 -0
- data/ext/ae-search-in-files/ae-search-in-files.rb +3 -3
- data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.conf +0 -0
- data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.rb +0 -0
- data/ext/ae-shell/ae-shell.rb +37 -15
- data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +14 -8
- data/ext/ae-subprocess-inspector/butterfly.res +0 -0
- data/ext/ae-subprocess-inspector/process.res +0 -0
- data/ext/ae-subprocess-inspector/space-invader.res +0 -0
- data/ext/ae-term/ae-term.conf +0 -0
- data/ext/ae-term/ae-term.rb +0 -0
- data/ext/test-shutdown-after-startup/test-shutdown-after-startup.conf +0 -0
- data/ext/test-shutdown-after-startup/test-shutdown-after-startup.rb +0 -0
- data/lib/a-commons.rb +1 -1
- data/lib/a-contracts.rb +13 -3
- data/lib/a-core.rb +612 -142
- data/lib/a-tkcommons.rb +661 -50
- data/lib/anigif.rb +0 -0
- data/lib/iosync.rb +71 -0
- data/tcl/anigif/anigif.tcl +0 -0
- data/tcl/anigif/pkgIndex.tcl +0 -0
- metadata +5 -2
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -93,6 +93,7 @@ class FilesHistrory < ArcadiaExt
|
|
93
93
|
def on_build(_event)
|
94
94
|
@h_stack = Hash.new
|
95
95
|
@h_stack_changed = false
|
96
|
+
#@content_root = Tk::ScrollFrame.new(self.frame.hinner_frame).pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes').baseframe
|
96
97
|
@bookmarks_frame = TkFrame.new(self.frame.hinner_frame)
|
97
98
|
@history_frame = TkFrame.new(self.frame.hinner_frame).pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes')
|
98
99
|
@panel = self.frame.root.add_panel(self.frame.name, "sync");
|
@@ -181,7 +182,7 @@ class FilesHistrory < ArcadiaExt
|
|
181
182
|
_selected = @htree.selected
|
182
183
|
_dir, _file = _selected.sub("%%%",":").split('@@@')
|
183
184
|
if _dir && _file.nil? && File.ftype(node2file(_dir)) == 'directory'
|
184
|
-
_file = Arcadia.
|
185
|
+
_file = Arcadia.select_file_dialog(node2file(_dir))
|
185
186
|
#Tk.getOpenFile('initialdir'=>node2file(_dir))
|
186
187
|
if _file && _file.strip.length > 0
|
187
188
|
Arcadia.process_event(OpenBufferTransientEvent.new(self,'file'=>_file))
|
@@ -209,8 +210,8 @@ class FilesHistrory < ArcadiaExt
|
|
209
210
|
font @font_italic
|
210
211
|
cursor nil
|
211
212
|
}
|
212
|
-
@hlist.bind_append('KeyPress'){
|
213
|
-
@hlist.bind_append('KeyRelease'){
|
213
|
+
@hlist.bind_append('KeyPress'){Tk.callback_break }
|
214
|
+
@hlist.bind_append('KeyRelease'){Tk.callback_break }
|
214
215
|
@hlist.extend(TkScrollableWidget)
|
215
216
|
@hlist.tag_configure("file_selected", 'foreground' => Arcadia.conf('hightlight.link.foreground'))
|
216
217
|
build_list
|
data/ext/ae-output/ae-output.rb
CHANGED
@@ -68,7 +68,7 @@ class OutputView
|
|
68
68
|
'background'=>Arcadia.conf('hightlight.sel.background'),
|
69
69
|
'foreground'=>Arcadia.conf('hightlight.sel.foreground')
|
70
70
|
)
|
71
|
-
@text.bind_append("KeyPress"){|
|
71
|
+
@text.bind_append("KeyPress", "%K"){|_keysym| input(_keysym)}
|
72
72
|
@input_buffer = nil
|
73
73
|
pop_up_menu
|
74
74
|
end
|
@@ -172,7 +172,8 @@ class Output < ArcadiaExt
|
|
172
172
|
attr_reader :main_frame
|
173
173
|
attr_reader :prompt
|
174
174
|
MARKSUF='mark-'
|
175
|
-
PROMPT_SIMBOL='$'
|
175
|
+
# PROMPT_SIMBOL='$'
|
176
|
+
PROMPT_SIMBOL='>'
|
176
177
|
def on_before_build(_event)
|
177
178
|
#ArcadiaContractListener.new(self, MsgContract, :do_msg_event)
|
178
179
|
@tag_seq = 0
|
@@ -308,6 +309,8 @@ class Output < ArcadiaExt
|
|
308
309
|
lines = @main_frame.text.value.to_a[_from_row.._to_row]
|
309
310
|
end
|
310
311
|
|
312
|
+
# p "parso "
|
313
|
+
|
311
314
|
if lines
|
312
315
|
lines.each{|l|
|
313
316
|
_row = _row+1
|
@@ -343,36 +346,46 @@ class Output < ArcadiaExt
|
|
343
346
|
end
|
344
347
|
|
345
348
|
def file_binding(_file, _line, _ibegin, _iend)
|
346
|
-
if
|
347
|
-
|
349
|
+
if defined?(@file_binding)
|
350
|
+
while @file_binding
|
351
|
+
sleep(1)
|
352
|
+
end
|
348
353
|
end
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
@main_frame.
|
354
|
+
@file_binding=true
|
355
|
+
begin
|
356
|
+
if _file == '<<current buffer>>'
|
357
|
+
_file = "*CURR"
|
358
|
+
end
|
359
|
+
_line = '0' if _line.nil? || _line.strip.length == 0
|
360
|
+
tag_name = next_tag_name
|
361
|
+
@main_frame.text.tag_configure(tag_name,
|
362
|
+
'foreground' => Arcadia.conf('hightlight.link.foreground'),
|
363
|
+
'borderwidth'=>0,
|
364
|
+
'relief'=>'flat',
|
365
|
+
'underline'=>true
|
366
|
+
)
|
367
|
+
@main_frame.text.tag_add(tag_name,_ibegin,_iend)
|
368
|
+
#@main_frame.text.tag_bind(tag_name,"Double-ButtonPress-1",
|
369
|
+
@main_frame.text.tag_bind(tag_name,"ButtonPress-1",
|
370
|
+
proc{OpenBufferTransientEvent.new(self,'file'=>_file, 'row'=>_line).go!}
|
371
|
+
# proc{OpenBufferEvent.new(self,'file'=>_file, 'row'=>_line).go!}
|
372
|
+
)
|
373
|
+
@main_frame.text.tag_bind(tag_name,"Enter",
|
374
|
+
proc{@main_frame.text.configure('cursor'=> 'hand2')}
|
375
|
+
)
|
376
|
+
@main_frame.text.tag_bind(tag_name,"Leave",
|
377
|
+
proc{@main_frame.text.configure('cursor'=> @cursor)}
|
378
|
+
)
|
379
|
+
|
380
|
+
if @main_frame.auto_open_file?
|
381
|
+
OpenBufferEvent.new(self,'file'=>_file, 'row'=>_line, 'debug'=>'yes').go!
|
382
|
+
# OpenBufferEvent.new(self,'file'=>_file, 'row'=>_line).go!
|
383
|
+
self.frame.show
|
384
|
+
@main_frame.text.set_focus
|
385
|
+
@main_frame.text.see("end")
|
386
|
+
end
|
387
|
+
ensure
|
388
|
+
@file_binding = false
|
376
389
|
end
|
377
390
|
end
|
378
391
|
|
@@ -4,14 +4,15 @@ name=ruby-debug
|
|
4
4
|
frames=0.0,1.1
|
5
5
|
frames.labels=Debug Inspector,Debug Server
|
6
6
|
frames.names=ruby_debug_inspector,ruby_debug_server
|
7
|
-
active=
|
7
|
+
active=no
|
8
|
+
1.9:@:active=yes
|
8
9
|
require=ext/ae-ruby-debug/ae-ruby-debug
|
9
10
|
class=RubyDebug
|
10
11
|
#gems=ruby-debug,whichr
|
11
12
|
#1.9:@:gems=ruby-debug19,whichr
|
12
13
|
gems=ruby-debug
|
13
14
|
1.9:@:gems=debugger
|
14
|
-
2:@:gems=
|
15
|
+
2:@:gems=
|
15
16
|
#========================================
|
16
17
|
#========================================
|
17
18
|
server.host=localhost
|
@@ -802,6 +802,7 @@ class RubyDebugServer
|
|
802
802
|
def start_session(_debug_event, _host='localhost', _remote_port='8989')
|
803
803
|
_filename = _debug_event.file
|
804
804
|
commandLine = "#{Arcadia.ruby} #{@rdebug_file} --host #{_host} --port #{_remote_port} -sw '#{_filename}'"
|
805
|
+
#commandLine = "#{Arcadia.ruby} -r debug --host #{_host} --port #{_remote_port} -sw '#{_filename}'"
|
805
806
|
#p commandLine
|
806
807
|
begin
|
807
808
|
@alive = true
|
@@ -33,8 +33,8 @@ class SearchInFiles < ArcadiaExt
|
|
33
33
|
@find.b_go.bind('1', proc{update_all_combo;do_find}) # add trigger to button
|
34
34
|
#@find.b_go.bind('1', proc{Thread.new{update_all_combo;do_find}}) # add trigger to button
|
35
35
|
|
36
|
-
enter_proc = proc {|
|
37
|
-
case
|
36
|
+
enter_proc = proc {|_keysym|
|
37
|
+
case _keysym
|
38
38
|
when 'Return'
|
39
39
|
if @find.visible?
|
40
40
|
update_all_combo
|
@@ -46,7 +46,7 @@ class SearchInFiles < ArcadiaExt
|
|
46
46
|
|
47
47
|
#for method in [:e_what_entry, :e_filter_entry, :e_dir_entry] do
|
48
48
|
for method in [:e_what, :e_filter, :e_dir] do
|
49
|
-
@find.send(method).bind_append('KeyPress') {
|
49
|
+
@find.send(method).bind_append('KeyPress', "%K") { |_keysym| enter_proc.call _keysym } # ltodo why can't we pass it in like &enter_proc?
|
50
50
|
end
|
51
51
|
@find.title(title)
|
52
52
|
end
|
File without changes
|
File without changes
|
data/ext/ae-shell/ae-shell.rb
CHANGED
@@ -134,9 +134,25 @@ class Shell < ArcadiaExt
|
|
134
134
|
@@next_number = 0
|
135
135
|
def on_run_cmd(_event)
|
136
136
|
if _event.cmd
|
137
|
-
#p "_event.cmd = #{_event.cmd}"
|
138
137
|
begin
|
138
|
+
if _event.prompt
|
139
|
+
hd_args = {
|
140
|
+
'type'=>'ok_cancel',
|
141
|
+
'msg'=>_event.title,
|
142
|
+
'title' => _event.title,
|
143
|
+
'prompt' => _event.prompt,
|
144
|
+
'level' => 'info'
|
145
|
+
}
|
146
|
+
|
147
|
+
hd_event = HinnerDialogEvent.new(self, hd_args).go!
|
148
|
+
end
|
149
|
+
if _event.file
|
150
|
+
process_name = _event.file
|
151
|
+
else
|
152
|
+
process_name = "#{_event.cmd[0..8]} ..."
|
153
|
+
end
|
139
154
|
output_mark = Arcadia.console(self,'msg'=>"Running #{_event.title} as #{_event.lang}...", 'level'=>'info') # info?
|
155
|
+
output_mark = Arcadia.console(self,'msg'=>_event.cmd, 'level'=>'info', 'mark'=>output_mark)
|
140
156
|
start_time = Time.now
|
141
157
|
@arcadia['pers']['run.file.last']=_event.file if _event.persistent
|
142
158
|
@arcadia['pers']['run.cmd.last']=_event.cmd if _event.persistent
|
@@ -147,6 +163,7 @@ class Shell < ArcadiaExt
|
|
147
163
|
output_file_name = "out_#{@@next_number += 1}_#{Process.pid}.txt"
|
148
164
|
output = File.open(output_file_name, 'wb')
|
149
165
|
child = Process.create :command_line => _event.cmd, :startup_info => {:stdout => output, :stderr => output}
|
166
|
+
RunCmdStartedEvent.new(self, 'parent'=>_event).shot!
|
150
167
|
#----
|
151
168
|
abort_action = proc{
|
152
169
|
Process.kill(9,child.process_id)
|
@@ -154,23 +171,27 @@ class Shell < ArcadiaExt
|
|
154
171
|
alive_check = proc{
|
155
172
|
WMI::Win32_Process.find(:first, :conditions => {:ProcessId => child.process_id})
|
156
173
|
}
|
157
|
-
Arcadia.process_event(SubProcessEvent.new(self,'pid'=>child.process_id, 'name'=>
|
174
|
+
Arcadia.process_event(SubProcessEvent.new(self,'pid'=>child.process_id, 'name'=>process_name,'abort_action'=>abort_action, 'alive_check'=>alive_check))
|
158
175
|
#----
|
159
176
|
timer=nil
|
160
177
|
procy = proc {
|
161
178
|
still_alive = WMI::Win32_Process.find(:first, :conditions => {:ProcessId => child.process_id})
|
162
179
|
if !still_alive #&& File.exists?(output_file_name)
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
180
|
+
begin
|
181
|
+
output.close
|
182
|
+
timer.stop
|
183
|
+
File.open(output_file_name, 'r') do |f|
|
184
|
+
_readed = f.read
|
185
|
+
_readed.strip!
|
186
|
+
|
187
|
+
_readed += "\n" + Arcadia.text('ext.shell.done', [_event.title, Time.now - start_time])
|
188
|
+
output_mark = Arcadia.console(self,'msg'=>_readed, 'level'=>'debug', 'mark'=>output_mark)
|
189
|
+
_event.add_result(self, 'output'=>_readed)
|
190
|
+
end
|
191
|
+
File.delete output_file_name
|
192
|
+
ensure
|
193
|
+
RunCmdEndedEvent.new(self, 'parent'=>_event).shot!
|
172
194
|
end
|
173
|
-
File.delete output_file_name
|
174
195
|
end
|
175
196
|
}
|
176
197
|
|
@@ -189,10 +210,10 @@ class Shell < ArcadiaExt
|
|
189
210
|
Open3.popen3(_cmd_){|stdin, stdout, stderr, th|
|
190
211
|
fi_pid = th.pid if th
|
191
212
|
output_mark = Arcadia.console(self,'msg'=>" [pid #{fi_pid}]", 'level'=>'info', 'mark'=>output_mark, 'append'=>true)
|
213
|
+
RunCmdStartedEvent.new(self, 'parent'=>_event).shot!
|
192
214
|
alive_check = proc{th.status != false}
|
193
|
-
abort_action = proc{Process.kill(9,fi_pid.to_i)}
|
194
|
-
|
195
|
-
Arcadia.process_event(SubProcessEvent.new(self, 'pid'=>fi_pid, 'name'=>_event.file,'abort_action'=>abort_action, 'alive_check'=>alive_check))
|
215
|
+
abort_action = proc{Process.kill(9,fi_pid.to_i); th.exit}
|
216
|
+
Arcadia.process_event(SubProcessEvent.new(self, 'pid'=>fi_pid, 'name'=>process_name, 'abort_action'=>abort_action, 'alive_check'=>alive_check))
|
196
217
|
|
197
218
|
to = Thread.new(stdout) do |tout|
|
198
219
|
begin
|
@@ -200,6 +221,7 @@ class Shell < ArcadiaExt
|
|
200
221
|
output_mark = Arcadia.console(self,'msg'=>line, 'level'=>'debug', 'mark'=>output_mark)
|
201
222
|
_event.add_result(self, 'output'=>line)
|
202
223
|
end
|
224
|
+
RunCmdEndedEvent.new(self, 'parent'=>_event).shot!
|
203
225
|
rescue Exception => e
|
204
226
|
output_mark = Arcadia.console(self,'msg'=>e.to_s, 'level'=>'debug', 'mark'=>output_mark)
|
205
227
|
end
|
@@ -20,7 +20,7 @@ class SubProcessInspector < ArcadiaExt
|
|
20
20
|
def on_exit_query(_event)
|
21
21
|
_event.can_exit=true
|
22
22
|
@processs.each{|pr|
|
23
|
-
if !pr.nil?
|
23
|
+
if !pr.nil? && pr.event.abort_dialog_yes != false
|
24
24
|
message = Arcadia.text("ext.spi.d.exit_query.msg")
|
25
25
|
r=Arcadia.hinner_dialog(self,
|
26
26
|
'type'=>'yes_no',
|
@@ -106,13 +106,19 @@ class SubProcessWidget
|
|
106
106
|
def initialize(_parent=nil, _event=nil, *args)
|
107
107
|
@parent = _parent
|
108
108
|
@event = _event
|
109
|
+
@anigif = _event.anigif.nil? ? "process.res" : _event.anigif
|
110
|
+
abort_dialog_yes = _event.abort_dialog_yes.nil? || _event.abort_dialog_yes == true
|
109
111
|
b_command = proc{
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
112
|
+
if abort_dialog_yes
|
113
|
+
message = Arcadia.text('ext.spi.d.kill.msg', [_event.pid, _event.name])
|
114
|
+
r=Arcadia.hinner_dialog(self,
|
115
|
+
'type'=>'yes_no',
|
116
|
+
'level'=>'warning',
|
117
|
+
'title'=> Arcadia.text('ext.spi.d.kill.title'),
|
118
|
+
'msg'=>message)
|
119
|
+
else
|
120
|
+
r="yes"
|
121
|
+
end
|
116
122
|
if r=="yes"
|
117
123
|
_event.abort_action.call
|
118
124
|
end
|
@@ -131,7 +137,7 @@ class SubProcessWidget
|
|
131
137
|
text l_text
|
132
138
|
pack('side' =>'left', :padx=>2, :pady=>0)
|
133
139
|
}
|
134
|
-
Tk::Anigif.image(@label, "#{Dir.pwd}/ext/ae-subprocess-inspector
|
140
|
+
Tk::Anigif.image(@label, "#{Dir.pwd}/ext/ae-subprocess-inspector/#{@anigif}")
|
135
141
|
|
136
142
|
@button = Arcadia.wf.toolbutton(Arcadia['toolbar'].frame){
|
137
143
|
command b_command
|
Binary file
|
File without changes
|
Binary file
|
data/ext/ae-term/ae-term.conf
CHANGED
File without changes
|
data/ext/ae-term/ae-term.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
data/lib/a-commons.rb
CHANGED
data/lib/a-contracts.rb
CHANGED
@@ -116,7 +116,7 @@ class NewBufferEvent < BufferEvent
|
|
116
116
|
end
|
117
117
|
|
118
118
|
class OpenBufferEvent < BufferEvent
|
119
|
-
attr_accessor :select_index
|
119
|
+
attr_accessor :select_index, :debug
|
120
120
|
end
|
121
121
|
|
122
122
|
class OpenBufferTransientEvent < OpenBufferEvent
|
@@ -182,6 +182,9 @@ end
|
|
182
182
|
class BufferClosedEvent < BufferEvent
|
183
183
|
end
|
184
184
|
|
185
|
+
class DeleteFileBufferEvent < BufferEvent
|
186
|
+
end
|
187
|
+
|
185
188
|
# +---------------------------------------------+
|
186
189
|
# Bookmark event
|
187
190
|
# +---------------------------------------------+
|
@@ -252,7 +255,7 @@ class MsgEvent < ArcadiaEvent
|
|
252
255
|
end
|
253
256
|
|
254
257
|
class SubProcessEvent < ArcadiaEvent
|
255
|
-
attr_accessor :abort_action, :alive_check, :name, :pid, :timeout, :timecheck
|
258
|
+
attr_accessor :abort_action, :alive_check, :name, :pid, :timeout, :timecheck, :abort_dialog_yes, :anigif
|
256
259
|
end
|
257
260
|
|
258
261
|
class SubProcessProgressEvent < SubProcessEvent
|
@@ -313,6 +316,13 @@ class RunCmdEvent < ArcadiaEvent
|
|
313
316
|
attr_accessor :persistent
|
314
317
|
attr_accessor :runner_name
|
315
318
|
attr_accessor :lang
|
319
|
+
attr_accessor :prompt
|
320
|
+
end
|
321
|
+
|
322
|
+
class RunCmdStartedEvent < RunCmdEvent
|
323
|
+
end
|
324
|
+
|
325
|
+
class RunCmdEndedEvent < RunCmdEvent
|
316
326
|
end
|
317
327
|
|
318
328
|
class InputKeyboardQueryEvent < ArcadiaEvent
|
@@ -375,7 +385,7 @@ class DialogEvent < ArcadiaEvent
|
|
375
385
|
class Result < Result
|
376
386
|
attr_accessor :value
|
377
387
|
end
|
378
|
-
attr_accessor :title, :msg, :type, :level, :exception
|
388
|
+
attr_accessor :title, :msg, :type, :level, :exception, :prompt
|
379
389
|
end
|
380
390
|
|
381
391
|
class SystemDialogEvent < DialogEvent
|
data/lib/a-core.rb
CHANGED
@@ -21,12 +21,13 @@ class Arcadia < TkApplication
|
|
21
21
|
attr_reader :wf
|
22
22
|
attr_reader :mf_root
|
23
23
|
attr_reader :localization
|
24
|
+
attr_reader :exts
|
24
25
|
def initialize
|
25
26
|
@initialized=false
|
26
27
|
super(
|
27
28
|
ApplicationParams.new(
|
28
29
|
'arcadia',
|
29
|
-
'1.
|
30
|
+
'1.1.0',
|
30
31
|
'conf/arcadia.conf',
|
31
32
|
'conf/arcadia.pers'
|
32
33
|
)
|
@@ -53,7 +54,7 @@ class Arcadia < TkApplication
|
|
53
54
|
#_title = "Arcadia Ruby ide :: [Platform = #{RUBY_PLATFORM}] [Ruby version = #{RUBY_VERSION}] [TclTk version = #{tcltk_info.level}]"
|
54
55
|
_title = "Arcadia"
|
55
56
|
@root = TkRoot.new(
|
56
|
-
|
57
|
+
'background'=> self['conf']['background']
|
57
58
|
){
|
58
59
|
title _title
|
59
60
|
withdraw
|
@@ -69,12 +70,10 @@ class Arcadia < TkApplication
|
|
69
70
|
@mf_root = Tk::BWidget::MainFrame.new(@root,
|
70
71
|
'background'=> self['conf']['background'],
|
71
72
|
'height'=> 0
|
72
|
-
)
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
'fill'=> 'both',
|
77
|
-
'expand'=> 1
|
73
|
+
).pack(
|
74
|
+
'anchor'=> 'center',
|
75
|
+
'fill'=> 'both',
|
76
|
+
'expand'=> 1
|
78
77
|
)
|
79
78
|
#.place('x'=>0,'y'=>0,'relwidth'=>1,'relheight'=>1)
|
80
79
|
|
@@ -179,6 +178,10 @@ class Arcadia < TkApplication
|
|
179
178
|
# @focus_event_manager = FocusEventManager.new
|
180
179
|
end
|
181
180
|
|
181
|
+
def root_height
|
182
|
+
@root.winfo_height
|
183
|
+
end
|
184
|
+
|
182
185
|
def initialized?
|
183
186
|
@initialized
|
184
187
|
end
|
@@ -662,54 +665,123 @@ class Arcadia < TkApplication
|
|
662
665
|
#@layout.build_invert_menu
|
663
666
|
end
|
664
667
|
|
665
|
-
def
|
666
|
-
|
667
|
-
|
668
|
-
|
668
|
+
def refresh_runners_on_menu(root_menu=nil, _file=nil, _dir=nil)
|
669
|
+
return if root_menu.nil?
|
670
|
+
if !root_menu.index('end').nil?
|
671
|
+
index_end = root_menu.index('end')-1
|
672
|
+
root_menu.delete('0',index_end)
|
673
|
+
end
|
674
|
+
self['runners'].each{|name, run|
|
675
|
+
newrun = {}.update(run)
|
676
|
+
newrun[:file] = _file if !_file.nil?
|
677
|
+
newrun[:dir] = _dir if !_dir.nil?
|
678
|
+
insert_runner_item(root_menu, name, newrun)
|
679
|
+
}
|
680
|
+
end
|
681
|
+
|
682
|
+
def reload_runners
|
669
683
|
mr = Arcadia.menu_root('runcurr')
|
670
684
|
return if mr.nil?
|
685
|
+
self['runners'].clear if self['runners']
|
686
|
+
self['runners_by_ext'].clear if self['runners_by_ext']
|
687
|
+
self['runners_by_lang'].clear if self['runners_by_lang']
|
688
|
+
index_end = mr.index('end')-1
|
689
|
+
mr.delete('0',index_end)
|
690
|
+
load_runners
|
691
|
+
end
|
671
692
|
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
end
|
678
|
-
if run[:lang]
|
679
|
-
self['runners_by_lang'][run[:lang]]=run
|
680
|
-
end
|
681
|
-
if run[:runner] && self['runners'][run[:runner]]
|
682
|
-
run = Hash.new.update(self['runners'][run[:runner]]).update(run)
|
683
|
-
#self['runners'][name]=run
|
684
|
-
end
|
685
|
-
if run[:image]
|
686
|
-
image = Arcadia.image_res(run[:image])
|
687
|
-
else
|
688
|
-
image = Arcadia.file_icon(run[:file_exts])
|
689
|
-
end
|
690
|
-
_run_title = run[:title]
|
691
|
-
run[:title] = nil
|
692
|
-
run[:runner_name] = name
|
693
|
-
_command = proc{
|
694
|
-
_event = Arcadia.process_event(
|
695
|
-
RunCmdEvent.new(self, run)
|
696
|
-
)
|
693
|
+
def insert_runner_item(root_menu=nil, name, run)
|
694
|
+
return if root_menu.nil?
|
695
|
+
if run[:file_exts]
|
696
|
+
run[:file_exts].split(',').each{|ext|
|
697
|
+
self['runners_by_ext'][ext.strip.sub('.','')]=run
|
697
698
|
}
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
699
|
+
end
|
700
|
+
if run[:lang]
|
701
|
+
self['runners_by_lang'][run[:lang]]=run
|
702
|
+
end
|
703
|
+
if run[:runner] && self['runners'][run[:runner]]
|
704
|
+
run = Hash.new.update(self['runners'][run[:runner]]).update(run)
|
705
|
+
#self['runners'][name]=run
|
706
|
+
end
|
707
|
+
if run[:image]
|
708
|
+
image = Arcadia.image_res(run[:image])
|
709
|
+
else
|
710
|
+
image = Arcadia.file_icon(run[:file_exts])
|
711
|
+
end
|
712
|
+
_run_title = run[:title]
|
713
|
+
#run[:title] = nil
|
714
|
+
run[:runner_name] = name
|
715
|
+
_command = proc{
|
716
|
+
_event = Arcadia.process_event(
|
717
|
+
RunCmdEvent.new(self, run)
|
718
|
+
)
|
712
719
|
}
|
720
|
+
if run[:pos]
|
721
|
+
pos = run[:pos]
|
722
|
+
else
|
723
|
+
pos = '0'
|
724
|
+
end
|
725
|
+
args = {
|
726
|
+
:image => image,
|
727
|
+
:label => _run_title,
|
728
|
+
:compound => 'left',
|
729
|
+
:command => _command
|
730
|
+
}
|
731
|
+
args[:font] = Arcadia.conf('menu.font') #if !OS.mac?
|
732
|
+
|
733
|
+
root_menu.insert(pos, :command , args)
|
734
|
+
end
|
735
|
+
|
736
|
+
|
737
|
+
def load_runners
|
738
|
+
self['runners'] = Hash.new if self['runners'].nil?
|
739
|
+
self['runners_by_ext'] = Hash.new if self['runners_by_ext'].nil?
|
740
|
+
self['runners_by_lang'] = Hash.new if self['runners_by_lang'].nil?
|
741
|
+
mr = Arcadia.menu_root('runcurr')
|
742
|
+
return if mr.nil?
|
743
|
+
|
744
|
+
# insert_runner_item = proc{|name, run|
|
745
|
+
# if run[:file_exts]
|
746
|
+
# run[:file_exts].split(',').each{|ext|
|
747
|
+
# self['runners_by_ext'][ext.strip.sub('.','')]=run
|
748
|
+
# }
|
749
|
+
# end
|
750
|
+
# if run[:lang]
|
751
|
+
# self['runners_by_lang'][run[:lang]]=run
|
752
|
+
# end
|
753
|
+
# if run[:runner] && self['runners'][run[:runner]]
|
754
|
+
# run = Hash.new.update(self['runners'][run[:runner]]).update(run)
|
755
|
+
# #self['runners'][name]=run
|
756
|
+
# end
|
757
|
+
# if run[:image]
|
758
|
+
# image = Arcadia.image_res(run[:image])
|
759
|
+
# else
|
760
|
+
# image = Arcadia.file_icon(run[:file_exts])
|
761
|
+
# end
|
762
|
+
# _run_title = run[:title]
|
763
|
+
# #run[:title] = nil
|
764
|
+
# run[:runner_name] = name
|
765
|
+
# _command = proc{
|
766
|
+
# _event = Arcadia.process_event(
|
767
|
+
# RunCmdEvent.new(self, run)
|
768
|
+
# )
|
769
|
+
# }
|
770
|
+
# if run[:pos]
|
771
|
+
# pos = run[:pos]
|
772
|
+
# else
|
773
|
+
# pos = '0'
|
774
|
+
# end
|
775
|
+
# args = {
|
776
|
+
# :image => image,
|
777
|
+
# :label => _run_title,
|
778
|
+
# :compound => 'left',
|
779
|
+
# :command => _command
|
780
|
+
# }
|
781
|
+
# args[:font] = Arcadia.conf('menu.font') #if !OS.mac?
|
782
|
+
#
|
783
|
+
# mr.insert(pos, :command , args)
|
784
|
+
# }
|
713
785
|
|
714
786
|
insert_runner_instance_item = proc{|name, run|
|
715
787
|
if run[:runner] && self['runners'][run[:runner]]
|
@@ -741,7 +813,7 @@ class Arcadia < TkApplication
|
|
741
813
|
}
|
742
814
|
|
743
815
|
#conf runner
|
744
|
-
runs=Arcadia.conf_group('runners')
|
816
|
+
runs=Arcadia.conf_group('runners', true)
|
745
817
|
mr.insert('0', :separator) if runs && !runs.empty?
|
746
818
|
|
747
819
|
runs.each{|name, hash_string|
|
@@ -749,19 +821,21 @@ class Arcadia < TkApplication
|
|
749
821
|
}
|
750
822
|
|
751
823
|
self['runners'].each{|name, run|
|
752
|
-
insert_runner_item.call(name, run)
|
824
|
+
#insert_runner_item.call(name, run)
|
825
|
+
insert_runner_item(mr, name, run)
|
753
826
|
}
|
754
827
|
|
755
828
|
|
756
829
|
#conf exts runner
|
757
830
|
@exts.each{|ext|
|
758
831
|
if ext_active?(ext)
|
759
|
-
ext_runs=Arcadia.conf_group("#{ext}.runners")
|
832
|
+
ext_runs=Arcadia.conf_group("#{ext}.runners", true)
|
760
833
|
mr.insert(self['runners'].count, :separator) if ext_runs && !ext_runs.empty?
|
761
834
|
ext_runs.each{|name, hash_string|
|
762
835
|
self['runners'][name]=eval hash_string
|
763
836
|
self['runners'][name][:pos]=self['runners'].count
|
764
|
-
insert_runner_item.call(name, self['runners'][name])
|
837
|
+
#insert_runner_item.call(name, self['runners'][name])
|
838
|
+
insert_runner_item(mr, name, self['runners'][name])
|
765
839
|
}
|
766
840
|
end
|
767
841
|
}
|
@@ -769,7 +843,7 @@ class Arcadia < TkApplication
|
|
769
843
|
|
770
844
|
|
771
845
|
# pers runner instance
|
772
|
-
runs=Arcadia.pers_group('runners')
|
846
|
+
runs=Arcadia.pers_group('runners', true)
|
773
847
|
mr.insert('0', :separator) if runs && !runs.empty?
|
774
848
|
pers_runner = Hash.new
|
775
849
|
runs.each{|name, hash_string|
|
@@ -786,12 +860,16 @@ class Arcadia < TkApplication
|
|
786
860
|
end
|
787
861
|
|
788
862
|
def manage_runners
|
789
|
-
if !@runm
|
863
|
+
if !@runm || @runm.nil?
|
790
864
|
@runm = RunnerManager.new(Arcadia.layout.root)
|
791
|
-
@runm.on_close=proc{@runm
|
865
|
+
@runm.on_close=proc{@runm = nil}
|
866
|
+
@runm.clear_items
|
867
|
+
@runm.load_tips
|
868
|
+
@runm.load_items(:runtime)
|
869
|
+
@runm.load_items(:config)
|
792
870
|
end
|
793
|
-
|
794
|
-
|
871
|
+
#@runm.show
|
872
|
+
#@runm.load_items
|
795
873
|
end
|
796
874
|
|
797
875
|
def register_key_binding(_self_target, k, v)
|
@@ -802,8 +880,8 @@ class Arcadia < TkApplication
|
|
802
880
|
if key_dits[1]
|
803
881
|
key_sym=key_dits[1][0..-2]
|
804
882
|
end
|
805
|
-
@root.bind_append(key_event){|
|
806
|
-
if key_sym ==
|
883
|
+
@root.bind_append(key_event, "%K"){|_keysym|
|
884
|
+
if key_sym == _keysym
|
807
885
|
Arcadia.process_event(_self_target.instance_eval(value))
|
808
886
|
end
|
809
887
|
}
|
@@ -897,6 +975,8 @@ class Arcadia < TkApplication
|
|
897
975
|
'title' => Arcadia.text("main.d.confirm_exit.title"),
|
898
976
|
'level' => 'question')=='yes')
|
899
977
|
if q1 && can_exit?
|
978
|
+
@root.geometry('1x1-1-1')
|
979
|
+
#ArcadiaAboutSplash.new.deiconify
|
900
980
|
do_finalize
|
901
981
|
@root.destroy
|
902
982
|
# Tk.mainloop_exist?
|
@@ -1106,6 +1186,10 @@ class Arcadia < TkApplication
|
|
1106
1186
|
Configurable.properties_group(_path, Arcadia.instance['conf'], 'conf', _refresh)
|
1107
1187
|
end
|
1108
1188
|
|
1189
|
+
def Arcadia.conf_group_without_local(_path, _refresh=false)
|
1190
|
+
Configurable.properties_group(_path, Arcadia.instance['conf_without_local'], 'conf_without_local', _refresh)
|
1191
|
+
end
|
1192
|
+
|
1109
1193
|
def Arcadia.conf_group_copy(_path_source, _path_target, _suff = 'conf')
|
1110
1194
|
_target = conf_group(_path_source)
|
1111
1195
|
_postfix = _path_target.sub(_path_source,"")
|
@@ -1172,12 +1256,12 @@ class Arcadia < TkApplication
|
|
1172
1256
|
Tk.getOpenFile 'initialdir' => MonitorLastUsedDir.get_last_dir
|
1173
1257
|
end
|
1174
1258
|
|
1175
|
-
def Arcadia.
|
1176
|
-
HinnerFileDialog.new.file(_initial_dir)
|
1259
|
+
def Arcadia.select_file_dialog(_initial_dir=MonitorLastUsedDir.get_last_dir, _label=nil)
|
1260
|
+
HinnerFileDialog.new(HinnerFileDialog::SELECT_FILE_MODE, nil, _label).file(_initial_dir)
|
1177
1261
|
end
|
1178
1262
|
|
1179
|
-
def Arcadia.select_dir_dialog(_initial_dir=MonitorLastUsedDir.get_last_dir, must_exist = nil)
|
1180
|
-
HinnerFileDialog.new(HinnerFileDialog::SELECT_DIR_MODE, must_exist).dir(_initial_dir)
|
1263
|
+
def Arcadia.select_dir_dialog(_initial_dir=MonitorLastUsedDir.get_last_dir, must_exist = nil, _label=nil)
|
1264
|
+
HinnerFileDialog.new(HinnerFileDialog::SELECT_DIR_MODE, must_exist, _label).dir(_initial_dir)
|
1181
1265
|
end
|
1182
1266
|
|
1183
1267
|
def Arcadia.save_file_dialog(_initial_dir=MonitorLastUsedDir.get_last_dir)
|
@@ -1196,6 +1280,10 @@ class Arcadia < TkApplication
|
|
1196
1280
|
end
|
1197
1281
|
end
|
1198
1282
|
|
1283
|
+
def Arcadia.open_string_dialog(_label=nil)
|
1284
|
+
HinnerStringDialog.new(_label).string
|
1285
|
+
end
|
1286
|
+
|
1199
1287
|
def Arcadia.is_windows?
|
1200
1288
|
OS.windows?
|
1201
1289
|
#RUBY_PLATFORM =~ /mingw|mswin/
|
@@ -1360,6 +1448,12 @@ class Arcadia < TkApplication
|
|
1360
1448
|
end
|
1361
1449
|
end
|
1362
1450
|
|
1451
|
+
def Arcadia.extensions
|
1452
|
+
if @@instance && @@instance.exts
|
1453
|
+
return @@instance.exts
|
1454
|
+
end
|
1455
|
+
end
|
1456
|
+
|
1363
1457
|
def Arcadia.runtime_error(_e, _title=Arcadia.text("main.e.runtime.title"))
|
1364
1458
|
ArcadiaProblemEvent.new(self, "type"=>ArcadiaProblemEvent::RUNTIME_ERROR_TYPE,"title"=>"#{_title} : [#{_e.class}] #{_e.message} at :", "detail"=>_e.backtrace).go!
|
1365
1459
|
end
|
@@ -1707,26 +1801,104 @@ class ArcadiaMainMenu < ArcadiaUserControl
|
|
1707
1801
|
|
1708
1802
|
end
|
1709
1803
|
|
1710
|
-
class RunnerManager < TkFloatTitledFrame
|
1711
|
-
|
1712
|
-
|
1713
|
-
|
1804
|
+
#class RunnerManager < TkFloatTitledFrame
|
1805
|
+
class RunnerManager < HinnerSplittedDialogTitled
|
1806
|
+
ROW_GAP = 25
|
1807
|
+
attr_reader :ext_width, :name_width, :title_width, :cmd_width
|
1808
|
+
class RunnerMangerItem # < TkFrame
|
1809
|
+
attr_reader :runner_hash , :readonly
|
1810
|
+
def initialize(_runner_manager, _parent=nil, _runner_hash=nil, _row=0, _state_array=nil, *args)
|
1811
|
+
#super(_parent, Arcadia.style('panel'))
|
1714
1812
|
@runner_hash = _runner_hash
|
1715
|
-
|
1716
|
-
|
1717
|
-
|
1718
|
-
|
1719
|
-
|
1720
|
-
|
1721
|
-
|
1722
|
-
|
1723
|
-
|
1813
|
+
@readonly = _state_array && _state_array.include?(:disabled)
|
1814
|
+
@enable_close_button = !@readonly || _runner_hash[:origin] == 'runtime'
|
1815
|
+
|
1816
|
+
@h_hash = {}
|
1817
|
+
|
1818
|
+
p_update_height = proc{|tktext|
|
1819
|
+
index = tktext.index('end -1 chars')
|
1820
|
+
r,c = index.split('.')
|
1821
|
+
if tktext.cget('wrap') != 'none'
|
1822
|
+
w = tktext.width
|
1823
|
+
h = ((c.to_i-1)/w.to_i).round + 1
|
1824
|
+
else
|
1825
|
+
h = r.to_i
|
1826
|
+
end
|
1827
|
+
h_to_set = h
|
1828
|
+
@h_hash.each{|k,v| h_to_set = v if k != tktext && v > h_to_set }
|
1829
|
+
@h_hash[tktext] = h
|
1830
|
+
if tktext.height != h_to_set
|
1831
|
+
tktext.height(h_to_set)
|
1832
|
+
@h_hash.each{|k,v|
|
1833
|
+
p_update_height.call(k) if k != tktext
|
1834
|
+
}
|
1835
|
+
|
1836
|
+
end
|
1837
|
+
}
|
1838
|
+
|
1839
|
+
row_fill = false
|
1840
|
+
|
1841
|
+
# ICON
|
1842
|
+
@ttklicon = Arcadia.wf.label(_parent,
|
1843
|
+
'image'=> _runner_hash[:image].nil? ? Arcadia.file_icon(_runner_hash[:file_exts]) : Arcadia.image_res(_runner_hash[:image]) ,
|
1844
|
+
'relief'=>'flat').grid(:column => 0, :row => _row, :sticky => "W", :padx=>1, :pady=>1)
|
1845
|
+
@ttklicon.state(:disabled) if @readonly
|
1846
|
+
|
1847
|
+
# NAME
|
1848
|
+
@ename_old = _runner_hash[:name]
|
1849
|
+
@ttkename = Arcadia.wf.text(_parent, 'width' => _runner_manager.name_width,
|
1850
|
+
"height" => 1).hint(_runner_hash[:file]).grid(:column => 1, :row => _row, :sticky => "WE", :padx=>1, :pady=>1)
|
1851
|
+
@ttkename.insert('end', _runner_hash[:name])
|
1852
|
+
@ttkename.state(:disabled) && @ttkename.fg('darkgray') if @readonly
|
1853
|
+
|
1854
|
+
row_fill = row_fill || @ttkename.value.strip.length > 0
|
1855
|
+
|
1856
|
+
# TITLE
|
1857
|
+
@etitle_old = _runner_hash[:title]
|
1858
|
+
@ttketitle = Arcadia.wf.text(_parent, 'width' => _runner_manager.title_width,
|
1859
|
+
"height" => 1).hint(_runner_hash[:file]).grid(:column => 2, :row => _row, :sticky => "WE", :padx=>1, :pady=>1)
|
1860
|
+
@ttketitle.insert('end', _runner_hash[:title])
|
1861
|
+
@ttketitle.state(:disabled) && @ttketitle.fg('darkgray') if @readonly
|
1862
|
+
|
1863
|
+
row_fill = row_fill || @ttketitle.value.strip.length > 0
|
1864
|
+
|
1865
|
+
# CMD
|
1866
|
+
@ecmd_old = _runner_hash[:cmd]
|
1867
|
+
@ttkecmd = Arcadia.wf.text(_parent, 'width' => _runner_manager.cmd_width, 'wrap'=>'word',
|
1868
|
+
"height" => 1).grid(:column => 3, :row => _row, :sticky => "WE", :padx=>1, :pady=>1)
|
1869
|
+
@ttkecmd.insert('end', _runner_hash[:cmd])
|
1870
|
+
@ttkecmd.state(:disabled) && @ttkecmd.fg('darkgray') if @readonly
|
1871
|
+
|
1872
|
+
row_fill = row_fill || @ttkecmd.value.strip.length > 0
|
1873
|
+
|
1874
|
+
# FILE EXTS
|
1875
|
+
@eexts_old = _runner_hash[:file_exts]
|
1876
|
+
@ttkeexts = Arcadia.wf.text(_parent, 'width' => _runner_manager.ext_width,
|
1877
|
+
"height" => 1).grid(:column => 4, :row => _row, :sticky => "WE", :padx=>1, :pady=>1)
|
1878
|
+
@ttkeexts.insert('end', _runner_hash[:file_exts])
|
1879
|
+
@ttkeexts.state(:disabled) && @ttkeexts.fg('darkgray') if @readonly
|
1880
|
+
|
1881
|
+
row_fill = row_fill || @ttkeexts.value.strip.length > 0
|
1882
|
+
|
1883
|
+
# COPY BUTTON
|
1884
|
+
copy_command = proc{ _runner_manager.do_add(self) }
|
1885
|
+
@ttkbcopy = Arcadia.wf.toolbutton(_parent,
|
1886
|
+
'command'=> copy_command,
|
1887
|
+
'image'=> Arcadia.image_res(COPY_GIF)
|
1888
|
+
).grid(:column => 5, :row => _row, :sticky => "W", :padx=>1, :pady=>1)
|
1889
|
+
|
1890
|
+
# DELETE BUTTON
|
1891
|
+
close_command = proc{
|
1724
1892
|
if (Arcadia.hinner_dialog(self, 'type'=>'yes_no',
|
1725
1893
|
'msg'=> Arcadia.text("main.d.confirm_delete_runner.msg", [_runner_hash[:name]]),
|
1726
1894
|
'title' => Arcadia.text("main.d.confirm_delete_runner.title"),
|
1727
1895
|
'level' => 'question')=='yes')
|
1728
1896
|
|
1729
|
-
|
1897
|
+
if _runner_hash[:origin] == 'runtime'
|
1898
|
+
Arcadia.unpersistent("runners.#{_runner_hash[:name]}")
|
1899
|
+
else
|
1900
|
+
Arcadia.del_conf("runners.#{_runner_hash[:name]}")
|
1901
|
+
end
|
1730
1902
|
mr = Arcadia.menu_root('runcurr')
|
1731
1903
|
index_to_delete = -1
|
1732
1904
|
i_end = mr.index('end')
|
@@ -1745,47 +1917,334 @@ class RunnerManager < TkFloatTitledFrame
|
|
1745
1917
|
if index_to_delete > -1
|
1746
1918
|
mr.delete(index_to_delete)
|
1747
1919
|
end
|
1920
|
+
_runner_manager.do_delete_item(self)
|
1748
1921
|
self.destroy
|
1749
1922
|
end
|
1750
1923
|
}
|
1751
|
-
|
1752
|
-
|
1753
|
-
'
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1924
|
+
@ttkbclose = Arcadia.wf.toolbutton(_parent,
|
1925
|
+
'command'=> close_command,
|
1926
|
+
'image'=> Arcadia.image_res(CLOSE_FRAME_GIF)
|
1927
|
+
).grid(:column => 6, :row => _row, :sticky => "W", :padx=>1, :pady=>1)
|
1928
|
+
@ttkbclose.hint=@runner_hash[:file]
|
1929
|
+
@ttkbclose.state(:disabled) if !@enable_close_button
|
1930
|
+
|
1931
|
+
[@ttkename, @ttketitle, @ttkecmd, @ttkeexts].each{|tktext|
|
1932
|
+
p_update_height.call(tktext) if row_fill
|
1933
|
+
tktext.bind_append("KeyRelease"){p_update_height.call(tktext)}
|
1934
|
+
}
|
1935
|
+
|
1936
|
+
end
|
1937
|
+
|
1938
|
+
def destroy
|
1939
|
+
@ttklicon.destroy
|
1940
|
+
@ttkename.destroy
|
1941
|
+
@ttketitle.destroy
|
1942
|
+
@ttkecmd.destroy
|
1943
|
+
@ttkeexts.destroy
|
1944
|
+
@ttkbcopy.destroy
|
1945
|
+
@ttkbclose.destroy
|
1946
|
+
end
|
1947
|
+
|
1948
|
+
def hash_value
|
1949
|
+
ret = {}
|
1950
|
+
ret[:name]=@ttkename.value
|
1951
|
+
ret[:title]=@ttketitle.value
|
1952
|
+
ret[:cmd]=@ttkecmd.value
|
1953
|
+
ret[:file_exts]=@ttkeexts.value
|
1954
|
+
ret[:image]=@runner_hash[:image] if @runner_hash[:image]
|
1955
|
+
ret
|
1956
|
+
end
|
1957
|
+
|
1958
|
+
def name_change?
|
1959
|
+
@ename_old != @ttkename.value
|
1960
|
+
end
|
1961
|
+
|
1962
|
+
def title_change?
|
1963
|
+
@etitle_old != @ttketitle.value
|
1964
|
+
end
|
1760
1965
|
|
1761
|
-
|
1966
|
+
def cmd_change?
|
1967
|
+
@ecmd_old != @ttkecmd.value
|
1762
1968
|
end
|
1763
1969
|
|
1970
|
+
def exts_change?
|
1971
|
+
@eexts_old != @ttkeexts.value
|
1972
|
+
end
|
1973
|
+
|
1974
|
+
def change?
|
1975
|
+
title_change? || cmd_change? || exts_change? || exts_change? || name_change?
|
1976
|
+
end
|
1977
|
+
|
1978
|
+
def reset_change
|
1979
|
+
@ename_old = @ttkename.value
|
1980
|
+
@etitle_old = @ttketitle.value
|
1981
|
+
@ecmd_old = @ttkecmd.value
|
1982
|
+
@eexts_old = @ttkeexts.value
|
1983
|
+
end
|
1764
1984
|
end
|
1765
1985
|
|
1766
1986
|
def initialize(_parent)
|
1767
|
-
super(
|
1768
|
-
|
1987
|
+
super("Runners manager")
|
1988
|
+
@addb = @titled_frame.add_fixed_button('[Add Runner]',proc{do_add})
|
1989
|
+
@saveb = @titled_frame.add_fixed_button('[Save]',proc{do_save})
|
1990
|
+
|
1769
1991
|
@items = Hash.new
|
1770
|
-
|
1992
|
+
@content = Hash.new
|
1993
|
+
@content_root = Tk::ScrollFrame.new(self.hinner_frame).place('x'=>0, 'y'=>0, 'relheight'=>1, 'relwidth'=>1)
|
1994
|
+
@content_root_frame = @content_root.baseframe
|
1995
|
+
|
1996
|
+
#screen_width = TkWinfo.vrootwidth(self.hinner_frame) - 140
|
1997
|
+
#char_width = 8
|
1998
|
+
|
1999
|
+
font_metrics = TkFont.new(Arcadia.conf('edit.font')).metrics
|
2000
|
+
screen_width = TkWinfo.vrootwidth(self.hinner_frame) - 140
|
2001
|
+
font_metrics_hash = {}
|
2002
|
+
font_metrics.each{|a| font_metrics_hash[a[0]] = a[1] }
|
2003
|
+
char_width = font_metrics_hash["ascent"] - font_metrics_hash["descent"] - 1
|
2004
|
+
|
2005
|
+
screen_width_in_chars = screen_width.to_f/char_width
|
2006
|
+
|
2007
|
+
#proporzioni
|
2008
|
+
ext_part = 1
|
2009
|
+
name_part = 3
|
2010
|
+
title_part = 4
|
2011
|
+
cmd_part = 8
|
2012
|
+
tot_part = ext_part+name_part+title_part+cmd_part
|
2013
|
+
one_part = screen_width_in_chars/tot_part
|
2014
|
+
|
2015
|
+
@ext_width = (one_part*ext_part).round
|
2016
|
+
@name_width = (one_part*name_part).round
|
2017
|
+
@title_width = (one_part*title_part).round
|
2018
|
+
@cmd_width = (one_part*cmd_part).round
|
2019
|
+
|
2020
|
+
end
|
2021
|
+
|
2022
|
+
def do_close
|
2023
|
+
if something_has_changed?
|
2024
|
+
if Arcadia.dialog(self,
|
2025
|
+
'type'=>'yes_no',
|
2026
|
+
'msg'=> Arcadia.text("main.d.confirm_exit_runners_manager.msg"),
|
2027
|
+
'title' => Arcadia.text("main.d.confirm_exit_runners_manager.title"),
|
2028
|
+
'level' => 'question')!='yes'
|
2029
|
+
return
|
2030
|
+
end
|
2031
|
+
end
|
2032
|
+
super()
|
1771
2033
|
end
|
1772
2034
|
|
1773
|
-
def
|
1774
|
-
|
1775
|
-
|
2035
|
+
def do_add(_runner_from=nil)
|
2036
|
+
if _runner_from
|
2037
|
+
runner_hash = _runner_from.hash_value
|
2038
|
+
runner_hash[:name]="copy of #{runner_hash[:name]}"
|
2039
|
+
else
|
2040
|
+
runner_hash = {}
|
2041
|
+
end
|
2042
|
+
@items[:config]["item#{@items[:config].count}"]=RunnerMangerItem.new(self, @content[:config], runner_hash, @items[:config].count+1)
|
2043
|
+
# @content[:config].pack
|
2044
|
+
# root_height = Arcadia.instance.root_height
|
2045
|
+
#
|
2046
|
+
# self.height(self.height + ROW_GAP) if self.height < root_height
|
2047
|
+
add_gap
|
2048
|
+
@content_root.yview_moveto('1.0')
|
2049
|
+
end
|
2050
|
+
|
2051
|
+
def add_gap
|
2052
|
+
#p @content_root.y_scrolled?
|
2053
|
+
root_height = Arcadia.instance.root_height
|
2054
|
+
if self.height < root_height/2
|
2055
|
+
self.height(self.height + ROW_GAP)
|
2056
|
+
@content_root.vscroll(true) if !@content_root.y_scrolled?
|
2057
|
+
end
|
2058
|
+
end
|
2059
|
+
|
2060
|
+
def del_gap
|
2061
|
+
self.height(self.height - ROW_GAP)
|
2062
|
+
end
|
2063
|
+
|
2064
|
+
def do_delete_item(_item, _tyme=:config)
|
2065
|
+
@items[:config].delete_if{|k,v| v == _item}
|
2066
|
+
del_gap
|
2067
|
+
#self.height(self.height - ROW_GAP)
|
1776
2068
|
end
|
1777
2069
|
|
1778
|
-
def
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
2070
|
+
def something_has_changed?
|
2071
|
+
ret = false
|
2072
|
+
@items.each_value{|i|
|
2073
|
+
i.each_value{|j|
|
2074
|
+
ret = ret || (!j.readonly && j.change?)
|
2075
|
+
break if ret
|
2076
|
+
}
|
2077
|
+
break if ret
|
2078
|
+
}
|
2079
|
+
ret
|
2080
|
+
end
|
2081
|
+
|
2082
|
+
def do_save
|
2083
|
+
items_saved = []
|
2084
|
+
@items.each_value{|i|
|
2085
|
+
i.each_value{|j|
|
2086
|
+
if !j.readonly && j.change?
|
2087
|
+
jhash = j.hash_value
|
2088
|
+
name = jhash[:name].gsub(" ", "_")
|
2089
|
+
Arcadia.conf("runners.#{name}", jhash.to_s)
|
2090
|
+
j.reset_change
|
2091
|
+
items_saved << name
|
2092
|
+
end
|
2093
|
+
}
|
2094
|
+
}
|
2095
|
+
Arcadia.instance.update_local_config
|
2096
|
+
Arcadia.instance.reload_runners
|
2097
|
+
if items_saved.count >0
|
2098
|
+
Arcadia.dialog(self,
|
2099
|
+
'type'=>'ok',
|
2100
|
+
'title' => "Save info",
|
2101
|
+
'msg'=>"Saved #{items_saved.to_s}!",
|
2102
|
+
'level'=>'info')
|
2103
|
+
else
|
2104
|
+
Arcadia.dialog(self,
|
2105
|
+
'type'=>'ok',
|
2106
|
+
'title' => "Save info",
|
2107
|
+
'msg'=>"Nothing done!",
|
2108
|
+
'level'=>'info')
|
2109
|
+
end
|
2110
|
+
end
|
2111
|
+
|
2112
|
+
def clear_items
|
2113
|
+
@items.each_value{|i|
|
2114
|
+
i.each_value{|j| j.destroy }
|
2115
|
+
i.clear
|
2116
|
+
}
|
2117
|
+
#@items.clear
|
2118
|
+
end
|
2119
|
+
|
2120
|
+
def load_tips
|
2121
|
+
# Runners keywords related the current file => <<FILE>>, <<DIR>>, <<FILE_BASENAME>>, <<FILE_BASENAME_WITHOUT_EXT>>, <<INPUT>>, <<INPUT_FILE>>
|
2122
|
+
# INPUT is required to user
|
2123
|
+
text = Arcadia.wf.text(@content_root_frame,
|
2124
|
+
"height" => 2,
|
2125
|
+
"bg" => '#009999'
|
2126
|
+
)
|
2127
|
+
text.pack('side' =>'top','anchor'=>'nw','fill'=>'x','padx'=>5, 'pady'=>5)
|
2128
|
+
text.insert("end", "Keywords => <<RUBY>>, <<FILE>>, <<DIR>>, <<FILE_BASENAME>>, <<FILE_BASENAME_WITHOUT_EXT>>, <<INPUT_FILE>>, <<INPUT_DIR>>, <<INPUT_STRING>>")
|
2129
|
+
add_gap
|
2130
|
+
#self.height(self.height + ROW_GAP)
|
2131
|
+
end
|
2132
|
+
|
2133
|
+
def load_titles(_content)
|
2134
|
+
bg = Arcadia.conf("titlelabel.background")
|
2135
|
+
fg = Arcadia.conf("titlelabel.foreground")
|
2136
|
+
# # ICON
|
2137
|
+
# Arcadia.wf.label(_content,
|
2138
|
+
# 'text'=> "" ,
|
2139
|
+
# 'background'=> bg,
|
2140
|
+
# 'relief'=>'flat').grid(:column => 0, :row => 0, :sticky => "WE", :padx=>1, :pady=>1)
|
2141
|
+
|
2142
|
+
# NAME
|
2143
|
+
Arcadia.wf.label(_content,
|
2144
|
+
'text'=> "Name",
|
2145
|
+
'background'=> bg,
|
2146
|
+
'foreground'=> fg,
|
2147
|
+
'relief'=>'flat').grid(:column => 1, :row => 0, :sticky => "WE", :padx=>1, :pady=>1)
|
2148
|
+
|
2149
|
+
|
2150
|
+
# TITLE
|
2151
|
+
Arcadia.wf.label(_content,
|
2152
|
+
'text'=> "Title" ,
|
2153
|
+
'background'=> bg,
|
2154
|
+
'foreground'=> fg,
|
2155
|
+
'relief'=>'flat').grid(:column => 2, :row => 0, :sticky => "WE", :padx=>1, :pady=>1)
|
2156
|
+
|
2157
|
+
# CMD
|
2158
|
+
Arcadia.wf.label(_content,
|
2159
|
+
'text'=> "CMD" ,
|
2160
|
+
'background'=> bg,
|
2161
|
+
'foreground'=> fg,
|
2162
|
+
'relief'=>'flat').grid(:column => 3, :row => 0, :sticky => "WE", :padx=>1, :pady=>1)
|
2163
|
+
|
2164
|
+
# FILE EXTS
|
2165
|
+
Arcadia.wf.label(_content,
|
2166
|
+
'text'=> "Exts" ,
|
2167
|
+
'background'=> bg,
|
2168
|
+
'foreground'=> fg,
|
2169
|
+
'relief'=>'flat').grid(:column => 4, :row => 0, :sticky => "WE", :padx=>1, :pady=>1)
|
2170
|
+
end
|
2171
|
+
|
2172
|
+
def load_items(_kind = :runtime)
|
2173
|
+
items = @items[_kind]
|
2174
|
+
if items.nil?
|
2175
|
+
items = @items[_kind] = Hash.new
|
2176
|
+
end
|
2177
|
+
if _kind == :runtime
|
2178
|
+
runs_pers=Arcadia.pers_group('runners', true)
|
2179
|
+
runs = {}
|
2180
|
+
runs_pers.each{|k, v|
|
2181
|
+
runs[k]="#{v}|||runtime"
|
2182
|
+
}
|
2183
|
+
elsif _kind == :config
|
2184
|
+
runs_with_local=Arcadia.conf_group('runners', true)
|
2185
|
+
runs_without_local = Arcadia.conf_group_without_local('runners', false)
|
2186
|
+
runs = {}
|
2187
|
+
|
2188
|
+
# loading extensions runners
|
2189
|
+
Arcadia.extensions.each{|ext|
|
2190
|
+
ext_runs = Arcadia.conf_group("#{ext}.runners", true)
|
2191
|
+
if ext_runs && !ext_runs.empty?
|
2192
|
+
ext_runs_enanched = {}
|
2193
|
+
ext_runs.each{|k, v|
|
2194
|
+
ext_runs_enanched[k]="#{v}|||#{ext}"
|
2195
|
+
}
|
2196
|
+
runs.update(ext_runs_enanched)
|
2197
|
+
end
|
2198
|
+
}
|
2199
|
+
|
2200
|
+
# loading main runners
|
2201
|
+
runs_with_local.each{|k,v|
|
2202
|
+
if runs_without_local.include?(k)
|
2203
|
+
runs[k]="#{v}|||main"
|
2204
|
+
else
|
2205
|
+
runs[k]=v
|
2206
|
+
end
|
2207
|
+
}
|
2208
|
+
|
2209
|
+
end
|
2210
|
+
@content[_kind] = Arcadia.wf.frame(@content_root_frame){padding "3 3 12 12"}
|
2211
|
+
|
2212
|
+
@content[_kind].pack('fill'=>'both', :padx=>0, :pady=>0, :expand => 'yes')
|
2213
|
+
|
2214
|
+
|
2215
|
+
#@content.extend(TkScrollableWidget).show
|
2216
|
+
# ICON
|
2217
|
+
TkGrid.columnconfigure(@content[_kind], 0, :weight => 0 , :uniform => 'a')
|
2218
|
+
# NAME
|
2219
|
+
TkGrid.columnconfigure(@content[_kind], 1, :weight => 1 )
|
2220
|
+
# TITLE
|
2221
|
+
TkGrid.columnconfigure(@content[_kind], 2, :weight => 2 )
|
2222
|
+
# CMD
|
2223
|
+
TkGrid.columnconfigure(@content[_kind], 3, :weight => 3 )
|
2224
|
+
# FILE EXTS
|
2225
|
+
TkGrid.columnconfigure(@content[_kind], 4, :weight => 1 )
|
2226
|
+
# COPY BUTTON
|
2227
|
+
TkGrid.columnconfigure(@content[_kind], 5, :weight => 0, :uniform => 'a' )
|
2228
|
+
# DELETE BUTTON
|
2229
|
+
TkGrid.columnconfigure(@content[_kind], 6, :weight => 0, :uniform => 'a' )
|
2230
|
+
TkGrid.propagate(@content[_kind], true)
|
2231
|
+
load_titles(@content[_kind])
|
2232
|
+
runs.keys.reverse.each{|name|
|
2233
|
+
hash_string = runs[name]
|
2234
|
+
hash_string, origin = hash_string.split("|||")
|
1782
2235
|
item_hash = eval hash_string
|
1783
2236
|
item_hash[:name]=name
|
1784
2237
|
if item_hash[:runner] && Arcadia.runner(item_hash[:runner])
|
1785
2238
|
item_hash = Hash.new.update(Arcadia.runner(item_hash[:runner])).update(item_hash)
|
1786
2239
|
end
|
1787
|
-
|
1788
|
-
|
2240
|
+
if origin
|
2241
|
+
item_hash[:origin] = origin
|
2242
|
+
state_array = [] << :disabled
|
2243
|
+
end
|
2244
|
+
items[name]=RunnerMangerItem.new(self, @content[_kind], item_hash, items.count+1, state_array)
|
2245
|
+
#self.height(self.height + ROW_GAP)
|
2246
|
+
add_gap
|
2247
|
+
}
|
1789
2248
|
end
|
1790
2249
|
end
|
1791
2250
|
|
@@ -1807,7 +2266,8 @@ class ArcadiaAboutSplash < TkToplevel
|
|
1807
2266
|
@llogo = TkLabel.new(self){
|
1808
2267
|
image Arcadia.image_res(A_LOGO_GIF)
|
1809
2268
|
background _bgcolor
|
1810
|
-
place('x'=> 20,'y' => 20)
|
2269
|
+
#place('x'=> 20,'y' => 20)
|
2270
|
+
place('x'=> 140,'y' => 55)
|
1811
2271
|
}
|
1812
2272
|
|
1813
2273
|
|
@@ -1820,74 +2280,82 @@ class ArcadiaAboutSplash < TkToplevel
|
|
1820
2280
|
# place('width' => '190','x' => 110,'y' => 10,'height' => 25)
|
1821
2281
|
# }
|
1822
2282
|
|
2283
|
+
# @tkLabel1 = TkLabel.new(self){
|
2284
|
+
# image Arcadia.image_res(ARCADIA_JAP_WHITE_GIF)
|
2285
|
+
# background _bgcolor
|
2286
|
+
# justify 'left'
|
2287
|
+
# place('x' => 90,'y' => 10)
|
2288
|
+
# }
|
2289
|
+
|
1823
2290
|
@tkLabel1 = TkLabel.new(self){
|
1824
|
-
image Arcadia.image_res(
|
2291
|
+
image Arcadia.image_res(ARCADIA_7THE_GIF)
|
1825
2292
|
background _bgcolor
|
1826
2293
|
justify 'left'
|
1827
|
-
place('x' =>
|
2294
|
+
place('x' => 26,'y' => 10)
|
1828
2295
|
}
|
1829
2296
|
|
1830
|
-
@tkLabelRuby = TkLabel.new(self){
|
1831
|
-
image Arcadia.image_res(RUBY_DOCUMENT_GIF)
|
1832
|
-
background _bgcolor
|
1833
|
-
place('x'=> 210,'y' => 12)
|
1834
|
-
}
|
2297
|
+
# @tkLabelRuby = TkLabel.new(self){
|
2298
|
+
# image Arcadia.image_res(RUBY_DOCUMENT_GIF)
|
2299
|
+
# background _bgcolor
|
2300
|
+
# place('x'=> 210,'y' => 12)
|
2301
|
+
# }
|
2302
|
+
|
2303
|
+
# @tkLabel2 = TkLabel.new(self){
|
2304
|
+
# text 'Arcadia IDE'
|
2305
|
+
# background _bgcolor
|
2306
|
+
# foreground '#ffffff'
|
2307
|
+
# font Arcadia.instance['conf']['splash.subtitle.font']
|
2308
|
+
# justify 'left'
|
2309
|
+
# place('x' => 100,'y' => 40,'height' => 19)
|
2310
|
+
# }
|
1835
2311
|
|
1836
|
-
@tkLabel2 = TkLabel.new(self){
|
1837
|
-
text 'Arcadia IDE'
|
1838
|
-
background _bgcolor
|
1839
|
-
foreground '#ffffff'
|
1840
|
-
font Arcadia.instance['conf']['splash.subtitle.font']
|
1841
|
-
justify 'left'
|
1842
|
-
place('x' => 100,'y' => 40,'height' => 19)
|
1843
|
-
}
|
1844
2312
|
@tkLabelVersion = TkLabel.new(self){
|
1845
2313
|
text Arcadia.text('main.about.version', [$arcadia['applicationParams'].version])
|
1846
2314
|
background _bgcolor
|
1847
|
-
foreground '#
|
2315
|
+
foreground '#009999'
|
1848
2316
|
font Arcadia.instance['conf']['splash.version.font']
|
1849
2317
|
justify 'left'
|
1850
|
-
place('x' => 100,'y' => 65,'height' => 19)
|
2318
|
+
#place('x' => 100,'y' => 65,'height' => 19)
|
2319
|
+
place('x' => 28,'y' => 47,'height' => 19)
|
1851
2320
|
}
|
1852
2321
|
@tkLabel21 = TkLabel.new(self){
|
1853
|
-
text Arcadia.text("main.about.by", ['Antonio Galeone - 2004/
|
2322
|
+
text Arcadia.text("main.about.by", ['Antonio Galeone - 2004/2015'])
|
1854
2323
|
background _bgcolor
|
1855
|
-
foreground '#
|
2324
|
+
foreground '#009999'
|
1856
2325
|
font Arcadia.instance['conf']['splash.credits.font']
|
1857
2326
|
justify 'left'
|
1858
2327
|
anchor 'w'
|
1859
|
-
place('width' => '220','x' =>
|
2328
|
+
place('width' => '220','x' => 28,'y' => 32,'height' => 19)
|
1860
2329
|
}
|
1861
2330
|
|
1862
|
-
@tkLabelCredits = TkLabel.new(self){
|
1863
|
-
text Arcadia.text("main.about.contributors", ['Roger D. Pack'])
|
1864
|
-
background _bgcolor
|
1865
|
-
foreground '#ffffff'
|
1866
|
-
font Arcadia.instance['conf']['splash.credits.font']
|
1867
|
-
justify 'left'
|
1868
|
-
anchor 'w'
|
1869
|
-
place('width' => '210','x' => 100,'y' => 115,'height' => 25)
|
1870
|
-
}
|
2331
|
+
# @tkLabelCredits = TkLabel.new(self){
|
2332
|
+
# text Arcadia.text("main.about.contributors", ['Roger D. Pack'])
|
2333
|
+
# background _bgcolor
|
2334
|
+
# foreground '#ffffff'
|
2335
|
+
# font Arcadia.instance['conf']['splash.credits.font']
|
2336
|
+
# justify 'left'
|
2337
|
+
# anchor 'w'
|
2338
|
+
# place('width' => '210','x' => 100,'y' => 115,'height' => 25)
|
2339
|
+
# }
|
1871
2340
|
|
1872
2341
|
@tkLabelStep = TkLabel.new(self){
|
1873
2342
|
text ''
|
1874
2343
|
background _bgcolor
|
1875
|
-
foreground '#
|
2344
|
+
foreground '#009999'
|
1876
2345
|
font Arcadia.instance['conf']['splash.banner.font']
|
1877
2346
|
justify 'left'
|
1878
2347
|
anchor 'w'
|
1879
|
-
place('width'=>-
|
2348
|
+
place('width'=>-28,'relwidth' => 1,'x' => 28,'y' => 160,'height' => 45)
|
1880
2349
|
}
|
1881
2350
|
@progress = TkVariable.new
|
1882
2351
|
reset
|
1883
|
-
_width =
|
2352
|
+
_width = 345
|
1884
2353
|
_height = 210
|
1885
2354
|
#_width = 0;_height = 0
|
1886
2355
|
_x = TkWinfo.screenwidth(self)/2 - _width / 2
|
1887
2356
|
_y = TkWinfo.screenheight(self)/2 - _height / 2
|
1888
2357
|
geometry = _width.to_s+'x'+_height.to_s+'+'+_x.to_s+'+'+_y.to_s
|
1889
2358
|
Tk.tk_call('wm', 'geometry', self, geometry )
|
1890
|
-
#bind("ButtonPress-1", proc{self.destroy})
|
1891
2359
|
bind("Double-Button-1", proc{self.destroy})
|
1892
2360
|
info = TkApplication.sys_info
|
1893
2361
|
set_sysinfo(info)
|
@@ -1918,7 +2386,7 @@ class ArcadiaAboutSplash < TkToplevel
|
|
1918
2386
|
@tkAlert = TkLabel.new(self){
|
1919
2387
|
image Arcadia.image_res(ALERT_GIF)
|
1920
2388
|
background 'black'
|
1921
|
-
place('x'=>
|
2389
|
+
place('x'=> 28,'y' => 152)
|
1922
2390
|
}
|
1923
2391
|
|
1924
2392
|
@tkLabelProblems = TkLabel.new(self){
|
@@ -1928,7 +2396,7 @@ class ArcadiaAboutSplash < TkToplevel
|
|
1928
2396
|
font Arcadia.instance['conf']['splash.problems.font']
|
1929
2397
|
justify 'left'
|
1930
2398
|
anchor 'w'
|
1931
|
-
place('width' => '210','x' =>
|
2399
|
+
place('width' => '210','x' => 46,'y' => 150,'height' => 25)
|
1932
2400
|
}
|
1933
2401
|
end
|
1934
2402
|
@problems_nums=@problems_nums+1
|
@@ -1941,14 +2409,16 @@ class ArcadiaAboutSplash < TkToplevel
|
|
1941
2409
|
|
1942
2410
|
def set_progress(_max=10)
|
1943
2411
|
@max = _max
|
1944
|
-
Tk::BWidget::ProgressBar.new(self, :width=>
|
2412
|
+
Tk::BWidget::ProgressBar.new(self, :width=>340, :height=>5,
|
1945
2413
|
:background=>'#000000',
|
1946
2414
|
:troughcolor=>'#000000',
|
1947
|
-
:foreground=>'#
|
2415
|
+
:foreground=>'#990000',
|
1948
2416
|
:variable=>@progress,
|
1949
2417
|
:borderwidth=>0,
|
1950
2418
|
:relief=>'flat',
|
1951
|
-
:maximum=>_max).place('relwidth' => '1','y' =>
|
2419
|
+
# :maximum=>_max).place('relwidth' => '1','y' => 145,'height' => 1)
|
2420
|
+
# :maximum=>_max).place('width' => '280','x'=>28,'y' => 33,'height' => 1)
|
2421
|
+
:maximum=>_max).place('width' => '280','x'=>28,'y' => 189,'height' => 10)
|
1952
2422
|
end
|
1953
2423
|
|
1954
2424
|
def reset
|
@@ -2290,7 +2760,7 @@ class ArcadiaSh < TkToplevel
|
|
2290
2760
|
@wait = true
|
2291
2761
|
@result = false
|
2292
2762
|
prompt
|
2293
|
-
@text.bind_append("KeyPress"){|
|
2763
|
+
@text.bind_append("KeyPress","%K"){|_keysym| input(_keysym)}
|
2294
2764
|
end
|
2295
2765
|
|
2296
2766
|
def exec_buffer
|