rbcurse 0.1.1 → 0.1.2

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,43 @@
1
+ ** 2009-02-17 12:10 **
2
+ ## added table markers for data and columns before and after on border ##
3
+
4
+ also added putting space in intercell area, but today i am not getting any
5
+ junk there anywaym while scrolling etc.
6
+
7
+ * * *
8
+ ** 2009-02-16 22:10 **
9
+ ## added edit_length to TableColumn ##
10
+
11
+ This is max editable length of editor component in tables.
12
+
13
+ * * *
14
+ ** 2009-02-13 13:48 **
15
+ ## added button_type to tabbed pane ##
16
+
17
+ Now buttons at bottom of tabbed pane. Will return selected_index
18
+ to caller.
19
+ Uploaded to github, will be included in 0.1.2.
20
+
21
+ * * *
22
+ ** 2009-02-12 22:48 **
23
+ ## Code to stop table from printing a column if exceeding bounds ##
24
+
25
+ Uploaded to github, will be included in 0.1.2.
26
+
27
+ EXPERIMENTAL CODE: Affects only tables. Now table will not print a column or header
28
+ if columns width causes it to exceed width of table.
29
+
30
+ This means if you have a single column which is wider than table
31
+ then it wont print. In Listboxes we always truncate data and pass to
32
+ renderer. We could do that here, but it could get messy.
33
+
34
+ * * *
35
+ **2009-02-12 **
36
+ ## Missed one parameter in Table's repaint, and some Table Cell Renderers
37
+
38
+ Fixed and uploaded as 0.1.1
39
+
40
+ * * *
1
41
  **2009-02-11 00:57**
2
42
  ## Path changes in order to make first gem ##
3
43
 
data/Manifest.txt CHANGED
@@ -21,7 +21,6 @@ lib/rbcurse/mapper.rb
21
21
  lib/rbcurse/orderedhash.rb
22
22
  lib/rbcurse/rcombo.rb
23
23
  lib/rbcurse/rdialogs.rb
24
- lib/rbcurse/rform.rb
25
24
  lib/rbcurse/rinputdataevent.rb
26
25
  lib/rbcurse/rlistbox.rb
27
26
  lib/rbcurse/rmenu.rb
@@ -36,6 +35,7 @@ lib/rbcurse/scrollable.rb
36
35
  lib/rbcurse/selectable.rb
37
36
  lib/rbcurse/table/tablecellrenderer.rb
38
37
  lib/rbcurse/table/tabledatecellrenderer.rb
38
+ lib/rbcurse.rb
39
39
  lib/ver/keyboard.rb
40
40
  lib/ver/keyboard2.rb
41
41
  lib/ver/ncurses.rb
@@ -43,12 +43,15 @@ lib/ver/window.rb
43
43
  examples/qdfilechooser.rb
44
44
  examples/rfe.rb
45
45
  examples/rfe_renderer.rb
46
+ examples/sqlc.rb
46
47
  examples/test1.rb
47
48
  examples/test2.rb
48
49
  examples/testcombo.rb
50
+ examples/testd.db
49
51
  examples/testkeypress.rb
50
52
  examples/testmenu.rb
51
53
  examples/testtable.rb
52
54
  examples/testtabp.rb
53
55
  examples/testtodo.rb
56
+ examples/todocsv.csv
54
57
  examples/viewtodo.rb
data/README.txt CHANGED
@@ -13,13 +13,19 @@
13
13
 
14
14
  * rfe.rb is a ruby file explorer
15
15
 
