arcadia 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|