Class: RubyCurses::DefaultTableModel

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

Overview

DTM

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from TableModel

#get_total_column_width

Constructor Details

#initialize(data, colnames_array) ⇒ DefaultTableModel

Returns a new instance of DefaultTableModel.



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

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.



1510
1511
1512
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1510

def last_regex
  @last_regex
end

Instance Method Details

#<<(obj) ⇒ Object



1544
1545
1546
1547
1548
1549
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1544

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



1610
1611
1612
1613
1614
1615
1616
1617
1618
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1610

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



1517
1518
1519
1520
1521
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1517

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



1603
1604
1605
1606
1607
1608
1609
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1603

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



1556
1557
1558
1559
1560
1561
1562
1563
1564
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1556

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



1594
1595
1596
1597
1598
1599
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1594

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



1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1565

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



1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1621

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



1654
1655
1656
1657
1658
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1654

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



1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1637

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.



1538
1539
1540
1541
1542
1543
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1538

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



1550
1551
1552
1553
1554
1555
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1550

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



1522
1523
1524
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1522

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.



1528
1529
1530
1531
1532
1533
1534
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1528

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



1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
# File 'lib/rbcurse/extras/widgets/rtable.rb', line 1580

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