16
+ * sqlc.rb is a ruby sql client demo (using testd.db at
17
+ http://www.benegal.org/files/screen/testd.db)
18
+
16
19
  * testtodo.rb is a test TODO application
17
20
 
18
- * Screenshots on http://github.com/rkumar/rbcurse/wikis/screenshots
19
- (OLD)
20
- and http://www.benegal.org/files/screen/?M=D (new)
21
+ * Screenshots on
22
+ http://www.benegal.org/files/screen/?M=D (new)
21
23
  and on blog, http://totalrecall.wordpress.com
24
+ and http://github.com/rkumar/rbcurse/wikis/screenshots (old)
25
+
26
+ * Todo (for 0.1.2): http://rubyforge.org/pm/task.php?group_id=7775&group_project_id=13812&func=browse
22
27
 
28
+ * Next Major Release: http://rubyforge.org/pm/task.php?group_project_id=13813&group_id=7775&func=browse
23
29
 
24
30
  == DESCRIPTION:
25
31
 
@@ -127,7 +133,7 @@ code below. See test programs for latest, working code.
127
133
  end
128
134
  field.insert 5, "hello ruby", "so long python", "farewell java", "RIP .Net"
129
135
 
130
- === create a textarea for entry (this can be buggy at present)
136
+ === create a textarea for entry
131
137
 
132
138
  texta = TextArea.new @form do
133
139
  name "mytext"
@@ -287,21 +293,16 @@ code below. See test programs for latest, working code.
287
293
 
288
294
  (following is provided with source)
289
295
 
290
- * uses the window class created by "manveru" (michael) - this can be
291
- removed if not needed. (lib/ver/window)
296
+ * uses the window class created by "manveru" (michael)
292
297
  It is provided with this package, and has some alterations from the
293
298
  original. I have added a method getchar() which traps and returns
294
299
  ALT/META, META+CTRL, META+SHIFT+CONTROL, ALT+Fn etc.
295
300
 
296
- So basically do not remove it unless you have very different
297
- requirements.
298
301
 
299
302
  == INSTALL:
300
303
 
301
- * currently, just unzip/untar in a folder. Please change the path in
302
- the top line of the test programs.
303
-
304
- (Please advice me how i can improve installation procedure)
304
+ sudo gem install ncurses-ruby
305
+ sudo gem install rbcurse
305
306
 
306
307
  == LICENSE:
307
308
 
data/examples/rfe.rb CHANGED
@@ -13,9 +13,14 @@ require 'fileutils'
13
13
  #$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
14
14
 
15
15
  # TODO
16
- # operations on selected files: move, delete, zip
16
+ # operations on selected files: move, delete, zip, copy
17
+ # - delete should move to Trash if exists - DONE
18
+ # global - don't ask confirm
19
+ # Select based on pattern.
17
20
  # This class represents the finder pane. There are 2
18
21
  # on this sample app
22
+ # NOTE: rfe_renderer uses entries so you may need to sync it with list_data_model
23
+ # actually, renderer should refer back to list data model!
19
24
  class FileExplorer
20
25
  include FileUtils
21
26
  attr_reader :wdir
@@ -34,6 +39,8 @@ class FileExplorer
34
39
  @wdir = @dir.path
35
40
  @filter_pattern = '*'
36
41
  @prev_dirs=[]
42
+ @inside_block = false
43
+
37
44
  end
38
45
  def title str
39
46
  @list.title = str
@@ -234,19 +241,41 @@ class FileExplorer
234
241
  def current_index
235
242
  @list.current_index
236
243
  end
237
- def filename
244
+ def filename ix=current_index()
238
245
  #@entries[@list.current_index]
239
- list_data()[current_index()]
246
+ list_data()[ix]
240
247
  end
241
- def filepath
242
- f = filename()
248
+ def filepath ix=current_index()
249
+ f = filename(ix)
243
250
  if f[0,1]=='/'
244
251
  f
245
252
  else
246
- cur_dir() + "/" + filename()
253
+ cur_dir() + "/" + f
254
+ end
255
+ end
256
+ # delete the item at position i
257
+ def delete_at i=@list.current_index
258
+ ret = @list.list_data_model.delete_at i
259
+ ret = @entries.delete_at i
260
+ end
261
+ def delete obj
262
+ ret = @list.list_data_model.delete obj
263
+ ret = @entries.delete_at obj
264
+ end
265
+ def insert_at obj, ix = @list.current_index
266
+ @list.list_data_model.insert ix, f
267
+ @entries.insert ix, obj
268
+ end
269
+ def remove_selected_rows
270
+ rows = @list.selected_rows
271
+ rows=rows.sort! {|x,y| y <=> x }
272
+ rows.each do |i|
273
+ ret = @list.list_data_model.delete_at i
274
+ ret = @entries.delete_at i
247
275
  end
248
276
  end
249
277
 
278
+ # ADD
250
279
  end
251
280
  class RFe
252
281
  attr_reader :status_row
@@ -258,6 +287,9 @@ class RFe
258
287
  colb = Ncurses.COLS/2
259
288
  ht = Ncurses.LINES - 7
260
289
  wid = Ncurses.COLS/2 - 0
290
+ @trash_path = File.expand_path("~/.Trash")
291
+ @trash_exists = File.directory? @trash_path
292
+ $log.debug " trash_path #{@trash_path}, #{@trash_exists}"
261
293
  @lista = FileExplorer.new @form, self, row=2, col=1, ht, wid
262
294
  @listb = FileExplorer.new @form, self, row=2, col=colb, ht, wid
263
295
 
@@ -280,33 +312,116 @@ class RFe
280
312
  File.open(@config_name, "w") { | f | YAML.dump( @config, f )}
281
313
  end
282
314
  def move
283
- fp = @current_list.filepath
315
+ fp = @current_list.filepath #.gsub(' ',"\ ")
284
316
  fn = @current_list.filename
285
317
  $log.debug " FP #{fp}"
286
318
  other_list = [@lista, @listb].index(@current_list)==0 ? @listb : @lista
287
319
  other_dir = other_list.cur_dir
288
320
  $log.debug " OL #{other_list.cur_dir}"
289
- str= "move #{fn} to #{other_list.cur_dir}"
290
- $log.debug " MOVE #{fp}"
291
- #confirm "#{str}"
292
- mb = RubyCurses::MessageBox.new do
293
- title "Move"
294
- message "Move #{fn} to"
295
- type :input
296
- width 60
297
- default_value other_dir
298
- button_type :ok_cancel
299
- default_button 0
300
- end
321
+ if @current_list.list.selected_row_count == 0
322
+ str= "#{fn}"
323
+ else
324
+ str= "#{@current_list.list.selected_row_count} files "
325
+ end
326
+ mb = RubyCurses::MessageBox.new do
327
+ title "Move"
328
+ message "Move #{str} to"
329
+ type :input
330
+ width 80
331
+ default_value other_dir
332
+ button_type :ok_cancel
333
+ default_button 0
334
+ end
301
335
  #confirm "selected :#{mb.input_value}, #{mb.selected_index}"
302
336
  if mb.selected_index == 0
303
- # need to redraw directories
304
- FileUtils.move(fp, mb.input_value)
305
- @current_list.list.list_data_model.delete_at @current_list.list.current_index # ???
337
+ if @current_list.list.selected_row_count == 0
338
+ FileUtils.move(fp, mb.input_value)
339
+ #ret = @current_list.list.list().delete_at @current_list.list.current_index # ???
340
+ # @current_list.entries.delete_at @current_list.current_index
341
+ @current_list.delete_at
342
+ else
343
+ each_selected_row do |f|
344
+ FileUtils.move(f, mb.input_value)
345
+ end
346
+ @current_list.remove_selected_rows
347
+ @current_list.list.clear_selection
348
+ end
306
349
  other_list.rescan
307
350
  end
308
351
  end
352
+ def each_selected_row #title, message, default_value
353
+ rows = @current_list.list.selected_rows
354
+ rows = rows.dup
355
+ rows.each do |i|
356
+ fp = @current_list.filepath i
357
+ #$log.debug " moving #{i}: #{fp}"
358
+ #FileUtils.move(fp, mb.input_value)
359
+ yield fp
360
+ end
361
+ end
309
362
  def copy
363
+ fp = @current_list.filepath #.gsub(' ',"\ ")
364
+ fn = @current_list.filename
365
+ $log.debug " FP #{fp}"
366
+ other_list = [@lista, @listb].index(@current_list)==0 ? @listb : @lista
367
+ other_dir = other_list.cur_dir
368
+ $log.debug " OL #{other_list.cur_dir}"
369
+ if @current_list.list.selected_row_count == 0
370
+ str= "#{fn}"
371
+ else
372
+ str= "#{@current_list.list.selected_row_count} files "
373
+ end
374
+ mb = RubyCurses::MessageBox.new do
375
+ title "Copy"
376
+ message "Copy #{str} to"
377
+ type :input
378
+ width 80
379
+ default_value other_dir
380
+ button_type :ok_cancel
381
+ default_button 0
382
+ end
383
+ if mb.selected_index == 0
384
+ if @current_list.list.selected_row_count == 0
385
+ FileUtils.copy(fp, mb.input_value)
386
+ else
387
+ each_selected_row do |f|
388
+ FileUtils.copy(f, mb.input_value)
389
+ end
390
+ @current_list.list.clear_selection
391
+ end
392
+ other_list.rescan
393
+ end
394
+ end
395
+ def delete
396
+ fp = @current_list.filepath #.gsub(' ',"\ ")
397
+ fn = @current_list.filename
398
+ if @current_list.list.selected_row_count == 0
399
+ str= "#{fn}"
400
+ else
401
+ str= "#{@current_list.list.selected_row_count} files "
402
+ end
403
+ if confirm("delete #{str}")==:YES
404
+ if @current_list.list.selected_row_count == 0
405
+ if @trash_exists
406
+ FileUtils.mv fp, @trash_path
407
+ else
408
+ FileUtils.rm fp
409
+ end
410
+ ret=@current_list.delete_at
411
+ else
412
+ each_selected_row do |f|
413
+ if @trash_exists
414
+ FileUtils.mv f, @trash_path
415
+ else
416
+ FileUtils.rm f
417
+ end
418
+ end
419
+ @current_list.remove_selected_rows
420
+ @current_list.list.clear_selection
421
+ end
422
+ end
423
+ end
424
+ def copy1
310
425
  fp = @current_list.filepath
311
426
  fn = @current_list.filename
312
427
  $log.debug " FP #{fp}"
@@ -392,22 +507,11 @@ class RFe
392
507
  other_list = [@lista, @listb].index(@current_list)==0 ? @listb : @lista
393
508
  case c
394
509
  when 'c'
395
- # str= "copy #{fn} to #{other_list.cur_dir}"
396
510
  copy
397
511
  when 'm'
398
- str= "move #{fn} to #{other_list.cur_dir}"
399
512
  move
400
- #if confirm("#{str}")==:YES
401
- #$log.debug " MOVE #{str}"
402
- #end
403
513
  when 'd'
404
- str= "delete #{fn} "
405
- if confirm("#{str}")==:YES
406
- $log.debug " delete #{fp}"
407
- FileUtils.rm fp
408
- ret=@current_list.list.list_data_model.delete_at @current_list.list.current_index # ???
409
- $log.debug " DEL RET #{ret},#{@current_list.list.current_index}"
410
- end
514
+ delete
411
515
  when 'u'
412
516
  str= "move #{fn} to #{other_list.cur_dir}"
413
517
  if confirm("#{str}")==:YES
@@ -475,6 +579,14 @@ class RFe
475
579
  str= "edit #{fp}"
476
580
  #if confirm("#{str}")==:YES
477
581
  edit fp
582
+ when 'm'
583
+ f = get_string("Enter a directory to create", 20 )
584
+ if f != ""
585
+ FileUtils.mkdir f
586
+ @current_list.list.list_data_model.insert @current_list.list.current_index, f # ???
587
+ @current_list.entries.insert @current_list.list.current_index, f # ???
588
+ end
589
+
478
590
  when 'x'
479
591
  str= "exec #{fp}"
480
592
  exec_popup fp
@@ -508,6 +620,9 @@ class RFe
508
620
  @lista.draw_screen lasta
509
621
  @listb.draw_screen lastb
510
622
 
623
+ # @form.bind_key(?\M-x){
624
+ # @current_list.mark_block
625
+ # }
511
626
  @form.bind_key(?@){
512
627
  @current_list.change_dir File.expand_path("~/")
513
628
  }
@@ -653,6 +768,7 @@ def get_key_labels categ=nil
653
768
  ['t', 'tree'], ['p', 'Previous'],
654
769
  ['b', 'Bookmark'], ['u', 'Unbookmark'],
655
770
  ['l', 'List'], ['s', 'Save'],
771
+ ['m', 'mkdir'], nil,
656
772
  ['C-c', 'Cancel']
657
773
  ]
658
774
  end
@@ -19,12 +19,14 @@ module RubyCurses
19
19
  @bgcolor = @orig_bgcolor
20
20
  @color = @orig_color
21
21
  @row_attr = @orig_attr
22
+ # XXX ouch, when we delete from list, must delete from here too.
22
23
  value = @parent.entries[row_index]
23
24
  if value[0,1]=="/"
24
25
  path = value.dup
25
26
  else
26
27
  path = @parent.cur_dir()+"/"+value
27
28
  end
29
+ begin
28
30
  stat = File.stat(path)
29
31
  if File.directory? path
30
32
  @row_attr = Ncurses::A_BOLD
@@ -33,6 +35,10 @@ module RubyCurses
33
35
  value = format_string(value, path, stat)
34
36
  super
35
37
 
38
+ rescue => err
39
+ $log.debug " rfe_renderer: #{err}"
40
+ end
41
+
36
42
  end
37
43
  GIGA_SIZE = 1073741824.0
38
44
  MEGA_SIZE = 1048576.0