You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebindings/tqtruby/rubylib/examples/tqt-examples/checklists/checklists.rb

148 lines
4.0 KiB

require 'TQt'
class CheckLists < TQt::Widget
slots 'copy1to2()', 'copy2to3()'
# Constructor
#
# Create all child widgets of the CheckList Widget
def initialize
super()
lay = TQt::HBoxLayout.new(self)
lay.setMargin(5)
# create a widget which layouts its childs in a column
vbox1 = TQt::VBoxLayout.new(lay)
vbox1.setMargin(5)
# First child: a Label
vbox1.addWidget(TQt::Label.new('Check some items!', self))
# Second child: the ListView
@lv1 = TQt::ListView.new(self)
vbox1.addWidget(@lv1)
@lv1.addColumn('Items')
@lv1.setRootIsDecorated(true)
# create a list with 4 ListViewItems which will be parent items of other ListViewItems
parentList = Array.new
parentList.push(TQt::ListViewItem.new(@lv1, 'Parent Item 1'))
parentList.push(TQt::ListViewItem.new(@lv1, 'Parent Item 2'))
parentList.push(TQt::ListViewItem.new(@lv1, 'Parent Item 3'))
parentList.push(TQt::ListViewItem.new(@lv1, 'Parent Item 4'))
item = 0
num = 1
# go through the list of parent items...
parentList.each {|item|
item.setOpen(true)
# ...and create 5 checkable child ListViewItems for each parent item
for i in 1..5
str = sprintf('%s. Child of Parent %s', i, num)
TQt::CheckListItem.new(item, str, TQt::CheckListItem.CheckBox)
end
num = num + 1
}
# Create another widget for layouting
tmp = TQt::VBoxLayout.new(lay)
tmp.setMargin(5)
# create a pushbutton
copy1 = TQt::PushButton.new(' -> ', self)
tmp.addWidget(copy1)
copy1.setMaximumWidth(copy1.sizeHint.width)
# connect the SIGNAL clicked() of the pushbutton with the SLOT copy1to2()
connect(copy1, SIGNAL('clicked()'), self, SLOT('copy1to2()'))
# another widget for layouting
vbox2 = TQt::VBoxLayout.new(lay)
vbox2.setMargin(5)
# and another label
vbox2.addWidget(TQt::Label.new('Check one item!', self))
# create the second listview
@lv2 = TQt::ListView.new(self)
vbox2.addWidget(@lv2)
@lv2.addColumn('Items')
@lv2.setRootIsDecorated(true)
# another widget needed for layouting only
tmp = TQt::VBoxLayout.new(lay)
tmp.setMargin(5)
# create another pushbutton...
copy2 = TQt::PushButton.new(' -> ', self)
lay.addWidget( copy2 )
copy2.setMaximumWidth(copy2.sizeHint.width)
# ...and connect its clicked() SIGNAL to the copy2to3() SLOT
connect(copy2, SIGNAL('clicked()'), self, SLOT('copy2to3()'))
tmp = TQt::VBoxLayout.new(lay)
tmp.setMargin(5)
# and create a label which will be at the right of the window
@label = TQt::Label.new('No Item yet...', self)
tmp.addWidget(@label)
end
# SLOT copy1to2()
#
# Copies all checked ListViewItems from the first ListView to
# the second one, and inserts them as Radio-ListViewItem.
def copy1to2
@lv2.clear
it = TQt::ListViewItemIterator.new(@lv1)
# Insert first a controller Item into the second ListView. Always if Radio-ListViewItems
# are inserted into a Listview, the parent item of these MUST be a controller Item!
item = TQt::CheckListItem.new(@lv2, 'Controller', TQt::CheckListItem::Controller );
item.setOpen(true);
# iterate through the first ListView...
while (it.current)
# ...check state of childs, and...
if ( it.current.parent )
# ...if the item is checked...
if (it.current.isOn)
# ...insert a Radio-ListViewItem with the same text into the second ListView
TQt::CheckListItem.new(item, it.current.text(0), TQt::CheckListItem::RadioButton)
end
end
it += 1
end
if (item.firstChild)
item.firstChild.setOn(true)
end
end
# SLOT copy2to3()
#
# Copies the checked item of the second ListView into the
# Label at the right.
def copy2to3
# create an iterator which operates on the second ListView
it = TQt::ListViewItemIterator.new(@lv2)
@label.setText('No Item checked')
# iterate through the second ListView...
while (it.current)
# ...check state of childs, and...
if ( it.current.parent)
# ...if the item is checked...
if (it.current.isOn)
# ...set the text of the item to the label
@label.setText(it.current.text(0))
end
end
it += 1
end
end
end