#!/usr/bin/env python

# Copyright (C) 2002 Oleksandr Yakovlyev (yshurik) <yshurik@thekompany.com>

import sys 
from PyTQt.tqt import *

TRUE = 1
FALSE = 0 

class CheckLists(TQWidget):
  def __init__(self, *args):
    TQWidget.__init__(* (self, ) + args )

    lay = TQHBoxLayout(self)
    lay.setMargin(5)
		
    vbox1 = TQVBoxLayout(lay)
    vbox1.setMargin(5)

    # First child: a Label
    vbox1.addWidget(TQLabel("Check some items!", self))

    # Second child: the ListView
    self.lv1 = TQListView(self)
    vbox1.addWidget(self.lv1)
    self.lv1.addColumn("Items")
    self.lv1.setRootIsDecorated(TRUE)

    # create a list with 4 ListViewItems which will be parent items of other ListViewItems

    parentList = []

    parentList.append( TQListViewItem( self.lv1, "Parent Item 1" ) )
    parentList.append( TQListViewItem( self.lv1, "Parent Item 2" ) )
    parentList.append( TQListViewItem( self.lv1, "Parent Item 3" ) )
    parentList.append( TQListViewItem( self.lv1, "Parent Item 4" ) )

    num = 0

    self.childList1 = []
    # go through the list of parent items...
    for i in range(4):
      it = parentList[i]
      it.setOpen( TRUE )
			
      # ...and create 5 checkable child ListViewItems for each parent item
      for j in range(5):
        ci = TQCheckListItem( it, TQString("%1. Child of Parent %2").arg( j ).arg( i ), TQCheckListItem.CheckBox )
        self.childList1.append(ci)

    # Create another widget for layouting
    tmp1 = TQVBoxLayout( lay )
    tmp1.setMargin( 5 )

    # create a pushbutton
    copy1 = TQPushButton( "  ->  ", self )
    tmp1.addWidget( copy1 )
    copy1.setMaximumWidth( copy1.sizeHint().width() );
    # connect the signal clicked() of the pushbutton with the slot copy1to2()
    self.connect( copy1, TQ_SIGNAL('clicked()'), self.copy1to2 )

    # another widget for layouting
    vbox2 = TQVBoxLayout( lay )
    vbox2.setMargin( 5 )

    # and another label
    vbox2.addWidget( TQLabel( "Check one item!", self ) )

    # create the second listview
    self.lv2 = TQListView( self )
    vbox2.addWidget( self.lv2 )
    self.lv2.addColumn( "Items" )
    self.lv2.setRootIsDecorated( TRUE )

    # another widget needed for layouting only
    tmp2 = TQVBoxLayout( lay )
    tmp2.setMargin( 5 )

    # create another pushbutton...
    copy2 = TQPushButton( "  ->  ", self )
    lay.addWidget( copy2 )
    copy2.setMaximumWidth( copy2.sizeHint().width() )
    # ...and connect its clicked() signal to the copy2to3() slot
    self.connect( copy2, TQ_SIGNAL('clicked()'), self.copy2to3 )

    tmp3 = TQVBoxLayout( lay )
    tmp3.setMargin( 5 )

    # and create a label which will be at the right of the window
    self.label = TQLabel( "No Item yet...", self )
    tmp3.addWidget( self.label )

  def copy1to2(self):
    self.lv2.clear()

    # 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 = TQCheckListItem( self.lv2, "Controller", TQCheckListItem.Controller )
    item.setOpen( TRUE )

    self.listChild2 = []
    for it in self.childList1:
      # ...check state of childs, and...
      if it.parent() != None:
        # ...if the item is checked...
        if it.isOn():
          # ...insert a Radio-ListViewItem with the same text into the second ListView
          ri = TQCheckListItem(item , it.text(0), TQCheckListItem.RadioButton)
          self.listChild2.append(ri)

    if item.firstChild() != None:
      item.firstChild().setOn(TRUE)

  def copy2to3(self):
    self.label.setText( "No Item checked" )

    # iterate through the second ListView...
    for it in self.listChild2:
      # ...check state of childs, and...
      if it.parent() != None:
        # ...if the item is checked...
        if it.isOn():
          # ...set the text of the item to the label
          self.label.setText( it.text( 0 ) )

a = TQApplication(sys.argv)

checkLists = CheckLists()
checkLists.resize(700, 400)
checkLists.setCaption("PyTQt example - CheckLists")

a.setMainWidget(checkLists)
checkLists.show()
a.exec_loop()
