arcadia 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +90 -28
- data/conf/LC/en-UK.LANG +6 -0
- data/conf/LC/ru-RU.LANG +0 -0
- data/conf/arcadia.conf +8 -4
- data/conf/arcadia.res.rb +86 -1
- data/conf/theme-dark.conf +2 -1
- data/ext/ae-breakpoints/ae-breakpoints.rb +1 -1
- data/ext/ae-dir-projects/ae-dir-projects.rb +42 -6
- data/ext/ae-editor/ae-editor.rb +227 -120
- data/ext/ae-editor/langs/coderay.tokens +0 -0
- data/ext/ae-editor/langs/conf.lang +0 -0
- data/ext/ae-editor/langs/css.lang +0 -0
- data/ext/ae-editor/langs/html.lang +0 -0
- data/ext/ae-editor/langs/java.lang +0 -0
- data/ext/ae-editor/langs/python.lang +0 -0
- data/ext/ae-editor/langs/ruby.lang +0 -0
- data/ext/ae-editor/langs/text.lang +0 -0
- data/ext/ae-editor/langs/xml.lang +0 -0
- data/ext/ae-editor/lib/rbeautify.rb +0 -0
- data/ext/ae-file-history/ae-file-history.rb +4 -3
- data/ext/ae-output/ae-output.rb +44 -31
- data/ext/ae-ruby-debug/ae-ruby-debug.conf +3 -2
- data/ext/ae-ruby-debug/ae-ruby-debug.rb +1 -0
- data/ext/ae-search-in-files/ae-search-in-files.rb +3 -3
- data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.conf +0 -0
- data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.rb +0 -0
- data/ext/ae-shell/ae-shell.rb +37 -15
- data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +14 -8
- data/ext/ae-subprocess-inspector/butterfly.res +0 -0
- data/ext/ae-subprocess-inspector/process.res +0 -0
- data/ext/ae-subprocess-inspector/space-invader.res +0 -0
- data/ext/ae-term/ae-term.conf +0 -0
- data/ext/ae-term/ae-term.rb +0 -0
- data/ext/test-shutdown-after-startup/test-shutdown-after-startup.conf +0 -0
- data/ext/test-shutdown-after-startup/test-shutdown-after-startup.rb +0 -0
- data/lib/a-commons.rb +1 -1
- data/lib/a-contracts.rb +13 -3
- data/lib/a-core.rb +612 -142
- data/lib/a-tkcommons.rb +661 -50
- data/lib/anigif.rb +0 -0
- data/lib/iosync.rb +71 -0
- data/tcl/anigif/anigif.tcl +0 -0
- data/tcl/anigif/pkgIndex.tcl +0 -0
- metadata +5 -2
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"))
|