Class: RubyCurses::DefaultTableModel

Inherits:
TableModel show all
Includes:
EventHandler
Defined in:
lib/rbcurse/rtable.rb

Overview

DTM

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from EventHandler

#bind, #fire_handler, #fire_property_change

Methods inherited from TableModel

#get_total_column_width

Constructor Details

#initialize(data, colnames_array) ⇒ DefaultTableModel

Returns a new instance of DefaultTableModel.



1474
1475
1476
1477
1478
# File 'lib/rbcurse/rtable.rb', line 1474

def initialize data, colnames_array
  @data = data
  @column_identifiers = colnames_array
  @_events = [:TABLE_MODEL_EVENT, :PROPERTY_CHANGE]
end

Instance Attribute Details

#last_regexObject (readonly)

Returns the value of attribute last_regex.



1472
1473
1474
# File 'lib/rbcurse/rtable.rb', line 1472

def last_regex
  @last_regex
end

Instance Method Details

#<<(obj) ⇒ Object



1506
1507
1508
1509
1510
1511
# File 'lib/rbcurse/rtable.rb', line 1506

def << obj
  @data << obj
  tme = TableModelEvent.new(@data.length-1,@data.length-1, :ALL_COLUMNS, self, :INSERT)
  fire_handler :TABLE_MODEL_EVENT, tme
  # create tablemodelevent and fire_table_changed for all listeners 
end

#ask_search_forwardObject



1572
1573
1574
1575
1576
1577
1578
1579
1580
# File 'lib/rbcurse/rtable.rb', line 1572

def ask_search_forward
  regex = get_string "Enter regex to search for:"
  ix = get_list_data_model.find_match regex
  if ix.nil?
    alert("No matching data for: #{regex}")
  else
    set_focus_on(ix)
  end
end

#column_countObject



1479
1480
1481
1482
1483
# File 'lib/rbcurse/rtable.rb', line 1479

def column_count
   # 2010-01-12 19:35  changed count to size since size is supported in 1.8.6 also
  #@column_identifiers.count
  @column_identifiers.size
end

#data=(data) ⇒ Object

for those quick cases when you wish to replace all the data and not have an event per row being generated



1565
1566
1567
1568
1569
1570
1571
# File 'lib/rbcurse/rtable.rb', line 1565

def data=(data)
  raise "Data nil or invalid" if data.nil? or data.size == 0
  delete_all
  @data = data
  tme = TableModelEvent.new(0, @data.length-1,:ALL_COLUMNS,  self, :INSERT)
  fire_handler :TABLE_MODEL_EVENT, tme
end

#delete(obj) ⇒ Object

create tablemodelevent and fire_table_changed for all listeners



1518
1519
1520
1521
1522
1523
1524
1525
1526
# File 'lib/rbcurse/rtable.rb', line 1518

def delete obj
  row = @data.index obj
  return if row.nil?
  ret = @data.delete obj
  tme = TableModelEvent.new(row, row,:ALL_COLUMNS,  self, :DELETE)
  fire_handler :TABLE_MODEL_EVENT, tme
  # create tablemodelevent and fire_table_changed for all listeners
  return ret
end

#delete_allObject

added 2009-01-17 21:36 Use with caution, does not call events per row



1556
1557
1558
1559
1560
1561
# File 'lib/rbcurse/rtable.rb', line 1556

def delete_all
  len = @data.length-1
  @data=[]
  tme = TableModelEvent.new(0, len,:ALL_COLUMNS,  self, :DELETE)
  fire_handler :TABLE_MODEL_EVENT, tme
end

#delete_at(row) ⇒ Object



1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
# File 'lib/rbcurse/rtable.rb', line 1527

def delete_at row
  if !$multiplier or $multiplier == 0 
    @delete_buffer = @data.delete_at row
  else
    @delete_buffer = @data.slice!(row, $multiplier)
  end
  $multiplier = 0
  #ret = @data.delete_at row
  # create tablemodelevent and fire_table_changed for all listeners 
  # we don;t pass buffer to event as in listeditable. how to undo later?
  tme = TableModelEvent.new(row, row+@delete_buffer.length,:ALL_COLUMNS,  self, :DELETE)
  fire_handler :TABLE_MODEL_EVENT, tme
  return @delete_buffer
