canis 0.0.8 → 0.0.10

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/.gitignore +0 -9
  3. data/CHANGES +3 -0
  4. data/README.md +5 -3
  5. data/examples/alpmenu.rb +9 -5
  6. data/examples/app.sample +2 -2
  7. data/examples/appemail.rb +15 -15
  8. data/examples/atree.rb +7 -7
  9. data/examples/bline.rb +19 -19
  10. data/examples/common/devel.rb +3 -3
  11. data/examples/dbdemo.rb +53 -49
  12. data/examples/dirtree.rb +22 -19
  13. data/examples/newtabbedwindow.rb +5 -5
  14. data/examples/newtesttabp.rb +3 -3
  15. data/examples/tabular.rb +11 -11
  16. data/examples/tasks.rb +25 -25
  17. data/examples/term2.rb +8 -8
  18. data/examples/testbuttons.rb +24 -24
  19. data/examples/testcombo.rb +5 -5
  20. data/examples/testdb.rb +6 -6
  21. data/examples/testfields.rb +16 -16
  22. data/examples/testflowlayout.rb +3 -3
  23. data/examples/testkeypress.rb +5 -5
  24. data/examples/testlistbox.rb +18 -18
  25. data/examples/testlistbox1.rb +17 -17
  26. data/examples/testmessagebox.rb +5 -5
  27. data/examples/testprogress.rb +6 -6
  28. data/examples/testree.rb +3 -3
  29. data/examples/testsplitlayout.rb +4 -4
  30. data/examples/testsplitlayout1.rb +4 -4
  31. data/examples/teststacklayout.rb +4 -4
  32. data/examples/testwsshortcuts.rb +1 -1
  33. data/examples/testwsshortcuts2.rb +4 -4
  34. data/lib/canis/core/include/colorparser.rb +4 -4
  35. data/lib/canis/core/include/io.rb +3 -3
  36. data/lib/canis/core/include/layouts/abstractlayout.rb +3 -3
  37. data/lib/canis/core/include/layouts/flowlayout.rb +2 -2
  38. data/lib/canis/core/include/layouts/stacklayout.rb +3 -3
  39. data/lib/canis/core/system/colormap.rb +3 -3
  40. data/lib/canis/core/system/window.rb +7 -4
  41. data/lib/canis/core/util/extras/padreader.rb +2 -2
  42. data/lib/canis/core/util/rcommandwindow.rb +8 -4
  43. data/lib/canis/core/util/rdialogs.rb +1 -1
  44. data/lib/canis/core/util/widgetshortcuts.rb +9 -2
  45. data/lib/canis/core/widgets/applicationheader.rb +6 -2
  46. data/lib/canis/core/widgets/divider.rb +6 -2
  47. data/lib/canis/core/widgets/rmenu.rb +8 -4
  48. data/lib/canis/core/widgets/rmessagebox.rb +2 -2
  49. data/lib/canis/core/widgets/rwidget.rb +15 -15
  50. data/lib/canis/core/widgets/scrollbar.rb +5 -2
  51. data/lib/canis/core/widgets/table.rb +2 -2
  52. data/lib/canis/core/widgets/textpad.rb +8 -8
  53. data/lib/canis/core/widgets/tree.rb +57 -39
  54. data/lib/canis/core/widgets/tree/treecellrenderer.rb +3 -3
  55. data/lib/canis/version.rb +1 -1
  56. metadata +12 -13
  57. data/lib/canis/core/include/.DS_Store +0 -0
@@ -42,20 +42,19 @@ module Canis
42
42
  # structures {{{
43
43
  TreeSelectionEvent = Struct.new(:node, :tree, :state, :previous_node, :row_first)
44
44
  # structures }}}
45
- # renderer {{{
45
+ # renderer {{{
46
46
  #
47
47
  # TODO see how jtable does the renderers and columns stuff.
48
48
  #
49
49
  # perhaps we can combine the two but have different methods or some flag
50
50
  # that way oter methods can be shared
51
51
  class DefaultTreeRenderer < AbstractTextPadRenderer
52
-
53
52
  attr_accessor :icon_can_collapse, :icon_can_expand, :icon_not_visited, :icon_no_children
54
53
  attr_accessor :row_selected_attr
55
54
 
56
- PLUS_PLUS = "++"
57
- PLUS_MINUS = "+-"
58
- PLUS_Q = "+?"
55
+ PLUS_PLUS = "++".freeze
56
+ PLUS_MINUS = "+-".freeze
57
+ PLUS_Q = "+?".freeze
59
58
  # source is the textpad or extending widget needed so we can call show_colored_chunks
60
59
  # if the user specifies column wise colors
61
60
  def initialize source
@@ -65,24 +64,25 @@ module Canis
65
64
  @color_pair = $datacolor
