source: trunk/examples/checklists/checklists.cpp

Last change on this file was 2, checked in by dmik, 20 years ago

Imported xplatform parts of the official release 3.3.1 from Trolltech

  • Property svn:keywords set to Id
File size: 5.4 KB
Line 
1/****************************************************************************
2** $Id: checklists.cpp 2 2005-11-16 15:49:26Z dmik $
3**
4** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
5**
6** This file is part of an example program for Qt. This example
7** program may be used, distributed and modified without limitation.
8**
9*****************************************************************************/
10
11#include "checklists.h"
12
13#include <qlistview.h>
14#include <qvbox.h>
15#include <qlabel.h>
16#include <qvaluelist.h>
17#include <qstring.h>
18#include <qpushbutton.h>
19#include <qlayout.h>
20
21/*
22 * Constructor
23 *
24 * Create all child widgets of the CheckList Widget
25 */
26
27CheckLists::CheckLists( QWidget *parent, const char *name )
28 : QWidget( parent, name )
29{
30 QHBoxLayout *lay = new QHBoxLayout( this );
31 lay->setMargin( 5 );
32
33 // create a widget which layouts its childs in a column
34 QVBoxLayout *vbox1 = new QVBoxLayout( lay );
35 vbox1->setMargin( 5 );
36
37 // First child: a Label
38 vbox1->addWidget( new QLabel( "Check some items!", this ) );
39
40 // Second child: the ListView
41 lv1 = new QListView( this );
42 vbox1->addWidget( lv1 );
43 lv1->addColumn( "Items" );
44 lv1->setRootIsDecorated( TRUE );
45
46 // create a list with 4 ListViewItems which will be parent items of other ListViewItems
47 QValueList<QListViewItem *> parentList;
48
49 parentList.append( new QCheckListItem( lv1, "Parent Item 1", QCheckListItem::CheckBoxController ) );
50 parentList.append( new QCheckListItem( lv1, "Parent Item 2", QCheckListItem::CheckBoxController ) );
51 parentList.append( new QCheckListItem( lv1, "Parent Item 3", QCheckListItem::CheckBoxController ) );
52 parentList.append( new QCheckListItem( lv1, "Parent Item 4", QCheckListItem::CheckBoxController ) );
53
54 QListViewItem *item = 0;
55 unsigned int num = 1;
56 // go through the list of parent items...
57 for ( QValueList<QListViewItem*>::Iterator it = parentList.begin(); it != parentList.end();
58 ( *it )->setOpen( TRUE ), ++it, num++ ) {
59 item = *it;
60 // ...and create 5 checkable child ListViewItems for each parent item
61 for ( unsigned int i = 1; i <= 5; i++ )
62 (void)new QCheckListItem( item, QString( "%1. Child of Parent %2" ).arg( i ).arg( num ), QCheckListItem::CheckBox );
63 }
64
65 // Create another widget for layouting
66 QVBoxLayout *tmp = new QVBoxLayout( lay );
67 tmp->setMargin( 5 );
68
69 // create a pushbutton
70 QPushButton *copy1 = new QPushButton( " -> ", this );
71 tmp->addWidget( copy1 );
72 copy1->setMaximumWidth( copy1->sizeHint().width() );
73 // connect the SIGNAL clicked() of the pushbutton with the SLOT copy1to2()
74 connect( copy1, SIGNAL( clicked() ), this, SLOT( copy1to2() ) );
75
76 // another widget for layouting
77 QVBoxLayout *vbox2 = new QVBoxLayout( lay );
78 vbox2->setMargin( 5 );
79
80 // and another label
81 vbox2->addWidget( new QLabel( "Check one item!", this ) );
82
83 // create the second listview
84 lv2 = new QListView( this );
85 vbox2->addWidget( lv2 );
86 lv2->addColumn( "Items" );
87 lv2->setRootIsDecorated( TRUE );
88
89 // another widget needed for layouting only
90 tmp = new QVBoxLayout( lay );
91 tmp->setMargin( 5 );
92
93 // create another pushbutton...
94 QPushButton *copy2 = new QPushButton( " -> ", this );
95 lay->addWidget( copy2 );
96 copy2->setMaximumWidth( copy2->sizeHint().width() );
97 // ...and connect its clicked() SIGNAL to the copy2to3() SLOT
98 connect( copy2, SIGNAL( clicked() ), this, SLOT( copy2to3() ) );
99
100 tmp = new QVBoxLayout( lay );
101 tmp->setMargin( 5 );
102
103 // and create a label which will be at the right of the window
104 label = new QLabel( "No Item yet...", this );
105 tmp->addWidget( label );
106}
107
108/*
109 * SLOT copy1to2()
110 *
111 * Copies all checked ListViewItems from the first ListView to
112 * the second one, and inserts them as Radio-ListViewItem.
113 */
114
115void CheckLists::copy1to2()
116{
117 // create an iterator which operates on the first ListView
118 QListViewItemIterator it( lv1 );
119
120 lv2->clear();
121
122 // Insert first a controller Item into the second ListView. Always if Radio-ListViewItems
123 // are inserted into a Listview, the parent item of these MUST be a controller Item!
124 QCheckListItem *item = new QCheckListItem( lv2, "Controller", QCheckListItem::Controller );
125 item->setOpen( TRUE );
126
127 // iterate through the first ListView...
128 for ( ; it.current(); ++it )
129 // ...check state of childs, and...
130 if ( it.current()->parent() )
131 // ...if the item is checked...
132 if ( ( (QCheckListItem*)it.current() )->isOn() )
133 // ...insert a Radio-ListViewItem with the same text into the second ListView
134 (void)new QCheckListItem( item, it.current()->text( 0 ), QCheckListItem::RadioButton );
135
136 if ( item->firstChild() )
137 ( ( QCheckListItem* )item->firstChild() )->setOn( TRUE );
138}
139
140/*
141 * SLOT copy2to3()
142 *
143 * Copies the checked item of the second ListView into the
144 * Label at the right.
145 */
146
147void CheckLists::copy2to3()
148{
149 // create an iterator which operates on the second ListView
150 QListViewItemIterator it( lv2 );
151
152 label->setText( "No Item checked" );
153
154 // iterate through the second ListView...
155 for ( ; it.current(); ++it )
156 // ...check state of childs, and...
157 if ( it.current()->parent() )
158 // ...if the item is checked...
159 if ( ( (QCheckListItem*)it.current() )->isOn() )
160 // ...set the text of the item to the label
161 label->setText( it.current()->text( 0 ) );
162}
163
Note: See TracBrowser for help on using the repository browser.