arcadia 0.13.1 → 1.0.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 → README.md} +60 -53
- data/conf/LC/en-UK.LANG +10 -4
- data/conf/arcadia.conf +221 -83
- data/conf/arcadia.res.rb +165 -175
- data/conf/theme-dark.conf +1 -1
- data/conf/theme-dark.res.rb +0 -123
- data/ext/ae-breakpoints/ae-breakpoints.rb +4 -3
- data/ext/ae-dir-projects/ae-dir-projects.conf +27 -1
- data/ext/ae-dir-projects/ae-dir-projects.rb +120 -70
- data/ext/ae-editor/ae-editor.conf +2 -2
- data/ext/ae-editor/ae-editor.rb +610 -303
- data/ext/ae-file-history/ae-file-history.rb +60 -39
- data/ext/ae-output/ae-output.rb +52 -27
- data/ext/ae-ruby-debug/ae-ruby-debug.conf +3 -1
- data/ext/ae-ruby-debug/ae-ruby-debug.rb +18 -11
- data/ext/ae-search-in-files/ae-search-in-files.conf +2 -2
- data/ext/ae-search-in-files/ae-search-in-files.rb +124 -77
- data/ext/ae-shell/ae-shell.conf +1 -1
- data/ext/ae-shell/ae-shell.rb +18 -81
- data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +78 -81
- data/ext/ae-term/ae-term.rb +9 -7
- data/lib/a-commons.rb +125 -17
- data/lib/a-contracts.rb +6 -2
- data/lib/a-core.rb +441 -405
- data/lib/a-tkcommons.rb +1237 -45
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ArrowButton.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/BWidget.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Button.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ButtonBox.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ComboBox.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Dialog.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/DragSite.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/DropSite.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/DynamicHelp.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Entry.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Label.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/LabelEntry.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/LabelFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ListBox.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/MainFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/MessageDlg.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/NoteBook.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/PagesManager.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/PanedWindow.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/PanelFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/PasswdDlg.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ProgressBar.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ProgressDlg.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ScrollView.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ScrollableFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/ScrolledWindow.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/SelectColor.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/SelectFont.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Separator.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/SpinBox.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/StatusBar.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/TitleFrame.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Tree.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/Widget.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/contents.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/index.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/navtree.html +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/BWman/options.htm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/CHANGES.txt +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/ChangeLog +65 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/LICENSE.txt +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/README.txt +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/arrow.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/bitmap.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/button.tcl +0 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/buttonbox.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/color.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/combobox.tcl +40 -16
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/basic.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/bwidget.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/demo.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/dnd.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/manager.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/select.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/tmpldlg.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/tree.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/demo/x1.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/dialog.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/dragsite.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/dropsite.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/dynhelp.tcl +3 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/entry.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/font.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/bold.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/copy.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/cut.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/dragfile.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/dragicon.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/error.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/file.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/folder.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/hourglass.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/info.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/italic.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/minus.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/new.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/opcopy.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/open.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/openfold.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/oplink.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/opmove.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/overstrike.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/palette.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/passwd.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/paste.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/plus.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/print.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/question.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/redo.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/save.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/target.xbm +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/underline.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/undo.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/images/warning.gif +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/init.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/label.tcl +0 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/labelentry.tcl +0 -3
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/labelframe.tcl +0 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/da.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/de.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/en.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/es.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/fr.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/hu.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/nl.rc +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/no.rc +59 -58
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/lang/pl.rc +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/listbox.tcl +17 -4
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/mainframe.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/messagedlg.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/notebook.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/pagesmgr.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/panedw.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/panelframe.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/passwddlg.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/pkgIndex.tcl +2 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/progressbar.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/progressdlg.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/scrollframe.tcl +6 -6
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/scrollview.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/scrollw.tcl +1 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/separator.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/spinbox.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/statusbar.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/tests/entry.test +2 -2
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/titleframe.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/tree.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/utils.tcl +0 -0
- data/tcl/bwidget-1.9.8/widget-old.tcl +1651 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/widget.tcl +64 -36
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/wizard.tcl +0 -0
- data/tcl/{bwidget-1.9.7 → bwidget-1.9.8}/xpm2image.tcl +0 -0
- metadata +196 -195
data/lib/a-tkcommons.rb
CHANGED
@@ -261,6 +261,7 @@ class AGTkObjPlace
|
|
261
261
|
|
262
262
|
end
|
263
263
|
|
264
|
+
|
264
265
|
class TkFrameAdapter < TkFrame
|
265
266
|
#include TkMovable
|
266
267
|
attr_reader :frame
|
@@ -281,25 +282,50 @@ class TkFrameAdapter < TkFrame
|
|
281
282
|
|
282
283
|
def detach_frame
|
283
284
|
if @frame
|
284
|
-
# if @movable
|
285
|
-
# @frame.bind_remove("Configure")
|
286
|
-
# @frame.bind_remove("Map")
|
287
|
-
# @frame.bind_remove("Unmap")
|
288
|
-
# end
|
289
285
|
self.bind_remove("Map")
|
290
286
|
self.unmap(@manager_forced_to_frame)
|
291
287
|
@frame = nil
|
292
288
|
end
|
293
289
|
end
|
294
290
|
|
295
|
-
def attach_frame(_frame)
|
291
|
+
def attach_frame(_frame, _extension = nil, _frame_index=0)
|
296
292
|
@frame = _frame
|
297
293
|
refresh_layout_manager
|
298
294
|
self.map
|
299
|
-
|
295
|
+
if _extension
|
296
|
+
@frame.bind("Map", proc{
|
297
|
+
if _extension.frame_raised?(_frame_index)
|
298
|
+
@frame.raise
|
299
|
+
else
|
300
|
+
@frame.lower
|
301
|
+
end
|
302
|
+
})
|
303
|
+
|
304
|
+
|
305
|
+
# ffw = Arcadia.instance.layout.frame(_extension.frame_domain(_frame_index),_extension.name)
|
306
|
+
# if ffw
|
307
|
+
# ffw.bind("Map", proc{
|
308
|
+
# if _extension.frame_raised?(_frame_index)
|
309
|
+
# p "pack"
|
310
|
+
# @frame.pack
|
311
|
+
# @frame.raise
|
312
|
+
# else
|
313
|
+
# p "unpack"
|
314
|
+
# @frame.lower
|
315
|
+
# @frame.unpack
|
316
|
+
# end
|
317
|
+
# })
|
318
|
+
# end
|
319
|
+
else
|
320
|
+
self.bind("Map", proc{@frame.raise})
|
321
|
+
end
|
300
322
|
self
|
301
323
|
end
|
302
324
|
|
325
|
+
def layout_manager
|
326
|
+
@frame_manager
|
327
|
+
end
|
328
|
+
|
303
329
|
def refresh_layout_manager
|
304
330
|
@frame_manager = TkWinfo.manager(@frame)
|
305
331
|
end
|
@@ -423,9 +449,12 @@ class AGTkVSplittedFrames < AGTkSplittedFrames
|
|
423
449
|
"ButtonRelease-1",
|
424
450
|
proc{do_resize}
|
425
451
|
)
|
426
|
-
_xbutton =
|
427
|
-
|
452
|
+
_xbutton = Arcadia.wf.toolbutton(@splitter_frame){
|
453
|
+
image Arcadia.image_res(VERTICAL_SPLITTER_HIDE_LEFT_GIF)
|
428
454
|
}
|
455
|
+
# _xbutton = TkButton.new(@splitter_frame, Arcadia.style('toolbarbutton')){
|
456
|
+
# background '#4966d7'
|
457
|
+
# }
|
429
458
|
_xbutton.place(
|
430
459
|
'x' => 0,
|
431
460
|
'y' => 0,
|
@@ -437,9 +466,12 @@ class AGTkVSplittedFrames < AGTkSplittedFrames
|
|
437
466
|
"ButtonPress-1",
|
438
467
|
proc{hide_left}
|
439
468
|
)
|
440
|
-
_ybutton =
|
441
|
-
|
469
|
+
_ybutton = Arcadia.wf.toolbutton(@splitter_frame){
|
470
|
+
image Arcadia.image_res(VERTICAL_SPLITTER_HIDE_RIGHT_GIF)
|
442
471
|
}
|
472
|
+
# _ybutton = TkButton.new(@splitter_frame, Arcadia.style('toolbarbutton')){
|
473
|
+
# background '#118124'
|
474
|
+
# }
|
443
475
|
_ybutton.place(
|
444
476
|
'x' => 0,
|
445
477
|
'y' => 21,
|
@@ -666,9 +698,12 @@ class AGTkOSplittedFrames < AGTkSplittedFrames
|
|
666
698
|
"ButtonRelease-1",
|
667
699
|
proc{do_resize}
|
668
700
|
)
|
669
|
-
_xbutton =
|
670
|
-
|
701
|
+
_xbutton = Arcadia.wf.toolbutton(@splitter_frame){
|
702
|
+
image Arcadia.image_res(HORIZONTAL_SPLITTER_HIDE_TOP_GIF)
|
671
703
|
}
|
704
|
+
# _xbutton = TkButton.new(@splitter_frame, Arcadia.style('toolbarbutton')){
|
705
|
+
# background '#4966d7'
|
706
|
+
# }
|
672
707
|
_xbutton.place(
|
673
708
|
'x' => 0,
|
674
709
|
'y' => 0,
|
@@ -680,9 +715,13 @@ class AGTkOSplittedFrames < AGTkSplittedFrames
|
|
680
715
|
"ButtonPress-1",
|
681
716
|
proc{hide_top}
|
682
717
|
)
|
683
|
-
|
684
|
-
|
718
|
+
|
719
|
+
_ybutton = Arcadia.wf.toolbutton(@splitter_frame){
|
720
|
+
image Arcadia.image_res(HORIZONTAL_SPLITTER_HIDE_BOTTOM_GIF)
|
685
721
|
}
|
722
|
+
# _ybutton = TkButton.new(@splitter_frame, Arcadia.style('toolbarbutton')){
|
723
|
+
# background '#118124'
|
724
|
+
# }
|
686
725
|
_ybutton.place(
|
687
726
|
'x' => 21,
|
688
727
|
'y' => 0,
|
@@ -836,15 +875,20 @@ class TkBaseTitledFrame < TkFrame
|
|
836
875
|
__add_sep(_width, @button_frame)
|
837
876
|
end
|
838
877
|
|
878
|
+
def add_fixed_progress(_max=100, _canc_proc=nil, _hint=nil)
|
879
|
+
__add_progress(_max, _canc_proc, @button_frame, _hint)
|
880
|
+
end
|
881
|
+
|
839
882
|
def __add_button(_label,_proc=nil,_image=nil, _side= 'right', _frame=nil)
|
840
883
|
return if _frame.nil?
|
841
884
|
begin
|
842
885
|
last = @last_for_frame[_frame]
|
843
|
-
@last_for_frame[_frame] = TkButton.new(_frame, Arcadia.style('titletoolbarbutton')){
|
886
|
+
# @last_for_frame[_frame] = TkButton.new(_frame, Arcadia.style('titletoolbarbutton')){
|
887
|
+
@last_for_frame[_frame] = Arcadia.wf.titletoolbutton(_frame){
|
844
888
|
text _label if _label
|
845
889
|
image Arcadia.image_res(_image) if _image
|
846
|
-
padx 0
|
847
|
-
pady 0
|
890
|
+
# padx 0
|
891
|
+
# pady 0
|
848
892
|
if last
|
849
893
|
pack('side'=> _side,'anchor'=> 'e', 'after'=>last)
|
850
894
|
else
|
@@ -865,25 +909,79 @@ class TkBaseTitledFrame < TkFrame
|
|
865
909
|
args = Arcadia.style('titlelabel')
|
866
910
|
args.update(_args) if _args
|
867
911
|
last = @last_for_frame[_frame]
|
868
|
-
@last_for_frame[_frame] = @menu_buttons[_name] =
|
869
|
-
menu
|
912
|
+
@last_for_frame[_frame] = @menu_buttons[_name] = Arcadia.wf.titlecontextmenubutton(_frame, _args){|mb|
|
913
|
+
menu Arcadia.wf.titlemenu(mb)
|
914
|
+
# menu TkMenu.new(mb, Arcadia.style('titlemenu'))
|
870
915
|
if _image
|
871
|
-
indicatoron false
|
916
|
+
# indicatoron false
|
872
917
|
image Arcadia.image_res(_image)
|
873
918
|
else
|
874
|
-
indicatoron true
|
919
|
+
# indicatoron true
|
875
920
|
end
|
876
|
-
padx 0
|
921
|
+
# padx 0
|
877
922
|
if last
|
878
923
|
pack('side'=> _side,'anchor'=> 'e', 'after'=>last)
|
879
924
|
else
|
880
925
|
pack('side'=> _side,'anchor'=> 'e')
|
881
926
|
end
|
882
927
|
}
|
928
|
+
|
929
|
+
# @last_for_frame[_frame] = @menu_buttons[_name] = TkMenuButton.new(_frame, args){|mb|
|
930
|
+
# menu TkMenu.new(mb, Arcadia.style('titlemenu'))
|
931
|
+
# if _image
|
932
|
+
# indicatoron false
|
933
|
+
# image Arcadia.image_res(_image)
|
934
|
+
# else
|
935
|
+
# indicatoron true
|
936
|
+
# end
|
937
|
+
# padx 0
|
938
|
+
# if last
|
939
|
+
# pack('side'=> _side,'anchor'=> 'e', 'after'=>last)
|
940
|
+
# else
|
941
|
+
# pack('side'=> _side,'anchor'=> 'e')
|
942
|
+
# end
|
943
|
+
# }
|
883
944
|
@menu_buttons[_name]
|
884
945
|
end
|
885
946
|
private :__add_menu_button
|
886
947
|
|
948
|
+
def __add_check_button(_label,_proc=nil,_image=nil, _side= 'right', _frame=nil)
|
949
|
+
return if _frame.nil?
|
950
|
+
begin
|
951
|
+
last = @last_for_frame[_frame]
|
952
|
+
# @last_for_frame[_frame] = TkCheckButton.new(_frame, Arcadia.style('checkbox').update('background'=>_frame.background)){
|
953
|
+
# text _label if _label
|
954
|
+
# image Arcadia.image_res(_image) if _image
|
955
|
+
# padx 0
|
956
|
+
# pady 0
|
957
|
+
# if last
|
958
|
+
# pack('side'=> _side,'anchor'=> 'e', 'after'=>last)
|
959
|
+
# else
|
960
|
+
# pack('side'=> _side,'anchor'=> 'e')
|
961
|
+
# end
|
962
|
+
# command(_proc) if _proc
|
963
|
+
# }
|
964
|
+
# Tk::BWidget::DynamicHelp::add(@last_for_frame[_frame], 'text'=>_label) if _label
|
965
|
+
|
966
|
+
@last_for_frame[_frame] = Arcadia.wf.titlecontextcheckbutton(@panel){
|
967
|
+
text _label if _label
|
968
|
+
variable TkVariable.new
|
969
|
+
image Arcadia.image_res(_image) if _image
|
970
|
+
if last
|
971
|
+
pack('side'=> _side,'anchor'=> 'e', 'after'=>last)
|
972
|
+
else
|
973
|
+
pack('side'=> _side,'anchor'=> 'e')
|
974
|
+
end
|
975
|
+
command(_proc) if _proc
|
976
|
+
}
|
977
|
+
@last_for_frame[_frame].hint=_label if _label
|
978
|
+
@last_for_frame[_frame]
|
979
|
+
rescue RuntimeError => e
|
980
|
+
Arcadia.runtime_error(e)
|
981
|
+
end
|
982
|
+
end
|
983
|
+
private :__add_check_button
|
984
|
+
|
887
985
|
def __add_panel(_name='default', _side= 'right', _args=nil, _frame=nil)
|
888
986
|
return if _frame.nil?
|
889
987
|
args = Arcadia.style('panel').update('background'=>_frame.background, 'highlightbackground'=>_frame.background)
|
@@ -926,12 +1024,13 @@ class TkBaseTitledFrame < TkFrame
|
|
926
1024
|
return if _frame.nil?
|
927
1025
|
begin
|
928
1026
|
last = @last_for_state_frame[_frame]
|
929
|
-
|
1027
|
+
#@last_for_state_frame[_frame] = TkButton.new(_frame, Arcadia.style('titletoolbarbutton')){
|
1028
|
+
@last_for_state_frame[_frame] = Arcadia.wf.titletoolbutton(_frame){
|
930
1029
|
text _label if _label
|
931
1030
|
image Arcadia.image_res(_image) if _image
|
932
|
-
|
933
|
-
|
934
|
-
|
1031
|
+
# font 'helvetica 8 bold'
|
1032
|
+
# padx 0
|
1033
|
+
# pady 0
|
935
1034
|
if last
|
936
1035
|
pack('side'=> _side,'anchor'=> 'w', 'after'=>last)
|
937
1036
|
else
|
@@ -939,7 +1038,8 @@ class TkBaseTitledFrame < TkFrame
|
|
939
1038
|
end
|
940
1039
|
bind('1',_proc) if _proc
|
941
1040
|
}
|
942
|
-
|
1041
|
+
@last_for_state_frame[_frame].hint=_label
|
1042
|
+
#Tk::BWidget::DynamicHelp::add(@last_for_state_frame[_frame], 'text'=>_label) if _label
|
943
1043
|
@last_for_state_frame[_frame]
|
944
1044
|
rescue RuntimeError => e
|
945
1045
|
Arcadia.runtime_error(e)
|
@@ -947,6 +1047,34 @@ class TkBaseTitledFrame < TkFrame
|
|
947
1047
|
end
|
948
1048
|
private :__add_state_button
|
949
1049
|
|
1050
|
+
def __add_progress(_max, _canc_proc=nil, _frame=nil, _hint=nil, _side= 'left')
|
1051
|
+
|
1052
|
+
return if _frame.nil?
|
1053
|
+
begin
|
1054
|
+
last = @last_for_frame[_frame]
|
1055
|
+
@last_for_frame[_frame] = TkFrameProgress.new(_frame, _max)
|
1056
|
+
if last
|
1057
|
+
@last_for_frame[_frame].pack('side'=> _side,'anchor'=> 'e', 'after'=>last)
|
1058
|
+
else
|
1059
|
+
@last_for_frame[_frame].pack('side'=> _side,'anchor'=> 'e')
|
1060
|
+
end
|
1061
|
+
|
1062
|
+
@last_for_frame[_frame].on_cancel=_canc_proc if _canc_proc
|
1063
|
+
|
1064
|
+
Tk::BWidget::DynamicHelp::add(@last_for_frame[_frame], 'text'=>_hint) if _hint
|
1065
|
+
@last_for_frame[_frame]
|
1066
|
+
rescue RuntimeError => e
|
1067
|
+
Arcadia.runtime_error(e)
|
1068
|
+
end
|
1069
|
+
end
|
1070
|
+
private :__add_progress
|
1071
|
+
|
1072
|
+
def __destroy_progress(_progress, _frame)
|
1073
|
+
@last_for_frame[_frame] = nil if @last_for_frame[_frame] == _progress
|
1074
|
+
_progress.destroy
|
1075
|
+
end
|
1076
|
+
private :__destroy_progress
|
1077
|
+
|
950
1078
|
def menu_button(_name='default')
|
951
1079
|
@menu_buttons[_name]
|
952
1080
|
end
|
@@ -1183,11 +1311,13 @@ class TkLabelTitledFrame < TkTitledFrame
|
|
1183
1311
|
end
|
1184
1312
|
|
1185
1313
|
def shift_on
|
1186
|
-
@left_label.
|
1314
|
+
@left_label.state='normal'
|
1315
|
+
#@left_label.foreground(Arcadia.conf('titlelabel.foreground'))
|
1187
1316
|
end
|
1188
1317
|
|
1189
1318
|
def shift_off
|
1190
|
-
@left_label.
|
1319
|
+
@left_label.state='disable'
|
1320
|
+
#@left_label.foreground(Arcadia.conf('titlelabel.disabledforeground'))
|
1191
1321
|
end
|
1192
1322
|
|
1193
1323
|
def title(_text=nil)
|
@@ -1204,6 +1334,17 @@ class TkLabelTitledFrame < TkTitledFrame
|
|
1204
1334
|
end
|
1205
1335
|
end
|
1206
1336
|
|
1337
|
+
class TkLabelTitledFrameClosable < TkLabelTitledFrame
|
1338
|
+
def head_buttons
|
1339
|
+
@bclose = add_fixed_button('[ ]',proc{}, CLOSE_FRAME_GIF)
|
1340
|
+
end
|
1341
|
+
|
1342
|
+
def add_close_action(_proc)
|
1343
|
+
@bclose.bind_append("1", _proc)
|
1344
|
+
end
|
1345
|
+
end
|
1346
|
+
|
1347
|
+
|
1207
1348
|
class TkMenuTitledFrame < TkTitledFrame
|
1208
1349
|
def create_left_title
|
1209
1350
|
@left_menu_button = __create_left_menu_button(@top)
|
@@ -1216,15 +1357,17 @@ class TkMenuTitledFrame < TkTitledFrame
|
|
1216
1357
|
|
1217
1358
|
def __create_left_menu_button(_frame)
|
1218
1359
|
img=@img
|
1219
|
-
|
1220
|
-
|
1360
|
+
#@left_menu_button = TkMenuButton.new(_frame, Arcadia.style('titlebutton')){|mb|
|
1361
|
+
@left_menu_button = Arcadia.wf.titlemenubutton(_frame){|mb|
|
1362
|
+
menu Arcadia.wf.titlemenu(mb)
|
1363
|
+
#menu TkMenu.new(mb, Arcadia.style('titlemenu'))
|
1221
1364
|
if img
|
1222
|
-
indicatoron false
|
1365
|
+
#indicatoron false
|
1223
1366
|
image Arcadia.image_res(img)
|
1224
1367
|
else
|
1225
|
-
indicatoron true
|
1368
|
+
#indicatoron true
|
1226
1369
|
end
|
1227
|
-
padx 0
|
1370
|
+
#padx 0
|
1228
1371
|
textvariable TkVariable.new('')
|
1229
1372
|
pack('side'=> 'left','anchor'=> 'e')
|
1230
1373
|
}
|
@@ -1232,11 +1375,13 @@ class TkMenuTitledFrame < TkTitledFrame
|
|
1232
1375
|
end
|
1233
1376
|
|
1234
1377
|
def shift_on
|
1235
|
-
@left_menu_button.
|
1378
|
+
@left_menu_button.state='normal'
|
1379
|
+
#@left_menu_button.foreground(Arcadia.conf('titlelabel.foreground'))
|
1236
1380
|
end
|
1237
1381
|
|
1238
1382
|
def shift_off
|
1239
|
-
@left_menu_button.
|
1383
|
+
@left_menu_button.state='disable'
|
1384
|
+
#@left_menu_button.foreground(Arcadia.conf('titlelabel.disabledforeground'))
|
1240
1385
|
end
|
1241
1386
|
|
1242
1387
|
def title(_text=nil)
|
@@ -1469,6 +1614,11 @@ class TkTitledFrameAdapter < TkMenuTitledFrame
|
|
1469
1614
|
__add_menu_button(_name, _image, _side, _args, @transient_frame_adapter[_sender_name][:action])
|
1470
1615
|
end
|
1471
1616
|
|
1617
|
+
def add_check_button(_sender_name, _label,_proc=nil,_image=nil, _side= 'right')
|
1618
|
+
forge_transient_adapter(_sender_name)
|
1619
|
+
__add_check_button(_label,_proc,_image, _side, @transient_frame_adapter[_sender_name][:action])
|
1620
|
+
end
|
1621
|
+
|
1472
1622
|
def add_panel(_sender_name, _name='default',_side= 'right', _args=nil)
|
1473
1623
|
forge_transient_adapter(_sender_name)
|
1474
1624
|
__add_panel(_name, _side, _args, @transient_frame_adapter[_sender_name][:action])
|
@@ -1484,6 +1634,15 @@ class TkTitledFrameAdapter < TkMenuTitledFrame
|
|
1484
1634
|
__add_state_button(_label,_proc,_image, _side, @transient_frame_adapter[_sender_name][:state])
|
1485
1635
|
end
|
1486
1636
|
|
1637
|
+
def add_progress(_sender_name, _max=100, _canc_proc=nil, _hint=nil)
|
1638
|
+
forge_transient_adapter(_sender_name)
|
1639
|
+
__add_progress(_max, _canc_proc, @transient_frame_adapter[_sender_name][:action], _hint)
|
1640
|
+
end
|
1641
|
+
|
1642
|
+
def destroy_progress(_sender_name, _progress)
|
1643
|
+
__destroy_progress(_progress, @transient_frame_adapter[_sender_name][:action])
|
1644
|
+
end
|
1645
|
+
|
1487
1646
|
end
|
1488
1647
|
|
1489
1648
|
|
@@ -1623,7 +1782,8 @@ class TkProgressframe < TkFloatTitledFrame
|
|
1623
1782
|
|
1624
1783
|
@buttons_frame = TkFrame.new(self, Arcadia.style('panel')).pack('fill'=>'x', 'side'=>'bottom')
|
1625
1784
|
|
1626
|
-
|
1785
|
+
#@b_cancel = TkButton.new(@buttons_frame, Arcadia.style('button')){|_b_go|
|
1786
|
+
@b_cancel = Arcadia.wf.titletoolbutton(@buttons_frame){|_b_go|
|
1627
1787
|
default 'disabled'
|
1628
1788
|
text 'Cancel'
|
1629
1789
|
overrelief 'raised'
|
@@ -1647,6 +1807,58 @@ class TkProgressframe < TkFloatTitledFrame
|
|
1647
1807
|
end
|
1648
1808
|
end
|
1649
1809
|
|
1810
|
+
class TkFrameProgress < TkFrame
|
1811
|
+
attr_accessor :max
|
1812
|
+
def initialize(parent=nil, _max=100, *args)
|
1813
|
+
super(parent, Arcadia.style('panel').update({:background => Arcadia.conf('titlelabel.background')}), *args)
|
1814
|
+
_max=1 if _max<=0
|
1815
|
+
@max = _max
|
1816
|
+
@progress = TkVariable.new
|
1817
|
+
@progress.value = -1
|
1818
|
+
Tk::BWidget::ProgressBar.new(self, :width=>50, :height=>16,
|
1819
|
+
:background=>Arcadia.conf('titlelabel.background'),
|
1820
|
+
:troughcolor=>Arcadia.conf('titlelabel.background'),
|
1821
|
+
:foreground=>Arcadia.conf('progress.foreground'),
|
1822
|
+
:variable=>@progress,
|
1823
|
+
:borderwidth=>0,
|
1824
|
+
:relief=>'flat',
|
1825
|
+
:maximum=>_max).pack('side'=>'left','padx'=>0, 'pady'=>0)
|
1826
|
+
#@b_cancel = TkButton.new(self, Arcadia.style('toolbarbutton')){|b|
|
1827
|
+
@b_cancel = Arcadia.wf.titletoolbutton(self){|b|
|
1828
|
+
# background Arcadia.conf('titlelabel.background')
|
1829
|
+
# foreground Arcadia.conf('titlelabel.background')
|
1830
|
+
# highlightbackground Arcadia.conf('titlelabel.background')
|
1831
|
+
# highlightcolor Arcadia.conf('titlelabel.background')
|
1832
|
+
image Arcadia.image_res(CLOSE_FRAME_GIF)
|
1833
|
+
# borderwidth 0
|
1834
|
+
# relief 'flat'
|
1835
|
+
# padx 0
|
1836
|
+
# pady 0
|
1837
|
+
# anchor 'n'
|
1838
|
+
pack('side'=>'left','padx'=>0, 'pady'=>0)
|
1839
|
+
}
|
1840
|
+
end
|
1841
|
+
|
1842
|
+
def destroy
|
1843
|
+
@on_destroy.call if defined?(@on_destroy)
|
1844
|
+
super
|
1845
|
+
end
|
1846
|
+
|
1847
|
+
def progress(_incr=1)
|
1848
|
+
@progress.numeric += _incr
|
1849
|
+
end
|
1850
|
+
|
1851
|
+
def on_cancel=(_proc)
|
1852
|
+
@b_cancel.bind_append('1', _proc)
|
1853
|
+
end
|
1854
|
+
|
1855
|
+
def on_destroy=(_proc)
|
1856
|
+
@on_destroy=_proc
|
1857
|
+
end
|
1858
|
+
|
1859
|
+
end
|
1860
|
+
|
1861
|
+
|
1650
1862
|
class TkBuffersChoiseView < TkToplevel
|
1651
1863
|
|
1652
1864
|
def initialize
|
@@ -1683,7 +1895,27 @@ class TclTkInfo
|
|
1683
1895
|
attr_reader :level
|
1684
1896
|
def initialize
|
1685
1897
|
@level = Tk.tk_call( "eval", "info patchlevel")
|
1686
|
-
|
1898
|
+
|
1899
|
+
# info args procname
|
1900
|
+
# info body procname
|
1901
|
+
# info cmdcount
|
1902
|
+
# info commands ?pattern?
|
1903
|
+
# info complete command
|
1904
|
+
# info default procname arg varname
|
1905
|
+
# info exists varName
|
1906
|
+
# info globals ?pattern?
|
1907
|
+
# info hostname
|
1908
|
+
# info level ?number?
|
1909
|
+
# info library
|
1910
|
+
# info loaded ?interp?
|
1911
|
+
# info locals ?pattern?
|
1912
|
+
# info nameofexecutable
|
1913
|
+
# info patchlevel
|
1914
|
+
# info procs ?pattern?
|
1915
|
+
# info script
|
1916
|
+
# info sharedlibextension
|
1917
|
+
# info tclversion
|
1918
|
+
# info vars ?pattern?
|
1687
1919
|
end
|
1688
1920
|
end
|
1689
1921
|
|
@@ -1691,7 +1923,15 @@ end
|
|
1691
1923
|
#Tk.tk_call "eval","ttk::setTheme clam"
|
1692
1924
|
#Tk::Tile::Style.theme_use('clam')
|
1693
1925
|
|
1926
|
+
|
1694
1927
|
class TkWidgetFactory
|
1928
|
+
|
1929
|
+
module WidgetEnhancer
|
1930
|
+
def hint=(_hint=nil)
|
1931
|
+
Tk::BWidget::DynamicHelp::add(self, 'text'=>_hint) if _hint
|
1932
|
+
end
|
1933
|
+
end
|
1934
|
+
|
1695
1935
|
def initialize
|
1696
1936
|
if Arcadia.conf('tile.theme')
|
1697
1937
|
@use_tile = true
|
@@ -1708,6 +1948,16 @@ class TkWidgetFactory
|
|
1708
1948
|
end
|
1709
1949
|
|
1710
1950
|
def initialize_tile_widgets
|
1951
|
+
|
1952
|
+
#Widget state flags include:
|
1953
|
+
#active,disabled,focus,pressed,selected,background,readonly,alternate,invalid,hover
|
1954
|
+
|
1955
|
+
# Workaround for #1100117:
|
1956
|
+
# Actually, on Aqua we probably shouldn't stipple images in
|
1957
|
+
# disabled buttons even if it did work...
|
1958
|
+
# don't work with Cocoa
|
1959
|
+
Tk.tk_call("eval","ttk::style configure . -stipple {}") if OS.mac?
|
1960
|
+
|
1711
1961
|
#TScrollbar
|
1712
1962
|
Tk::Tile::Style.configure("Arcadia.TScrollbar", Arcadia.style('scrollbar'))
|
1713
1963
|
Tk::Tile::Style.map("Arcadia.TScrollbar",
|
@@ -1746,26 +1996,410 @@ class TkWidgetFactory
|
|
1746
1996
|
#Treeview
|
1747
1997
|
#Tk::Tile::Style.configure(Tk::Tile::Treeview, Arcadia.style('treepanel'))
|
1748
1998
|
|
1749
|
-
|
1750
1999
|
#TMenubutton
|
1751
|
-
|
2000
|
+
Tk::Tile::Style.element_create('Arcadia.Menubutton.indicator',
|
2001
|
+
:image, Arcadia.image_res(DROP_DOWN_ARROW_GIF),
|
2002
|
+
:sticky=>:w)
|
2003
|
+
|
2004
|
+
Tk::Tile::Style.configure("Arcadia.TMenubutton", Arcadia.style('menubutton').update(
|
2005
|
+
'padding'=>"0 0 0 0",
|
2006
|
+
'width'=>0
|
2007
|
+
)
|
2008
|
+
)
|
2009
|
+
|
2010
|
+
Tk::Tile::Style.map("Arcadia.TMenubutton",
|
2011
|
+
:background=>[:pressed, Arcadia.style('menubutton')['activebackground'], :disabled, Arcadia.style('menubutton')['background'], :active, Arcadia.style('menubutton')['activebackground']],
|
2012
|
+
:arrowcolor=>[:pressed, Arcadia.style('menubutton')['background'], :disabled, Arcadia.style('menubutton')['highlightbackground'], :active, Arcadia.style('menubutton')['background']],
|
2013
|
+
:relief=>[:pressed, :flat])
|
2014
|
+
Tk::Tile::Style.layout('Arcadia.TMenubutton', [
|
2015
|
+
'Menubutton.border', {:children=>[
|
2016
|
+
'Menubutton.padding', {:children=>[
|
2017
|
+
'Arcadia.Menubutton.indicator', {:side=>:right},
|
2018
|
+
'Menubutton.focus', {:side=>:left, :children=>['Menubutton.label']}
|
2019
|
+
]}
|
2020
|
+
]}
|
2021
|
+
])
|
2022
|
+
|
2023
|
+
#Title.TMenubutton
|
2024
|
+
#
|
2025
|
+
Tk::Tile::Style.configure("Arcadia.Title.TMenubutton", Arcadia.style('titlelabel').update(
|
2026
|
+
'padding'=>"0 0 0 0",
|
2027
|
+
'font'=>Arcadia.conf('titlelabel.font'),
|
2028
|
+
'width'=>0,
|
2029
|
+
'foreground' => Arcadia.conf('titlelabel.foreground'),
|
2030
|
+
)
|
2031
|
+
)
|
2032
|
+
Tk::Tile::Style.map("Arcadia.Title.TMenubutton",
|
2033
|
+
:background=>[:pressed, Arcadia.style('titlelabel')['activebackground'], :disabled, Arcadia.style('titlelabel')['background'], :active, Arcadia.style('titlelabel')['activebackground']],
|
2034
|
+
:arrowcolor=>[:pressed, Arcadia.style('titlelabel')['background'], :disabled, Arcadia.style('titlelabel')['highlightbackground'], :active, Arcadia.style('titlelabel')['background']],
|
2035
|
+
:relief=>[:pressed, :flat])
|
2036
|
+
Tk::Tile::Style.layout('Arcadia.Title.TMenubutton', [
|
2037
|
+
'Menubutton.border', {:children=>[
|
2038
|
+
'Menubutton.padding', {:children=>[
|
2039
|
+
'Arcadia.Menubutton.indicator', {:side=>:right},
|
2040
|
+
'Menubutton.focus', {:side=>:left, :children=>['Menubutton.label']}
|
2041
|
+
]}
|
2042
|
+
]}
|
2043
|
+
])
|
2044
|
+
|
2045
|
+
#Title.Context.TMenubutton
|
2046
|
+
#
|
2047
|
+
Tk::Tile::Style.configure("Arcadia.Title.Context.TMenubutton", Arcadia.style('titlelabel').update(
|
2048
|
+
'padding'=>"0 0 0 0",
|
2049
|
+
'font'=>"#{Arcadia.conf('titlelabel.font')} italic",
|
2050
|
+
'width'=>0,
|
2051
|
+
'foreground' => Arcadia.conf('titlecontext.foreground'),
|
2052
|
+
)
|
2053
|
+
)
|
2054
|
+
Tk::Tile::Style.map("Arcadia.Title.Context.TMenubutton",
|
2055
|
+
:background=>[:pressed, Arcadia.style('titlelabel')['activebackground'], :disabled, Arcadia.style('titlelabel')['background'], :active, Arcadia.style('titlelabel')['activebackground']],
|
2056
|
+
:arrowcolor=>[:pressed, Arcadia.style('titlelabel')['background'], :disabled, Arcadia.style('titlelabel')['highlightbackground'], :active, Arcadia.style('titlelabel')['background']],
|
2057
|
+
:relief=>[:pressed, :flat])
|
2058
|
+
Tk::Tile::Style.layout('Arcadia.Title.Context.TMenubutton', [
|
2059
|
+
'Menubutton.border', {:children=>[
|
2060
|
+
'Menubutton.padding', {:children=>[
|
2061
|
+
'Arcadia.Menubutton.indicator', {:side=>:right},
|
2062
|
+
'Menubutton.focus', {:side=>:left, :children=>['Menubutton.label']}
|
2063
|
+
]}
|
2064
|
+
]}
|
2065
|
+
])
|
2066
|
+
|
2067
|
+
|
2068
|
+
#TCheckbutton,
|
2069
|
+
|
2070
|
+
Tk::Tile::Style.element_create('Arcadia.Checkbutton.indicator',
|
2071
|
+
:image, Arcadia.image_res(CHECKBOX_0_DARK_GIF),
|
2072
|
+
:map=>[
|
2073
|
+
[:pressed, :selected],Arcadia.image_res(CHECKBOX_1_DARK_GIF),
|
2074
|
+
:pressed, Arcadia.image_res(CHECKBOX_0_DARK_GIF),
|
2075
|
+
[:active, :selected], Arcadia.image_res(CHECKBOX_2_DARK_GIF),
|
2076
|
+
:active, Arcadia.image_res(CHECKBOX_0_DARK_GIF),
|
2077
|
+
:selected, Arcadia.image_res(CHECKBOX_1_DARK_GIF),
|
2078
|
+
], :sticky=>:w)
|
2079
|
+
|
2080
|
+
Tk::Tile::Style.configure("Arcadia.TCheckbutton", Arcadia.style('checkbox').update(
|
2081
|
+
'padding'=>"0 0 0 0",
|
2082
|
+
'width'=>0
|
2083
|
+
)
|
2084
|
+
)
|
2085
|
+
|
2086
|
+
Tk::Tile::Style.layout('Arcadia.TCheckbutton', [
|
2087
|
+
'Checkbutton.background', # this is not needed in tile 0.5 or later
|
2088
|
+
'Checkbutton.border', {:children=>[
|
2089
|
+
'Checkbutton.padding', {:children=>[
|
2090
|
+
'Arcadia.Checkbutton.indicator', {:side=>:left},
|
2091
|
+
'Checkbutton.focus', {:side=>:left, :children=>[
|
2092
|
+
'Checkbutton.label'
|
2093
|
+
]}
|
2094
|
+
]}
|
2095
|
+
]}
|
2096
|
+
])
|
2097
|
+
|
2098
|
+
|
2099
|
+
Tk::Tile::Style.configure("Arcadia.Title.TCheckbutton", Arcadia.style('titlelabel').update(
|
2100
|
+
'padding'=>"0 0 0 0",
|
2101
|
+
'width'=>0
|
2102
|
+
)
|
2103
|
+
)
|
2104
|
+
|
2105
|
+
Tk::Tile::Style.layout('Arcadia.Title.TCheckbutton', [
|
2106
|
+
'Checkbutton.background', # this is not needed in tile 0.5 or later
|
2107
|
+
'Checkbutton.border', {:children=>[
|
2108
|
+
'Checkbutton.padding', {:children=>[
|
2109
|
+
'Arcadia.Checkbutton.indicator', {:side=>:left},
|
2110
|
+
'Checkbutton.focus', {:side=>:left, :children=>[
|
2111
|
+
'Checkbutton.label'
|
2112
|
+
]}
|
2113
|
+
]}
|
2114
|
+
]}
|
2115
|
+
])
|
2116
|
+
|
2117
|
+
#Combobox
|
2118
|
+
|
2119
|
+
|
2120
|
+
Tk::Tile::Style.element_create('Arcadia.Combobox.indicator',
|
2121
|
+
:image, Arcadia.image_res(DROP_DOWN_ARROW_GIF),
|
2122
|
+
:sticky=>:w)
|
2123
|
+
|
2124
|
+
Tk::Tile::Style.configure("Arcadia.TCombobox", Arcadia.style('combobox').update(
|
2125
|
+
'padding'=>"0 0 0 0",
|
2126
|
+
'width'=>0
|
2127
|
+
# 'borderwidth'=>1,
|
2128
|
+
# 'relief'=>'groove'
|
2129
|
+
)
|
2130
|
+
)
|
2131
|
+
|
2132
|
+
# Tk::Tile::Style.map("Arcadia.TCombobox",
|
2133
|
+
# :relief=>[:pressed, :flat])
|
2134
|
+
|
2135
|
+
Tk::Tile::Style.layout('Arcadia.TCombobox', [
|
2136
|
+
'Combobox.border', {:children=>[
|
2137
|
+
'Combobox.padding', {:children=>[
|
2138
|
+
'Arcadia.Combobox.indicator', {:side=>:right},
|
2139
|
+
'Combobox.focus', {:side=>:left, :children=>['Combobox.label']}
|
2140
|
+
]}
|
2141
|
+
]}
|
2142
|
+
])
|
2143
|
+
|
2144
|
+
|
2145
|
+
#Tk::Tile::Style.configure(Tk::Tile::TLabel, Arcadia.style('label'))
|
2146
|
+
#TLabel
|
2147
|
+
Tk::Tile::Style.configure("Arcadia.TLabel", Arcadia.style('label'))
|
2148
|
+
|
1752
2149
|
|
1753
2150
|
#TButton
|
1754
|
-
|
2151
|
+
Tk::Tile::Style.configure("Arcadia.TButton", Arcadia.style('button').update(
|
2152
|
+
'padding'=>"0 0 0 0"
|
2153
|
+
# ,
|
2154
|
+
# 'borderwidth'=>1,
|
2155
|
+
# 'relief'=>'groove'
|
2156
|
+
)
|
2157
|
+
)
|
2158
|
+
Tk::Tile::Style.map("Arcadia.TButton",
|
2159
|
+
:background=>[:pressed, Arcadia.style('button')['activebackground'], :disabled, Arcadia.style('button')['background'], :active, Arcadia.style('button')['activebackground']],
|
2160
|
+
:foreground=>[:pressed, Arcadia.style('button')['activeforeground'], :disabled, Arcadia.style('button')['foreground'], :active, Arcadia.style('button')['activeforeground']],
|
2161
|
+
:relief=>[:pressed, :sunken])
|
2162
|
+
|
2163
|
+
#Tool.TButton
|
2164
|
+
Tk::Tile::Style.configure("Arcadia.Tool.TButton", Arcadia.style('toolbarbutton').update(
|
2165
|
+
'padding'=>"0 0 0 0",
|
2166
|
+
'anchor'=>'w'
|
2167
|
+
)
|
2168
|
+
)
|
2169
|
+
Tk::Tile::Style.map("Arcadia.Tool.TButton",
|
2170
|
+
:background=>[:pressed, Arcadia.style('button')['activebackground'], :disabled, Arcadia.style('toolbarbutton')['background'], :active, Arcadia.style('toolbarbutton')['activebackground']],
|
2171
|
+
:arrowcolor=>[:pressed, Arcadia.style('button')['background'], :disabled, Arcadia.style('toolbarbutton')['highlightbackground'], :active, Arcadia.style('toolbarbutton')['background']],
|
2172
|
+
:relief=>[:pressed, :sunken])
|
2173
|
+
|
2174
|
+
#Title.Tool.TButton
|
2175
|
+
Tk::Tile::Style.configure("Arcadia.Title.Tool.TButton", Arcadia.style('titletoolbarbutton').update(
|
2176
|
+
'padding'=>"0 0 0 0"
|
2177
|
+
)
|
2178
|
+
)
|
2179
|
+
Tk::Tile::Style.map("Arcadia.Title.Tool.TButton",
|
2180
|
+
:background=>[:pressed, Arcadia.style('button')['activebackground'], :disabled, Arcadia.style('titletoolbarbutton')['background'], :active, Arcadia.style('toolbarbutton')['activebackground']],
|
2181
|
+
:arrowcolor=>[:pressed, Arcadia.style('button')['background'], :disabled, Arcadia.style('titletoolbarbutton')['highlightbackground'], :active, Arcadia.style('toolbarbutton')['background']],
|
2182
|
+
:relief=>[:pressed, :sunken])
|
2183
|
+
|
2184
|
+
end
|
2185
|
+
|
2186
|
+
|
2187
|
+
|
2188
|
+
def scrollbar(_parent,_args={}, &b)
|
2189
|
+
begin
|
2190
|
+
if @use_tile
|
2191
|
+
obj = Tk::Tile::Scrollbar.new(_parent,{:style=>"Arcadia.TScrollbar"}.update(_args), &b)
|
2192
|
+
else
|
2193
|
+
obj = TkScrollbar.new(_parent,Arcadia.style('scrollbar').update(_args), &b)
|
2194
|
+
end
|
2195
|
+
class << obj
|
2196
|
+
include WidgetEnhancer
|
2197
|
+
end
|
2198
|
+
return obj
|
2199
|
+
rescue RuntimeError => e
|
2200
|
+
Arcadia.runtime_error(e)
|
2201
|
+
end
|
2202
|
+
end
|
2203
|
+
|
2204
|
+
def label(_parent,_args={}, &b)
|
2205
|
+
begin
|
2206
|
+
if @use_tile
|
2207
|
+
obj = Tk::Tile::TLabel.new(_parent,{:style=>"Arcadia.TLabel"}.update(_args), &b)
|
2208
|
+
else
|
2209
|
+
obj = TkLabel.new(_parent,Arcadia.style('label').update(_args), &b)
|
2210
|
+
end
|
2211
|
+
class << obj
|
2212
|
+
include WidgetEnhancer
|
2213
|
+
end
|
2214
|
+
return obj
|
2215
|
+
rescue RuntimeError => e
|
2216
|
+
Arcadia.runtime_error(e)
|
2217
|
+
return nil
|
2218
|
+
end
|
2219
|
+
end
|
2220
|
+
|
2221
|
+
def button(_parent,_args={}, &b)
|
2222
|
+
begin
|
2223
|
+
if @use_tile
|
2224
|
+
obj = Tk::Tile::Button.new(_parent,{:style=>"Arcadia.TButton"}.update(_args), &b)
|
2225
|
+
else
|
2226
|
+
obj = TkButton.new(_parent,Arcadia.style('button').update(_args), &b)
|
2227
|
+
end
|
2228
|
+
class << obj
|
2229
|
+
include WidgetEnhancer
|
2230
|
+
end
|
2231
|
+
return obj
|
2232
|
+
rescue RuntimeError => e
|
2233
|
+
Arcadia.runtime_error(e)
|
2234
|
+
return nil
|
2235
|
+
end
|
2236
|
+
end
|
2237
|
+
|
2238
|
+
def toolbutton(_parent,_args={}, &b)
|
2239
|
+
begin
|
2240
|
+
if @use_tile
|
2241
|
+
obj = Tk::Tile::Button.new(_parent,{:style=>"Arcadia.Tool.TButton"}.update(_args), &b)
|
2242
|
+
else
|
2243
|
+
obj = TkButton.new(_parent,Arcadia.style('toolbarbutton').update(_args), &b)
|
2244
|
+
end
|
2245
|
+
class << obj
|
2246
|
+
include WidgetEnhancer
|
2247
|
+
end
|
2248
|
+
return obj
|
2249
|
+
rescue RuntimeError => e
|
2250
|
+
Arcadia.runtime_error(e)
|
2251
|
+
return nil
|
2252
|
+
end
|
2253
|
+
end
|
2254
|
+
|
2255
|
+
def titletoolbutton(_parent,_args={}, &b)
|
2256
|
+
begin
|
2257
|
+
if @use_tile
|
2258
|
+
obj = Tk::Tile::Button.new(_parent,{:style=>"Arcadia.Title.Tool.TButton"}.update(_args), &b)
|
2259
|
+
else
|
2260
|
+
obj = TkButton.new(_parent,Arcadia.style('toolbarbutton').update(_args), &b)
|
2261
|
+
end
|
2262
|
+
class << obj
|
2263
|
+
include WidgetEnhancer
|
2264
|
+
end
|
2265
|
+
return obj
|
2266
|
+
rescue RuntimeError => e
|
2267
|
+
Arcadia.runtime_error(e)
|
2268
|
+
return nil
|
2269
|
+
end
|
2270
|
+
end
|
2271
|
+
|
2272
|
+
def menubutton(_parent,_args={}, &b)
|
2273
|
+
begin
|
2274
|
+
if @use_tile
|
2275
|
+
obj = Tk::Tile::Menubutton.new(_parent,{:style=>"Arcadia.TMenubutton"}.update(_args), &b)
|
2276
|
+
else
|
2277
|
+
obj = TkMenuButton.new(_parent,Arcadia.style('menubutton').update(_args), &b)
|
2278
|
+
end
|
2279
|
+
class << obj
|
2280
|
+
include WidgetEnhancer
|
2281
|
+
end
|
2282
|
+
return obj
|
2283
|
+
rescue RuntimeError => e
|
2284
|
+
Arcadia.runtime_error(e)
|
2285
|
+
return nil
|
2286
|
+
end
|
2287
|
+
end
|
2288
|
+
|
2289
|
+
def combobox(_parent,_args={}, &b)
|
2290
|
+
begin
|
2291
|
+
if @use_tile
|
2292
|
+
obj = Tk::Tile::Combobox.new(_parent,{:style=>"Arcadia.TCombobox"}.update(_args), &b)
|
2293
|
+
else
|
2294
|
+
obj = Tk::BWidget::ComboBox.new(_parent, Arcadia.style('combobox').update(_args), &b)
|
2295
|
+
end
|
2296
|
+
class << obj
|
2297
|
+
include WidgetEnhancer
|
2298
|
+
end
|
2299
|
+
return obj
|
2300
|
+
rescue RuntimeError => e
|
2301
|
+
Arcadia.runtime_error(e)
|
2302
|
+
return nil
|
2303
|
+
end
|
2304
|
+
end
|
2305
|
+
|
2306
|
+
def titlemenubutton(_parent, _args={}, &b)
|
2307
|
+
begin
|
2308
|
+
if @use_tile
|
2309
|
+
obj = Tk::Tile::Menubutton.new(_parent,{:style=>"Arcadia.Title.TMenubutton"}.update(_args), &b)
|
2310
|
+
else
|
2311
|
+
obj = TkMenuButton.new(_parent,Arcadia.style('menubutton').update(_args), &b)
|
2312
|
+
end
|
2313
|
+
class << obj
|
2314
|
+
include WidgetEnhancer
|
2315
|
+
end
|
2316
|
+
return obj
|
2317
|
+
rescue RuntimeError => e
|
2318
|
+
Arcadia.runtime_error(e)
|
2319
|
+
return nil
|
2320
|
+
end
|
1755
2321
|
end
|
1756
2322
|
|
1757
|
-
def
|
2323
|
+
def titlecontextmenubutton(_parent, _args={}, &b)
|
1758
2324
|
begin
|
1759
2325
|
if @use_tile
|
1760
|
-
|
2326
|
+
obj = Tk::Tile::Menubutton.new(_parent,{:style=>"Arcadia.Title.Context.TMenubutton"}.update(_args), &b)
|
1761
2327
|
else
|
1762
|
-
|
2328
|
+
obj = TkMenuButton.new(_parent,Arcadia.style('menubutton').update(_args), &b)
|
2329
|
+
end
|
2330
|
+
class << obj
|
2331
|
+
include WidgetEnhancer
|
1763
2332
|
end
|
2333
|
+
return obj
|
1764
2334
|
rescue RuntimeError => e
|
1765
2335
|
Arcadia.runtime_error(e)
|
2336
|
+
return nil
|
1766
2337
|
end
|
1767
2338
|
end
|
1768
2339
|
|
2340
|
+
def checkbutton(_parent, _args={}, &b)
|
2341
|
+
begin
|
2342
|
+
if @use_tile
|
2343
|
+
obj = Tk::Tile::Checkbutton.new(_parent,{:style=>"Arcadia.TCheckbutton"}.update(_args), &b)
|
2344
|
+
else
|
2345
|
+
obj = TkCheckbutton.new(_parent,Arcadia.style('checkbox').update(_args), &b)
|
2346
|
+
end
|
2347
|
+
class << obj
|
2348
|
+
include WidgetEnhancer
|
2349
|
+
end
|
2350
|
+
return obj
|
2351
|
+
rescue RuntimeError => e
|
2352
|
+
Arcadia.runtime_error(e)
|
2353
|
+
return nil
|
2354
|
+
end
|
2355
|
+
end
|
2356
|
+
|
2357
|
+
def titlecontextcheckbutton(_parent, _args={}, &b)
|
2358
|
+
begin
|
2359
|
+
if @use_tile
|
2360
|
+
obj = Tk::Tile::Checkbutton.new(_parent,{:style=>"Arcadia.Title.TCheckbutton"}.update(_args), &b)
|
2361
|
+
else
|
2362
|
+
obj = TkCheckbutton.new(_parent,Arcadia.style('checkbox').update(_args), &b)
|
2363
|
+
end
|
2364
|
+
class << obj
|
2365
|
+
include WidgetEnhancer
|
2366
|
+
end
|
2367
|
+
return obj
|
2368
|
+
rescue RuntimeError => e
|
2369
|
+
Arcadia.runtime_error(e)
|
2370
|
+
return nil
|
2371
|
+
end
|
2372
|
+
end
|
2373
|
+
|
2374
|
+
def menu(_parent,_args={}, &b)
|
2375
|
+
begin
|
2376
|
+
obj = TkMenu.new(_parent, &b)
|
2377
|
+
if !OS.mac?
|
2378
|
+
obj.configure(Arcadia.style('menu').update(_args))
|
2379
|
+
obj.extend(TkAutoPostMenu)
|
2380
|
+
end
|
2381
|
+
return obj
|
2382
|
+
rescue RuntimeError => e
|
2383
|
+
Arcadia.runtime_error(e)
|
2384
|
+
return nil
|
2385
|
+
end
|
2386
|
+
end
|
2387
|
+
|
2388
|
+
def titlemenu(_parent,_args={}, &b)
|
2389
|
+
begin
|
2390
|
+
obj = TkMenu.new(_parent, &b)
|
2391
|
+
if !OS.mac?
|
2392
|
+
obj.configure(Arcadia.style('titlemenu').update(_args))
|
2393
|
+
obj.extend(TkAutoPostMenu)
|
2394
|
+
end
|
2395
|
+
return obj
|
2396
|
+
rescue RuntimeError => e
|
2397
|
+
Arcadia.runtime_error(e)
|
2398
|
+
return nil
|
2399
|
+
end
|
2400
|
+
end
|
2401
|
+
|
2402
|
+
|
1769
2403
|
end
|
1770
2404
|
|
1771
2405
|
|
@@ -2174,4 +2808,562 @@ class KeyTest < TkFloatTitledFrame
|
|
2174
2808
|
@ttest.extend(TkScrollableWidget).show
|
2175
2809
|
place('x'=>100,'y'=>100,'height'=> 220,'width'=> 500)
|
2176
2810
|
end
|
2811
|
+
end
|
2812
|
+
|
2813
|
+
class HinnerDialog < TkFrame
|
2814
|
+
def initialize(side='top',args=nil)
|
2815
|
+
newargs = Arcadia.style('panel').update({
|
2816
|
+
"highlightbackground" => Arcadia.conf('hightlight.link.foreground'),
|
2817
|
+
"highlightthickness" => 1
|
2818
|
+
})
|
2819
|
+
if !args.nil?
|
2820
|
+
newargs.update(args)
|
2821
|
+
end
|
2822
|
+
super(Arcadia.layout.parent_frame, newargs)
|
2823
|
+
case side
|
2824
|
+
when 'top'
|
2825
|
+
# self.pack('side' =>side,'before'=>Arcadia.layout.root, 'anchor'=>'nw','fill'=>'both', 'padx'=>0, 'pady'=>0, 'expand'=>'yes')
|
2826
|
+
self.pack('side' =>side,'before'=>Arcadia.layout.root, 'anchor'=>'nw','fill'=>'x', 'padx'=>0, 'pady'=>0)
|
2827
|
+
when 'bottom'
|
2828
|
+
self.pack('side' =>side,'after'=>Arcadia.layout.root, 'anchor'=>'nw','fill'=>'x', 'padx'=>0, 'pady'=>0)
|
2829
|
+
end
|
2830
|
+
@modal = false
|
2831
|
+
end
|
2832
|
+
|
2833
|
+
def is_modal?
|
2834
|
+
@modal
|
2835
|
+
end
|
2836
|
+
|
2837
|
+
def release
|
2838
|
+
@modal=false
|
2839
|
+
end
|
2840
|
+
|
2841
|
+
def show_modal(_destroy=true)
|
2842
|
+
@modal=true
|
2843
|
+
Tk.update
|
2844
|
+
self.grab("set")
|
2845
|
+
begin
|
2846
|
+
while is_modal? do
|
2847
|
+
Tk.update
|
2848
|
+
sleep(0.1)
|
2849
|
+
end
|
2850
|
+
ensure
|
2851
|
+
self.grab("release")
|
2852
|
+
end
|
2853
|
+
Tk.update
|
2854
|
+
self.destroy if _destroy
|
2855
|
+
end
|
2856
|
+
end
|
2857
|
+
|
2858
|
+
|
2859
|
+
class HinnerSplittedDialog < HinnerDialog
|
2860
|
+
attr_reader :frame, :splitter_frame
|
2861
|
+
def initialize(side='top', height=100, args=nil)
|
2862
|
+
super(side, args)
|
2863
|
+
y0 = height
|
2864
|
+
fr = TkFrame.new(self){
|
2865
|
+
height y0
|
2866
|
+
pack('side' =>side,'padx'=>0, 'pady'=>0, 'fill'=>'x', 'expand'=>'1')
|
2867
|
+
}
|
2868
|
+
splitter_frame = TkFrame.new(self, Arcadia.style('splitter')){
|
2869
|
+
height 5
|
2870
|
+
pack('side' =>side,'padx'=>0, 'pady'=>0, 'fill'=>'x', 'expand'=>'1')
|
2871
|
+
}
|
2872
|
+
oldcursor = splitter_frame.cget('cursor')
|
2873
|
+
tmpcursor = 'sb_v_double_arrow'
|
2874
|
+
yx=0
|
2875
|
+
|
2876
|
+
splitter_frame.bind_append("Enter", proc{|x, y|
|
2877
|
+
splitter_frame.configure('cursor'=> tmpcursor)
|
2878
|
+
} , "%x %y")
|
2879
|
+
|
2880
|
+
splitter_frame.bind_append("B1-Motion", proc{|x, y|
|
2881
|
+
yx=y
|
2882
|
+
splitter_frame.raise
|
2883
|
+
} ,"%x %y")
|
2884
|
+
|
2885
|
+
splitter_frame.bind_append("ButtonRelease-1", proc{|e|
|
2886
|
+
splitter_frame.configure('cursor'=> oldcursor)
|
2887
|
+
if side == 'top'
|
2888
|
+
h = (y0+yx).abs
|
2889
|
+
elsif side == 'bottom'
|
2890
|
+
h = (y0-yx).abs
|
2891
|
+
end
|
2892
|
+
y0 = h
|
2893
|
+
fr.configure('height'=>h)
|
2894
|
+
})
|
2895
|
+
@frame = fr
|
2896
|
+
@splitter_frame = splitter_frame
|
2897
|
+
end
|
2898
|
+
end
|
2899
|
+
|
2900
|
+
class HinnerSplittedDialogTitled < HinnerSplittedDialog
|
2901
|
+
attr_accessor :hinner_frame
|
2902
|
+
def initialize(title=nil, side='top', height=100, args=nil)
|
2903
|
+
super(side, height, args)
|
2904
|
+
btf = TkLabelTitledFrameClosable.new(self.frame, title).place('x'=>0, 'y'=>0,'relheight'=>1, 'relwidth'=>1)
|
2905
|
+
close = proc{
|
2906
|
+
self.destroy
|
2907
|
+
Tk.callback_break
|
2908
|
+
}
|
2909
|
+
btf.add_close_action(close)
|
2910
|
+
@hinner_frame = btf.frame
|
2911
|
+
end
|
2912
|
+
end
|
2913
|
+
|
2914
|
+
class HinnerFileDialog < HinnerDialog
|
2915
|
+
SELECT_FILE_MODE=0
|
2916
|
+
SAVE_FILE_MODE=1
|
2917
|
+
SELECT_DIR_MODE=2
|
2918
|
+
def initialize(mode=SELECT_FILE_MODE , must_exist = nil, side='top',args=nil)
|
2919
|
+
super(side, args)
|
2920
|
+
@mode = mode
|
2921
|
+
if must_exist.nil?
|
2922
|
+
must_exist = mode != SAVE_FILE_MODE
|
2923
|
+
end
|
2924
|
+
@must_exist = must_exist
|
2925
|
+
build_gui
|
2926
|
+
@closed = false
|
2927
|
+
end
|
2928
|
+
|
2929
|
+
def build_gui
|
2930
|
+
@font = Arcadia.conf('edit.font')
|
2931
|
+
@font_bold = "#{Arcadia.conf('edit.font')} bold"
|
2932
|
+
@font_metrics = TkFont.new(@font).metrics
|
2933
|
+
@font_metrics_bold = TkFont.new(@font_bold).metrics
|
2934
|
+
@dir_text = TkText.new(self, Arcadia.style('text').update({"height"=>'1',"highlightcolor"=>Arcadia.conf('panel.background'), "bg"=>Arcadia.conf('panel.background')})).pack('side' =>'left','padx'=>5, 'pady'=>5, 'fill'=>'x', 'expand'=>'1')
|
2935
|
+
#{"bg"=>'white', "height"=>'1', "borderwidth"=>0, 'font'=>@font}
|
2936
|
+
@dir_text.bind_append("Enter", proc{ @dir_text.set_insert("end")})
|
2937
|
+
#@dir_text.tag_configure("entry",'foreground'=> "red",'borderwidth'=>0, 'relief'=>'flat', 'underline'=>true)
|
2938
|
+
|
2939
|
+
@tag_file_exist = "file_exist"
|
2940
|
+
@dir_text.tag_configure(@tag_file_exist,'background'=> Arcadia.conf("hightlight.selected.background"), 'borderwidth'=>0, 'relief'=>'flat', 'underline'=>true)
|
2941
|
+
|
2942
|
+
@tag_selected = "link_selected"
|
2943
|
+
@dir_text.tag_configure(@tag_selected,'borderwidth'=>0, 'relief'=>'flat', 'underline'=>true)
|
2944
|
+
@dir_text.tag_bind(@tag_selected,"ButtonRelease-1", proc{
|
2945
|
+
self.release
|
2946
|
+
} )
|
2947
|
+
@dir_text.tag_bind(@tag_selected,"Enter", proc{@dir_text.configure('cursor'=> 'hand2')})
|
2948
|
+
@dir_text.tag_bind(@tag_selected,"Leave", proc{@dir_text.configure('cursor'=> @cursor)})
|
2949
|
+
_self=self
|
2950
|
+
@dir_text.bind_append('KeyPress'){|e|
|
2951
|
+
case e.keysym
|
2952
|
+
when 'Escape','Tab'
|
2953
|
+
i1 = @dir_text.index("insert")
|
2954
|
+
raise_candidates(i1, @dir_text.get("#{i1} linestart", i1))
|
2955
|
+
when "Return"
|
2956
|
+
if (@mode == SELECT_FILE_MODE || @mode == SAVE_FILE_MODE) && @must_exist
|
2957
|
+
str_file = @dir_text.get('1.0','end')
|
2958
|
+
if str_file && str_file.length > 0 && File.exists?(str_file.strip) && File.ftype(str_file.strip) == 'file'
|
2959
|
+
_self.release
|
2960
|
+
end
|
2961
|
+
Tk.callback_break
|
2962
|
+
elsif @mode == SELECT_DIR_MODE && @must_exist
|
2963
|
+
str_file = @dir_text.get('1.0','end')
|
2964
|
+
if str_file && str_file.length > 0 && File.exists?(str_file.strip) && File.ftype(str_file.strip) == 'directory'
|
2965
|
+
_self.release
|
2966
|
+
end
|
2967
|
+
Tk.callback_break
|
2968
|
+
else
|
2969
|
+
_self.release
|
2970
|
+
end
|
2971
|
+
end
|
2972
|
+
}
|
2973
|
+
@dir_text.bind_append('KeyRelease'){|e|
|
2974
|
+
case e.keysym
|
2975
|
+
when 'Escape','Tab', "Return"
|
2976
|
+
else
|
2977
|
+
@dir_text.tag_remove(@tag_selected,'1.0','end')
|
2978
|
+
i1 = @dir_text.index("insert - 1 chars wordstart")
|
2979
|
+
while @dir_text.get("#{i1} -1 chars",i1) != File::SEPARATOR && @dir_text.get("#{i1} - 1 chars",i1) != ""
|
2980
|
+
i1 = @dir_text.index("#{i1} - 1 chars")
|
2981
|
+
end
|
2982
|
+
i2 = @dir_text.index("insert")
|
2983
|
+
|
2984
|
+
@dir_text.tag_add(@tag_selected ,i1,i2) if @mode == SAVE_FILE_MODE
|
2985
|
+
|
2986
|
+
if File.exists?(@dir_text.get('1.0',i2))
|
2987
|
+
@dir_text.tag_add(@tag_file_exist ,i1,i2)
|
2988
|
+
@dir_text.tag_add(@tag_selected ,i1,i2) if @mode == SELECT_FILE_MODE && File.ftype(@dir_text.get('1.0',i2)) == 'file'
|
2989
|
+
@dir_text.tag_add(@tag_selected ,i1,i2) if @mode == SELECT_DIR_MODE && File.ftype(@dir_text.get('1.0',i2)) == 'directory'
|
2990
|
+
else
|
2991
|
+
@dir_text.tag_remove(@tag_file_exist,'1.0','end')
|
2992
|
+
end
|
2993
|
+
end
|
2994
|
+
}
|
2995
|
+
|
2996
|
+
@dir_text.bind_append("Control-KeyPress"){|e|
|
2997
|
+
case e.keysym
|
2998
|
+
when 'd'
|
2999
|
+
_self.close
|
3000
|
+
Tk.callback_break
|
3001
|
+
end
|
3002
|
+
}
|
3003
|
+
|
3004
|
+
#@select_button = Tk::BWidget::Button.new(self, Arcadia.style('toolbarbutton')){
|
3005
|
+
@select_button = Arcadia.wf.toolbutton(self){
|
3006
|
+
command proc{_self.close}
|
3007
|
+
image Arcadia.image_res(CLOSE_FRAME_GIF)
|
3008
|
+
}.pack('side' =>'right','padx'=>5, 'pady'=>0)
|
3009
|
+
end
|
3010
|
+
|
3011
|
+
def file(_dir)
|
3012
|
+
set_dir(_dir)
|
3013
|
+
show_modal(false)
|
3014
|
+
if @closed == false
|
3015
|
+
file_selected = @dir_text.get("0.1","end").strip
|
3016
|
+
destroy
|
3017
|
+
file_selected
|
3018
|
+
end
|
3019
|
+
end
|
3020
|
+
|
3021
|
+
def dir(_dir)
|
3022
|
+
file(_dir)
|
3023
|
+
end
|
3024
|
+
|
3025
|
+
def close
|
3026
|
+
@closed=true
|
3027
|
+
self.release
|
3028
|
+
destroy
|
3029
|
+
end
|
3030
|
+
|
3031
|
+
def set_dir(_dir)
|
3032
|
+
_dir=Dir.pwd if !File.exists?(_dir)
|
3033
|
+
#load_from_dir(_dir)
|
3034
|
+
@dir_text.state("normal")
|
3035
|
+
@dir_text.delete("0.1","end")
|
3036
|
+
@cursor = @dir_text.cget('cursor')
|
3037
|
+
dir_seg = _dir.split(File::SEPARATOR)
|
3038
|
+
incr_dir = ""
|
3039
|
+
get_dir = proc{|i|
|
3040
|
+
res = ""
|
3041
|
+
0.upto(i){|j|
|
3042
|
+
if res == File::SEPARATOR
|
3043
|
+
res=res+dir_seg[j]
|
3044
|
+
elsif res.length == 0 && dir_seg[j].length == 0
|
3045
|
+
res=File::SEPARATOR+dir_seg[j]
|
3046
|
+
elsif res.length == 0 && dir_seg[j].length > 0
|
3047
|
+
res=dir_seg[j]
|
3048
|
+
else
|
3049
|
+
res=res+File::SEPARATOR+dir_seg[j]
|
3050
|
+
end
|
3051
|
+
}
|
3052
|
+
is_dir = File.ftype(res) == "directory"
|
3053
|
+
res=res+File::SEPARATOR if is_dir && res[-1..-1]!=File::SEPARATOR
|
3054
|
+
res
|
3055
|
+
}
|
3056
|
+
|
3057
|
+
dir_seg.each_with_index{|seg,i|
|
3058
|
+
tag_name = "link#{i}"
|
3059
|
+
@dir_text.tag_configure(tag_name,'foreground'=> Arcadia.conf('hightlight.link.foreground'),'borderwidth'=>0, 'relief'=>'flat', 'underline'=>true)
|
3060
|
+
|
3061
|
+
dir = get_dir.call(i)
|
3062
|
+
if File.ftype(dir) == "directory"
|
3063
|
+
@dir_text.insert("end", seg, tag_name)
|
3064
|
+
@dir_text.insert("end", "#{File::SEPARATOR}")
|
3065
|
+
@dir_text.tag_bind(tag_name,"ButtonRelease-1", proc{
|
3066
|
+
inx = @dir_text.index("insert wordend +1 chars")
|
3067
|
+
@dir_text.set_insert("end")
|
3068
|
+
raise_candidates(inx, dir)
|
3069
|
+
} )
|
3070
|
+
@dir_text.tag_bind(tag_name,"Enter", proc{@dir_text.configure('cursor'=> 'hand2')})
|
3071
|
+
@dir_text.tag_bind(tag_name,"Leave", proc{@dir_text.configure('cursor'=> @cursor)})
|
3072
|
+
else
|
3073
|
+
@dir_text.insert("end", seg, @tag_selected)
|
3074
|
+
end
|
3075
|
+
}
|
3076
|
+
|
3077
|
+
@dir_text.focus
|
3078
|
+
@dir_text.set_insert("end")
|
3079
|
+
@dir_text.see("end")
|
3080
|
+
end
|
3081
|
+
|
3082
|
+
def raise_candidates(_inx, _dir)
|
3083
|
+
if _dir[-1..-1] != File::SEPARATOR && _dir !=nil && _dir.length > 0
|
3084
|
+
len = _dir.split(File::SEPARATOR)[-1].length+1
|
3085
|
+
_dir = _dir[0..-len]
|
3086
|
+
_inx = "#{_inx} - #{len-1} chars"
|
3087
|
+
end
|
3088
|
+
_dir=Dir.pwd if !File.exists?(_dir)
|
3089
|
+
@dir_text.set_insert("end")
|
3090
|
+
dirs_and_files=load_from_dir(_dir)
|
3091
|
+
if dirs_and_files[0].length + dirs_and_files[1].length == 1
|
3092
|
+
if dirs_and_files[0].length == 1
|
3093
|
+
one = "#{_dir}#{dirs_and_files[0][0]}"
|
3094
|
+
else
|
3095
|
+
one = "#{_dir}#{dirs_and_files[1][0]}"
|
3096
|
+
end
|
3097
|
+
set_dir(one)
|
3098
|
+
elsif dirs_and_files[0].length + dirs_and_files[1].length == 0
|
3099
|
+
# do not raise
|
3100
|
+
else
|
3101
|
+
if @mode == SELECT_DIR_MODE
|
3102
|
+
raise_dir(_inx, _dir, dirs_and_files[0], [])
|
3103
|
+
else
|
3104
|
+
raise_dir(_inx, _dir, dirs_and_files[0], dirs_and_files[1])
|
3105
|
+
end
|
3106
|
+
end
|
3107
|
+
Tk.callback_break
|
3108
|
+
end
|
3109
|
+
|
3110
|
+
def last_candidate_is_file?(_name)
|
3111
|
+
@last_candidates_file && @last_candidates_file.include?(_name)
|
3112
|
+
end
|
3113
|
+
|
3114
|
+
def last_candidate_is_dir?(_name)
|
3115
|
+
@last_candidates_dir && @last_candidates_dir.include?(_name)
|
3116
|
+
end
|
3117
|
+
|
3118
|
+
def raise_dir(_index, _dir, _candidates_dir, _candidates_file=nil)
|
3119
|
+
@raised_listbox_frame.destroy if @raised_listbox_frame != nil
|
3120
|
+
@last_candidates_dir = _candidates_dir
|
3121
|
+
@last_candidates_file = _candidates_file
|
3122
|
+
_index_now = @dir_text.index('insert')
|
3123
|
+
_index_for_raise = @dir_text.index("#{_index} wordstart")
|
3124
|
+
_candidates = []
|
3125
|
+
_candidates.concat(_candidates_dir) if _candidates_dir
|
3126
|
+
_candidates.concat(_candidates_file) if _candidates_file
|
3127
|
+
|
3128
|
+
if _candidates.length >= 1
|
3129
|
+
_rx, _ry, _width, heigth = @dir_text.bbox(_index_for_raise);
|
3130
|
+
_x = _rx + TkWinfo.rootx(@dir_text)
|
3131
|
+
_y = _ry + TkWinfo.rooty(@dir_text) + @font_metrics[2][1]
|
3132
|
+
_xroot = _x
|
3133
|
+
_yroot = _y
|
3134
|
+
|
3135
|
+
max_width = TkWinfo.screenwidth(Arcadia.layout.root) - _x
|
3136
|
+
|
3137
|
+
@raised_listbox_frame = TkFrame.new(Arcadia.layout.root, {
|
3138
|
+
:padx=>"1",
|
3139
|
+
:pady=>"1",
|
3140
|
+
:background=> "yellow"
|
3141
|
+
})
|
3142
|
+
|
3143
|
+
@raised_listbox = TkTextListBox.new(@raised_listbox_frame, {
|
3144
|
+
:takefocus=>true}.update(Arcadia.style('listbox')))
|
3145
|
+
@raised_listbox.tag_configure('file','foreground'=> Arcadia.conf('hightlight.link.foreground'),'borderwidth'=>0, 'relief'=>'flat')
|
3146
|
+
|
3147
|
+
|
3148
|
+
_char_height = @font_metrics[2][1]
|
3149
|
+
_width = 0
|
3150
|
+
_docs_entries = Hash.new
|
3151
|
+
_item_num = 0
|
3152
|
+
|
3153
|
+
_select_value = proc{
|
3154
|
+
if @raised_listbox.selected_line && @raised_listbox.selected_line.strip.length>0
|
3155
|
+
#_value = @raised_listbox.selected_line.split('-')[0].strip
|
3156
|
+
seldir = File.join(_dir,@raised_listbox.selected_line)
|
3157
|
+
|
3158
|
+
set_dir(seldir)
|
3159
|
+
@raised_listbox_frame.grab("release")
|
3160
|
+
@raised_listbox_frame.destroy
|
3161
|
+
end
|
3162
|
+
}
|
3163
|
+
|
3164
|
+
_update_list = proc{|_in|
|
3165
|
+
_in.strip!
|
3166
|
+
@raised_listbox.clear
|
3167
|
+
_length = 0
|
3168
|
+
_candidates.each{|value|
|
3169
|
+
_doc = value.strip
|
3170
|
+
_class, _key, _arity = _doc.split('#')
|
3171
|
+
if _key && _arity
|
3172
|
+
args = arity_to_str(_arity.to_i)
|
3173
|
+
if args.length > 0
|
3174
|
+
_key = "#{_key}(#{args})"
|
3175
|
+
end
|
3176
|
+
end
|
3177
|
+
|
3178
|
+
if _key && _class && _key.strip.length > 0 && _class.strip.length > 0
|
3179
|
+
_item = "#{_key.strip} #{TkTextListBox::SEP} #{_class.strip}"
|
3180
|
+
elsif _key && _key.strip.length > 0
|
3181
|
+
_item = "#{_key.strip}"
|
3182
|
+
else
|
3183
|
+
_key = "#{_doc.strip}"
|
3184
|
+
_item = "#{_doc.strip}"
|
3185
|
+
end
|
3186
|
+
array_include = proc{|_a, _str, _asterisk_first_char|
|
3187
|
+
ret = true
|
3188
|
+
str = _str
|
3189
|
+
_a.each_with_index{|x, j|
|
3190
|
+
next if x.length == 0
|
3191
|
+
if j == 0 && !_asterisk_first_char
|
3192
|
+
ret = ret && str[0..x.length-1] == x
|
3193
|
+
else
|
3194
|
+
ret = ret && str.include?(x)
|
3195
|
+
end
|
3196
|
+
if ret
|
3197
|
+
i = str.index(x)
|
3198
|
+
str = str[i+x.length..-1]
|
3199
|
+
else
|
3200
|
+
break
|
3201
|
+
end
|
3202
|
+
}
|
3203
|
+
ret
|
3204
|
+
}
|
3205
|
+
if _in.nil? || _in.strip.length == 0 || _item[0.._in.length-1] == _in ||
|
3206
|
+
(_in.include?('*') && array_include.call(_in.split("*"), _item, _in[0..1]=='*'))
|
3207
|
+
# (_in[0..0] == '*' && _item.include?(_in[1..-1]))
|
3208
|
+
|
3209
|
+
_docs_entries[_item]= _doc
|
3210
|
+
# @raised_listbox.insert('end', _item)
|
3211
|
+
if last_candidate_is_dir?(_item)
|
3212
|
+
@raised_listbox.add(_item, 'file')
|
3213
|
+
else
|
3214
|
+
@raised_listbox.add(_item)
|
3215
|
+
end
|
3216
|
+
_temp_length = _item.length
|
3217
|
+
_length = _temp_length if _temp_length > _length
|
3218
|
+
_item_num = _item_num+1
|
3219
|
+
_last_valid_key = _key
|
3220
|
+
end
|
3221
|
+
}
|
3222
|
+
_width = _length*8
|
3223
|
+
if @raised_listbox.length == 0
|
3224
|
+
@raised_listbox.grab("release")
|
3225
|
+
@raised_listbox_frame.destroy
|
3226
|
+
@dir_text.focus
|
3227
|
+
Tk.callback_break
|
3228
|
+
#Tk.event_generate(@raised_listbox, "KeyPress" , :keysym=>"Escape") if TkWinfo.mapped?(@raised_listbox)
|
3229
|
+
else
|
3230
|
+
@raised_listbox.select(1)
|
3231
|
+
Tk.event_generate(@raised_listbox, "1") if TkWinfo.mapped?(@raised_listbox)
|
3232
|
+
end
|
3233
|
+
}
|
3234
|
+
|
3235
|
+
get_filter = proc{
|
3236
|
+
filter = ""
|
3237
|
+
if @dir_text.get("insert -1 chars", "insert") != File::SEPARATOR
|
3238
|
+
file_str = @dir_text.get("insert linestart", "insert")
|
3239
|
+
parts = file_str.split(File::SEPARATOR)
|
3240
|
+
if _dir == File::SEPARATOR
|
3241
|
+
original_parts = [""]
|
3242
|
+
else
|
3243
|
+
original_parts = _dir.split(File::SEPARATOR)
|
3244
|
+
end
|
3245
|
+
if parts && parts.length == original_parts.length + 1
|
3246
|
+
filter = parts[-1]
|
3247
|
+
end
|
3248
|
+
end
|
3249
|
+
filter = "" if filter.nil?
|
3250
|
+
filter
|
3251
|
+
}
|
3252
|
+
#filter = @dir_text.get("insert -1 chars wordstart", "insert")
|
3253
|
+
|
3254
|
+
|
3255
|
+
@raised_listbox.bind_append('KeyPress'){|e|
|
3256
|
+
is_list_for_update = false
|
3257
|
+
case e.keysym
|
3258
|
+
when 'a'..'z','A'..'Z','0'..'9'
|
3259
|
+
@dir_text.insert('end', e.keysym)
|
3260
|
+
@dir_text.see("end")
|
3261
|
+
is_list_for_update = true
|
3262
|
+
when 'minus'
|
3263
|
+
@dir_text.insert('end', e.char)
|
3264
|
+
@dir_text.see("end")
|
3265
|
+
is_list_for_update = true
|
3266
|
+
when 'period'
|
3267
|
+
@dir_text.insert('end', '.')
|
3268
|
+
@dir_text.see("end")
|
3269
|
+
is_list_for_update = true
|
3270
|
+
when 'BackSpace'
|
3271
|
+
if @dir_text.get("insert -1 chars", "insert") != File::SEPARATOR
|
3272
|
+
@dir_text.delete('end -2 chars','end')
|
3273
|
+
end
|
3274
|
+
is_list_for_update = true
|
3275
|
+
when 'Escape'
|
3276
|
+
@raised_listbox.grab("release")
|
3277
|
+
@raised_listbox_frame.destroy
|
3278
|
+
@dir_text.focus
|
3279
|
+
Tk.callback_break
|
3280
|
+
when "Next","Prior"
|
3281
|
+
when "Down","Up"
|
3282
|
+
Tk.callback_break
|
3283
|
+
else
|
3284
|
+
Tk.callback_break
|
3285
|
+
end
|
3286
|
+
_update_list.call(get_filter.call) if is_list_for_update
|
3287
|
+
@raised_listbox.focus
|
3288
|
+
Tk.callback_break if !["Next","Prior"].include?(e.keysym)
|
3289
|
+
}
|
3290
|
+
|
3291
|
+
@raised_listbox.bind_append('Shift-KeyPress'){|e|
|
3292
|
+
is_list_for_update = false
|
3293
|
+
case e.keysym
|
3294
|
+
when 'asterisk','underscore'
|
3295
|
+
@dir_text.insert('end', e.char)
|
3296
|
+
@dir_text.see("end")
|
3297
|
+
is_list_for_update = true
|
3298
|
+
when 'a'..'z','A'..'Z'
|
3299
|
+
@dir_text.insert('end', e.keysym)
|
3300
|
+
@dir_text.see("end")
|
3301
|
+
is_list_for_update = true
|
3302
|
+
|
3303
|
+
end
|
3304
|
+
_update_list.call(get_filter.call) if is_list_for_update
|
3305
|
+
@raised_listbox.focus
|
3306
|
+
Tk.callback_break
|
3307
|
+
}
|
3308
|
+
|
3309
|
+
@raised_listbox.bind_append('KeyRelease'){|e|
|
3310
|
+
case e.keysym
|
3311
|
+
when 'Return'
|
3312
|
+
_select_value.call
|
3313
|
+
end
|
3314
|
+
}
|
3315
|
+
|
3316
|
+
_update_list.call(get_filter.call)
|
3317
|
+
|
3318
|
+
if @raised_listbox.length == 1
|
3319
|
+
_select_value.call
|
3320
|
+
else
|
3321
|
+
_width = _width + 30
|
3322
|
+
_width = max_width if _width > max_width
|
3323
|
+
_height = 15*_char_height
|
3324
|
+
|
3325
|
+
@raised_listbox_frame.place('x'=>_x,'y'=>_ry, 'width'=>_width, 'height'=>_height)
|
3326
|
+
@raised_listbox.extend(TkScrollableWidget).show(0,0)
|
3327
|
+
@raised_listbox.place('x'=>0,'y'=>0, 'relwidth'=>1, 'relheight'=>1)
|
3328
|
+
@raised_listbox.focus
|
3329
|
+
@raised_listbox.select(1)
|
3330
|
+
|
3331
|
+
Tk.update
|
3332
|
+
@raised_listbox_frame.grab("set")
|
3333
|
+
|
3334
|
+
|
3335
|
+
|
3336
|
+
@raised_listbox.bind_append("Double-ButtonPress-1",
|
3337
|
+
proc{|x,y|
|
3338
|
+
_select_value.call
|
3339
|
+
Tk.callback_break
|
3340
|
+
}, "%x %y")
|
3341
|
+
|
3342
|
+
end
|
3343
|
+
elsif _candidates.length == 1 && _candidates[0].length>0
|
3344
|
+
@dir_text.set_dir(_candidates[0])
|
3345
|
+
end
|
3346
|
+
end
|
3347
|
+
|
3348
|
+
|
3349
|
+
def load_from_dir(_dir)
|
3350
|
+
childrens = Dir.entries(_dir)
|
3351
|
+
childrens_dir = Array.new
|
3352
|
+
childrens_file = Array.new
|
3353
|
+
childrens.sort.each{|c|
|
3354
|
+
if c != '.' && c != '..'
|
3355
|
+
child = File.join(_dir,c)
|
3356
|
+
fty = File.ftype(child)
|
3357
|
+
if fty == "file"
|
3358
|
+
childrens_file << c
|
3359
|
+
#childrens_file << child
|
3360
|
+
elsif fty == "directory"
|
3361
|
+
#childrens_dir << child
|
3362
|
+
childrens_dir << c
|
3363
|
+
end
|
3364
|
+
end
|
3365
|
+
}
|
3366
|
+
return childrens_dir,childrens_file
|
3367
|
+
end
|
3368
|
+
|
2177
3369
|
end
|