66
65
  @attrib = NORMAL
67
66
  @_check_coloring = nil
68
- @icon_can_collapse = "+-"
69
- @icon_can_expand = "++"
70
- @icon_not_visited = "+?"
71
- @icon_no_children = "+-"
72
-
67
+ @icon_can_collapse = PLUS_MINUS
68
+ @icon_can_expand = PLUS_PLUS
69
+ @icon_not_visited = PLUS_Q
70
+ @icon_no_children = "+-" # how about '+|'
73
71
  # adding setting column_model auto on 2014-04-10 - 10:53 why wasn;t this here already
74
72
  #tree_model(source.tree_model)
75
73
  end
74
+
76
75
  # set fg and bg color of content rows, default is $datacolor (white on black).
77
76
  def content_colors fg, bg
78
77
  @color = fg
79
78
  @bgcolor = bg
80
79
  @color_pair = get_color($datacolor, fg, bg)
81
80
  end
81
+
82
82
  def content_attrib att
83
83
  @attrib = att
84
84
  end
85
- #
85
+
86
86
  # @param pad for calling print methods on
87
87
  # @param lineno the line number on the pad to print on
88
88
  # @param text data to print
@@ -112,15 +112,14 @@ module Canis
112
112
  raise "attrib is nil in tree render 104" unless att
113
113
  raise "color pair is nil in tree render 104" unless cp
114
114
  # added for selection, but will crash if selection is not extended !!! XXX
115
- if @source.is_row_selected? lineno
116
- att = @row_selected_attr || $row_selected_attr
117
- # FIXME currentl this overflows into next row
118
- end
115
+ if @source.is_row_selected? lineno
116
+ att = @row_selected_attr || $row_selected_attr
117
+ # FIXME currentl this overflows into next row
118
+ end
119
119
 
120
120
  FFI::NCurses.wattron(pad,FFI::NCurses.COLOR_PAIR(cp) | att)
121
121
  FFI::NCurses.mvwaddstr(pad, lineno, 0, _value)
122
122
  FFI::NCurses.wattroff(pad,FFI::NCurses.COLOR_PAIR(cp) | att)
123
-
124
123
  end
125
124
  # check if we need to individually color columns or we can do the entire
126
125
  # row in one shot
@@ -157,20 +156,26 @@ module Canis
157
156
  require 'canis/core/include/listoperations'
158
157
 
159
158
  class Tree < TextPad
160
-
161
159
  include Canis::ListOperations
162
160
 
161
+ TREE_EVENTS = [:ENTER_ROW,
162
+ :LEAVE_ROW,
163
+ :TREE_COLLAPSED_EVENT,
164
+ :TREE_EXPANDED_EVENT,
165
+ :TREE_SELECTION_EVENT,
166
+ :TREE_WILL_COLLAPSE_EVENT,
167
+ :TREE_WILL_EXPAND_EVENT]
168
+
163
169
  dsl_accessor :print_footer
164
- attr_reader :treemodel # returns treemodel for further actions 2011-10-2
170
+ attr_reader :treemodel
165
171
  dsl_accessor :default_value # node to show as selected - what if user doesn't have it?
166
172
 
167
173
  def initialize form = nil, config={}, &block
168
-
169
174
  @_header_adjustment = 0 #1
170
175
  @col_min_width = 3
171
176
 
172
177
  @expanded_state = {}
173
- register_events([:ENTER_ROW, :LEAVE_ROW, :TREE_COLLAPSED_EVENT, :TREE_EXPANDED_EVENT, :TREE_SELECTION_EVENT, :TREE_WILL_COLLAPSE_EVENT, :TREE_WILL_EXPAND_EVENT])
178
+ register_events(TREE_EVENTS)
174
179
  super
175
180
  #@_events.push(*[:ENTER_ROW, :LEAVE_ROW, :TREE_COLLAPSED_EVENT, :TREE_EXPANDED_EVENT, :TREE_SELECTION_EVENT, :TREE_WILL_COLLAPSE_EVENT, :TREE_WILL_EXPAND_EVENT])
176
181
  create_default_renderer unless @renderer # 2014-04-10 - 11:01
@@ -183,9 +188,11 @@ module Canis
183
188
  @list_selection_model = nil
184
189
  @list_selection_model = Canis::DefaultListSelectionModel.new self
185
190
  end
191
+
186
192
  def create_default_renderer
187
- renderer( DefaultTreeRenderer.new(self) )
193
+ renderer DefaultTreeRenderer.new(self)
188
194
  end
195
+
189
196
  def init_vars
190
197
  # show_selector and symbol etc unused
191
198
  if @show_selector
@@ -199,8 +206,8 @@ module Canis
199
206
  @internal_width = 2 # taking into account borders accounting for 2 cols
200
207
  @internal_width = 0 if @suppress_borders # should it be 0 ???
