cdk 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cdk.rb +7 -866
  3. data/lib/cdk/cdk_objs.rb +46 -423
  4. data/lib/cdk/components.rb +28 -0
  5. data/lib/cdk/{alphalist.rb → components/alphalist.rb} +9 -6
  6. data/lib/cdk/components/button.rb +405 -0
  7. data/lib/cdk/{buttonbox.rb → components/buttonbox.rb} +11 -11
  8. data/lib/cdk/{calendar.rb → components/calendar.rb} +13 -13
  9. data/lib/cdk/components/dialog.rb +343 -0
  10. data/lib/cdk/{dscale.rb → components/dscale.rb} +0 -0
  11. data/lib/cdk/{entry.rb → components/entry.rb} +18 -18
  12. data/lib/cdk/{fscale.rb → components/fscale.rb} +1 -1
  13. data/lib/cdk/{fselect.rb → components/fselect.rb} +16 -13
  14. data/lib/cdk/{fslider.rb → components/fslider.rb} +1 -1
  15. data/lib/cdk/components/graph.rb +386 -0
  16. data/lib/cdk/{histogram.rb → components/histogram.rb} +3 -3
  17. data/lib/cdk/{itemlist.rb → components/itemlist.rb} +14 -14
  18. data/lib/cdk/{label.rb → components/label.rb} +7 -7
  19. data/lib/cdk/{marquee.rb → components/marquee.rb} +7 -7
  20. data/lib/cdk/{matrix.rb → components/matrix.rb} +27 -27
  21. data/lib/cdk/{mentry.rb → components/mentry.rb} +18 -18
  22. data/lib/cdk/{menu.rb → components/menu.rb} +18 -18
  23. data/lib/cdk/{radio.rb → components/radio.rb} +12 -12
  24. data/lib/cdk/{scale.rb → components/scale.rb} +13 -13
  25. data/lib/cdk/{scroll.rb → components/scroll.rb} +23 -386
  26. data/lib/cdk/{scroller.rb → components/scroller.rb} +1 -1
  27. data/lib/cdk/{selection.rb → components/selection.rb} +14 -14
  28. data/lib/cdk/{slider.rb → components/slider.rb} +15 -15
  29. data/lib/cdk/{swindow.rb → components/swindow.rb} +14 -14
  30. data/lib/cdk/{template.rb → components/template.rb} +18 -18
  31. data/lib/cdk/{uscale.rb → components/uscale.rb} +0 -0
  32. data/lib/cdk/{uslider.rb → components/uslider.rb} +0 -0
  33. data/lib/cdk/{viewer.rb → components/viewer.rb} +88 -18
  34. data/lib/cdk/constants.rb +54 -0
  35. data/lib/cdk/display.rb +30 -35
  36. data/lib/cdk/draw.rb +4 -6
  37. data/lib/cdk/helpers/file.rb +43 -0
  38. data/lib/cdk/helpers/types.rb +13 -0
  39. data/lib/cdk/helpers/window.rb +64 -0
  40. data/lib/cdk/mixins/alignments.rb +55 -0
  41. data/lib/cdk/mixins/bindings.rb +73 -0
  42. data/lib/cdk/mixins/borders.rb +62 -0
  43. data/lib/cdk/mixins/common_controls.rb +14 -0
  44. data/lib/cdk/mixins/converters.rb +358 -0
  45. data/lib/cdk/mixins/exit_conditions.rb +31 -0
  46. data/lib/cdk/mixins/focusable.rb +17 -0
  47. data/lib/cdk/mixins/formattable.rb +15 -0
  48. data/lib/cdk/mixins/has_screen.rb +23 -0
  49. data/lib/cdk/mixins/has_title.rb +64 -0
  50. data/lib/cdk/mixins/justifications.rb +26 -0
  51. data/lib/cdk/mixins/list_support.rb +31 -0
  52. data/lib/cdk/mixins/movement.rb +140 -0
  53. data/lib/cdk/mixins/window_hooks.rb +18 -0
  54. data/lib/cdk/mixins/window_input.rb +61 -0
  55. data/lib/cdk/screen.rb +27 -3
  56. metadata +51 -29
  57. data/lib/cdk/dialog.rb +0 -727
