|
|
|
retquire 'Qt'
|
|
|
|
|
|
|
|
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
|