201
208
  super
202
-
203
209
  end
210
+
204
211
  # maps keys to methods
205
212
  # checks @key_map can be :emacs or :vim.
206
213
  def map_keys
@@ -223,6 +230,7 @@ module Canis
223
230
  #require 'canis/core/include/listbindings'
224
231
  #bindings
225
232
  end
233
+
226
234
  # Returns root if no argument given.
227
235
  # Now we return root if already set
228
236
  # Made node nillable so we can return root.
@@ -242,7 +250,6 @@ module Canis
242
250
  # pass data to create this tree model
243
251
  # used to be list
244
252
  def data alist=nil
245
-
246
253
  # if nothing passed, print an empty root, rather than crashing
247
254
  alist = [] if alist.nil?
248
255
  @data = alist # data given by user
@@ -276,6 +283,7 @@ module Canis
276
283
  fire_dimension_changed
277
284
  self
278
285
  end
286
+
279
287
  # private, for use by repaint
280
288
  def _list
281
289
  if @_structure_changed
@@ -290,6 +298,7 @@ module Canis
290
298
  end
291
299
  return @list
292
300
  end
301
+
293
302
  # repaint whenever a change heppens
294
303
  # 2014-04-16 - 22:31 - I need to put a call to _list somewhere whenever a change happens
295
304
  # (i.e. recreate list from the tree model object)..
@@ -298,20 +307,23 @@ module Canis
298
307
  _list()
299
308
  super
300
309
  end
310
+
301
311
  def convert_to_list tree
302
312
  @list = @native_text = get_expanded_descendants(tree.root)
303
313
  #$log.debug "XXX convert #{tree.root.children.size} "
304
314
  #$log.debug " converted tree to list. #{@list.size} "
305
315
  end
316
+
306
317
  def traverse node, level=0, &block
307
318
  raise "disuse"
308
319
  #icon = node.is_leaf? ? "-" : "+"
309
320
  #puts "%*s %s" % [ level+1, icon, node.user_object ]
310
321
  yield node, level if block_given?
311
- node.children.each do |e|
322
+ node.children.each do |e|
312
323
  traverse e, level+1, &block
313
324
  end
314
325
  end
326
+
315
327
  # return object under cursor
316
328
  # Note: this should not be confused with selected row/s. User may not have selected this.
317
329
  # This is only useful since in some demos we like to change a status bar as a user scrolls down
@@ -338,6 +350,7 @@ module Canis
338
350
  toggle_row_selection
339
351
  @default_value = nil
340
352
  end
353
+
341
354
  ### START FOR scrollable ###
342
355
  def get_content
343
356
  #@list 2008-12-01 23:13
@@ -345,9 +358,11 @@ module Canis
345
358
  # called by next_match in listscrollable
346
359
  @list
347
360
  end
361
+
348
362
  def get_window
349
363
  @graphic
350
364
  end
365
+
351
366
  ### END FOR scrollable ###
352
367
  # override widgets text
353
368
  def getvalue
@@ -367,8 +382,6 @@ module Canis
367
382
  #------- data modification methods ------#
368
383
 
369
384
 
370
- #
371
-
372
385
  ## add a row to the table
373
386
  # The name add will be removed soon, pls use << instead.
374
387
  def <<( array)
@@ -424,7 +437,7 @@ module Canis
424
437
  ha = @_header_adjustment
425
438
  # ha takes into account whether there are headers or not
426
439
  footer = "#{@current_index+1-ha} of #{@list.length-ha} "
427
- @graphic.printstring( @row + @height -1 , @col+2, footer, @color_pair || $datacolor, @footer_attrib)
440
+ @graphic.printstring(@row + @height -1 , @col+2, footer, @color_pair || $datacolor, @footer_attrib)
428
441
  @repaint_footer_required = false
429
442
  end
430
443
  def is_row_selected? row=@current_index
@@ -477,18 +490,20 @@ module Canis
477
490
  expand_node node
478
491
  end
479
492
  end
493
+
480
494
  def row_to_node row=@current_index
481
495
  @list[row]
482
496
  end
497
+
483
498
  # convert a given node to row
484
499
  def node_to_row node
485
500
  crow = nil
486
- @list.each_with_index { |e,i|
501
+ @list.each_with_index do |e,i|
487
502
  if e == node
488
503
  crow = i
489
504
  break
490
505
  end
491
- }
506
+ end
492
507
  crow
493
508
  end
494
509
  # private
@@ -530,9 +545,9 @@ module Canis
530
545
  def mark_parents_expanded node
531
546
  # i am setting parents as expanded, but NOT firing handlers - XXX separate this into expand_parents
532
547
  _path = node.tree_path
533
- _path.each do |e|
548
+ _path.each do |e|
534
549
  # if already expanded parent then break we should break
