summaryrefslogtreecommitdiffstats
path: root/qtruby/rubylib/examples/qt-examples/checklists/checklists.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qtruby/rubylib/examples/qt-examples/checklists/checklists.rb')
-rw-r--r--qtruby/rubylib/examples/qt-examples/checklists/checklists.rb147
1 files changed, 147 insertions, 0 deletions
diff --git a/qtruby/rubylib/examples/qt-examples/checklists/checklists.rb b/qtruby/rubylib/examples/qt-examples/checklists/checklists.rb
new file mode 100644
index 00000000..458dc127
--- /dev/null
+++ b/qtruby/rubylib/examples/qt-examples/checklists/checklists.rb
@@ -0,0 +1,147 @@
+require '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