Class: CSListView

Inherits:
Qt::Object
  • Object
show all
Defined in:
lib/CSListView.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(qlv) ⇒ CSListView

Returns a new instance of CSListView.



20
21
22
23
24
25
26
27
28
# File 'lib/CSListView.rb', line 20

def initialize(qlv)
  super
  @qlv = qlv
  @state = nil
  @selectedItems = {}
  @itemDict = {}

  connect(@qlv, SIGNAL('selectionChanged()'), SLOT('selectionChanged()'))
end

Instance Attribute Details

#selectedItemsObject (readonly)

Returns the value of attribute selectedItems.



18
19
20
# File 'lib/CSListView.rb', line 18

def selectedItems
  @selectedItems
end

Instance Method Details

#deleteItem(itemObj) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/CSListView.rb', line 47

def deleteItem(itemObj)
  @itemDict.delete_if do |key, value|
    if value == itemObj
      key.dispose
      true
    end
    false
  end
end

#finishUpdateObject



75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/CSListView.rb', line 75

def finishUpdate
  raise "State has not been saved" unless @state
  #puts "Duration: #{Time.now() - @start}"
  GC.enable
  @selectedItems.delete_if { |key, value| !value }
  @qlv.verticalScrollBar().setValue(@state[0])
  @qlv.horizontalScrollBar().setValue(@state[1])
  @qlv.viewport().setUpdatesEnabled(true)
  @qlv.setUpdatesEnabled(true)
  @qlv.triggerUpdate()
  @state = nil
end

#insertItem(itemObj, *entries) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/CSListView.rb', line 35

def insertItem(itemObj, *entries)
  item = CSListViewItem.new(@qlv)
  item.insert(entries)

  # Add item to translation dictonary
  @itemDict[item] = itemObj
  if @selectedItems[itemObj] != nil
    item.setSelected(true)
    @selectedItems[itemObj] = true
  end
end

#item(qlvItem) ⇒ Object



88
89
90
# File 'lib/CSListView.rb', line 88

def item(qlvItem)
  @itemDict[qlvItem]
end

#itemsObject



92
93
94
# File 'lib/CSListView.rb', line 92

def items
  @itemDict.values
end

#selectedItemObject



100
101
102
103
# File 'lib/CSListView.rb', line 100

def selectedItem
  return nil if @selectedItems.empty?
  @selectedItems.keys[0]
end

#selectedItemListObject



96
97
98
# File 'lib/CSListView.rb', line 96

def selectedItemList
  @selectedItems.keys
end

#selectionChangedObject



105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/CSListView.rb', line 105

def selectionChanged
  @selectedItems = {}
  if @qlv.selectionMode == Qt::ListView.Single
    @selectedItems = { @itemDict[@qlv.selectedItem] => true }
  else
    it = Qt::ListViewItemIterator.new(@qlv)
    while it.current
      @selectedItems[@itemDict[it.current]] = true if it.current.selected?
      it += 1
    end
  end
end

#setColumnWidth(col, val) ⇒ Object



30
31
32
33
# File 'lib/CSListView.rb', line 30

def setColumnWidth(col, val)
  @qlv.setColumnWidth(col, val)
  @qlv.setColumnWidthMode(col, 0)
end

#startUpdateObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/CSListView.rb', line 57

def startUpdate
  raise "State has not yet been restored" if @state
  @qlv.setUpdatesEnabled(false)
  @qlv.viewport().setUpdatesEnabled(false)
  vPos = @qlv.verticalScrollBar().value()
  hPos = @qlv.horizontalScrollBar().value()
  # Mark all selected items as 'false'. Then we clear the list view and add
  # all items again. The items in the selection lists are then set to
  # 'true'. In finishUpdate() the items that are still false will be removed
  # from the selection list as they are no longer in the list.
  @selectedItems.each { |key, value| @selectedItems[key] = false }
  @itemDict.clear()
  @qlv.clear()
  GC.disable
  @state = [ vPos, hPos ]
  #@start = Time.now()
end