end

#find_match(regex, ix0 = 0, ix1 = row_count()) ⇒ Object

continues previous search



1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
# File 'lib/rbcurse/rtable.rb', line 1583

def find_match regex, ix0=0, ix1=row_count()
  $log.debug " find_match got #{regex} #{ix0} #{ix1}"
  @last_regex = regex
  @search_start_ix = ix0
  @search_end_ix = ix1
  @data.each_with_index do |row, ix|
    next if ix < ix0
    break if ix > ix1
    if row.grep(/#{regex}/) != [] 
    #if !row.match(regex).nil?
      @search_found_ix = ix
      return ix 
    end
  end
  return nil
end

#find_nextObject

dtm findnext



1616
1617
1618
1619
1620
# File 'lib/rbcurse/rtable.rb', line 1616

def find_next
  raise "No more search" if @last_regex.nil?
  start = @search_found_ix && @search_found_ix+1 || 0
  return find_match @last_regex, start, @search_end_ix
end

#find_prev(regex = @last_regex, start = @search_found_ix) ⇒ Object



1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
# File 'lib/rbcurse/rtable.rb', line 1599

def find_prev regex=@last_regex, start = @search_found_ix 
  raise "No previous search" if @last_regex.nil?
  $log.debug " find_prev #{@search_found_ix} : #{@current_index}"
  start -= 1 unless start == 0
  @last_regex = regex
  @search_start_ix = start
  start.downto(0) do |ix| 
    row = @data[ix]
    if row.grep(/#{regex}/) != [] 
      @search_found_ix = ix
      return ix 
    end
  end
  return nil
  #return find_match @last_regex, start, @search_end_ix
end

#get_value_at(row, col) ⇒ Object

please avoid directly hitting this. Suggested to use get_value_at of jtable since columns could have been switched.



1500
1501
1502
1503
1504
1505
# File 'lib/rbcurse/rtable.rb', line 1500

def get_value_at row, col
#$log.debug " def get_value_at #{row}, #{col} "
  
  raise "IndexError get_value_at #{row}, #{col}" if @data.nil? or row >= @data.size
  return @data[row][ col]
end

#insert(row, obj) ⇒ Object

create tablemodelevent and fire_table_changed for all listeners



1512
1513
1514
1515
1516
1517
# File 'lib/rbcurse/rtable.rb', line 1512

def insert row, obj
  @data.insert row, obj
  tme = TableModelEvent.new(row, row,:ALL_COLUMNS,  self, :INSERT)
  fire_handler :TABLE_MODEL_EVENT, tme
  # create tablemodelevent and fire_table_changed for all listeners 
end

#row_countObject



1484
1485
1486
# File 'lib/rbcurse/rtable.rb', line 1484

def row_count
  @data.length
end

#set_value_at(row, col, val) ⇒ Object

please avoid directly hitting this. Suggested to use get_value_at of jtable since columns could have been switched.



1490
1491
1492
1493
1494
1495
1496
# File 'lib/rbcurse/rtable.rb', line 1490

def set_value_at row, col, val
 # $log.debug " def set_value_at #{row}, #{col}, #{val} "
    # if editing allowed
    @data[row][col] = val
    tme = TableModelEvent.new(row, row, col, self, :UPDATE)
    fire_handler :TABLE_MODEL_EVENT, tme
end

#undo(where) ⇒ Object

a quick method to undo deletes onto given row. More like paste



1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
# File 'lib/rbcurse/rtable.rb', line 1542

def undo where
  return unless @delete_buffer
  case @delete_buffer[0]
  when Array
  @delete_buffer.each do |r| 
    insert where, r 
  end
  else
    insert where, @delete_buffer
  end
end