@@ -0,0 +1,54 @@
1
+ module CDK
2
+ VERSION_MAJOR = 0
3
+ VERSION_MINOR = 10
4
+ VERSION_PATCH = 0
5
+
6
+ CDK_PATHMAX = 256
7
+
8
+ L_MARKER = '<'
9
+ R_MARKER = '>'
10
+
11
+ LEFT = 9000
12
+ RIGHT = 9001
13
+ CENTER = 9002
14
+ TOP = 9003
15
+ BOTTOM = 9004
16
+ HORIZONTAL = 9005
17
+ VERTICAL = 9006
18
+ FULL = 9007
19
+
20
+ NONE = 0
21
+ ROW = 1
22
+ COL = 2
23
+
24
+ MAX_BINDINGS = 300
25
+ MAX_ITEMS = 2000
26
+ MAX_BUTTONS = 200
27
+
28
+ def self.CTRL(c)
29
+ c.ord & 0x1f
30
+ end
31
+
32
+ REFRESH = CTRL('L')
33
+ PASTE = CTRL('V')
34
+ COPY = CTRL('Y')
35
+ ERASE = CTRL('U')
36
+ CUT = CTRL('X')
37
+ BEGOFLINE = CTRL('A')
38
+ ENDOFLINE = CTRL('E')
39
+ BACKCHAR = CTRL('B')
40
+ FORCHAR = CTRL('F')
41
+ TRANSPOSE = CTRL('T')
42
+ NEXT = CTRL('N')
43
+ PREV = CTRL('P')
44
+ DELETE = "\177".ord
45
+ KEY_ESC = "\033".ord
46
+ KEY_RETURN = "\012".ord
47
+ KEY_TAB = "\t".ord
48
+
49
+ def self.Version
50
+ return "%d.%d.%d" % [CDK::VERSION_MAJOR,
51
+ CDK::VERSION_MINOR,
52
+ CDK::VERSION_PATCH]
53
+ end
54
+ end # module CDK
@@ -1,40 +1,26 @@
1
1
  module CDK
2
2
  module Display
3
- # Given a string, returns the equivalent display type
4
- def Display.char2DisplayType(string)
5
- table = {
6
- "CHAR" => :CHAR,
7
- "HCHAR" => :HCHAR,
8
- "INT" => :INT,
9
- "HINT" => :HINT,
10
- "UCHAR" => :UCHAR,
11
- "LCHAR" => :LCHAR,
12
- "UHCHAR" => :UHCHAR,
13
- "LHCHAR" => :LHCHAR,
14
- "MIXED" => :MIXED,
15
- "HMIXED" => :HMIXED,
16
- "UMIXED" => :UMIXED,
17
- "LMIXED" => :LMIXED,
18
- "UHMIXED" => :UHMIXED,
19
- "LHMIXED" => :LHMIXED,
20
- "VIEWONLY" => :VIEWONLY,
21
- 0 => :INVALID
22
- }
23
-
24
- if table.include?(string)
25
- table[string]
26
- else
27
- :INVALID
28
- end
29
- end
30
-
31
3
  # Tell if a display type is "hidden"
32
4
  def Display.isHiddenDisplayType(type)
33
5
  case type
34
- when :HCHAR, :HINT, :HMIXED, :LHCHAR, :LHMIXED, :UHCHAR, :UHMIXED
6
+ when :HCHAR,
7
+ :HINT,
8
+ :HMIXED,
9
+ :LHCHAR,
10
+ :LHMIXED,
11
+ :UHCHAR,
12
+ :UHMIXED
35
13
  true
36
- when :CHAR, :INT, :INVALID, :LCHAR, :LMIXED, :MIXED, :UCHAR,
37
- :UMIXED, :VIEWONLY
14
+
15
+ when :CHAR,
16
+ :INT,
17
+ :INVALID,
18
+ :LCHAR,
19
+ :LMIXED,
20
+ :MIXED,
21
+ :UCHAR,
22
+ :UMIXED,
23
+ :VIEWONLY
38
24
  false
39
25
  end
40
26
  end
@@ -45,15 +31,24 @@ module CDK
45
31
  result = input
46
32
  if !CDK.isChar(input)
47
33
  result = Ncurses::ERR
48
- elsif [:INT, :HINT].include?(type) && !CDK.digit?(result.chr)
34
+
35
+ elsif [:INT, :HINT].include?(type) &&
36
+ !CDK.digit?(result.chr)
49
37
  result = Ncurses::ERR
