cdk 0.9.0 → 0.10.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/lib/cdk.rb +7 -866
- data/lib/cdk/cdk_objs.rb +46 -423
- data/lib/cdk/components.rb +28 -0
- data/lib/cdk/{alphalist.rb → components/alphalist.rb} +9 -6
- data/lib/cdk/components/button.rb +405 -0
- data/lib/cdk/{buttonbox.rb → components/buttonbox.rb} +11 -11
- data/lib/cdk/{calendar.rb → components/calendar.rb} +13 -13
- data/lib/cdk/components/dialog.rb +343 -0
- data/lib/cdk/{dscale.rb → components/dscale.rb} +0 -0
- data/lib/cdk/{entry.rb → components/entry.rb} +18 -18
- data/lib/cdk/{fscale.rb → components/fscale.rb} +1 -1
- data/lib/cdk/{fselect.rb → components/fselect.rb} +16 -13
- data/lib/cdk/{fslider.rb → components/fslider.rb} +1 -1
- data/lib/cdk/components/graph.rb +386 -0
- data/lib/cdk/{histogram.rb → components/histogram.rb} +3 -3
- data/lib/cdk/{itemlist.rb → components/itemlist.rb} +14 -14
- data/lib/cdk/{label.rb → components/label.rb} +7 -7
- data/lib/cdk/{marquee.rb → components/marquee.rb} +7 -7
- data/lib/cdk/{matrix.rb → components/matrix.rb} +27 -27
- data/lib/cdk/{mentry.rb → components/mentry.rb} +18 -18
- data/lib/cdk/{menu.rb → components/menu.rb} +18 -18
- data/lib/cdk/{radio.rb → components/radio.rb} +12 -12
- data/lib/cdk/{scale.rb → components/scale.rb} +13 -13
- data/lib/cdk/{scroll.rb → components/scroll.rb} +23 -386
- data/lib/cdk/{scroller.rb → components/scroller.rb} +1 -1
- data/lib/cdk/{selection.rb → components/selection.rb} +14 -14
- data/lib/cdk/{slider.rb → components/slider.rb} +15 -15
- data/lib/cdk/{swindow.rb → components/swindow.rb} +14 -14
- data/lib/cdk/{template.rb → components/template.rb} +18 -18
- data/lib/cdk/{uscale.rb → components/uscale.rb} +0 -0
- data/lib/cdk/{uslider.rb → components/uslider.rb} +0 -0
- data/lib/cdk/{viewer.rb → components/viewer.rb} +88 -18
- data/lib/cdk/constants.rb +54 -0
- data/lib/cdk/display.rb +30 -35
- data/lib/cdk/draw.rb +4 -6
- data/lib/cdk/helpers/file.rb +43 -0
- data/lib/cdk/helpers/types.rb +13 -0
- data/lib/cdk/helpers/window.rb +64 -0
- data/lib/cdk/mixins/alignments.rb +55 -0
- data/lib/cdk/mixins/bindings.rb +73 -0
- data/lib/cdk/mixins/borders.rb +62 -0
- data/lib/cdk/mixins/common_controls.rb +14 -0
- data/lib/cdk/mixins/converters.rb +358 -0
- data/lib/cdk/mixins/exit_conditions.rb +31 -0
- data/lib/cdk/mixins/focusable.rb +17 -0
- data/lib/cdk/mixins/formattable.rb +15 -0
- data/lib/cdk/mixins/has_screen.rb +23 -0
- data/lib/cdk/mixins/has_title.rb +64 -0
- data/lib/cdk/mixins/justifications.rb +26 -0
- data/lib/cdk/mixins/list_support.rb +31 -0
- data/lib/cdk/mixins/movement.rb +140 -0
- data/lib/cdk/mixins/window_hooks.rb +18 -0
- data/lib/cdk/mixins/window_input.rb +61 -0
- data/lib/cdk/screen.rb +27 -3
- metadata +51 -29
- data/lib/cdk/dialog.rb +0 -727
@@ -0,0 +1,64 @@
|
|
1
|
+
module CDK
|
2
|
+
module HasTitle
|
3
|
+
attr_accessor :title_attrib
|
4
|
+
|
5
|
+
def init_title
|
6
|
+
@title_attrib = Ncurses::A_NORMAL
|
7
|
+
end
|
8
|
+
|
9
|
+
# Set the widget's title.
|
10
|
+
def setTitle (title, box_width)
|
11
|
+
if !title.nil?
|
12
|
+
temp = title.split("\n")
|
13
|
+
@title_lines = temp.size
|
14
|
+
|
15
|
+
if box_width >= 0
|
16
|
+
max_width = 0
|
17
|
+
temp.each do |line|
|
18
|
+
len = []
|
19
|
+
align = []
|
20
|
+
holder = char2Chtype(line, len, align)
|
21
|
+
max_width = [len[0], max_width].max
|
22
|
+
end
|
23
|
+
box_width = [box_width, max_width + 2 * @border_size].max
|
24
|
+
else
|
25
|
+
box_width = -(box_width - 1)
|
26
|
+
end
|
27
|
+
|
28
|
+
# For each line in the title convert from string to chtype array
|
29
|
+
title_width = box_width - (2 * @border_size)
|
30
|
+
@title = []
|
31
|
+
@title_pos = []
|
32
|
+
@title_len = []
|
33
|
+
(0...@title_lines).each do |x|
|
34
|
+
len_x = []
|
35
|
+
pos_x = []
|
36
|
+
@title << char2Chtype(temp[x], len_x, pos_x)
|
37
|
+
@title_len.concat(len_x)
|
38
|
+
@title_pos << justify_string(title_width, len_x[0], pos_x[0])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
return box_width
|
43
|
+
end
|
44
|
+
|
45
|
+
# Draw the widget's title
|
46
|
+
def drawTitle(win)
|
47
|
+
(0...@title_lines).each do |x|
|
48
|
+
Draw.writeChtypeAttrib(@win,
|
49
|
+
@title_pos[x] + @border_size,
|
50
|
+
x + @border_size,
|
51
|
+
@title[x],
|
52
|
+
title_attrib,
|
53
|
+
CDK::HORIZONTAL,
|
54
|
+
0,
|
55
|
+
@title_len[x])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Remove storage for the widget's title.
|
60
|
+
def cleanTitle
|
61
|
+
@title_lines = ''
|
62
|
+
end
|
63
|
+
end # module HasTitle
|
64
|
+
end # module CDK
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module CDK
|
2
|
+
module Justifications
|
3
|
+
# This takes a string, a field width, and a justification type
|
4
|
+
# and returns the adjustment to make, to fill the justification
|
5
|
+
# requirement
|
6
|
+
def justify_string (box_width, mesg_length, justify)
|
7
|
+
# make sure the message isn't longer than the width
|
8
|
+
# if it is, return 0
|
9
|
+
if mesg_length >= box_width
|
10
|
+
return 0
|
11
|
+
end
|
12
|
+
|
13
|
+
# try to justify the message
|
14
|
+
case justify
|
15
|
+
when LEFT
|
16
|
+
0
|
17
|
+
when RIGHT
|
18
|
+
box_width - mesg_length
|
19
|
+
when CENTER
|
20
|
+
(box_width - mesg_length) / 2
|
21
|
+
else
|
22
|
+
justify
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end # module Justifications
|
26
|
+
end # module CDK
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module CDK
|
2
|
+
module ListSupport
|
3
|
+
# This looks for a subset of a word in the given list
|
4
|
+
def search_list(list, list_size, pattern)
|
5
|
+
index = -1
|
6
|
+
|
7
|
+
if pattern.size > 0
|
8
|
+
(0...list_size).each do |x|
|
9
|
+
len = [list[x].size, pattern.size].min
|
10
|
+
ret = (list[x][0...len] <=> pattern)
|
11
|
+
|
12
|
+
# If 'ret' is less than 0 then the current word is alphabetically
|
13
|
+
# less than the provided word. At this point we will set the index
|
14
|
+
# to the current position. If 'ret' is greater than 0, then the
|
15
|
+
# current word is alphabetically greater than the given word. We
|
16
|
+
# should return with index, which might contain the last best match.
|
17
|
+
# If they are equal then we've found it.
|
18
|
+
if ret < 0
|
19
|
+
index = ret
|
20
|
+
else
|
21
|
+
if ret == 0
|
22
|
+
index = x
|
23
|
+
end
|
24
|
+
break
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
return index
|
29
|
+
end
|
30
|
+
end # module ListSupport
|
31
|
+
end # module CDK
|
@@ -0,0 +1,140 @@
|
|
1
|
+
module CDK
|
2
|
+
module Movement
|
3
|
+
def move(xplace, yplace, relative, refresh_flag)
|
4
|
+
self.move_specific(xplace, yplace, relative, refresh_flag,
|
5
|
+
[@win, @shadow_win], [])
|
6
|
+
end
|
7
|
+
|
8
|
+
def move_specific(xplace, yplace, relative, refresh_flag,
|
9
|
+
windows, subwidgets)
|
10
|
+
current_x = @win.getbegx
|
11
|
+
current_y = @win.getbegy
|
12
|
+
xpos = xplace
|
13
|
+
ypos = yplace
|
14
|
+
|
15
|
+
# If this is a relative move, then we will adjust where we want
|
16
|
+
# to move to.
|
17
|
+
if relative
|
18
|
+
xpos = @win.getbegx + xplace
|
19
|
+
ypos = @win.getbegy + yplace
|
20
|
+
end
|
21
|
+
|
22
|
+
# Adjust the window if we need to
|
23
|
+
xtmp = [xpos]
|
24
|
+
ytmp = [ypos]
|
25
|
+
alignxy(@screen.window, xtmp, ytmp, @box_width, @box_height)
|
26
|
+
xpos = xtmp[0]
|
27
|
+
ypos = ytmp[0]
|
28
|
+
|
29
|
+
# Get the difference
|
30
|
+
xdiff = current_x - xpos
|
31
|
+
ydiff = current_y - ypos
|
32
|
+
|
33
|
+
# Move the window to the new location.
|
34
|
+
windows.each do |window|
|
35
|
+
CDK.moveCursesWindow(window, -xdiff, -ydiff)
|
36
|
+
end
|
37
|
+
|
38
|
+
subwidgets.each do |subwidget|
|
39
|
+
subwidget.move(xplace, yplace, relative, false)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Touch the windows so they 'move'
|
43
|
+
CDK::SCREEN.refreshCDKWindow(@screen.window)
|
44
|
+
|
45
|
+
# Redraw the window, if they asked for it
|
46
|
+
if refresh_flag
|
47
|
+
self.draw(@box)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# This allows the user to use the cursor keys to adjust the
|
52
|
+
# postion of the widget.
|
53
|
+
def position(win)
|
54
|
+
parent = @screen.window
|
55
|
+
orig_x = win.getbegx
|
56
|
+
orig_y = win.getbegy
|
57
|
+
beg_x = parent.getbegx
|
58
|
+
beg_y = parent.getbegy
|
59
|
+
end_x = beg_x + @screen.window.getmaxx
|
60
|
+
end_y = beg_y + @screen.window.getmaxy
|
61
|
+
|
62
|
+
# Let them move the widget around until they hit return.
|
63
|
+
while !([CDK::KEY_RETURN, Ncurses::KEY_ENTER].include?(
|
64
|
+
key = self.getch([])))
|
65
|
+
case key
|
66
|
+
when Ncurses::KEY_UP, '8'.ord
|
67
|
+
if win.getbegy > beg_y
|
68
|
+
self.move(0, -1, true, true)
|
69
|
+
else
|
70
|
+
CDK.Beep
|
71
|
+
end
|
72
|
+
when Ncurses::KEY_DOWN, '2'.ord
|
73
|
+
if (win.getbegy + win.getmaxy) < end_y
|
74
|
+
self.move(0, 1, true, true)
|
75
|
+
else
|
76
|
+
CDK.Beep
|
77
|
+
end
|
78
|
+
when Ncurses::KEY_LEFT, '4'.ord
|
79
|
+
if win.getbegx > beg_x
|
80
|
+
self.move(-1, 0, true, true)
|
81
|
+
else
|
82
|
+
CDK.Beep
|
83
|
+
end
|
84
|
+
when Ncurses::KEY_RIGHT, '6'.ord
|
85
|
+
if (win.getbegx + win.getmaxx) < end_x
|
86
|
+
self.move(1, 0, true, true)
|
87
|
+
else
|
88
|
+
CDK.Beep
|
89
|
+
end
|
90
|
+
when '7'.ord
|
91
|
+
if win.getbegy > beg_y && win.getbegx > beg_x
|
92
|
+
self.move(-1, -1, true, true)
|
93
|
+
else
|
94
|
+
CDK.Beep
|
95
|
+
end
|
96
|
+
when '9'.ord
|
97
|
+
if (win.getbegx + win.getmaxx) < end_x && win.getbegy > beg_y
|
98
|
+
self.move(1, -1, true, true)
|
99
|
+
else
|
100
|
+
CDK.Beep
|
101
|
+
end
|
102
|
+
when '1'.ord
|
103
|
+
if win.getbegx > beg_x && (win.getbegy + win.getmaxy) < end_y
|
104
|
+
self.move(-1, 1, true, true)
|
105
|
+
else
|
106
|
+
CDK.Beep
|
107
|
+
end
|
108
|
+
when '3'.ord
|
109
|
+
if (win.getbegx + win.getmaxx) < end_x &&
|
110
|
+
(win.getbegy + win.getmaxy) < end_y
|
111
|
+
self.move(1, 1, true, true)
|
112
|
+
else
|
113
|
+
CDK.Beep
|
114
|
+
end
|
115
|
+
when '5'.ord
|
116
|
+
self.move(CDK::CENTER, CDK::CENTER, false, true)
|
117
|
+
when 't'.ord
|
118
|
+
self.move(win.getbegx, CDK::TOP, false, true)
|
119
|
+
when 'b'.ord
|
120
|
+
self.move(win.getbegx, CDK::BOTTOM, false, true)
|
121
|
+
when 'l'.ord
|
122
|
+
self.move(CDK::LEFT, win.getbegy, false, true)
|
123
|
+
when 'r'.ord
|
124
|
+
self.move(CDK::RIGHT, win.getbegy, false, true)
|
125
|
+
when 'c'.ord
|
126
|
+
self.move(CDK::CENTER, win.getbegy, false, true)
|
127
|
+
when 'C'.ord
|
128
|
+
self.move(win.getbegx, CDK::CENTER, false, true)
|
129
|
+
when CDK::REFRESH
|
130
|
+
@screen.erase
|
131
|
+
@screen.refresh
|
132
|
+
when CDK::KEY_ESC
|
133
|
+
self.move(orig_x, orig_y, false, true)
|
134
|
+
else
|
135
|
+
CDK.Beep
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end # module Movement
|
140
|
+
end # module CDK
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module CDK
|
2
|
+
module WindowInput
|
3
|
+
def inject(a)
|
4
|
+
end
|
5
|
+
|
6
|
+
# Set data for preprocessing
|
7
|
+
def setPreProcess (fn, data)
|
8
|
+
@pre_process_func = fn
|
9
|
+
@pre_process_data = data
|
10
|
+
end
|
11
|
+
|
12
|
+
# Set data for postprocessing
|
13
|
+
def setPostProcess (fn, data)
|
14
|
+
@post_process_func = fn
|
15
|
+
@post_process_data = data
|
16
|
+
end
|
17
|
+
|
18
|
+
def getc
|
19
|
+
cdktype = self.object_type
|
20
|
+
test = self.bindableObject(cdktype)
|
21
|
+
result = @input_window.wgetch
|
22
|
+
|
23
|
+
if result >= 0 && !(test.nil?) && test.binding_list.include?(result) &&
|
24
|
+
test.binding_list[result][0] == :getc
|
25
|
+
result = test.binding_list[result][1]
|
26
|
+
elsif test.nil? || !(test.binding_list.include?(result)) ||
|
27
|
+
test.binding_list[result][0].nil?
|
28
|
+
case result
|
29
|
+
when "\r".ord, "\n".ord
|
30
|
+
result = Ncurses::KEY_ENTER
|
31
|
+
when "\t".ord
|
32
|
+
result = CDK::KEY_TAB
|
33
|
+
when CDK::DELETE
|
34
|
+
result = Ncurses::KEY_DC
|
35
|
+
when "\b".ord
|
36
|
+
result = Ncurses::KEY_BACKSPACE
|
37
|
+
when CDK::BEGOFLINE
|
38
|
+
result = Ncurses::KEY_HOME
|
39
|
+
when CDK::ENDOFLINE
|
40
|
+
result = Ncurses::KEY_END
|
41
|
+
when CDK::FORCHAR
|
42
|
+
result = Ncurses::KEY_RIGHT
|
43
|
+
when CDK::BACKCHAR
|
44
|
+
result = Ncurses::KEY_LEFT
|
45
|
+
when CDK::NEXT
|
46
|
+
result = CDK::KEY_TAB
|
47
|
+
when CDK::PREV
|
48
|
+
result = Ncurses::KEY_BTAB
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
return result
|
53
|
+
end
|
54
|
+
|
55
|
+
def getch(function_key)
|
56
|
+
key = self.getc
|
57
|
+
function_key << (key >= Ncurses::KEY_MIN && key <= Ncurses::KEY_MAX)
|
58
|
+
return key
|
59
|
+
end
|
60
|
+
end # module WindowInput
|
61
|
+
end # module CDK
|
data/lib/cdk/screen.rb
CHANGED
@@ -189,13 +189,31 @@ module CDK
|
|
189
189
|
self.refresh
|
190
190
|
end
|
191
191
|
|
192
|
+
def self.refresh_output(v=true)
|
193
|
+
@refresh_output = v
|
194
|
+
end
|
195
|
+
|
196
|
+
def self.refresh_output?
|
197
|
+
!defined?(@refresh_output) || !!@refresh_output
|
198
|
+
end
|
199
|
+
|
200
|
+
def self.wrefresh(w)
|
201
|
+
if refresh_output?
|
202
|
+
w.wrefresh
|
203
|
+
|
204
|
+
else
|
205
|
+
w.noutrefresh
|
206
|
+
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
192
210
|
# Refresh one CDK window.
|
193
211
|
# FIXME(original): this should be rewritten to use the panel library, so
|
194
212
|
# it would not be necessary to touch the window to ensure that it covers
|
195
213
|
# other windows.
|
196
|
-
def
|
214
|
+
def self.refreshCDKWindow(win)
|
197
215
|
win.touchwin
|
198
|
-
|
216
|
+
SCREEN.wrefresh(win)
|
199
217
|
end
|
200
218
|
|
201
219
|
# This refreshes all the objects in the screen.
|
@@ -237,6 +255,12 @@ module CDK
|
|
237
255
|
end
|
238
256
|
end
|
239
257
|
|
258
|
+
def noutrefresh
|
259
|
+
SCREEN.refresh_output(false)
|
260
|
+
refresh
|
261
|
+
SCREEN.refresh_output(true)
|
262
|
+
end
|
263
|
+
|
240
264
|
# This clears all the objects in the screen
|
241
265
|
def erase
|
242
266
|
# We just call the object erase function
|
@@ -248,7 +272,7 @@ module CDK
|
|
248
272
|
end
|
249
273
|
|
250
274
|
# Refresh the screen.
|
251
|
-
@window
|
275
|
+
SCREEN.wrefresh(@window)
|
252
276
|
end
|
253
277
|
|
254
278
|
# Destroy all the objects on a screen
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mo Morsi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ncursesw
|
@@ -32,38 +32,60 @@ extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
34
|
- lib/cdk.rb
|
35
|
-
- lib/cdk/alphalist.rb
|
36
|
-
- lib/cdk/buttonbox.rb
|
37
|
-
- lib/cdk/calendar.rb
|
38
35
|
- lib/cdk/cdk_objs.rb
|
39
|
-
- lib/cdk/
|
36
|
+
- lib/cdk/components.rb
|
37
|
+
- lib/cdk/components/alphalist.rb
|
38
|
+
- lib/cdk/components/button.rb
|
39
|
+
- lib/cdk/components/buttonbox.rb
|
40
|
+
- lib/cdk/components/calendar.rb
|
41
|
+
- lib/cdk/components/dialog.rb
|
42
|
+
- lib/cdk/components/dscale.rb
|
43
|
+
- lib/cdk/components/entry.rb
|
44
|
+
- lib/cdk/components/fscale.rb
|
45
|
+
- lib/cdk/components/fselect.rb
|
46
|
+
- lib/cdk/components/fslider.rb
|
47
|
+
- lib/cdk/components/graph.rb
|
48
|
+
- lib/cdk/components/histogram.rb
|
49
|
+
- lib/cdk/components/itemlist.rb
|
50
|
+
- lib/cdk/components/label.rb
|
51
|
+
- lib/cdk/components/marquee.rb
|
52
|
+
- lib/cdk/components/matrix.rb
|
53
|
+
- lib/cdk/components/mentry.rb
|
54
|
+
- lib/cdk/components/menu.rb
|
55
|
+
- lib/cdk/components/radio.rb
|
56
|
+
- lib/cdk/components/scale.rb
|
57
|
+
- lib/cdk/components/scroll.rb
|
58
|
+
- lib/cdk/components/scroller.rb
|
59
|
+
- lib/cdk/components/selection.rb
|
60
|
+
- lib/cdk/components/slider.rb
|
61
|
+
- lib/cdk/components/swindow.rb
|
62
|
+
- lib/cdk/components/template.rb
|
63
|
+
- lib/cdk/components/uscale.rb
|
64
|
+
- lib/cdk/components/uslider.rb
|
65
|
+
- lib/cdk/components/viewer.rb
|
66
|
+
- lib/cdk/constants.rb
|
40
67
|
- lib/cdk/display.rb
|
41
68
|
- lib/cdk/draw.rb
|
42
|
-
- lib/cdk/
|
43
|
-
- lib/cdk/
|
44
|
-
- lib/cdk/
|
45
|
-
- lib/cdk/
|
46
|
-
- lib/cdk/
|
47
|
-
- lib/cdk/
|
48
|
-
- lib/cdk/
|
49
|
-
- lib/cdk/
|
50
|
-
- lib/cdk/
|
51
|
-
- lib/cdk/
|
52
|
-
- lib/cdk/
|
53
|
-
- lib/cdk/
|
54
|
-
- lib/cdk/
|
55
|
-
- lib/cdk/
|
69
|
+
- lib/cdk/helpers/file.rb
|
70
|
+
- lib/cdk/helpers/types.rb
|
71
|
+
- lib/cdk/helpers/window.rb
|
72
|
+
- lib/cdk/mixins/alignments.rb
|
73
|
+
- lib/cdk/mixins/bindings.rb
|
74
|
+
- lib/cdk/mixins/borders.rb
|
75
|
+
- lib/cdk/mixins/common_controls.rb
|
76
|
+
- lib/cdk/mixins/converters.rb
|
77
|
+
- lib/cdk/mixins/exit_conditions.rb
|
78
|
+
- lib/cdk/mixins/focusable.rb
|
79
|
+
- lib/cdk/mixins/formattable.rb
|
80
|
+
- lib/cdk/mixins/has_screen.rb
|
81
|
+
- lib/cdk/mixins/has_title.rb
|
82
|
+
- lib/cdk/mixins/justifications.rb
|
83
|
+
- lib/cdk/mixins/list_support.rb
|
84
|
+
- lib/cdk/mixins/movement.rb
|
85
|
+
- lib/cdk/mixins/window_hooks.rb
|
86
|
+
- lib/cdk/mixins/window_input.rb
|
56
87
|
- lib/cdk/screen.rb
|
57
|
-
- lib/cdk/scroll.rb
|
58
|
-
- lib/cdk/scroller.rb
|
59
|
-
- lib/cdk/selection.rb
|
60
|
-
- lib/cdk/slider.rb
|
61
|
-
- lib/cdk/swindow.rb
|
62
|
-
- lib/cdk/template.rb
|
63
88
|
- lib/cdk/traverse.rb
|
64
|
-
- lib/cdk/uscale.rb
|
65
|
-
- lib/cdk/uslider.rb
|
66
|
-
- lib/cdk/viewer.rb
|
67
89
|
homepage: http://github.com/movitto/cdk
|
68
90
|
licenses:
|
69
91
|
- BSD-3-Clause
|