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.
172 lines
5.1 KiB
172 lines
5.1 KiB
/***************************************************************************
|
|
* $Id$
|
|
**
|
|
* Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
|
|
**
|
|
* This file is part of an example program for Qt. This example
|
|
* program may be used, distributed and modified without limitation.
|
|
**
|
|
****************************************************************************/
|
|
import org.kde.qt.*;
|
|
import java.util.*;
|
|
|
|
class CheckLists extends QWidget
|
|
{
|
|
|
|
protected QListView lv1, lv2;
|
|
protected QLabel label;
|
|
|
|
/*
|
|
Constructor
|
|
*
|
|
Create all child widgets of the CheckList Widget
|
|
*/
|
|
|
|
CheckLists( )
|
|
{
|
|
this(null, null);
|
|
}
|
|
|
|
CheckLists( QWidget parent, String name )
|
|
{
|
|
super( parent, name );
|
|
QHBoxLayout lay = new QHBoxLayout( this );
|
|
lay.setMargin( 5 );
|
|
|
|
// create a widget which layouts its childs in a column
|
|
QVBoxLayout vbox1 = new QVBoxLayout( lay );
|
|
vbox1.setMargin( 5 );
|
|
|
|
// First child: a Label
|
|
vbox1.addWidget( new QLabel( "Check some items!", this ) );
|
|
|
|
// Second child: the ListView
|
|
lv1 = new QListView( this );
|
|
vbox1.addWidget( lv1 );
|
|
lv1.addColumn( "Items" );
|
|
lv1.setRootIsDecorated( true );
|
|
|
|
// create a list with 4 ListViewItems which will be parent items of other ListViewItems
|
|
ArrayList parentList = new ArrayList();
|
|
|
|
parentList.add( new QListViewItem( lv1, "Parent Item 1" ) );
|
|
parentList.add( new QListViewItem( lv1, "Parent Item 2" ) );
|
|
parentList.add( new QListViewItem( lv1, "Parent Item 3" ) );
|
|
parentList.add( new QListViewItem( lv1, "Parent Item 4" ) );
|
|
|
|
QListViewItem item = null;
|
|
int num = 1;
|
|
// go through the list of parent items...
|
|
for ( Iterator it = parentList.iterator(); it.hasNext(); num++ ) {
|
|
item = (QListViewItem) it.next();
|
|
item.setOpen( true );
|
|
// ...and create 5 checkable child ListViewItems for each parent item
|
|
for ( int i = 1; i <= 5; i++ )
|
|
new QCheckListItem( item, i + ". Child of Parent " + num, QCheckListItem.CheckBox );
|
|
}
|
|
|
|
// Create another widget for layouting
|
|
QVBoxLayout tmp = new QVBoxLayout( lay );
|
|
tmp.setMargin( 5 );
|
|
|
|
// create a pushbutton
|
|
QPushButton copy1 = new QPushButton( " -> ", this );
|
|
tmp.addWidget( copy1 );
|
|
copy1.setMaximumWidth( copy1.sizeHint().width() );
|
|
// connect the SIGNAL clicked() of the pushbutton with the SLOT copy1to2()
|
|
connect( copy1, SIGNAL(" clicked()"), this, SLOT(" copy1to2()") );
|
|
|
|
// another widget for layouting
|
|
QVBoxLayout vbox2 = new QVBoxLayout( lay );
|
|
vbox2.setMargin( 5 );
|
|
|
|
// and another label
|
|
vbox2.addWidget( new QLabel( "Check one item!", this ) );
|
|
|
|
// create the second listview
|
|
lv2 = new QListView( this );
|
|
vbox2.addWidget( lv2 );
|
|
lv2.addColumn( "Items" );
|
|
lv2.setRootIsDecorated( true );
|
|
|
|
// another widget needed for layouting only
|
|
tmp = new QVBoxLayout( lay );
|
|
tmp.setMargin( 5 );
|
|
|
|
// create another pushbutton...
|
|
QPushButton copy2 = new QPushButton( " -> ", this );
|
|
lay.addWidget( copy2 );
|
|
copy2.setMaximumWidth( copy2.sizeHint().width() );
|
|
// ...and connect its clicked() SIGNAL to the copy2to3() SLOT
|
|
connect( copy2, SIGNAL(" clicked()"), this, SLOT(" copy2to3()") );
|
|
|
|
tmp = new QVBoxLayout( lay );
|
|
tmp.setMargin( 5 );
|
|
|
|
// and create a label which will be at the right of the window
|
|
label = new QLabel( "No Item yet...", this );
|
|
tmp.addWidget( label );
|
|
}
|
|
|
|
/*
|
|
SLOT copy1to2()
|
|
*
|
|
Copies all checked ListViewItems from the first ListView to
|
|
the second one, and inserts them as Radio-ListViewItem.
|
|
*/
|
|
|
|
public void copy1to2()
|
|
{
|
|
// create an iterator which operates on the first ListView
|
|
Iterator it = lv1.itemList().iterator();
|
|
|
|
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!
|
|
QCheckListItem item = new QCheckListItem( lv2, "Controller", QCheckListItem.Controller );
|
|
item.setOpen( true );
|
|
|
|
// iterate through the first ListView...
|
|
while ( it.hasNext() ) {
|
|
QListViewItem current = (QListViewItem) it.next();
|
|
// ...check state of childs, and...
|
|
if ( current.parent() != null )
|
|
// ...if the item is checked...
|
|
if ( ( (QCheckListItem) current ).isOn() )
|
|
// ...insert a Radio-ListViewItem with the same text into the second ListView
|
|
new QCheckListItem( item, current.text( 0 ), QCheckListItem.RadioButton );
|
|
|
|
}
|
|
if ( item.firstChild() != null )
|
|
( ( QCheckListItem )item.firstChild() ).setOn( true );
|
|
}
|
|
|
|
/*
|
|
SLOT copy2to3()
|
|
*
|
|
Copies the checked item of the second ListView into the
|
|
Label at the right.
|
|
*/
|
|
|
|
public void copy2to3()
|
|
{
|
|
// create an iterator which operates on the second ListView
|
|
Iterator it = lv2.itemList().iterator();
|
|
|
|
label.setText( "No Item checked" );
|
|
|
|
// iterate through the second ListView...
|
|
while ( it.hasNext() ) {
|
|
QListViewItem current = (QListViewItem) it.next();
|
|
// ...check state of childs, and...
|
|
if ( current.parent() != null )
|
|
// ...if the item is checked...
|
|
if ( ( (QCheckListItem) current ).isOn() )
|
|
// ...set the text of the item to the label
|
|
label.setText( current.text( 0 ) );
|
|
}
|
|
}
|
|
}
|
|
|