50
- elsif [:CHAR, :UCHAR, :LCHAR, :UHCHAR, :LHCHAR].include?(type) && CDK.digit?(result.chr)
38
+
39
+ elsif [:CHAR, :UCHAR, :LCHAR, :UHCHAR, :LHCHAR].include?(type) &&
40
+ CDK.digit?(result.chr)
51
41
  result = Ncurses::ERR
42
+
52
43
  elsif type == :VIEWONLY
53
44
  result = ERR
54
- elsif [:UCHAR, :UHCHAR, :UMIXED, :UHMIXED].include?(type) && CDK.alpha?(result.chr)
45
+
46
+ elsif [:UCHAR, :UHCHAR, :UMIXED, :UHMIXED].include?(type) &&
47
+ CDK.alpha?(result.chr)
55
48
  result = result.chr.upcase.ord
56
- elsif [:LCHAR, :LHCHAR, :LMIXED, :LHMIXED].include?(type) && CDK.alpha?(result.chr)
49
+
50
+ elsif [:LCHAR, :LHCHAR, :LMIXED, :LHMIXED].include?(type) &&
51
+ CDK.alpha?(result.chr)
57
52
  result = result.chr.downcase.ord
58
53
  end
59
54
 
@@ -42,7 +42,7 @@ module CDK
42
42
  window.mvwaddch(tly, brx, Ncurses::ACS_URCORNER | attr)
43
43
  window.mvwaddch(bry, tlx, Ncurses::ACS_LLCORNER | attr)
44
44
  window.mvwaddch(bry, brx, Ncurses::ACS_LRCORNER | attr)
45
- window.wrefresh
45
+ SCREEN.wrefresh(window)
46
46
  end
47
47
 
48
48
  # This draws a box with attributes and lets the user define each
@@ -86,7 +86,7 @@ module CDK
86
86
  count += 1
87
87
  end
88
88
  if count != 0
89
- win.wrefresh
89
+ SCREEN.wrefresh(win)
90
90
  end
91
91
  end
92
92
 
@@ -162,7 +162,7 @@ module CDK
162
162
  shadow_win.mvwaddch(0, x_hi, Ncurses::ACS_URCORNER | Ncurses::A_DIM)
163
163
  shadow_win.mvwaddch(y_hi, 0, Ncurses::ACS_LLCORNER | Ncurses::A_DIM)
164
164
  shadow_win.mvwaddch(y_hi, x_hi, Ncurses::ACS_LRCORNER | Ncurses::A_DIM)
165
- shadow_win.wrefresh
165
+ SCREEN.wrefresh(shadow_win)
166
166
  end
167
167
  end
168
168
 
@@ -170,9 +170,7 @@ module CDK
170
170
  def Draw.writeBlanks(window, xpos, ypos, align, start, endn)
171
171
  if start < endn
172
172
  want = (endn - start) + 1000
173
- blanks = ''
174
-
175
- CDK.cleanChar(blanks, want - 1, ' ')
173
+ blanks = ' ' * (want - 1)
176
174
  Draw.writeChar(window, xpos, ypos, blanks, align, start, endn)
177
175
  end
178
176
  end