535
- set_expanded_state(e, true)
550
+ set_expanded_state(e, true)
536
551
  end
537
552
  end
538
553
  # goes up to root of this node, and expands down to this node
@@ -540,7 +555,7 @@ module Canis
540
555
  # as in a dir listing when current dir is deep in heirarchy.
541
556
  def expand_parents node
542
557
  _path = node.tree_path
543
- _path.each do |e|
558
+ _path.each do |e|
544
559
  # if already expanded parent then break we should break
545
560
  #set_expanded_state(e, true)
546
561
  expand_node(e)
@@ -590,17 +605,19 @@ module Canis
590
605
  goto_parent node
591
606
  collapse_node parent
592
607
  end
608
+
593
609
  def goto_parent node=:current_index
594
610
  node = row_to_node if node == :current_index
595
611
  parent = node.parent
596
612
  return if parent.nil?
597
613
  crow = @current_index
598
- @list.each_with_index { |e,i|
614
+ # TODO we have beautiful ruby stuff to do that! (find)
615
+ @list.each_with_index do |e,i|
599
616
  if e == parent
600
617
  crow = i
601
618
  break
602
619
  end
603
- }
620
+ end
604
621
  @repaint_required = true
605
622
  #set_form_row # will not work if off form
606
623
  #set_focus_on crow
@@ -656,26 +673,27 @@ module Canis
656
673
  $log.debug "TREE #{user_path} " if $log.debug?
657
674
  root = @treemodel.root
658
675
  found = nil
659
- user_path.each { |e|
676
+ user_path.each do |e|
660
677
  success = false
661
- root.children.each { |c|
678
+ root.children.each do |c|
662
679
  if c.user_object == e
663
680
  found = c
664
681
  success = true
665
682
  root = c
666
683
  break
667
684
  end
668
- }
685
+ end
669
686
  return false unless success
670
-
671
- }
687
+ end
672
688
  return found
673
689
  end
690
+
674
691
  # default block
675
692
  # @since 1.5.0 2011-11-22
676
693
  def command *args, &block
677
694
  bind :TREE_WILL_EXPAND_EVENT, *args, &block
678
695
  end
696
+
679
697
  private
680
698
  # please do not rely on this yet, name could change
681
699
  def _structure_changed tf=true
@@ -75,9 +75,9 @@ module Canis
75
75
  # when field is focussed again
76
76
  #
77
77
  # @param [Buffer] window or buffer object used for printing
78
- # @param [Fixnum] row
79
- # @param [Fixnum] column
80
- # @param [Fixnum] actual index into data, some lists may have actual data elsewhere and
78
+ # @param [Integer] row
79
+ # @param [Integer] column
80
+ # @param [Integer] actual index into data, some lists may have actual data elsewhere and
81
81
  # display data separate. e.g. rfe_renderer (directory listing)
82
82
  # @param [String] text to print in cell
83
83
  # @param [Boolean, :SOFT_FOCUS] cell focussed, not focussed, cell focussed but field is not focussed
@@ -1,3 +1,3 @@
1
1
  module Canis
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.10"
3
3
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - kepler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-11 00:00:00.000000000 Z
11
+ date: 2017-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.9.6
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.9.6
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ffi-ncurses
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.4.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.4.0
55
55
  description: ruby ncurses library for easy application development providing most
@@ -60,7 +60,7 @@ executables: []
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
- - .gitignore
63
+ - ".gitignore"
64
64
  - CHANGES
65
65
  - Gemfile
66
66
  - LICENSE.txt
@@ -120,7 +120,6 @@ files:
120
120
  - lib/canis/core/docs/table.txt
121
121
  - lib/canis/core/docs/textpad.txt
122
122
  - lib/canis/core/docs/tree.txt
123
- - lib/canis/core/include/.DS_Store
124
123
  - lib/canis/core/include/action.rb
125
124
  - lib/canis/core/include/actionmanager.rb
126
125
  - lib/canis/core/include/appmethods.rb
@@ -212,17 +211,17 @@ require_paths:
212
211
  - lib
213
212
  required_ruby_version: !ruby/object:Gem::Requirement
214
213
  requirements:
215
- - - '>='
214
+ - - ">="
216
215
  - !ruby/object:Gem::Version
217
216
  version: '0'
218
217
  required_rubygems_version: !ruby/object:Gem::Requirement
219
218
  requirements:
220
- - - '>='
219
+ - - ">="
221
220
  - !ruby/object:Gem::Version
222
221
  version: '0'
223
222
  requirements: []
224
223
  rubyforge_project:
225
- rubygems_version: 2.2.2
224
+ rubygems_version: 2.6.8
226
225
  signing_key:
227
226
  specification_version: 4
228
227
  summary: ruby ncurses library for easy application development