glimmer-dsl-tk 0.0.33 → 0.0.34
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -1
- data/README.md +125 -47
- data/VERSION +1 -1
- data/glimmer-dsl-tk.gemspec +0 -0
- data/lib/glimmer/tk/text_proxy.rb +52 -23
- data/samples/hello/hello_text.rb +34 -38
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69e1f06607f60b2864e78e6e1eb9bfde7cf98f8d8eca2d14f12bf218d781dcb3
|
4
|
+
data.tar.gz: 7c552bb85c6b87eeefe8117b5f3d2df922ff27618f564e6dd37df63b57c17d98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6dad9353a12a78f0e8c4a2be45e440c2bebb3e0998957447332d0ab65ec3668eb447395cb32bb8bfa4c6feed3bee991d78b07dbe500c3716e914ed0e51b312c
|
7
|
+
data.tar.gz: 36bfc6aa1b337b33b6c6a658549b603658677ea0e4e1840ec1ef58727bb12c76031d08b22fd50960001c2881819e7ec1a7e672f1c29e57d63797d0ea106531f0
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.0.34
|
4
|
+
|
5
|
+
- When applying a `text` selection format without having a selection, have it apply to current insert mark word
|
6
|
+
- Support registering multiple general event listeners on `text` widget (previously, later event listener registrations replaced former ones)
|
7
|
+
- Implement `:no_selection_default` option of `:insert_word`, `insert_letter`, or `none` for `text` selection formatting methods (`add_selection_format`, `remove_selection_format`, `toggle_selection_format`, `add_selection_font_format`, `remove_selection_font_format`, `toggle_selection_font_format`)
|
8
|
+
- Make sure to only allow `text` undo/redo when there are changes to be undoed/redoed
|
9
|
+
- Fix issue with Hello, Text! Find Dialog not coming up with keyboard shortcut (e.g. CMD+F) anymore
|
10
|
+
- Fix issue with Hello, Text! whereby after applying background, and foreground to a selection, you cannot apply bold, italic, or underline for the same selection (or font-size or font-family)
|
11
|
+
|
3
12
|
## 0.0.33
|
4
13
|
|
5
|
-
- Support `text` widget `InsertMarkMoved` listener event to track insert mark movement (or
|
14
|
+
- Support `text` widget `InsertMarkMoved` listener event to track insert mark movement (or aliases `InsertMarkMove`, `insert_mark_move`, `insert_mark_moved`, all case-insensitive)
|
6
15
|
- Support `entry` widget `changed` and `modified` listener event aliases for `change` event
|
7
16
|
- Autodiscover format options when moving cursor in `text` widget (auto-derive from applied tags and widget font) and show in top Hello, Text! toolbar comboboxes and buttons
|
8
17
|
- Fix issue with encountering error 'NoMethodError: undefined method "size" for' when launching Hello, Text!, performing Select-All (CMD+A or CONTROL+A) and then attempting to Bold all the text.
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for Tk 0.0.
|
1
|
+
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for Tk 0.0.34
|
2
2
|
## MRI Ruby Desktop Development GUI Library
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/glimmer-dsl-tk.svg)](http://badge.fury.io/rb/glimmer-dsl-tk)
|
4
4
|
[![Ruby](https://github.com/AndyObtiva/glimmer-dsl-tk/actions/workflows/ruby.yml/badge.svg)](https://github.com/AndyObtiva/glimmer-dsl-tk/actions/workflows/ruby.yml)
|
@@ -158,7 +158,7 @@ gem install glimmer-dsl-tk
|
|
158
158
|
|
159
159
|
Add the following to `Gemfile`:
|
160
160
|
```
|
161
|
-
gem 'glimmer-dsl-tk', '~> 0.0.
|
161
|
+
gem 'glimmer-dsl-tk', '~> 0.0.34'
|
162
162
|
```
|
163
163
|
|
164
164
|
And, then run:
|
@@ -349,15 +349,20 @@ The `text` widget is enhanced by [Glimmer DSL for Tk](https://rubygems.org/gems/
|
|
349
349
|
- `add_font_format(region_start, region_end, font_option, value)`
|
350
350
|
- `remove_font_format(region_start, region_end, font_option, value)`
|
351
351
|
- `toggle_font_format(region_start, region_end, font_option, value)`
|
352
|
-
- `add_selection_format(
|
353
|
-
- `remove_selection_format(
|
354
|
-
- `toggle_selection_format(
|
355
|
-
- `add_selection_font_format(
|
356
|
-
- `remove_selection_font_format(
|
357
|
-
- `toggle_selection_font_format(
|
352
|
+
- `add_selection_format(option, value, no_selection_default: :insert_word)`: adds format to selection. If there is no selection, then applies format to current insert mark word.
|
353
|
+
- `remove_selection_format(option, value, no_selection_default: :insert_word)`
|
354
|
+
- `toggle_selection_format(option, value, no_selection_default: :insert_word)`: toggles format on selection. If there is no selection, then toggles format on current insert mark word.
|
355
|
+
- `add_selection_font_format(font_option, value, no_selection_default: :insert_word)`
|
356
|
+
- `remove_selection_font_format(font_option, value, no_selection_default: :insert_word)`
|
357
|
+
- `toggle_selection_font_format(font_option, value, no_selection_default: :insert_word)`
|
358
358
|
- `text#insert_image(text_index, *image_args)`: inserts image into `text` `value` content at `text_index` location (e.g. `'insert'`)
|
359
359
|
- `text#get_open_file_to_insert_image(text_index = 'insert')`: opens a file dialog to select one of the available image formats and then inserts image into `text` `value` content
|
360
360
|
|
361
|
+
The `:no_selection_default` keyword arg to `*_selection_*` methods determines what region to cover when no explicit selection is set:
|
362
|
+
- `:insert_word`: current word for insert mark
|
363
|
+
- `:insert_letter`: current letter for insert mark
|
364
|
+
- `:none`: no behavior when no selection is in place
|
365
|
+
|
361
366
|
Available options:
|
362
367
|
|
363
368
|
- `background`
|
@@ -731,6 +736,7 @@ More details can be found in the [Hello, Button!](#hello-button) sample below.
|
|
731
736
|
## Gotchas
|
732
737
|
|
733
738
|
- Setting `background` attribute on `frame` or `label` does not work in `'aqua'` theme on the Mac (only in `'classic'` theme)
|
739
|
+
- `text` widget does not track `KeyPress`/`KeyRelease` events perfectly (installed via `on()` listener keyword). It seems that when all text is deleted, it stops tracking key presses/releases until a number of new lines have been added to `text` `value` attribute
|
734
740
|
|
735
741
|
## Samples
|
736
742
|
|
@@ -1869,7 +1875,7 @@ Glimmer app:
|
|
1869
1875
|
|
1870
1876
|
### Hello, Text!
|
1871
1877
|
|
1872
|
-
You may
|
1878
|
+
You may press META+F to bring up the Find Dialog on the Mac and CONTROL+F to bring it up on Windows/Linux.
|
1873
1879
|
|
1874
1880
|
Icons used in this sample were made by <a href="https://www.flaticon.com/authors/freepik" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon"> www.flaticon.com</a>
|
1875
1881
|
|
@@ -1921,7 +1927,7 @@ class HelloText
|
|
1921
1927
|
MULTI_LINE_STRING
|
1922
1928
|
end
|
1923
1929
|
|
1924
|
-
attr_accessor :document
|
1930
|
+
attr_accessor :document, :find_text
|
1925
1931
|
|
1926
1932
|
attr_accessor :foreground
|
1927
1933
|
|
@@ -1947,8 +1953,16 @@ class HelloText
|
|
1947
1953
|
[FONT_SIZE_PROMPT] + (9..64).to_a.map(&:to_s)
|
1948
1954
|
end
|
1949
1955
|
|
1956
|
+
def find
|
1957
|
+
text_index = @text.search(/#{find_text}/i, @text.tag_ranges('sel')&.first&.last || @text.index('insert'))
|
1958
|
+
unless text_index.to_s.empty?
|
1959
|
+
@text.tag_remove('sel', '1.0', 'end')
|
1960
|
+
@text.tag_add('sel', text_index, "#{text_index} + #{find_text.size} chars")
|
1961
|
+
end
|
1962
|
+
end
|
1963
|
+
|
1950
1964
|
def launch
|
1951
|
-
root {
|
1965
|
+
@root = root {
|
1952
1966
|
title 'Hello, Text!'
|
1953
1967
|
width 1280
|
1954
1968
|
height 800
|
@@ -1956,11 +1970,6 @@ class HelloText
|
|
1956
1970
|
frame {
|
1957
1971
|
grid row: 0, column: 0
|
1958
1972
|
|
1959
|
-
label {
|
1960
|
-
grid row: 0, column: 0, columnspan: 17
|
1961
|
-
text 'Select a region of text and then apply formatting from the toolbar'
|
1962
|
-
}
|
1963
|
-
|
1964
1973
|
column_index = -1
|
1965
1974
|
|
1966
1975
|
combobox {
|
@@ -1992,7 +2001,7 @@ class HelloText
|
|
1992
2001
|
orient 'vertical'
|
1993
2002
|
}
|
1994
2003
|
|
1995
|
-
button {
|
2004
|
+
@bold_button = button {
|
1996
2005
|
grid row: 1, column: column_index += 1, column_weight: 0
|
1997
2006
|
text 'B'
|
1998
2007
|
style font: {weight: 'bold'}
|
@@ -2002,7 +2011,7 @@ class HelloText
|
|
2002
2011
|
end
|
2003
2012
|
}
|
2004
2013
|
|
2005
|
-
button {
|
2014
|
+
@italic_button = button {
|
2006
2015
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2007
2016
|
text 'I'
|
2008
2017
|
style font: {slant: 'italic'}
|
@@ -2012,7 +2021,7 @@ class HelloText
|
|
2012
2021
|
end
|
2013
2022
|
}
|
2014
2023
|
|
2015
|
-
button {
|
2024
|
+
@underline_button = button {
|
2016
2025
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2017
2026
|
text 'U'
|
2018
2027
|
style font: {underline: true}
|
@@ -2021,36 +2030,36 @@ class HelloText
|
|
2021
2030
|
@text.toggle_selection_font_format('underline', true)
|
2022
2031
|
end
|
2023
2032
|
}
|
2024
|
-
|
2033
|
+
|
2025
2034
|
separator {
|
2026
2035
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2027
2036
|
orient 'vertical'
|
2028
2037
|
}
|
2029
2038
|
|
2030
|
-
button {
|
2039
|
+
@justify_left_button = button {
|
2031
2040
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2032
|
-
image File.expand_path("images/
|
2041
|
+
image File.expand_path("images/align-left.png", __dir__), subsample: 32
|
2033
2042
|
|
2034
2043
|
on('command') do
|
2035
|
-
@text.
|
2044
|
+
@text.add_selection_format('justify', 'left')
|
2036
2045
|
end
|
2037
2046
|
}
|
2038
2047
|
|
2039
|
-
button {
|
2048
|
+
@justify_center_button = button {
|
2040
2049
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2041
|
-
image File.expand_path("images/
|
2050
|
+
image File.expand_path("images/align-center.png", __dir__), subsample: 32
|
2042
2051
|
|
2043
2052
|
on('command') do
|
2044
|
-
@text.
|
2053
|
+
@text.add_selection_format('justify', 'center')
|
2045
2054
|
end
|
2046
2055
|
}
|
2047
2056
|
|
2048
|
-
button {
|
2057
|
+
@justify_right_button = button {
|
2049
2058
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2050
|
-
image File.expand_path("images/
|
2059
|
+
image File.expand_path("images/align-right.png", __dir__), subsample: 32
|
2051
2060
|
|
2052
2061
|
on('command') do
|
2053
|
-
@text.
|
2062
|
+
@text.add_selection_format('justify', 'right')
|
2054
2063
|
end
|
2055
2064
|
}
|
2056
2065
|
|
@@ -2061,51 +2070,51 @@ class HelloText
|
|
2061
2070
|
|
2062
2071
|
button {
|
2063
2072
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2064
|
-
image File.expand_path("images/
|
2073
|
+
image File.expand_path("images/picture.png", __dir__), subsample: 32
|
2065
2074
|
|
2066
2075
|
on('command') do
|
2067
|
-
@text.
|
2076
|
+
@text.get_open_file_to_insert_image
|
2068
2077
|
end
|
2069
2078
|
}
|
2070
2079
|
|
2071
2080
|
button {
|
2072
2081
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2073
|
-
image File.expand_path("images/
|
2082
|
+
image File.expand_path("images/search.png", __dir__), subsample: 32
|
2074
2083
|
|
2075
2084
|
on('command') do
|
2076
|
-
|
2085
|
+
show_find_dialog
|
2077
2086
|
end
|
2078
2087
|
}
|
2079
2088
|
|
2089
|
+
separator {
|
2090
|
+
grid row: 1, column: column_index += 1, column_weight: 0
|
2091
|
+
orient 'vertical'
|
2092
|
+
}
|
2093
|
+
|
2080
2094
|
button {
|
2081
2095
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2082
|
-
image File.expand_path("images/
|
2096
|
+
image File.expand_path("images/cut.png", __dir__), subsample: 32
|
2083
2097
|
|
2084
2098
|
on('command') do
|
2085
|
-
@text.
|
2099
|
+
@text.text_cut
|
2086
2100
|
end
|
2087
2101
|
}
|
2088
2102
|
|
2089
|
-
separator {
|
2090
|
-
grid row: 1, column: column_index += 1, column_weight: 0
|
2091
|
-
orient 'vertical'
|
2092
|
-
}
|
2093
|
-
|
2094
2103
|
button {
|
2095
2104
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2096
|
-
image File.expand_path("images/
|
2105
|
+
image File.expand_path("images/copy.png", __dir__), subsample: 32
|
2097
2106
|
|
2098
2107
|
on('command') do
|
2099
|
-
@text.
|
2108
|
+
@text.text_copy
|
2100
2109
|
end
|
2101
2110
|
}
|
2102
2111
|
|
2103
2112
|
button {
|
2104
2113
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2105
|
-
image File.expand_path("images/
|
2114
|
+
image File.expand_path("images/paste.png", __dir__), subsample: 32
|
2106
2115
|
|
2107
2116
|
on('command') do
|
2108
|
-
@text.
|
2117
|
+
@text.text_paste
|
2109
2118
|
end
|
2110
2119
|
}
|
2111
2120
|
|
@@ -2114,12 +2123,22 @@ class HelloText
|
|
2114
2123
|
orient 'vertical'
|
2115
2124
|
}
|
2116
2125
|
|
2126
|
+
|
2117
2127
|
button {
|
2118
2128
|
grid row: 1, column: column_index += 1, column_weight: 0
|
2119
|
-
image File.expand_path("images/
|
2129
|
+
image File.expand_path("images/undo.png", __dir__), subsample: 32
|
2120
2130
|
|
2121
2131
|
on('command') do
|
2122
|
-
@text.
|
2132
|
+
@text.edit_undo
|
2133
|
+
end
|
2134
|
+
}
|
2135
|
+
|
2136
|
+
button {
|
2137
|
+
grid row: 1, column: column_index += 1, column_weight: 0
|
2138
|
+
image File.expand_path("images/redo.png", __dir__), subsample: 32
|
2139
|
+
|
2140
|
+
on('command') do
|
2141
|
+
@text.edit_redo
|
2123
2142
|
end
|
2124
2143
|
}
|
2125
2144
|
}
|
@@ -2129,8 +2148,67 @@ class HelloText
|
|
2129
2148
|
wrap 'word'
|
2130
2149
|
undo true
|
2131
2150
|
value <=> [self, :document]
|
2151
|
+
|
2152
|
+
on('KeyPress') do |event|
|
2153
|
+
show_find_dialog if (event.keysym == 'f') && ((OS.mac? && event.state == 8) || (!OS.mac? && event.state == 4))
|
2154
|
+
end
|
2155
|
+
|
2156
|
+
on('InsertMarkMoved') do
|
2157
|
+
self.font_family = @text.applied_font_format_value('family')
|
2158
|
+
self.font_size = @text.applied_font_format_value('size')
|
2159
|
+
@bold_button.default = @text.applied_font_format_value('weight') == 'bold' ? 'active' : 'normal'
|
2160
|
+
@italic_button.default = @text.applied_font_format_value('slant') == 'italic' ? 'active' : 'normal'
|
2161
|
+
@underline_button.default = @text.applied_font_format_value('underline') == true ? 'active' : 'normal'
|
2162
|
+
self.background = @text.applied_format_value('background')
|
2163
|
+
self.foreground = @text.applied_format_value('foreground')
|
2164
|
+
@justify_left_button.default = @text.applied_format_value('justify') == 'left' ? 'active' : 'normal'
|
2165
|
+
@justify_center_button.default = @text.applied_format_value('justify') == 'center' ? 'active' : 'normal'
|
2166
|
+
@justify_right_button.default = @text.applied_format_value('justify') == 'right' ? 'active' : 'normal'
|
2167
|
+
end
|
2132
2168
|
}
|
2133
|
-
}
|
2169
|
+
}
|
2170
|
+
@root.open
|
2171
|
+
end
|
2172
|
+
|
2173
|
+
def show_find_dialog
|
2174
|
+
toplevel(@root) { |tl|
|
2175
|
+
title 'Find'
|
2176
|
+
|
2177
|
+
label {
|
2178
|
+
text 'Text:'
|
2179
|
+
}
|
2180
|
+
entry { |e|
|
2181
|
+
focus true
|
2182
|
+
text <=> [
|
2183
|
+
self,
|
2184
|
+
:find_text,
|
2185
|
+
after_write: lambda do
|
2186
|
+
text_index = @text.search(/#{find_text}/i, 'insert')
|
2187
|
+
unless text_index.to_s.empty?
|
2188
|
+
@text.tag_remove('sel', '1.0', 'end')
|
2189
|
+
@text.tag_add('sel', text_index, "#{text_index} + #{find_text.size} chars")
|
2190
|
+
end
|
2191
|
+
end
|
2192
|
+
]
|
2193
|
+
|
2194
|
+
on('KeyPress') do |event|
|
2195
|
+
if event.keysym == 'Return'
|
2196
|
+
find
|
2197
|
+
elsif event.keysym == 'Escape'
|
2198
|
+
tl.grab_release
|
2199
|
+
tl.destroy
|
2200
|
+
end
|
2201
|
+
end
|
2202
|
+
}
|
2203
|
+
button {
|
2204
|
+
text 'Find'
|
2205
|
+
default 'active'
|
2206
|
+
|
2207
|
+
on('command') do
|
2208
|
+
find
|
2209
|
+
end
|
2210
|
+
}
|
2211
|
+
}
|
2134
2212
|
end
|
2135
2213
|
end
|
2136
2214
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.34
|
data/glimmer-dsl-tk.gemspec
CHANGED
Binary file
|
@@ -36,9 +36,11 @@ module Glimmer
|
|
36
36
|
case listener_name.to_s.downcase
|
37
37
|
when '<<modified>>', '<modified>', 'modified'
|
38
38
|
modified_listener = Proc.new do |*args|
|
39
|
+
@modified_count ||= 0
|
40
|
+
@modified_count += 1
|
39
41
|
listener.call(*args)
|
40
42
|
apply_all_tag
|
41
|
-
@insert_mark_moved_proc
|
43
|
+
@insert_mark_moved_proc&.call
|
42
44
|
@tk.modified = false
|
43
45
|
end
|
44
46
|
@tk.bind('<Modified>', modified_listener)
|
@@ -49,16 +51,16 @@ module Glimmer
|
|
49
51
|
when 'insertmarkmove', 'insertmarkmoved', 'insert_mark_move', 'insert_mark_moved'
|
50
52
|
if @insert_mark_moved_proc.nil?
|
51
53
|
handle_listener('KeyPress') do |event|
|
52
|
-
@insert_mark_moved_proc
|
54
|
+
@insert_mark_moved_proc&.call
|
53
55
|
end
|
54
56
|
handle_listener('KeyRelease') do |event|
|
55
|
-
@insert_mark_moved_proc
|
57
|
+
@insert_mark_moved_proc&.call
|
56
58
|
end
|
57
59
|
handle_listener('ButtonPress') do |event|
|
58
|
-
@insert_mark_moved_proc
|
60
|
+
@insert_mark_moved_proc&.call
|
59
61
|
end
|
60
62
|
handle_listener('ButtonRelease') do |event|
|
61
|
-
@insert_mark_moved_proc
|
63
|
+
@insert_mark_moved_proc&.call
|
62
64
|
end
|
63
65
|
end
|
64
66
|
@insert_mark = @tk.index('insert')
|
@@ -72,44 +74,71 @@ module Glimmer
|
|
72
74
|
else
|
73
75
|
apply_all_tag
|
74
76
|
# TODO make listener pass an event that has a modifiers attribute for easy representation of :shift, :meta, :control, etc... while a letter button is pressed
|
77
|
+
@listeners ||= {}
|
75
78
|
begin
|
76
|
-
@
|
79
|
+
@listeners[listener_name] ||= []
|
80
|
+
@tk.tag_bind(ALL_TAG, listener_name) { |event| @listeners[listener_name].each {|l| l.call(event)} } if @listeners[listener_name].empty?
|
81
|
+
@listeners[listener_name] << listener
|
77
82
|
rescue => e
|
83
|
+
@listeners.delete(listener_name)
|
78
84
|
Glimmer::Config.logger.debug {"Unable to bind to #{listener_name} .. attempting to surround with <>"}
|
79
85
|
Glimmer::Config.logger.debug {e.full_message}
|
80
86
|
listener_name = "<#{listener_name}" if !listener_name.start_with?('<')
|
81
87
|
listener_name = "#{listener_name}>" if !listener_name.end_with?('>')
|
82
|
-
@
|
88
|
+
@listeners[listener_name] ||= []
|
89
|
+
@tk.tag_bind(ALL_TAG, listener_name) { |event| @listeners[listener_name].each {|l| l.call(event)} } if @listeners[listener_name].empty?
|
90
|
+
@listeners[listener_name] << listener
|
83
91
|
end
|
84
92
|
end
|
85
93
|
end
|
86
94
|
|
87
|
-
def
|
88
|
-
|
95
|
+
def edit_undo
|
96
|
+
@tk.edit_undo if @modified_count.to_i > 2 # <Modified> fires twice the first time, which is equivalent to one change.
|
89
97
|
end
|
90
98
|
|
91
|
-
def
|
92
|
-
|
99
|
+
def edit_redo
|
100
|
+
begin
|
101
|
+
@tk.edit_redo
|
102
|
+
rescue => e
|
103
|
+
# No Op
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def add_selection_format(option, value, no_selection_default: :insert_word)
|
108
|
+
process_selection_ranges(no_selection_default: no_selection_default) { |range_start, range_end| add_format(range_start, range_end, option, value) }
|
93
109
|
end
|
94
110
|
|
95
|
-
def
|
96
|
-
process_selection_ranges { |range_start, range_end|
|
111
|
+
def remove_selection_format(option, value, no_selection_default: :insert_word)
|
112
|
+
process_selection_ranges(no_selection_default: no_selection_default) { |range_start, range_end| remove_format(range_start, range_end, option, value) }
|
97
113
|
end
|
98
114
|
|
99
|
-
def
|
100
|
-
process_selection_ranges { |range_start, range_end|
|
115
|
+
def toggle_selection_format(option, value, no_selection_default: :insert_word)
|
116
|
+
process_selection_ranges(no_selection_default: no_selection_default) { |range_start, range_end| toggle_format(range_start, range_end, option, value) }
|
101
117
|
end
|
102
118
|
|
103
|
-
def
|
104
|
-
process_selection_ranges { |range_start, range_end|
|
119
|
+
def add_selection_font_format(option, value, no_selection_default: :insert_word)
|
120
|
+
process_selection_ranges(no_selection_default: no_selection_default) { |range_start, range_end| add_font_format(range_start, range_end, option, value) }
|
105
121
|
end
|
106
122
|
|
107
|
-
def
|
108
|
-
process_selection_ranges { |range_start, range_end|
|
123
|
+
def remove_selection_font_format(option, value, no_selection_default: :insert_word)
|
124
|
+
process_selection_ranges(no_selection_default: no_selection_default) { |range_start, range_end| remove_font_format(range_start, range_end, option, value) }
|
109
125
|
end
|
110
126
|
|
111
|
-
def
|
112
|
-
|
127
|
+
def toggle_selection_font_format(option, value, no_selection_default: :insert_word)
|
128
|
+
process_selection_ranges(no_selection_default: no_selection_default) { |range_start, range_end| toggle_font_format(range_start, range_end, option, value) }
|
129
|
+
end
|
130
|
+
|
131
|
+
def process_selection_ranges(no_selection_default: :insert_word, &processor)
|
132
|
+
regions = @tk.tag_ranges('sel')
|
133
|
+
if regions.empty?
|
134
|
+
case no_selection_default
|
135
|
+
when :insert_word
|
136
|
+
regions = [[@tk.index('insert wordstart'), @tk.index('insert wordend + 1 char')]]
|
137
|
+
when :insert_letter
|
138
|
+
regions = [[@tk.index('insert'), @tk.index('insert + 1 char')]]
|
139
|
+
end
|
140
|
+
end
|
141
|
+
regions.each do |region|
|
113
142
|
range_start = region.first
|
114
143
|
range_end = region.last
|
115
144
|
processor.call(range_start, range_end)
|
@@ -151,7 +180,7 @@ module Glimmer
|
|
151
180
|
|
152
181
|
def add_format(region_start, region_end, option, value)
|
153
182
|
@@tag_number = 0 unless defined?(@@tag_number)
|
154
|
-
tag = "
|
183
|
+
tag = "tag_#{option}_#{@@tag_number += 1}"
|
155
184
|
@tk.tag_configure(tag, {option => value})
|
156
185
|
@tk.tag_add(tag, region_start, region_end)
|
157
186
|
tag
|
@@ -202,7 +231,7 @@ module Glimmer
|
|
202
231
|
def applied_font_format_tags_and_regions(region_start, region_end)
|
203
232
|
lines = value.split("\n")
|
204
233
|
tags_and_regions = []
|
205
|
-
all_tag_names = @tk.tag_names - ['sel', ALL_TAG]
|
234
|
+
all_tag_names = (@tk.tag_names - ['sel', ALL_TAG]).select {|tag_name| tag_name.include?('_font_')}
|
206
235
|
(region_start.to_i..region_end.to_i).each do |line_number|
|
207
236
|
start_character_index = 0
|
208
237
|
start_character_index = region_start.to_s.split('.').last.to_i if line_number == region_start.to_i
|
data/samples/hello/hello_text.rb
CHANGED
@@ -107,11 +107,6 @@ class HelloText
|
|
107
107
|
frame {
|
108
108
|
grid row: 0, column: 0
|
109
109
|
|
110
|
-
label {
|
111
|
-
grid row: 0, column: 0, columnspan: 17
|
112
|
-
text 'Select a region of text and then apply formatting from the toolbar'
|
113
|
-
}
|
114
|
-
|
115
110
|
column_index = -1
|
116
111
|
|
117
112
|
combobox {
|
@@ -172,36 +167,36 @@ class HelloText
|
|
172
167
|
@text.toggle_selection_font_format('underline', true)
|
173
168
|
end
|
174
169
|
}
|
175
|
-
|
170
|
+
|
176
171
|
separator {
|
177
172
|
grid row: 1, column: column_index += 1, column_weight: 0
|
178
173
|
orient 'vertical'
|
179
174
|
}
|
180
175
|
|
181
|
-
button {
|
176
|
+
@justify_left_button = button {
|
182
177
|
grid row: 1, column: column_index += 1, column_weight: 0
|
183
|
-
image File.expand_path("images/
|
178
|
+
image File.expand_path("images/align-left.png", __dir__), subsample: 32
|
184
179
|
|
185
180
|
on('command') do
|
186
|
-
@text.
|
181
|
+
@text.add_selection_format('justify', 'left')
|
187
182
|
end
|
188
183
|
}
|
189
184
|
|
190
|
-
button {
|
185
|
+
@justify_center_button = button {
|
191
186
|
grid row: 1, column: column_index += 1, column_weight: 0
|
192
|
-
image File.expand_path("images/
|
187
|
+
image File.expand_path("images/align-center.png", __dir__), subsample: 32
|
193
188
|
|
194
189
|
on('command') do
|
195
|
-
@text.
|
190
|
+
@text.add_selection_format('justify', 'center')
|
196
191
|
end
|
197
192
|
}
|
198
193
|
|
199
|
-
button {
|
194
|
+
@justify_right_button = button {
|
200
195
|
grid row: 1, column: column_index += 1, column_weight: 0
|
201
|
-
image File.expand_path("images/
|
196
|
+
image File.expand_path("images/align-right.png", __dir__), subsample: 32
|
202
197
|
|
203
198
|
on('command') do
|
204
|
-
@text.
|
199
|
+
@text.add_selection_format('justify', 'right')
|
205
200
|
end
|
206
201
|
}
|
207
202
|
|
@@ -210,53 +205,53 @@ class HelloText
|
|
210
205
|
orient 'vertical'
|
211
206
|
}
|
212
207
|
|
213
|
-
|
208
|
+
button {
|
214
209
|
grid row: 1, column: column_index += 1, column_weight: 0
|
215
|
-
image File.expand_path("images/
|
210
|
+
image File.expand_path("images/picture.png", __dir__), subsample: 32
|
216
211
|
|
217
212
|
on('command') do
|
218
|
-
@text.
|
213
|
+
@text.get_open_file_to_insert_image
|
219
214
|
end
|
220
215
|
}
|
221
216
|
|
222
|
-
|
217
|
+
button {
|
223
218
|
grid row: 1, column: column_index += 1, column_weight: 0
|
224
|
-
image File.expand_path("images/
|
219
|
+
image File.expand_path("images/search.png", __dir__), subsample: 32
|
225
220
|
|
226
221
|
on('command') do
|
227
|
-
|
222
|
+
show_find_dialog
|
228
223
|
end
|
229
224
|
}
|
230
225
|
|
231
|
-
|
226
|
+
separator {
|
232
227
|
grid row: 1, column: column_index += 1, column_weight: 0
|
233
|
-
|
234
|
-
|
235
|
-
on('command') do
|
236
|
-
@text.add_selection_format('justify', 'right')
|
237
|
-
end
|
228
|
+
orient 'vertical'
|
238
229
|
}
|
239
230
|
|
240
|
-
|
231
|
+
button {
|
241
232
|
grid row: 1, column: column_index += 1, column_weight: 0
|
242
|
-
|
233
|
+
image File.expand_path("images/cut.png", __dir__), subsample: 32
|
234
|
+
|
235
|
+
on('command') do
|
236
|
+
@text.text_cut
|
237
|
+
end
|
243
238
|
}
|
244
239
|
|
245
240
|
button {
|
246
241
|
grid row: 1, column: column_index += 1, column_weight: 0
|
247
|
-
image File.expand_path("images/
|
242
|
+
image File.expand_path("images/copy.png", __dir__), subsample: 32
|
248
243
|
|
249
244
|
on('command') do
|
250
|
-
@text.
|
245
|
+
@text.text_copy
|
251
246
|
end
|
252
247
|
}
|
253
248
|
|
254
249
|
button {
|
255
250
|
grid row: 1, column: column_index += 1, column_weight: 0
|
256
|
-
image File.expand_path("images/
|
251
|
+
image File.expand_path("images/paste.png", __dir__), subsample: 32
|
257
252
|
|
258
253
|
on('command') do
|
259
|
-
@text.
|
254
|
+
@text.text_paste
|
260
255
|
end
|
261
256
|
}
|
262
257
|
|
@@ -265,21 +260,22 @@ class HelloText
|
|
265
260
|
orient 'vertical'
|
266
261
|
}
|
267
262
|
|
263
|
+
|
268
264
|
button {
|
269
265
|
grid row: 1, column: column_index += 1, column_weight: 0
|
270
|
-
image File.expand_path("images/
|
266
|
+
image File.expand_path("images/undo.png", __dir__), subsample: 32
|
271
267
|
|
272
268
|
on('command') do
|
273
|
-
@text.
|
269
|
+
@text.edit_undo
|
274
270
|
end
|
275
271
|
}
|
276
272
|
|
277
273
|
button {
|
278
274
|
grid row: 1, column: column_index += 1, column_weight: 0
|
279
|
-
image File.expand_path("images/
|
275
|
+
image File.expand_path("images/redo.png", __dir__), subsample: 32
|
280
276
|
|
281
277
|
on('command') do
|
282
|
-
|
278
|
+
@text.edit_redo
|
283
279
|
end
|
284
280
|
}
|
285
281
|
}
|
@@ -293,7 +289,7 @@ class HelloText
|
|
293
289
|
on('KeyPress') do |event|
|
294
290
|
show_find_dialog if (event.keysym == 'f') && ((OS.mac? && event.state == 8) || (!OS.mac? && event.state == 4))
|
295
291
|
end
|
296
|
-
|
292
|
+
|
297
293
|
on('InsertMarkMoved') do
|
298
294
|
self.font_family = @text.applied_font_format_value('family')
|
299
295
|
self.font_size = @text.applied_font_format_value('size')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-tk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.34
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AndyMaleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|