@@ -0,0 +1,43 @@
1
+ module CDK
2
+ # This reads a file and sticks it into the list provided.
3
+ def self.readFile(filename, array)
4
+ begin
5
+ fd = File.new(filename, "r")
6
+ rescue
7
+ return -1
8
+ end
9
+
10
+ lines = fd.readlines.map do |line|
11
+ if line.size > 0 && line[-1] == "\n"
12
+ line[0...-1]
13
+ else
14
+ line
15
+ end
16
+ end
17
+ array.concat(lines)
18
+ fd.close
19
+ array.size
20
+ end
21
+
22
+ # This opens the current directory and reads the contents.
23
+ def self.getDirectoryContents(directory, list)
24
+ counter = 0
25
+
26
+ # Open the directory.
27
+ Dir.foreach(directory) do |filename|
28
+ next if filename == '.'
29
+ list << filename
30
+ end
31
+
32
+ list.sort!
33
+ return list.size
34
+ end
35
+
36
+ # Returns the directory for the given pathname, i.e. the part before the
37
+ # last slash
38
+ # For now this function is just a wrapper for File.dirname kept for ease of
39
+ # porting and will be completely replaced in the future
40
+ def self.dirName (pathname)
41
+ File.dirname(pathname)
42
+ end
43
+ end # module CDK
@@ -0,0 +1,13 @@
1
+ module CDK
2
+ def self.digit?(character)
3
+ !(character.match(/^[[:digit:]]$/).nil?)
4
+ end
5
+
6
+ def self.alpha?(character)
7
+ !(character.match(/^[[:alpha:]]$/).nil?)
8
+ end
9
+
10
+ def self.isChar(c)
11
+ c >= 0 && c < Ncurses::KEY_MIN
12
+ end
13
+ end # module CDK
@@ -0,0 +1,64 @@
1
+ module CDK
2
+ # This safely erases a given window
3
+ def self.eraseCursesWindow (window)
4
+ return if window.nil?
5
+
6
+ window.werase
7
+ SCREEN.wrefresh(window)
8
+ end
9
+
10
+ # This safely deletes a given window.
11
+ def self.deleteCursesWindow (window)
12
+ return if window.nil?
13
+
14
+ eraseCursesWindow(window)
15
+ window.delwin
16
+ end
17
+
18
+ # This moves a given window (if we're able to set the window's beginning).
19
+ # We do not use mvwin(), because it does not (usually) move subwindows.
20
+ def self.moveCursesWindow (window, xdiff, ydiff)
21
+ return if window.nil?
22
+
23
+ xpos = []
24
+ ypos = []
25
+ window.getbegyx(ypos, xpos)
26
+ if window.mvwin(ypos[0], xpos[0]) != Ncurses::ERR
27
+ xpos[0] += xdiff
28
+ ypos[0] += ydiff
29
+ window.werase
30
+ window.mvwin(ypos[0], xpos[0])
31
+ else
32
+ CDK.Beep
33
+ end
34
+ end
35
+
36
+ # If the dimension is a negative value, the dimension will be the full
37
+ # height/width of the parent window - the value of the dimension. Otherwise,
38
+ # the dimension will be the given value.
39
+ def self.setWidgetDimension (parent_dim, proposed_dim, adjustment)
40
+ # If the user passed in FULL, return the parents size
41
+ if proposed_dim == FULL or proposed_dim == 0
42
+ parent_dim
43
+
44
+ elsif proposed_dim >= 0
45
+ # if they gave a positive value, return it
46
+
47
+ if proposed_dim >= parent_dim
48
+ parent_dim
49
+ else
50
+ proposed_dim + adjustment
51
+ end
52
+
53
+ else
54
+ # if they gave a negative value then return the dimension
55
+ # of the parent plus the value given
56
+ #
57
+ if parent_dim + proposed_dim < 0
58
+ parent_dim
59
+ else
60
+ parent_dim + proposed_dim
61
+ end
62
+ end
63
+ end
64
+ end # module CDK
@@ -0,0 +1,55 @@
1
+ module CDK
2
+ module Alignments
3
+ # This takes an x and y position and realigns the values iff they sent in
4
+ # values like CENTER, LEFT, RIGHT
5
+ #
6
+ # window is an Ncurses::WINDOW object
7
+ # xpos, ypos is an array with exactly one value, an integer
8
+ # box_width, box_height is an integer
9
+ def alignxy (window, xpos, ypos, box_width, box_height)
10
+ first = window.getbegx
11
+ last = window.getmaxx
12
+ if (gap = (last - box_width)) < 0
13
+ gap = 0
14
+ end
15
+ last = first + gap
16
+
17
+ case xpos[0]
18
+ when LEFT
19
+ xpos[0] = first
20
+ when RIGHT
21
+ xpos[0] = first + gap
22
+ when CENTER
23
+ xpos[0] = first + (gap / 2)
24
+ else
25
+ if xpos[0] > last
26
+ xpos[0] = last
27
+ elsif xpos[0] < first
28
+ xpos[0] = first
29
+ end
30
+ end
31
+
32
+ first = window.getbegy
33
+ last = window.getmaxy
34
+ if (gap = (last - box_height)) < 0
35
+ gap = 0
36
+ end
37
+ last = first + gap
38
+
39
+ case ypos[0]
40
+ when TOP
41
+ ypos[0] = first
42
+ when BOTTOM
43
+ ypos[0] = first + gap
44
+ when CENTER
45
+ ypos[0] = first + (gap / 2)
46
+ else
47
+ if ypos[0] > last
48
+ ypos[0] = last
49
+ elsif ypos[0] < first
50
+ ypos[0] = first
51
+ end
52
+ end
53
+ end
54
+ end # module Alignments
55
+ end # module CDK
@@ -0,0 +1,73 @@
1
+ module CDK
2
+ module Bindings
3
+ attr_reader :binding_list
4
+
5
+ def init_bindings
6
+ # Bound functions
7
+ @binding_list = {}
8
+ end
9
+
10
+ def bindableObject(cdktype)
11
+ if cdktype != self.object_type
12
+ return nil
13
+ elsif [:FSELECT, :ALPHALIST].include?(self.object_type)
14
+ return @entry_field
15
+ else
16
+ return self
17
+ end
18
+ end
19
+
20
+ def bind(type, key, function, data)
21
+ obj = self.bindableObject(type)
22
+ if key.ord < Ncurses::KEY_MAX && !(obj.nil?)
23
+ if key.ord != 0
24
+ obj.binding_list[key.ord] = [function, data]
25
+ end
26
+ end
27
+ end
28
+
29
+ def unbind(type, key)
30
+ obj = self.bindableObject(type)
31
+ unless obj.nil?
32
+ obj.binding_list.delete(key)
33
+ end
34
+ end
35
+
36
+ def cleanBindings(type)
37
+ obj = self.bindableObject(type)
38
+ if !(obj.nil?) && !(obj.binding_list.nil?)
39
+ obj.binding_list.clear
40
+ end
41
+ end
42
+
43
+ # This checks to see if the binding for the key exists:
44
+ # If it does then it runs the command and returns its value, normally true
45
+ # If it doesn't it returns a false. This way we can 'overwrite' coded
46
+ # bindings.
47
+ def checkBind(type, key)
48
+ obj = self.bindableObject(type)
49
+ if !(obj.nil?) && obj.binding_list.include?(key)
50
+ function = obj.binding_list[key][0]
51
+ data = obj.binding_list[key][1]
52
+
53
+ if function == :getc
54
+ return data
55
+ else
56
+ return function.call(type, obj, data, key)
57
+ end
58
+ end
59
+ return false
60
+ end
61
+
62
+ # This checks to see if the binding for the key exists.
63
+ def isBind(type, key)
64
+ result = false
65
+ obj = self.bindableObject(type)
66
+ unless obj.nil?
67
+ result = obj.binding_list.include?(key)
68
+ end
69
+
70
+ return result
71
+ end
72
+ end # module Bindings
73
+ end # module CDK
@@ -0,0 +1,62 @@
1
+ module CDK
2
+ module Borders
3
+ attr_accessor :box
4
+ attr_accessor :ULChar, :URChar, :LLChar, :LRChar, :HZChar, :VTChar, :BXAttr
5
+ attr_reader :border_size
6
+
7
+ def init_borders
8
+ # set default line-drawing characters
9
+ @ULChar = Ncurses::ACS_ULCORNER
10
+ @URChar = Ncurses::ACS_URCORNER
11
+ @LLChar = Ncurses::ACS_LLCORNER
12
+ @LRChar = Ncurses::ACS_LRCORNER
13
+ @HZChar = Ncurses::ACS_HLINE
14
+ @VTChar = Ncurses::ACS_VLINE
15
+ @BXAttr = Ncurses::A_NORMAL
16
+ end
17
+
18
+ def setBox(box)
19
+ @box = box
20
+ @border_size = if @box then 1 else 0 end
21
+ end
22
+
23
+ def getBox
24
+ return @box
25
+ end
26
+
27
+ # Set the object's upper-left-corner line-drawing character.
28
+ def setULchar(ch)
29
+ @ULChar = ch
30
+ end
31
+
32
+ # Set the object's upper-right-corner line-drawing character.
33
+ def setURchar(ch)
34
+ @URChar = ch
35
+ end
36
+
37
+ # Set the object's lower-left-corner line-drawing character.
38
+ def setLLchar(ch)
39
+ @LLChar = ch
40
+ end
41
+
42
+ # Set the object's upper-right-corner line-drawing character.
43
+ def setLRchar(ch)
44
+ @LRChar = ch
45
+ end
46
+
47
+ # Set the object's horizontal line-drawing character
48
+ def setHZchar(ch)
49
+ @HZChar = ch
50
+ end
51
+
52
+ # Set the object's vertical line-drawing character
53
+ def setVTchar(ch)
54
+ @VTChar = ch
55
+ end
56
+
57
+ # Set the object's box-attributes.
58
+ def setBXattr(ch)
59
+ @BXAttr = ch
60
+ end
61
+ end # module Borders
62
+ end # module CDK