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
data/lib/a-tkcommons.rb
CHANGED
@@ -98,7 +98,7 @@ module TkMovable
|
|
98
98
|
@moving_obj_m = _moving_obj
|
99
99
|
@moved_obj_m = _moved_obj
|
100
100
|
@moving_obj_m.bind_append("B1-Motion", proc{|x, y| moving_do_move_obj(x,y)},"%x %y")
|
101
|
-
@moving_obj_m.bind_append("ButtonPress-1", proc{|
|
101
|
+
@moving_obj_m.bind_append("ButtonPress-1", proc{|x, y| moving_do_press(x, y)},"%x %y")
|
102
102
|
end
|
103
103
|
|
104
104
|
def stop_moving
|
@@ -128,7 +128,7 @@ module TkResizable
|
|
128
128
|
@moving_obj_r = _moving_obj
|
129
129
|
@moved_obj_r = _moved_obj
|
130
130
|
@moving_obj_r.bind_append("B1-Motion", proc{|x, y| resizing_do_move_obj(x,y)},"%x %y")
|
131
|
-
@moving_obj_r.bind_append("ButtonPress-1", proc{|
|
131
|
+
@moving_obj_r.bind_append("ButtonPress-1", proc{|x, y| resizing_do_press(x, y)},"%x %y")
|
132
132
|
end
|
133
133
|
|
134
134
|
def stop_resizing
|
@@ -189,7 +189,7 @@ class AGTkObjPlace
|
|
189
189
|
@cursor = _cursor
|
190
190
|
if _bind
|
191
191
|
@obj.bind_append("Enter", proc{|x, y| do_enter(x, y)}, "%x %y")
|
192
|
-
@obj.bind_append("ButtonPress-1", proc{|
|
192
|
+
@obj.bind_append("ButtonPress-1", proc{|x, y| do_press(x,y)}, "%x %y")
|
193
193
|
@obj.bind_append("B1-Motion", proc{|x, y| do_motion(x,y)},"%x %y")
|
194
194
|
end
|
195
195
|
end
|
@@ -289,6 +289,9 @@ class TkFrameAdapter < TkFrame
|
|
289
289
|
end
|
290
290
|
|
291
291
|
def attach_frame(_frame, _extension = nil, _frame_index=0)
|
292
|
+
if _frame.kind_of?(Tk::ScrollFrame)
|
293
|
+
_frame = _frame.baseframe
|
294
|
+
end
|
292
295
|
@frame = _frame
|
293
296
|
refresh_layout_manager
|
294
297
|
self.map
|
@@ -820,9 +823,281 @@ class AGTkOSplittedFrames < AGTkSplittedFrames
|
|
820
823
|
|
821
824
|
def show(_name)
|
822
825
|
end
|
826
|
+
|
827
|
+
end
|
828
|
+
|
829
|
+
|
830
|
+
class Tk::ScrollFrame < TkFrame
|
831
|
+
include TkComposite
|
832
|
+
|
833
|
+
# DEFAULT_WIDTH = 200
|
834
|
+
# DEFAULT_HEIGHT = 200
|
835
|
+
|
836
|
+
def baseframe
|
837
|
+
#@frame
|
838
|
+
@base
|
839
|
+
end
|
840
|
+
|
841
|
+
def initialize_composite(keys={})
|
842
|
+
#@frame.configure(:width=>DEFAULT_WIDTH, :height=>DEFAULT_HEIGHT)
|
843
|
+
|
844
|
+
# create scrollbars
|
845
|
+
# @h_scroll = TkScrollbar.new(@frame, 'orient'=>'horizontal')
|
846
|
+
# @v_scroll = TkScrollbar.new(@frame, 'orient'=>'vertical')
|
823
847
|
|
848
|
+
@v_scroll = Arcadia.wf.scrollbar(@frame,{'orient'=>'vertical'})
|
849
|
+
@h_scroll = Arcadia.wf.scrollbar(@frame,{'orient'=>'horizontal'})
|
850
|
+
|
851
|
+
|
852
|
+
# create a canvas widget
|
853
|
+
@canvas = TkCanvas.new(@frame,
|
854
|
+
:borderwidth=>0, :selectborderwidth=>0,
|
855
|
+
:highlightthickness=>0)
|
856
|
+
|
857
|
+
# allignment
|
858
|
+
TkGrid.rowconfigure(@frame, 0, 'weight'=>1, 'minsize'=>0)
|
859
|
+
TkGrid.columnconfigure(@frame, 0, 'weight'=>1, 'minsize'=>0)
|
860
|
+
@canvas.grid('row'=>0, 'column'=>0, 'sticky'=>'news')
|
861
|
+
@frame.grid_propagate(false)
|
862
|
+
|
863
|
+
# assign scrollbars
|
864
|
+
@canvas.xscrollbar(@h_scroll)
|
865
|
+
@canvas.yscrollbar(@v_scroll)
|
866
|
+
|
867
|
+
# convert hash keys
|
868
|
+
keys = _symbolkey2str(keys)
|
869
|
+
|
870
|
+
# check options for the frame
|
871
|
+
framekeys = {}
|
872
|
+
if keys.key?('classname')
|
873
|
+
keys['class'] = keys.delete('classname')
|
874
|
+
end
|
875
|
+
if @classname = keys.delete('class')
|
876
|
+
framekeys['class'] = @classname
|
877
|
+
end
|
878
|
+
if @colormap = keys.delete('colormap')
|
879
|
+
framekeys['colormap'] = @colormap
|
880
|
+
end
|
881
|
+
if @container = keys.delete('container')
|
882
|
+
framekeys['container'] = @container
|
883
|
+
end
|
884
|
+
if @visual = keys.delete('visual')
|
885
|
+
framekeys['visual'] = @visual
|
886
|
+
end
|
887
|
+
if @classname.kind_of? TkBindTag
|
888
|
+
@db_class = @classname
|
889
|
+
@classname = @classname.id
|
890
|
+
elsif @classname
|
891
|
+
@db_class = TkDatabaseClass.new(@classname)
|
892
|
+
else
|
893
|
+
@db_class = self.class
|
894
|
+
@classname = @db_class::WidgetClassName
|
895
|
+
end
|
896
|
+
|
897
|
+
# create base frame
|
898
|
+
@base = TkFrame.new(@canvas, framekeys)
|
899
|
+
|
900
|
+
# embed base frame
|
901
|
+
@cwin = TkcWindow.new(@canvas, [0, 0], :window=>@base, :anchor=>'nw')
|
902
|
+
@canvas.scrollregion(@cwin.bbox)
|
903
|
+
|
904
|
+
# binding to reset scrollregion
|
905
|
+
@base.bind('Configure'){_reset_scrollregion(nil, nil) }
|
906
|
+
|
907
|
+
# set default receiver of method calls
|
908
|
+
@path = @base.path
|
909
|
+
|
910
|
+
# scrollbars ON
|
911
|
+
vscroll(keys.delete('vscroll'){true})
|
912
|
+
hscroll(keys.delete('hscroll'){true})
|
913
|
+
|
914
|
+
# please check the differences of the following definitions
|
915
|
+
# option_methods(
|
916
|
+
# :scrollbarwidth
|
917
|
+
# )
|
918
|
+
|
919
|
+
# set receiver widgets for configure methods (with alias)
|
920
|
+
delegate_alias('scrollbarrelief', 'relief', @h_scroll, @v_scroll)
|
921
|
+
|
922
|
+
# set receiver widgets for configure methods
|
923
|
+
delegate('DEFAULT', @base)
|
924
|
+
delegate('background', @frame, @base, @canvas, @h_scroll, @v_scroll)
|
925
|
+
delegate('width', @frame)
|
926
|
+
delegate('height', @frame)
|
927
|
+
delegate('activebackground', @h_scroll, @v_scroll)
|
928
|
+
delegate('troughcolor', @h_scroll, @v_scroll)
|
929
|
+
delegate('repeatdelay', @h_scroll, @v_scroll)
|
930
|
+
delegate('repeatinterval', @h_scroll, @v_scroll)
|
931
|
+
delegate('borderwidth', @frame)
|
932
|
+
delegate('relief', @frame)
|
933
|
+
|
934
|
+
# do configure
|
935
|
+
configure keys unless keys.empty?
|
936
|
+
|
937
|
+
@canvas.yscrollcommand(proc{|first,last|
|
938
|
+
do_yscrollcommand(first,last)
|
939
|
+
})
|
940
|
+
|
941
|
+
@canvas.xscrollcommand(proc{|first,last|
|
942
|
+
do_xscrollcommand(first,last)
|
943
|
+
})
|
944
|
+
|
945
|
+
end
|
946
|
+
|
947
|
+
|
948
|
+
def y_scrolled?
|
949
|
+
TkWinfo.mapped?(@v_scroll)
|
950
|
+
end
|
951
|
+
|
952
|
+
def x_scrolled?
|
953
|
+
TkWinfo.mapped?(@h_scroll)
|
954
|
+
end
|
955
|
+
|
956
|
+
def yview_moveto(_index)
|
957
|
+
@canvas.yview_moveto(_index)
|
958
|
+
end
|
959
|
+
|
960
|
+
def xview_moveto(_index)
|
961
|
+
@canvas.xview_moveto(_index)
|
962
|
+
end
|
963
|
+
|
964
|
+
def do_yscrollcommand(first,last)
|
965
|
+
if first != nil && last != nil
|
966
|
+
delta = last.to_f - first.to_f
|
967
|
+
if delta != @last_y_delta
|
968
|
+
if delta < 1 && delta > 0 && last != @last_y_last
|
969
|
+
vscroll(true)
|
970
|
+
begin
|
971
|
+
@v_scroll.set(first,last) if TkWinfo.mapped?(@v_scroll)
|
972
|
+
rescue Exception => e
|
973
|
+
Arcadia.runtime_error(e)
|
974
|
+
end
|
975
|
+
elsif delta == 1 || delta == 0
|
976
|
+
vscroll(false)
|
977
|
+
end
|
978
|
+
end
|
979
|
+
@last_y_last = last if last.to_f < 1
|
980
|
+
@last_y_delta = delta
|
981
|
+
end
|
982
|
+
end
|
983
|
+
|
984
|
+
def do_xscrollcommand(first,last)
|
985
|
+
if first != nil && last != nil
|
986
|
+
delta = last.to_f - first.to_f
|
987
|
+
if delta != @last_x_delta
|
988
|
+
if delta < 1 && delta > 0.2 && last != @last_x_last
|
989
|
+
hscroll(true)
|
990
|
+
begin
|
991
|
+
@h_scroll.set(first,last) if TkWinfo.mapped?(@h_scroll)
|
992
|
+
rescue Exception => e
|
993
|
+
Arcadia.runtime_error(e)
|
994
|
+
end
|
995
|
+
elsif delta == 1 || delta == 0
|
996
|
+
hscroll(false)
|
997
|
+
end
|
998
|
+
end
|
999
|
+
@last_x_last = last if last.to_f < 1
|
1000
|
+
@last_x_delta = delta
|
1001
|
+
end
|
1002
|
+
end
|
1003
|
+
|
1004
|
+
# callback for Configure event
|
1005
|
+
def _reset_scrollregion(h_mod=nil, v_mod=nil)
|
1006
|
+
cx1, cy1, cx2, cy2 = @canvas.scrollregion
|
1007
|
+
x1, y1, x2, y2 = @cwin.bbox
|
1008
|
+
@canvas.scrollregion([x1, y1, x2, y2])
|
1009
|
+
|
1010
|
+
if h_mod.nil? && v_mod.nil?
|
1011
|
+
if x2 != cx2 && TkGrid.info(@h_scroll).size == 0
|
1012
|
+
@frame.grid_propagate(true)
|
1013
|
+
@canvas.width = x2
|
1014
|
+
Tk.update_idletasks
|
1015
|
+
@frame.grid_propagate(false)
|
1016
|
+
end
|
1017
|
+
if y2 != cy2 && TkGrid.info(@v_scroll).size == 0
|
1018
|
+
@frame.grid_propagate(true)
|
1019
|
+
@canvas.height = y2
|
1020
|
+
Tk.update_idletasks
|
1021
|
+
@frame.grid_propagate(false)
|
1022
|
+
end
|
1023
|
+
else
|
1024
|
+
@h_scroll.ungrid if h_mod == false
|
1025
|
+
@v_scroll.ungrid if v_mod == false
|
1026
|
+
|
1027
|
+
h_flag = (TkGrid.info(@h_scroll).size == 0)
|
1028
|
+
v_flag = (TkGrid.info(@v_scroll).size == 0)
|
1029
|
+
|
1030
|
+
@frame.grid_propagate(true)
|
1031
|
+
|
1032
|
+
@canvas.width = (h_flag)? x2: @canvas.winfo_width
|
1033
|
+
@canvas.height = (v_flag)? y2: @canvas.winfo_height
|
1034
|
+
|
1035
|
+
@h_scroll.grid('row'=>1, 'column'=>0, 'sticky'=>'ew') if h_mod
|
1036
|
+
@v_scroll.grid('row'=>0, 'column'=>1, 'sticky'=>'ns') if v_mod
|
1037
|
+
|
1038
|
+
Tk.update_idletasks
|
1039
|
+
|
1040
|
+
@frame.grid_propagate(false)
|
1041
|
+
end
|
1042
|
+
end
|
1043
|
+
private :_reset_scrollregion
|
1044
|
+
|
1045
|
+
# forbid to change binding of @base frame
|
1046
|
+
def bind(*args)
|
1047
|
+
@frame.bind(*args)
|
1048
|
+
end
|
1049
|
+
def bind_append(*args)
|
1050
|
+
@frame.bind_append(*args)
|
1051
|
+
end
|
1052
|
+
def bind_remove(*args)
|
1053
|
+
@frame.bind_remove(*args)
|
1054
|
+
end
|
1055
|
+
def bindinfo(*args)
|
1056
|
+
@frame.bindinfo(*args)
|
1057
|
+
end
|
1058
|
+
|
1059
|
+
# set width of scrollbar
|
1060
|
+
# def scrollbarwidth(width = nil)
|
1061
|
+
# if width
|
1062
|
+
# @h_scroll.width(width)
|
1063
|
+
# @v_scroll.width(width)
|
1064
|
+
# else
|
1065
|
+
# @h_scroll.width
|
1066
|
+
# end
|
1067
|
+
# end
|
1068
|
+
|
1069
|
+
# vertical scrollbar : ON/OFF
|
1070
|
+
def vscroll(mode)
|
1071
|
+
Tk.update_idletasks
|
1072
|
+
st = TkGrid.info(@v_scroll)
|
1073
|
+
if mode && st.size == 0 then
|
1074
|
+
# @v_scroll.grid('row'=>0, 'column'=>1, 'sticky'=>'ns')
|
1075
|
+
_reset_scrollregion(nil, true)
|
1076
|
+
elsif !mode && st.size != 0 then
|
1077
|
+
_reset_scrollregion(nil, false)
|
1078
|
+
else
|
1079
|
+
_reset_scrollregion(nil, nil)
|
1080
|
+
end
|
1081
|
+
self
|
1082
|
+
end
|
1083
|
+
|
1084
|
+
# horizontal scrollbar : ON/OFF
|
1085
|
+
def hscroll(mode)
|
1086
|
+
Tk.update_idletasks
|
1087
|
+
st = TkGrid.info(@h_scroll)
|
1088
|
+
if mode && st.size == 0 then
|
1089
|
+
_reset_scrollregion(true, nil)
|
1090
|
+
elsif !mode && st.size != 0 then
|
1091
|
+
_reset_scrollregion(false, nil)
|
1092
|
+
else
|
1093
|
+
_reset_scrollregion(nil, nil)
|
1094
|
+
end
|
1095
|
+
self
|
1096
|
+
end
|
824
1097
|
end
|
825
1098
|
|
1099
|
+
|
1100
|
+
|
826
1101
|
class TkBaseTitledFrame < TkFrame
|
827
1102
|
attr_reader :frame
|
828
1103
|
attr_reader :top
|
@@ -856,6 +1131,7 @@ class TkBaseTitledFrame < TkFrame
|
|
856
1131
|
end
|
857
1132
|
|
858
1133
|
def create_frame
|
1134
|
+
# return Tk::ScrollFrame.new(self).place('x'=>0, 'y'=>@title_height,'height'=>-@title_height,'relheight'=>1, 'relwidth'=>1)
|
859
1135
|
return TkFrame.new(self,Arcadia.style('panel')).place('x'=>0, 'y'=>@title_height,'height'=>-@title_height,'relheight'=>1, 'relwidth'=>1)
|
860
1136
|
end
|
861
1137
|
|
@@ -1649,7 +1925,7 @@ end
|
|
1649
1925
|
class TkTitledScrollFrame < TkTitledFrame
|
1650
1926
|
|
1651
1927
|
def create_frame
|
1652
|
-
return Tk::ScrollFrame.new(self
|
1928
|
+
return Tk::ScrollFrame.new(self).place('x'=>0, 'y'=>@title_height,'height'=>-@title_height,'relheight'=>1, 'relwidth'=>1)
|
1653
1929
|
end
|
1654
1930
|
|
1655
1931
|
end
|
@@ -1927,9 +2203,16 @@ end
|
|
1927
2203
|
class TkWidgetFactory
|
1928
2204
|
|
1929
2205
|
module WidgetEnhancer
|
2206
|
+
|
1930
2207
|
def hint=(_hint=nil)
|
2208
|
+
hint(_hint)
|
2209
|
+
end
|
2210
|
+
|
2211
|
+
def hint(_hint=nil)
|
1931
2212
|
Tk::BWidget::DynamicHelp::add(self, 'text'=>_hint) if _hint
|
2213
|
+
self
|
1932
2214
|
end
|
2215
|
+
|
1933
2216
|
end
|
1934
2217
|
|
1935
2218
|
def initialize
|
@@ -2142,11 +2425,34 @@ class TkWidgetFactory
|
|
2142
2425
|
])
|
2143
2426
|
|
2144
2427
|
|
2428
|
+
#TFrame
|
2429
|
+
Tk::Tile::Style.configure("Arcadia.TFrame", Arcadia.style('panel'))
|
2430
|
+
|
2431
|
+
|
2432
|
+
|
2145
2433
|
#Tk::Tile::Style.configure(Tk::Tile::TLabel, Arcadia.style('label'))
|
2146
2434
|
#TLabel
|
2147
2435
|
Tk::Tile::Style.configure("Arcadia.TLabel", Arcadia.style('label'))
|
2148
2436
|
|
2149
2437
|
|
2438
|
+
#TEntry
|
2439
|
+
Tk::Tile::Style.layout("Arcadia.TEntry", [
|
2440
|
+
'Entry.border', { :sticky => 'nswe', :border => 1,
|
2441
|
+
:children => ['Entry.padding', { :sticky => 'nswe',
|
2442
|
+
:children => [ 'Entry.textarea', { :sticky => 'nswe' } ] }] } ])
|
2443
|
+
|
2444
|
+
|
2445
|
+
Tk::Tile::Style.configure("Arcadia.TEntry", Arcadia.style('edit').update(
|
2446
|
+
'fieldbackground' => Arcadia.style('edit')['background'],
|
2447
|
+
'selectbackground' => 'red',
|
2448
|
+
'selectforeground' => 'yellow'
|
2449
|
+
)
|
2450
|
+
)
|
2451
|
+
|
2452
|
+
#TText
|
2453
|
+
Tk::Tile::Style.configure("Arcadia.TText", Arcadia.style('text'))
|
2454
|
+
|
2455
|
+
|
2150
2456
|
#TButton
|
2151
2457
|
Tk::Tile::Style.configure("Arcadia.TButton", Arcadia.style('button').update(
|
2152
2458
|
'padding'=>"0 0 0 0"
|
@@ -2201,6 +2507,24 @@ class TkWidgetFactory
|
|
2201
2507
|
end
|
2202
2508
|
end
|
2203
2509
|
|
2510
|
+
def frame(_parent,_args={}, &b)
|
2511
|
+
begin
|
2512
|
+
if @use_tile
|
2513
|
+
obj = Tk::Tile::TFrame.new(_parent,{:style=>"Arcadia.TFrame"}.update(_args), &b)
|
2514
|
+
else
|
2515
|
+
obj = TkFrame.new(_parent,Arcadia.style('panel').update(_args), &b)
|
2516
|
+
end
|
2517
|
+
class << obj
|
2518
|
+
include WidgetEnhancer
|
2519
|
+
end
|
2520
|
+
return obj
|
2521
|
+
rescue RuntimeError => e
|
2522
|
+
Arcadia.runtime_error(e)
|
2523
|
+
return nil
|
2524
|
+
end
|
2525
|
+
end
|
2526
|
+
|
2527
|
+
|
2204
2528
|
def label(_parent,_args={}, &b)
|
2205
2529
|
begin
|
2206
2530
|
if @use_tile
|
@@ -2218,6 +2542,40 @@ class TkWidgetFactory
|
|
2218
2542
|
end
|
2219
2543
|
end
|
2220
2544
|
|
2545
|
+
def entry(_parent,_args={}, &b)
|
2546
|
+
begin
|
2547
|
+
if @use_tile
|
2548
|
+
obj = Tk::Tile::TEntry.new(_parent,{:style=>"Arcadia.TEntry"}.update(_args), &b)
|
2549
|
+
else
|
2550
|
+
obj = TkEntry.new(_parent,Arcadia.style('edit').update(_args), &b)
|
2551
|
+
end
|
2552
|
+
class << obj
|
2553
|
+
include WidgetEnhancer
|
2554
|
+
end
|
2555
|
+
return obj
|
2556
|
+
rescue RuntimeError => e
|
2557
|
+
Arcadia.runtime_error(e)
|
2558
|
+
return nil
|
2559
|
+
end
|
2560
|
+
end
|
2561
|
+
|
2562
|
+
def text(_parent,_args={}, &b)
|
2563
|
+
begin
|
2564
|
+
# if @use_tile
|
2565
|
+
# obj = Tk::Tile::Text.new(_parent,{:style=>"Arcadia.TText"}.update(_args), &b)
|
2566
|
+
# else
|
2567
|
+
obj = TkText.new(_parent,Arcadia.style('text').update(_args), &b)
|
2568
|
+
# end
|
2569
|
+
class << obj
|
2570
|
+
include WidgetEnhancer
|
2571
|
+
end
|
2572
|
+
return obj
|
2573
|
+
rescue RuntimeError => e
|
2574
|
+
Arcadia.runtime_error(e)
|
2575
|
+
return nil
|
2576
|
+
end
|
2577
|
+
end
|
2578
|
+
|
2221
2579
|
def button(_parent,_args={}, &b)
|
2222
2580
|
begin
|
2223
2581
|
if @use_tile
|
@@ -2667,15 +3025,16 @@ module TkScrollableWidget
|
|
2667
3025
|
_w != nil ? @w=_w : @w=-@x
|
2668
3026
|
_h != nil ? @h=_h : @h=-@y
|
2669
3027
|
@widget.place(
|
2670
|
-
|
2671
|
-
|
2672
|
-
|
2673
|
-
|
2674
|
-
|
2675
|
-
|
2676
|
-
|
3028
|
+
'x'=>@x,
|
3029
|
+
'y'=>@y,
|
3030
|
+
'width' => @w,
|
3031
|
+
'height' => @h,
|
3032
|
+
'relheight'=>1,
|
3033
|
+
'relwidth'=>1,
|
3034
|
+
'bordermode'=>_border_mode
|
2677
3035
|
)
|
2678
3036
|
@widget.raise
|
3037
|
+
@widget_manager = 'place'
|
2679
3038
|
if @v_scroll_on
|
2680
3039
|
show_v_scroll(true)
|
2681
3040
|
end
|
@@ -2690,9 +3049,13 @@ module TkScrollableWidget
|
|
2690
3049
|
end
|
2691
3050
|
end
|
2692
3051
|
|
3052
|
+
def widget_manager
|
3053
|
+
defined?(@widget_manager)? @widget_manager : nil
|
3054
|
+
end
|
3055
|
+
|
2693
3056
|
def hide
|
2694
3057
|
disarm_scroll_binding
|
2695
|
-
@widget.unplace
|
3058
|
+
@widget.unplace if widget_manager == 'place'
|
2696
3059
|
@v_scroll.unpack
|
2697
3060
|
@h_scroll.unpack
|
2698
3061
|
end
|
@@ -2722,7 +3085,7 @@ module TkScrollableWidget
|
|
2722
3085
|
def show_v_scroll(_force=false)
|
2723
3086
|
if _force || !@v_scroll_on
|
2724
3087
|
begin
|
2725
|
-
@widget.place('width' => -@scroll_width-@x)
|
3088
|
+
@widget.place('width' => -@scroll_width-@x) if widget_manager == 'place'
|
2726
3089
|
@v_scroll.pack('side' => 'right', 'fill' => 'y')
|
2727
3090
|
@v_scroll_on = true
|
2728
3091
|
@v_scroll.raise
|
@@ -2743,7 +3106,7 @@ module TkScrollableWidget
|
|
2743
3106
|
def show_h_scroll(_force=false)
|
2744
3107
|
if _force || !@h_scroll_on
|
2745
3108
|
begin
|
2746
|
-
@widget.place('height' => -@scroll_width-@y)
|
3109
|
+
@widget.place('height' => -@scroll_width-@y) if widget_manager == 'place'
|
2747
3110
|
@h_scroll.pack('side' => 'bottom', 'fill' => 'x')
|
2748
3111
|
@h_scroll_on = true
|
2749
3112
|
@h_scroll.raise
|
@@ -2764,7 +3127,7 @@ module TkScrollableWidget
|
|
2764
3127
|
def hide_v_scroll
|
2765
3128
|
if @v_scroll_on
|
2766
3129
|
begin
|
2767
|
-
@widget.place('width' => 0)
|
3130
|
+
@widget.place('width' => 0) if widget_manager == 'place'
|
2768
3131
|
@v_scroll.unpack
|
2769
3132
|
@v_scroll_on = false
|
2770
3133
|
rescue RuntimeError => e
|
@@ -2778,7 +3141,7 @@ module TkScrollableWidget
|
|
2778
3141
|
def hide_h_scroll
|
2779
3142
|
if @h_scroll_on
|
2780
3143
|
begin
|
2781
|
-
@widget.place('height' => 0)
|
3144
|
+
@widget.place('height' => 0) if widget_manager == 'place'
|
2782
3145
|
@h_scroll.unpack
|
2783
3146
|
@h_scroll_on = false
|
2784
3147
|
rescue RuntimeError => e
|
@@ -2801,8 +3164,8 @@ class KeyTest < TkFloatTitledFrame
|
|
2801
3164
|
background Arcadia.conf("background")
|
2802
3165
|
foreground Arcadia.conf("foreground")
|
2803
3166
|
#place('relwidth' => '1','relx' => 0,'x' => '0','y' => '0','relheight' => '1','rely' => 0,'height' => '0','bordermode' => 'inside','width' => '0')
|
2804
|
-
}.bind("KeyPress"){|
|
2805
|
-
@ttest.insert('end'," "+
|
3167
|
+
}.bind("KeyPress", "%K"){|_keysym|
|
3168
|
+
@ttest.insert('end'," "+_keysym+" ")
|
2806
3169
|
break
|
2807
3170
|
}
|
2808
3171
|
@ttest.extend(TkScrollableWidget).show
|
@@ -2820,6 +3183,7 @@ class HinnerDialog < TkFrame
|
|
2820
3183
|
newargs.update(args)
|
2821
3184
|
end
|
2822
3185
|
super(Arcadia.layout.parent_frame, newargs)
|
3186
|
+
|
2823
3187
|
case side
|
2824
3188
|
when 'top'
|
2825
3189
|
# self.pack('side' =>side,'before'=>Arcadia.layout.root, 'anchor'=>'nw','fill'=>'both', 'padx'=>0, 'pady'=>0, 'expand'=>'yes')
|
@@ -2830,6 +3194,108 @@ class HinnerDialog < TkFrame
|
|
2830
3194
|
@modal = false
|
2831
3195
|
end
|
2832
3196
|
|
3197
|
+
def make_scrollable_frame(_frame)
|
3198
|
+
|
3199
|
+
|
3200
|
+
TkGrid.rowconfigure(_frame, 0, 'weight'=>1, 'minsize'=>0)
|
3201
|
+
TkGrid.columnconfigure(_frame, 0, 'weight'=>1, 'minsize'=>0)
|
3202
|
+
canvas = TkCanvas.new(_frame)
|
3203
|
+
canvas.grid('row'=>0, 'column'=>0, 'sticky'=>'news')
|
3204
|
+
|
3205
|
+
|
3206
|
+
v_scroll = Arcadia.wf.scrollbar(_frame,{'orient'=>'vertical'})
|
3207
|
+
h_scroll = Arcadia.wf.scrollbar(_frame,{'orient'=>'horizontal'})
|
3208
|
+
|
3209
|
+
|
3210
|
+
|
3211
|
+
|
3212
|
+
p_vscroll = proc{|mode|
|
3213
|
+
st = TkGrid.info(v_scroll)
|
3214
|
+
if mode && st.size == 0 then
|
3215
|
+
v_scroll.grid('row'=>0, 'column'=>1, 'sticky'=>'ns')
|
3216
|
+
elsif mode == false
|
3217
|
+
v_scroll.ungrid
|
3218
|
+
end
|
3219
|
+
}
|
3220
|
+
|
3221
|
+
p_hscroll = proc{|mode|
|
3222
|
+
st = TkGrid.info(h_scroll)
|
3223
|
+
if mode && st.size == 0 then
|
3224
|
+
h_scroll.grid('row'=>1, 'column'=>0, 'sticky'=>'ew')
|
3225
|
+
elsif mode == false
|
3226
|
+
h_scroll.ungrid
|
3227
|
+
end
|
3228
|
+
}
|
3229
|
+
|
3230
|
+
p_do_yscrollcommand = proc{|first,last|
|
3231
|
+
if first != nil && last != nil
|
3232
|
+
delta = last.to_f - first.to_f
|
3233
|
+
if delta != @last_y_delta
|
3234
|
+
if delta < 1 && delta > 0 && last != @last_y_last
|
3235
|
+
p_vscroll.call(true)
|
3236
|
+
begin
|
3237
|
+
v_scroll.set(first,last)
|
3238
|
+
rescue Exception => e
|
3239
|
+
Arcadia.runtime_error(e)
|
3240
|
+
end
|
3241
|
+
elsif delta == 1 || delta == 0
|
3242
|
+
p_vscroll.call(false)
|
3243
|
+
end
|
3244
|
+
end
|
3245
|
+
@last_y_last = last if last.to_f < 1
|
3246
|
+
@last_y_delta = delta
|
3247
|
+
end
|
3248
|
+
}
|
3249
|
+
|
3250
|
+
p_do_xscrollcommand = proc{|first,last|
|
3251
|
+
if first != nil && last != nil
|
3252
|
+
delta = last.to_f - first.to_f
|
3253
|
+
if delta != @last_x_delta
|
3254
|
+
if delta < 1 && delta > 0 && last != @last_x_last
|
3255
|
+
p_hscroll.call(true)
|
3256
|
+
begin
|
3257
|
+
h_scroll.set(first,last)
|
3258
|
+
rescue Exception => e
|
3259
|
+
Arcadia.runtime_error(e)
|
3260
|
+
end
|
3261
|
+
elsif delta == 1 || delta == 0
|
3262
|
+
p_hscroll.call(false)
|
3263
|
+
end
|
3264
|
+
end
|
3265
|
+
@last_x_last = last if last.to_f < 1
|
3266
|
+
@last_x_delta = delta
|
3267
|
+
end
|
3268
|
+
}
|
3269
|
+
|
3270
|
+
canvas.yscrollbar(v_scroll)
|
3271
|
+
canvas.xscrollbar(h_scroll)
|
3272
|
+
|
3273
|
+
|
3274
|
+
canvas.yscrollcommand(proc{|first,last|
|
3275
|
+
p_do_yscrollcommand.call(first,last)
|
3276
|
+
})
|
3277
|
+
|
3278
|
+
canvas.xscrollcommand(proc{|first,last|
|
3279
|
+
p_do_xscrollcommand.call(first,last)
|
3280
|
+
})
|
3281
|
+
|
3282
|
+
|
3283
|
+
|
3284
|
+
frame = TkFrame.new(canvas)
|
3285
|
+
|
3286
|
+
|
3287
|
+
|
3288
|
+
frame.bind("Configure", proc{canvas.configure(:scrollregion=>canvas.bbox("all"))})
|
3289
|
+
|
3290
|
+
|
3291
|
+
cwin = TkcWindow.new(canvas, 0, 0, :window=>frame)
|
3292
|
+
|
3293
|
+
canvas.scrollregion(cwin.bbox)
|
3294
|
+
|
3295
|
+
return frame
|
3296
|
+
|
3297
|
+
end
|
3298
|
+
|
2833
3299
|
def is_modal?
|
2834
3300
|
@modal
|
2835
3301
|
end
|
@@ -2860,9 +3326,9 @@ class HinnerSplittedDialog < HinnerDialog
|
|
2860
3326
|
attr_reader :frame, :splitter_frame
|
2861
3327
|
def initialize(side='top', height=100, args=nil)
|
2862
3328
|
super(side, args)
|
2863
|
-
y0
|
3329
|
+
@y0= height
|
2864
3330
|
fr = TkFrame.new(self){
|
2865
|
-
height
|
3331
|
+
height height
|
2866
3332
|
pack('side' =>side,'padx'=>0, 'pady'=>0, 'fill'=>'x', 'expand'=>'1')
|
2867
3333
|
}
|
2868
3334
|
splitter_frame = TkFrame.new(self, Arcadia.style('splitter')){
|
@@ -2882,46 +3348,71 @@ class HinnerSplittedDialog < HinnerDialog
|
|
2882
3348
|
splitter_frame.raise
|
2883
3349
|
} ,"%x %y")
|
2884
3350
|
|
2885
|
-
splitter_frame.bind_append("ButtonRelease-1", proc{
|
3351
|
+
splitter_frame.bind_append("ButtonRelease-1", proc{
|
2886
3352
|
splitter_frame.configure('cursor'=> oldcursor)
|
2887
3353
|
if side == 'top'
|
2888
|
-
h = (y0+yx).abs
|
3354
|
+
h = (@y0+yx).abs
|
2889
3355
|
elsif side == 'bottom'
|
2890
|
-
h = (y0-yx).abs
|
3356
|
+
h = (@y0-yx).abs
|
2891
3357
|
end
|
2892
|
-
y0 = h
|
3358
|
+
@y0 = h
|
2893
3359
|
fr.configure('height'=>h)
|
2894
3360
|
})
|
2895
3361
|
@frame = fr
|
2896
3362
|
@splitter_frame = splitter_frame
|
2897
3363
|
end
|
3364
|
+
|
3365
|
+
def height(_h=nil)
|
3366
|
+
if _h.nil?
|
3367
|
+
@frame.height
|
3368
|
+
else
|
3369
|
+
@frame.configure('height'=>_h)
|
3370
|
+
@y0 = _h
|
3371
|
+
end
|
3372
|
+
end
|
2898
3373
|
end
|
2899
3374
|
|
2900
3375
|
class HinnerSplittedDialogTitled < HinnerSplittedDialog
|
2901
|
-
attr_accessor :hinner_frame
|
3376
|
+
attr_accessor :hinner_frame, :titled_frame
|
2902
3377
|
def initialize(title=nil, side='top', height=100, args=nil)
|
2903
3378
|
super(side, height, args)
|
2904
|
-
|
3379
|
+
@titled_frame = TkLabelTitledFrameClosable.new(self.frame, title).place('x'=>0, 'y'=>0,'relheight'=>1, 'relwidth'=>1)
|
3380
|
+
@ext_proc = nil
|
2905
3381
|
close = proc{
|
2906
|
-
|
2907
|
-
|
3382
|
+
do_close
|
3383
|
+
#self.destroy
|
3384
|
+
#Tk.callback_break
|
2908
3385
|
}
|
2909
|
-
|
2910
|
-
@hinner_frame =
|
2911
|
-
|
3386
|
+
@titled_frame.add_close_action(close)
|
3387
|
+
@hinner_frame = @titled_frame.frame
|
3388
|
+
#@hinner_frame = make_scrollable_frame(@titled_frame.frame)
|
3389
|
+
#@hinner_frame = Tk::ScrollFrame.new(@titled_frame.frame).place('x'=>0, 'y'=>0, 'relheight'=>1, 'relwidth'=>1).baseframe
|
3390
|
+
end
|
3391
|
+
|
3392
|
+
def do_close
|
3393
|
+
@ext_proc.call if !@ext_proc.nil?
|
3394
|
+
self.destroy
|
3395
|
+
Tk.callback_break
|
3396
|
+
end
|
3397
|
+
|
3398
|
+
def on_close=(_proc)
|
3399
|
+
@ext_proc = _proc
|
3400
|
+
end
|
3401
|
+
|
2912
3402
|
end
|
2913
3403
|
|
2914
3404
|
class HinnerFileDialog < HinnerDialog
|
2915
3405
|
SELECT_FILE_MODE=0
|
2916
3406
|
SAVE_FILE_MODE=1
|
2917
3407
|
SELECT_DIR_MODE=2
|
2918
|
-
def initialize(mode=SELECT_FILE_MODE
|
3408
|
+
def initialize(mode=SELECT_FILE_MODE, must_exist=nil, label=nil, side='top',args=nil)
|
2919
3409
|
super(side, args)
|
2920
3410
|
@mode = mode
|
2921
3411
|
if must_exist.nil?
|
2922
3412
|
must_exist = mode != SAVE_FILE_MODE
|
2923
3413
|
end
|
2924
3414
|
@must_exist = must_exist
|
3415
|
+
@label = label
|
2925
3416
|
build_gui
|
2926
3417
|
@closed = false
|
2927
3418
|
end
|
@@ -2931,6 +3422,9 @@ class HinnerFileDialog < HinnerDialog
|
|
2931
3422
|
@font_bold = "#{Arcadia.conf('edit.font')} bold"
|
2932
3423
|
@font_metrics = TkFont.new(@font).metrics
|
2933
3424
|
@font_metrics_bold = TkFont.new(@font_bold).metrics
|
3425
|
+
if !@label.nil?
|
3426
|
+
Arcadia.wf.label(self, 'text' => @label).pack('side' =>'left')
|
3427
|
+
end
|
2934
3428
|
@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
3429
|
#{"bg"=>'white', "height"=>'1', "borderwidth"=>0, 'font'=>@font}
|
2936
3430
|
@dir_text.bind_append("Enter", proc{ @dir_text.set_insert("end")})
|
@@ -2943,12 +3437,13 @@ class HinnerFileDialog < HinnerDialog
|
|
2943
3437
|
@dir_text.tag_configure(@tag_selected,'borderwidth'=>0, 'relief'=>'flat', 'underline'=>true)
|
2944
3438
|
@dir_text.tag_bind(@tag_selected,"ButtonRelease-1", proc{
|
2945
3439
|
self.release
|
3440
|
+
Tk.callback_break
|
2946
3441
|
} )
|
2947
3442
|
@dir_text.tag_bind(@tag_selected,"Enter", proc{@dir_text.configure('cursor'=> 'hand2')})
|
2948
3443
|
@dir_text.tag_bind(@tag_selected,"Leave", proc{@dir_text.configure('cursor'=> @cursor)})
|
2949
3444
|
_self=self
|
2950
|
-
@dir_text.bind_append('KeyPress'){|
|
2951
|
-
case
|
3445
|
+
@dir_text.bind_append('KeyPress', "%K"){|_keysym|
|
3446
|
+
case _keysym
|
2952
3447
|
when 'Escape','Tab'
|
2953
3448
|
i1 = @dir_text.index("insert")
|
2954
3449
|
raise_candidates(i1, @dir_text.get("#{i1} linestart", i1))
|
@@ -2970,8 +3465,8 @@ class HinnerFileDialog < HinnerDialog
|
|
2970
3465
|
end
|
2971
3466
|
end
|
2972
3467
|
}
|
2973
|
-
@dir_text.bind_append('KeyRelease'){|
|
2974
|
-
case
|
3468
|
+
@dir_text.bind_append('KeyRelease', "%K"){|_keysym|
|
3469
|
+
case _keysym
|
2975
3470
|
when 'Escape','Tab', "Return"
|
2976
3471
|
else
|
2977
3472
|
@dir_text.tag_remove(@tag_selected,'1.0','end')
|
@@ -2993,8 +3488,8 @@ class HinnerFileDialog < HinnerDialog
|
|
2993
3488
|
end
|
2994
3489
|
}
|
2995
3490
|
|
2996
|
-
@dir_text.bind_append("Control-KeyPress"){|
|
2997
|
-
case
|
3491
|
+
@dir_text.bind_append("Control-KeyPress", "%K"){|_keysym|
|
3492
|
+
case _keysym
|
2998
3493
|
when 'd'
|
2999
3494
|
_self.close
|
3000
3495
|
Tk.callback_break
|
@@ -3252,15 +3747,15 @@ class HinnerFileDialog < HinnerDialog
|
|
3252
3747
|
#filter = @dir_text.get("insert -1 chars wordstart", "insert")
|
3253
3748
|
|
3254
3749
|
|
3255
|
-
@raised_listbox.bind_append('KeyPress'){|
|
3750
|
+
@raised_listbox.bind_append('KeyPress', "%K %A"){|_keysym, _char|
|
3256
3751
|
is_list_for_update = false
|
3257
|
-
case
|
3752
|
+
case _keysym
|
3258
3753
|
when 'a'..'z','A'..'Z','0'..'9'
|
3259
|
-
@dir_text.insert('end',
|
3754
|
+
@dir_text.insert('end', _keysym)
|
3260
3755
|
@dir_text.see("end")
|
3261
3756
|
is_list_for_update = true
|
3262
3757
|
when 'minus'
|
3263
|
-
@dir_text.insert('end',
|
3758
|
+
@dir_text.insert('end', _char)
|
3264
3759
|
@dir_text.see("end")
|
3265
3760
|
is_list_for_update = true
|
3266
3761
|
when 'period'
|
@@ -3285,18 +3780,18 @@ class HinnerFileDialog < HinnerDialog
|
|
3285
3780
|
end
|
3286
3781
|
_update_list.call(get_filter.call) if is_list_for_update
|
3287
3782
|
@raised_listbox.focus
|
3288
|
-
Tk.callback_break if !["Next","Prior"].include?(
|
3783
|
+
Tk.callback_break if !["Next","Prior"].include?(_keysym)
|
3289
3784
|
}
|
3290
3785
|
|
3291
|
-
@raised_listbox.bind_append('Shift-KeyPress'){|
|
3786
|
+
@raised_listbox.bind_append('Shift-KeyPress', "%K %A"){|_keysym, _char|
|
3292
3787
|
is_list_for_update = false
|
3293
|
-
case
|
3788
|
+
case _keysym
|
3294
3789
|
when 'asterisk','underscore'
|
3295
|
-
@dir_text.insert('end',
|
3790
|
+
@dir_text.insert('end', _char)
|
3296
3791
|
@dir_text.see("end")
|
3297
3792
|
is_list_for_update = true
|
3298
3793
|
when 'a'..'z','A'..'Z'
|
3299
|
-
@dir_text.insert('end',
|
3794
|
+
@dir_text.insert('end', _keysym)
|
3300
3795
|
@dir_text.see("end")
|
3301
3796
|
is_list_for_update = true
|
3302
3797
|
|
@@ -3306,8 +3801,8 @@ class HinnerFileDialog < HinnerDialog
|
|
3306
3801
|
Tk.callback_break
|
3307
3802
|
}
|
3308
3803
|
|
3309
|
-
@raised_listbox.bind_append('KeyRelease'){|
|
3310
|
-
case
|
3804
|
+
@raised_listbox.bind_append('KeyRelease', "%K"){|_keysym|
|
3805
|
+
case _keysym
|
3311
3806
|
when 'Return'
|
3312
3807
|
_select_value.call
|
3313
3808
|
end
|
@@ -3366,4 +3861,120 @@ class HinnerFileDialog < HinnerDialog
|
|
3366
3861
|
return childrens_dir,childrens_file
|
3367
3862
|
end
|
3368
3863
|
|
3369
|
-
end
|
3864
|
+
end
|
3865
|
+
|
3866
|
+
|
3867
|
+
class HinnerStringDialog < HinnerDialog
|
3868
|
+
|
3869
|
+
def initialize(label=nil, side='top',args=nil)
|
3870
|
+
super(side, args)
|
3871
|
+
@label = label
|
3872
|
+
build_gui
|
3873
|
+
@closed = false
|
3874
|
+
end
|
3875
|
+
|
3876
|
+
def build_gui
|
3877
|
+
@font = Arcadia.conf('edit.font')
|
3878
|
+
@font_bold = "#{Arcadia.conf('edit.font')} bold"
|
3879
|
+
@font_metrics = TkFont.new(@font).metrics
|
3880
|
+
@font_metrics_bold = TkFont.new(@font_bold).metrics
|
3881
|
+
if !@label.nil?
|
3882
|
+
Arcadia.wf.label(self, 'text' => @label).pack('side' =>'left')
|
3883
|
+
end
|
3884
|
+
@string_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')
|
3885
|
+
#{"bg"=>'white', "height"=>'1', "borderwidth"=>0, 'font'=>@font}
|
3886
|
+
@string_text.bind_append("Enter", proc{ @string_text.set_insert("end")})
|
3887
|
+
|
3888
|
+
|
3889
|
+
@tag_selected = "link_selected"
|
3890
|
+
@string_text.tag_configure(@tag_selected,'borderwidth'=>0, 'relief'=>'flat', 'underline'=>true)
|
3891
|
+
@string_text.tag_bind(@tag_selected,"ButtonRelease-1", proc{
|
3892
|
+
self.release
|
3893
|
+
} )
|
3894
|
+
@string_text.tag_bind(@tag_selected,"Enter", proc{@string_text.configure('cursor'=> 'hand2')})
|
3895
|
+
@string_text.tag_bind(@tag_selected,"Leave", proc{@string_text.configure('cursor'=> @cursor)})
|
3896
|
+
_self=self
|
3897
|
+
@string_text.bind_append('KeyPress', "%K"){|_keysym|
|
3898
|
+
case _keysym
|
3899
|
+
when "Return"
|
3900
|
+
_self.release
|
3901
|
+
end
|
3902
|
+
}
|
3903
|
+
@string_text.bind_append('KeyRelease', "%K"){|_keysym|
|
3904
|
+
case _keysym
|
3905
|
+
when 'Escape','Tab', "Return"
|
3906
|
+
else
|
3907
|
+
@string_text.tag_remove(@tag_selected,'1.0','end')
|
3908
|
+
@string_text.tag_add(@tag_selected ,'1.0','end')
|
3909
|
+
end
|
3910
|
+
}
|
3911
|
+
|
3912
|
+
@string_text.bind_append("Control-KeyPress", "%K"){|_keysym|
|
3913
|
+
case _keysym
|
3914
|
+
when 'd'
|
3915
|
+
_self.close
|
3916
|
+
Tk.callback_break
|
3917
|
+
end
|
3918
|
+
}
|
3919
|
+
|
3920
|
+
@close_button = Arcadia.wf.toolbutton(self){
|
3921
|
+
command proc{_self.close}
|
3922
|
+
image Arcadia.image_res(CLOSE_FRAME_GIF)
|
3923
|
+
}.pack('side' =>'right','padx'=>5, 'pady'=>0)
|
3924
|
+
end
|
3925
|
+
|
3926
|
+
def string
|
3927
|
+
@string_text.focus
|
3928
|
+
@string_text.set_insert("end")
|
3929
|
+
@string_text.see("end")
|
3930
|
+
|
3931
|
+
show_modal(false)
|
3932
|
+
if @closed == false
|
3933
|
+
string_selected = @string_text.get("0.1","end").strip
|
3934
|
+
destroy
|
3935
|
+
string_selected
|
3936
|
+
end
|
3937
|
+
end
|
3938
|
+
|
3939
|
+
|
3940
|
+
def close
|
3941
|
+
@closed=true
|
3942
|
+
self.release
|
3943
|
+
destroy
|
3944
|
+
end
|
3945
|
+
|
3946
|
+
|
3947
|
+
|
3948
|
+
end
|
3949
|
+
|
3950
|
+
|
3951
|
+
|
3952
|
+
#class Example(tk.Frame):
|
3953
|
+
# def __init__(self, root):
|
3954
|
+
#
|
3955
|
+
# tk.Frame.__init__(self, root)
|
3956
|
+
# self.canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")
|
3957
|
+
# self.frame = tk.Frame(self.canvas, background="#ffffff")
|
3958
|
+
# self.vsb = tk.Scrollbar(root, orient="vertical", command=self.canvas.yview)
|
3959
|
+
# self.canvas.configure(yscrollcommand=self.vsb.set)
|
3960
|
+
#
|
3961
|
+
# self.vsb.pack(side="right", fill="y")
|
3962
|
+
# self.canvas.pack(side="left", fill="both", expand=True)
|
3963
|
+
# self.canvas.create_window((4,4), window=self.frame, anchor="nw",
|
3964
|
+
# tags="self.frame")
|
3965
|
+
#
|
3966
|
+
# self.frame.bind("<Configure>", self.onFrameConfigure)
|
3967
|
+
#
|
3968
|
+
# self.populate()
|
3969
|
+
#
|
3970
|
+
# def populate(self):
|
3971
|
+
# '''Put in some fake data'''
|
3972
|
+
# for row in range(100):
|
3973
|
+
# tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1",
|
3974
|
+
# relief="solid").grid(row=row, column=0)
|
3975
|
+
# t="this is the second column for row %s" %row
|
3976
|
+
# tk.Label(self.frame, text=t).grid(row=row, column=1)
|
3977
|
+
#
|
3978
|
+
# def onFrameConfigure(self, event):
|
3979
|
+
# '''Reset the scroll region to encompass the inner frame'''
|
3980
|
+
# self.canvas.configure(scrollregion=self.canvas.bbox("all"))
|