summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp26
-rw-r--r--libopie2/opienet/onetwork.h5
-rw-r--r--libopie2/opieui/olistview.cpp93
-rw-r--r--libopie2/opieui/olistview.h35
4 files changed, 148 insertions, 11 deletions
diff --git a/libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp b/libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp
index 31bda9d..5ba7b69 100644
--- a/libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp
+++ b/libopie2/examples/opieui/olistviewdemo/olistviewdemo.cpp
@@ -1,54 +1,80 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3 3
4              Copyright (C) 2003 Michael 'Mickey' Lauer 4              Copyright (C) 2003 Michael 'Mickey' Lauer
5 <mickey@tm.informatik.uni-frankfurt.de> 5 <mickey@tm.informatik.uni-frankfurt.de>
6 =. 6 =.
7 .=l. 7 .=l.
8           .>+-= 8           .>+-=
9 _;:,     .>    :=|. This program is free software; you can 9 _;:,     .>    :=|. This program is free software; you can
10.> <`_,   >  .   <= redistribute it and/or modify it under 10.> <`_,   >  .   <= redistribute it and/or modify it under
11:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 11:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
12.="- .-=="i,     .._ License as published by the Free Software 12.="- .-=="i,     .._ License as published by the Free Software
13 - .   .-<_>     .<> Foundation; either version 2 of the License, 13 - .   .-<_>     .<> Foundation; either version 2 of the License,
14     ._= =}       : or (at your option) any later version. 14     ._= =}       : or (at your option) any later version.
15    .%`+i>       _;_. 15    .%`+i>       _;_.
16    .i_,=:_.      -<s. This program is distributed in the hope that 16    .i_,=:_.      -<s. This program is distributed in the hope that
17     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 17     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
18    : ..    .:,     . . . without even the implied warranty of 18    : ..    .:,     . . . without even the implied warranty of
19    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 19    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
20  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 20  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
21..}^=.=       =       ; Library General Public License for more 21..}^=.=       =       ; Library General Public License for more
22++=   -.     .`     .: details. 22++=   -.     .`     .: details.
23 :     =  ...= . :.=- 23 :     =  ...= . :.=-
24 -.   .:....=;==+<; You should have received a copy of the GNU 24 -.   .:....=;==+<; You should have received a copy of the GNU
25  -_. . .   )=.  = Library General Public License along with 25  -_. . .   )=.  = Library General Public License along with
26    --        :-=` this library; see the file COPYING.LIB. 26    --        :-=` this library; see the file COPYING.LIB.
27 If not, write to the Free Software Foundation, 27 If not, write to the Free Software Foundation,
28 Inc., 59 Temple Place - Suite 330, 28 Inc., 59 Temple Place - Suite 330,
29 Boston, MA 02111-1307, USA. 29 Boston, MA 02111-1307, USA.
30 30
31*/ 31*/
32 32
33#include "olistviewdemo.h" 33#include "olistviewdemo.h"
34#include <opie2/olistview.h> 34#include <opie2/olistview.h>
35 35
36#include <qstring.h> 36#include <qstring.h>
37#include <qpixmap.h> 37#include <qpixmap.h>
38#include <qlistview.h> 38#include <qlistview.h>
39 39
40OListViewDemo::OListViewDemo( QWidget* parent, const char* name, WFlags f ) 40OListViewDemo::OListViewDemo( QWidget* parent, const char* name, WFlags f )
41 :QVBox( parent, name, f ) 41 :QVBox( parent, name, f )
42{ 42{
43 lv = new ONamedListView( this ); 43 lv = new ONamedListView( this );
44 lv->setRootIsDecorated( true );
44 lv->addColumns( QStringList::split( ' ', "Column1 Column2 Column3 Column4" ) ); 45 lv->addColumns( QStringList::split( ' ', "Column1 Column2 Column3 Column4" ) );
45 46
46 ONamedListViewItem* item = new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) ); 47 ONamedListViewItem* item = new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) );
47 item->setText( "Column2", "ModifiedText" ); 48 item->setText( "Column2", "ModifiedText" );
48 item->setText( "Column5", "ThisColumnDoesNotExits" ); 49 item->setText( "Column5", "ThisColumnDoesNotExits" );
50
51 new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) );
52 new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) );
53 new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Minni" ) );
54 item = new ONamedListViewItem( lv, QStringList::split( ' ', "XXX YYY ZZZ ***" ) );
55 new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) );
56 new ONamedListViewItem( lv, QStringList::split( ' ', "Text1 Text2 Text3 Text4" ) );
57
58 new ONamedListViewItem( item, QStringList::split( ' ', "SubText1 Text2 Text3 Text4" ) );
59 new ONamedListViewItem( item, QStringList::split( ' ', "SubText1 Text2 Text3 Text4" ) );
60 new ONamedListViewItem( item, QStringList::split( ' ', "SubText1 Text2 Text3 Text4" ) );
61 item = new ONamedListViewItem( item, QStringList::split( ' ', "Text1 Text2 Text3 HereItComes" ) );
62 item = new ONamedListViewItem( item, QStringList::split( ' ', "Text1 Text2 Text3 HereItComesSoon" ) );
63 item = new ONamedListViewItem( item, QStringList::split( ' ', "Text1 Text2 Text3 Mickey" ) );
64
65 if ( lv->find( 3, "Mickey", 3 ) )
66 qDebug( "found Mickey :-)" );
67 else
68 qDebug( "did not found Mickey :-(" );
69
70 if ( lv->find( 3, "Minni", 0 ) )
71 qDebug( "found Minni :-)" );
72 else
73 qDebug( "did not found Minni :-(" );
74
49} 75}
50 76
51OListViewDemo::~OListViewDemo() 77OListViewDemo::~OListViewDemo()
52{ 78{
53} 79}
54 80
diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h
index a29b29d..1b38d02 100644
--- a/libopie2/opienet/onetwork.h
+++ b/libopie2/opienet/onetwork.h
@@ -1,435 +1,440 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) 2003 by the Wellenreiter team: 3              Copyright (C) 2003 by the Wellenreiter team:
4 Martin J. Muench <mjm@remote-exploit.org> 4 Martin J. Muench <mjm@remote-exploit.org>
5 Max Moser <mmo@remote-exploit.org 5 Max Moser <mmo@remote-exploit.org
6 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 6 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
7 =. 7 =.
8 .=l. 8 .=l.
9           .>+-= 9           .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10 _;:,     .>    :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_,   >  .   <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 12:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i,     .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14 - .   .-<_>     .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15     ._= =}       : or (at your option) any later version.
16    .%`+i>       _;_. 16    .%`+i>       _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17    .i_,=:_.      -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19    : ..    .:,     . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; Library General Public License for more 22..}^=.=       =       ; Library General Public License for more
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = Library General Public License along with 26  -_. . .   )=.  = Library General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#ifndef ONETWORK_H 34#ifndef ONETWORK_H
35#define ONETWORK_H 35#define ONETWORK_H
36 36
37/* OPIE */ 37/* OPIE */
38 38
39#include <opie2/onetutils.h> 39#include <opie2/onetutils.h>
40 40
41/* QT */ 41/* QT */
42 42
43#include <qvaluelist.h> 43#include <qvaluelist.h>
44#include <qdict.h> 44#include <qdict.h>
45#include <qmap.h> 45#include <qmap.h>
46#include <qobject.h> 46#include <qobject.h>
47#include <qhostaddress.h> 47#include <qhostaddress.h>
48 48
49#ifndef IFNAMSIZ 49#ifndef IFNAMSIZ
50#define IFNAMSIZ 16 50#define IFNAMSIZ 16
51#endif 51#endif
52#ifndef IW_MAX_PRIV_DEF 52#ifndef IW_MAX_PRIV_DEF
53#define IW_MAX_PRIV_DEF 128 53#define IW_MAX_PRIV_DEF 128
54#endif 54#endif
55 55
56// ML: Yeah, I hate to include kernel headers, but it's necessary here 56// ML: Yeah, I hate to include kernel headers, but it's necessary here
57// ML: Here comes an ugly hack to prevent <linux/wireless.h> including <linux/if.h> 57// ML: Here comes an ugly hack to prevent <linux/wireless.h> including <linux/if.h>
58// ML: which conflicts with the user header <net/if.h> 58// ML: which conflicts with the user header <net/if.h>
59// ML: We really need a user header for the Wireless Extensions, something like <net/wireless.h> 59// ML: We really need a user header for the Wireless Extensions, something like <net/wireless.h>
60// ML: I will drop Jean a mail on that subject 60// ML: I will drop Jean a mail on that subject
61 61
62#include <net/if.h> 62#include <net/if.h>
63#define _LINUX_IF_H 63#define _LINUX_IF_H
64#include <linux/wireless.h> 64#include <linux/wireless.h>
65 65
66class ONetworkInterface; 66class ONetworkInterface;
67class OWirelessNetworkInterface; 67class OWirelessNetworkInterface;
68class OChannelHopper; 68class OChannelHopper;
69class OMonitoringInterface; 69class OMonitoringInterface;
70 70
71/*====================================================================================== 71/*======================================================================================
72 * ONetwork 72 * ONetwork
73 *======================================================================================*/ 73 *======================================================================================*/
74 74
75/** 75/**
76 * @brief A container class for all network interfaces 76 * @brief A container class for all network interfaces
77 * 77 *
78 * This class provides access to all available network interfaces of your computer. 78 * This class provides access to all available network interfaces of your computer.
79 *
79 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 80 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
80 */ 81 */
81class ONetwork : public QObject 82class ONetwork : public QObject
82{ 83{
83 Q_OBJECT 84 Q_OBJECT
84 85
85 public: 86 public:
86 typedef QDict<ONetworkInterface> InterfaceMap; 87 typedef QDict<ONetworkInterface> InterfaceMap;
87 typedef QDictIterator<ONetworkInterface> InterfaceIterator; 88 typedef QDictIterator<ONetworkInterface> InterfaceIterator;
88 89
89 public: 90 public:
90 /** 91 /**
91 * @returns the number of available interfaces 92 * @returns the number of available interfaces
92 */ 93 */
93 int count() const; 94 int count() const;
94 /** 95 /**
95 * @returns a pointer to the (one and only) @ref ONetwork instance. 96 * @returns a pointer to the (one and only) @ref ONetwork instance.
96 */ 97 */
97 static ONetwork* instance(); 98 static ONetwork* instance();
98 /** 99 /**
99 * @returns an iterator usable for iterating through all network interfaces. 100 * @returns an iterator usable for iterating through all network interfaces.
100 */ 101 */
101 InterfaceIterator iterator() const; 102 InterfaceIterator iterator() const;
102 /** 103 /**
103 * @returns true, if the @a interface supports the wireless extension protocol. 104 * @returns true, if the @a interface supports the wireless extension protocol.
104 */ 105 */
105 // FIXME QString? -zecke 106 // FIXME QString? -zecke
106 bool isWirelessInterface( const char* interface ) const; 107 bool isWirelessInterface( const char* interface ) const;
107 /** 108 /**
108 * @returns a pointer to the @ref ONetworkInterface object for the specified @a interface or 0, if not found 109 * @returns a pointer to the @ref ONetworkInterface object for the specified @a interface or 0, if not found
109 * @see ONetworkInterface 110 * @see ONetworkInterface
110 */ 111 */
111 // FIXME: const QString& is prefered over QString!!! -zecke 112 // FIXME: const QString& is prefered over QString!!! -zecke
112 ONetworkInterface* interface( const QString& interface ) const; 113 ONetworkInterface* interface( const QString& interface ) const;
113 /** 114 /**
114 * @internal Rebuild the internal interface database 115 * @internal Rebuild the internal interface database
115 * @note Sometimes it might be useful to call this from client code, 116 * @note Sometimes it might be useful to call this from client code,
116 * e.g. after issuing a cardctl insert 117 * e.g. after issuing a cardctl insert
117 */ 118 */
118 void synchronize(); 119 void synchronize();
119 120
120 protected: 121 protected:
121 ONetwork(); 122 ONetwork();
122 123
123 private: 124 private:
124 static ONetwork* _instance; 125 static ONetwork* _instance;
125 InterfaceMap _interfaces; 126 InterfaceMap _interfaces;
126}; 127};
127 128
128 129
129/*====================================================================================== 130/*======================================================================================
130 * ONetworkInterface 131 * ONetworkInterface
131 *======================================================================================*/ 132 *======================================================================================*/
132 133
133/** 134/**
134 * @brief A network interface wrapper. 135 * @brief A network interface wrapper.
135 * 136 *
136 * This class provides a wrapper for a network interface. All the cumbersume details of 137 * This class provides a wrapper for a network interface. All the cumbersume details of
137 * Linux ioctls are hidden under a convenient high-level interface. 138 * Linux ioctls are hidden under a convenient high-level interface.
138 * @warning Most of the setting methods contained in this class require the appropriate 139 * @warning Most of the setting methods contained in this class require the appropriate
139 * process permissions to work. 140 * process permissions to work.
141 *
140 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 142 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
141 */ 143 */
142class ONetworkInterface : public QObject 144class ONetworkInterface : public QObject
143{ 145{
144 friend class OMonitoringInterface; 146 friend class OMonitoringInterface;
145 friend class OCiscoMonitoringInterface; 147 friend class OCiscoMonitoringInterface;
146 friend class OWlanNGMonitoringInterface; 148 friend class OWlanNGMonitoringInterface;
147 friend class OHostAPMonitoringInterface; 149 friend class OHostAPMonitoringInterface;
148 friend class OOrinocoMonitoringInterface; 150 friend class OOrinocoMonitoringInterface;
149 151
150 public: 152 public:
151 /** 153 /**
152 * Constructor. Normally you don't create @ref ONetworkInterface objects yourself, 154 * Constructor. Normally you don't create @ref ONetworkInterface objects yourself,
153 * but access them via @ref ONetwork::interface(). 155 * but access them via @ref ONetwork::interface().
154 */ 156 */
155 ONetworkInterface( QObject* parent, const char* name ); 157 ONetworkInterface( QObject* parent, const char* name );
156 /** 158 /**
157 * Destructor. 159 * Destructor.
158 */ 160 */
159 virtual ~ONetworkInterface(); 161 virtual ~ONetworkInterface();
160 /** 162 /**
161 * Associates a @a monitoring interface with this network interface. 163 * Associates a @a monitoring interface with this network interface.
162 * @note This is currently only useful with @ref OWirelessNetworkInterface objects. 164 * @note This is currently only useful with @ref OWirelessNetworkInterface objects.
163 */ 165 */
164 void setMonitoring( OMonitoringInterface* monitoring ); 166 void setMonitoring( OMonitoringInterface* monitoring );
165 /** 167 /**
166 * @returns the currently associated monitoring interface or 0, if no monitoring is associated. 168 * @returns the currently associated monitoring interface or 0, if no monitoring is associated.
167 */ 169 */
168 OMonitoringInterface* monitoring() const; 170 OMonitoringInterface* monitoring() const;
169 /** 171 /**
170 * Setting an interface to promiscuous mode enables the device to receive 172 * Setting an interface to promiscuous mode enables the device to receive
171 * all packets on the shared medium - as opposed to packets which are addressed to this interface. 173 * all packets on the shared medium - as opposed to packets which are addressed to this interface.
172 */ 174 */
173 bool setPromiscuousMode( bool ); 175 bool setPromiscuousMode( bool );
174 /** 176 /**
175 * @returns true if the interface is set to promiscuous mode. 177 * @returns true if the interface is set to promiscuous mode.
176 */ 178 */
177 bool promiscuousMode() const; 179 bool promiscuousMode() const;
178 /** 180 /**
179 * Setting an interface to up enables it to receive packets. 181 * Setting an interface to up enables it to receive packets.
180 */ 182 */
181 bool setUp( bool ); 183 bool setUp( bool );
182 /** 184 /**
183 * @returns true if the interface is up. 185 * @returns true if the interface is up.
184 */ 186 */
185 bool isUp() const; 187 bool isUp() const;
186 /** 188 /**
187 * @returns true if the interface is a loopback interface. 189 * @returns true if the interface is a loopback interface.
188 */ 190 */
189 bool isLoopback() const; 191 bool isLoopback() const;
190 /** 192 /**
191 * @returns true if the interface is featuring supports the wireless extension protocol. 193 * @returns true if the interface is featuring supports the wireless extension protocol.
192 */ 194 */
193 bool isWireless() const; 195 bool isWireless() const;
194 /** 196 /**
195 * Associate the IP address @ addr with the interface. 197 * Associate the IP address @ addr with the interface.
196 */ 198 */
197 void setIPV4Address( const QHostAddress& addr ); 199 void setIPV4Address( const QHostAddress& addr );
198 /** 200 /**
199 * @returns the IPv4 address associated with the interface. 201 * @returns the IPv4 address associated with the interface.
200 */ 202 */
201 QString ipV4Address() const; //TODO: make this return an OHostAddress 203 QString ipV4Address() const; //TODO: make this return an OHostAddress
202 /** 204 /**
203 * Associate the MAC address @a addr with the interface. 205 * Associate the MAC address @a addr with the interface.
204 * @note It can be necessary to shut down the interface prior to calling this method. 206 * @note It can be necessary to shut down the interface prior to calling this method.
205 * @warning This is not supported by all drivers. 207 * @warning This is not supported by all drivers.
206 */ 208 */
207 void setMacAddress( const OMacAddress& addr ); 209 void setMacAddress( const OMacAddress& addr );
208 /** 210 /**
209 * @returns the MAC address associated with the interface. 211 * @returns the MAC address associated with the interface.
210 */ 212 */
211 OMacAddress macAddress() const; 213 OMacAddress macAddress() const;
212 /** 214 /**
213 * Associate the IPv4 @a netmask with the interface. 215 * Associate the IPv4 @a netmask with the interface.
214 */ 216 */
215 void setIPV4Netmask( const QHostAddress& netmask ); 217 void setIPV4Netmask( const QHostAddress& netmask );
216 /** 218 /**
217 * @returns the IPv4 netmask associated with the interface. 219 * @returns the IPv4 netmask associated with the interface.
218 */ 220 */
219 QString ipV4Netmask() const; //TODO: make this return an OHostAddress 221 QString ipV4Netmask() const; //TODO: make this return an OHostAddress
220 /** 222 /**
221 * @returns the data link type currently associated with the interface. 223 * @returns the data link type currently associated with the interface.
222 * @see #include <net/if_arp.h> for possible values. 224 * @see #include <net/if_arp.h> for possible values.
223 */ 225 */
224 int dataLinkType() const; 226 int dataLinkType() const;
225 227
226 protected: 228 protected:
227 const int _sfd; 229 const int _sfd;
228 mutable ifreq _ifr; 230 mutable ifreq _ifr;
229 OMonitoringInterface* _mon; 231 OMonitoringInterface* _mon;
230 232
231 protected: 233 protected:
232 struct ifreq& ifr() const; 234 struct ifreq& ifr() const;
233 virtual void init(); 235 virtual void init();
234 bool ioctl( int call ) const; 236 bool ioctl( int call ) const;
235 bool ioctl( int call, struct ifreq& ) const; 237 bool ioctl( int call, struct ifreq& ) const;
236}; 238};
237 239
238/*====================================================================================== 240/*======================================================================================
239 * OChannelHopper 241 * OChannelHopper
240 *======================================================================================*/ 242 *======================================================================================*/
241 243
242/** 244/**
243 * @brief A radio frequency channel hopper. 245 * @brief A radio frequency channel hopper.
244 * 246 *
245 * This class provides a channel hopper for radio frequencies. A channel hopper frequently 247 * This class provides a channel hopper for radio frequencies. A channel hopper frequently
246 * changes the radio frequency channel of its associated @ref OWirelessNetworkInterface. 248 * changes the radio frequency channel of its associated @ref OWirelessNetworkInterface.
247 * This is necessary when in monitoring mode and scanning for other devices, because 249 * This is necessary when in monitoring mode and scanning for other devices, because
248 * the radio frequency hardware can only detect packets sent on the same frequency. 250 * the radio frequency hardware can only detect packets sent on the same frequency.
251 *
249 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 252 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
250 */ 253 */
251class OChannelHopper : public QObject 254class OChannelHopper : public QObject
252{ 255{
253 Q_OBJECT 256 Q_OBJECT
254 257
255 public: 258 public:
256 /** 259 /**
257 * Constructor. 260 * Constructor.
258 */ 261 */
259 OChannelHopper( OWirelessNetworkInterface* ); 262 OChannelHopper( OWirelessNetworkInterface* );
260 /** 263 /**
261 * Destructor. 264 * Destructor.
262 */ 265 */
263 virtual ~OChannelHopper(); 266 virtual ~OChannelHopper();
264 /** 267 /**
265 * @returns true, if the channel hopper is hopping channels 268 * @returns true, if the channel hopper is hopping channels
266 */ 269 */
267 bool isActive() const; 270 bool isActive() const;
268 /** 271 /**
269 * @returns the last hopped channel 272 * @returns the last hopped channel
270 */ 273 */
271 int channel() const; 274 int channel() const;
272 /** 275 /**
273 * Set the channel hopping @a interval. 276 * Set the channel hopping @a interval.
274 * An interval of 0 deactivates the channel hopper. 277 * An interval of 0 deactivates the channel hopper.
275 */ 278 */
276 void setInterval( int interval ); 279 void setInterval( int interval );
277 /** 280 /**
278 * @returns the channel hopping interval 281 * @returns the channel hopping interval
279 */ 282 */
280 int interval() const; 283 int interval() const;
281 284
282 signals: 285 signals:
283 /** 286 /**
284 * This signal is emitted right after the channel hopper performed a hop 287 * This signal is emitted right after the channel hopper performed a hop
285 */ 288 */
286 void hopped( int ); 289 void hopped( int );
287 290
288 protected: 291 protected:
289 virtual void timerEvent( QTimerEvent* ); 292 virtual void timerEvent( QTimerEvent* );
290 293
291 private: 294 private:
292 OWirelessNetworkInterface* _iface; 295 OWirelessNetworkInterface* _iface;
293 int _interval; 296 int _interval;
294 int _tid; 297 int _tid;
295 QValueList<int> _channels; 298 QValueList<int> _channels;
296 QValueList<int>::Iterator _channel; 299 QValueList<int>::Iterator _channel;
297}; 300};
298 301
299 302
300/*====================================================================================== 303/*======================================================================================
301 * OWirelessNetworkInterface 304 * OWirelessNetworkInterface
302 *======================================================================================*/ 305 *======================================================================================*/
303 306
304/** 307/**
305 * @brief A network interface wrapper for interfaces supporting the wireless extensions protocol. 308 * @brief A network interface wrapper for interfaces supporting the wireless extensions protocol.
306 * 309 *
307 * This class provides a high-level encapsulation of the Linux wireless extension API. 310 * This class provides a high-level encapsulation of the Linux wireless extension API.
311 *
312 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
308 */ 313 */
309class OWirelessNetworkInterface : public ONetworkInterface 314class OWirelessNetworkInterface : public ONetworkInterface
310{ 315{
311 friend class OMonitoringInterface; 316 friend class OMonitoringInterface;
312 friend class OCiscoMonitoringInterface; 317 friend class OCiscoMonitoringInterface;
313 friend class OWlanNGMonitoringInterface; 318 friend class OWlanNGMonitoringInterface;
314 friend class OHostAPMonitoringInterface; 319 friend class OHostAPMonitoringInterface;
315 friend class OOrinocoMonitoringInterface; 320 friend class OOrinocoMonitoringInterface;
316 321
317 friend class OPrivateIOCTL; 322 friend class OPrivateIOCTL;
318 323
319 public: 324 public:
320 /** 325 /**
321 * Constructor. 326 * Constructor.
322 */ 327 */
323 OWirelessNetworkInterface( QObject* parent, const char* name ); 328 OWirelessNetworkInterface( QObject* parent, const char* name );
324 /** 329 /**
325 * Destructor. 330 * Destructor.
326 */ 331 */
327 virtual ~OWirelessNetworkInterface(); 332 virtual ~OWirelessNetworkInterface();
328 /** 333 /**
329 * Setting the @a channel of the interface changes the radio frequency (RF) 334 * Setting the @a channel of the interface changes the radio frequency (RF)
330 * of the corresponding wireless network device. 335 * of the corresponding wireless network device.
331 */ 336 */
332 virtual void setChannel( int channel ) const; 337 virtual void setChannel( int channel ) const;
333 /** 338 /**
334 * @returns the channel index of the current radio frequency. 339 * @returns the channel index of the current radio frequency.
335 */ 340 */
336 virtual int channel() const; 341 virtual int channel() const;
337 /** 342 /**
338 * @returns the current radio frequency (in MHz). 343 * @returns the current radio frequency (in MHz).
339 */ 344 */
340 virtual double frequency() const; 345 virtual double frequency() const;
341 /** 346 /**
342 * @returns the number of radio frequency channels for the 347 * @returns the number of radio frequency channels for the
343 * corresponding wireless network device. 348 * corresponding wireless network device.
344 * @note European devices usually have 14 channels, while American typically feature 11 channels. 349 * @note European devices usually have 14 channels, while American typically feature 11 channels.
345 */ 350 */
346 virtual int channels() const; 351 virtual int channels() const;
347 /** 352 /**
348 * Set the IEEE 802.11 operation @a mode. 353 * Set the IEEE 802.11 operation @a mode.
349 * Valid values are <ul><li>adhoc<li>managed<li>monitor<li>master 354 * Valid values are <ul><li>adhoc<li>managed<li>monitor<li>master
350 * @warning Not all drivers support the all modes. 355 * @warning Not all drivers support the all modes.
351 * @note You might have to change the SSID to get the operation mode change into effect. 356 * @note You might have to change the SSID to get the operation mode change into effect.
352 */ 357 */
353 virtual void setMode( const QString& mode ); 358 virtual void setMode( const QString& mode );
354 /** 359 /**
355 * @returns the current IEEE 802.11 operation mode. 360 * @returns the current IEEE 802.11 operation mode.
356 * Possible values are <ul><li>adhoc<li>managed<li>monitor<li>master or <li>unknown 361 * Possible values are <ul><li>adhoc<li>managed<li>monitor<li>master or <li>unknown
357 */ 362 */
358 virtual QString mode() const; 363 virtual QString mode() const;
359 /** 364 /**
360 * Setting the monitor mode on a wireless network interface enables 365 * Setting the monitor mode on a wireless network interface enables
361 * listening to IEEE 802.11 data and management frames which normally 366 * listening to IEEE 802.11 data and management frames which normally
362 * are handled by the device firmware. This can be used to detect 367 * are handled by the device firmware. This can be used to detect
363 * other wireless network devices, e.g. Access Points or Ad-hoc stations. 368 * other wireless network devices, e.g. Access Points or Ad-hoc stations.
364 * @warning Standard wireless network drives don't support the monitor mode. 369 * @warning Standard wireless network drives don't support the monitor mode.
365 * @warning You need a patched driver for this to work. 370 * @warning You need a patched driver for this to work.
366 * @note Enabling the monitor mode is highly driver dependent and requires 371 * @note Enabling the monitor mode is highly driver dependent and requires
367 * the proper @ref OMonitoringInterface to be associated with the interface. 372 * the proper @ref OMonitoringInterface to be associated with the interface.
368 * @see OMonitoringInterface 373 * @see OMonitoringInterface
369 */ 374 */
370 virtual void setMonitorMode( bool ); //FIXME: ==> setMode( "monitor" ); 375 virtual void setMonitorMode( bool ); //FIXME: ==> setMode( "monitor" );
371 /** 376 /**
372 * @returns true if the device is listening in IEEE 802.11 monitor mode 377 * @returns true if the device is listening in IEEE 802.11 monitor mode
373 */ 378 */
374 virtual bool monitorMode() const; //FIXME: ==> mode() 379 virtual bool monitorMode() const; //FIXME: ==> mode()
375 /** 380 /**
376 * Set the channel hopping @a interval. An @a interval of 0 disables channel hopping. 381 * Set the channel hopping @a interval. An @a interval of 0 disables channel hopping.
377 * @see OChannelHopper 382 * @see OChannelHopper
378 */ 383 */
379 virtual void setChannelHopping( int interval = 0 ); 384 virtual void setChannelHopping( int interval = 0 );
380 /** 385 /**
381 * @returns the channel hopping interval or 0, if channel hopping is disabled. 386 * @returns the channel hopping interval or 0, if channel hopping is disabled.
382 */ 387 */
383 virtual int channelHopping() const; 388 virtual int channelHopping() const;
384 /** 389 /**
385 * @returns the @ref OChannelHopper of this interface or 0, if channel hopping has not been activated before 390 * @returns the @ref OChannelHopper of this interface or 0, if channel hopping has not been activated before
386 */ 391 */
387 virtual OChannelHopper* channelHopper() const; 392 virtual OChannelHopper* channelHopper() const;
388 /** 393 /**
389 * Set the station @a nickname. 394 * Set the station @a nickname.
390 */ 395 */
391 virtual void setNickName( const QString& nickname ); 396 virtual void setNickName( const QString& nickname );
392 /** 397 /**
393 * @returns the current station nickname. 398 * @returns the current station nickname.
394 */ 399 */
395 virtual QString nickName() const; 400 virtual QString nickName() const;
396 /** 401 /**
397 * Invoke the private IOCTL @a command with a @number of parameters on the network interface. 402 * Invoke the private IOCTL @a command with a @number of parameters on the network interface.
398 * @see OPrivateIOCTL 403 * @see OPrivateIOCTL
399 */ 404 */
400 virtual void setPrivate( const QString& command, int number, ... ); 405 virtual void setPrivate( const QString& command, int number, ... );
401 /** 406 /**
402 * @returns true if the interface is featuring the private IOCTL @command. 407 * @returns true if the interface is featuring the private IOCTL @command.
403 */ 408 */
404 virtual bool hasPrivate( const QString& command ); 409 virtual bool hasPrivate( const QString& command );
405 virtual void getPrivate( const QString& command ); //FIXME: Implement and document this 410 virtual void getPrivate( const QString& command ); //FIXME: Implement and document this
406 411
407 virtual bool isAssociated() const {}; //FIXME: Implement and document this 412 virtual bool isAssociated() const {}; //FIXME: Implement and document this
408 /** 413 /**
409 * @returns the MAC address of the Access Point if the 414 * @returns the MAC address of the Access Point if the
410 * device is in infrastructure mode. @returns a (more or less random) CELL 415 * device is in infrastructure mode. @returns a (more or less random) CELL
411 * address if the device is in adhoc mode. 416 * address if the device is in adhoc mode.
412 */ 417 */
413 virtual QString associatedAP() const; 418 virtual QString associatedAP() const;
414 /** 419 /**
415 * Set the @a ssid (Service Set ID) string. This is used to decide 420 * Set the @a ssid (Service Set ID) string. This is used to decide
416 * which network to associate with (use "any" to let the driver decide). 421 * which network to associate with (use "any" to let the driver decide).
417 */ 422 */
418 virtual void setSSID( const QString& ssid ); 423 virtual void setSSID( const QString& ssid );
419 /** 424 /**
420 * @returns the current SSID (Service Set ID). 425 * @returns the current SSID (Service Set ID).
421 */ 426 */
422 virtual QString SSID() const; 427 virtual QString SSID() const;
423 428
424 protected: 429 protected:
425 void buildChannelList(); 430 void buildChannelList();
426 void buildPrivateList(); 431 void buildPrivateList();
427 virtual void init(); 432 virtual void init();
428 struct iwreq& iwr() const; 433 struct iwreq& iwr() const;
429 bool wioctl( int call ) const; 434 bool wioctl( int call ) const;
430 bool wioctl( int call, struct iwreq& ) const; 435 bool wioctl( int call, struct iwreq& ) const;
431 436
432 protected: 437 protected:
433 mutable struct iwreq _iwr; 438 mutable struct iwreq _iwr;
434 QMap<int,int> _channels; 439 QMap<int,int> _channels;
435 440
diff --git a/libopie2/opieui/olistview.cpp b/libopie2/opieui/olistview.cpp
index 8f97cc6..8f290d3 100644
--- a/libopie2/opieui/olistview.cpp
+++ b/libopie2/opieui/olistview.cpp
@@ -341,192 +341,267 @@ bool OListViewItem::isAlternate()
341void OListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) 341void OListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
342{ 342{
343 QColorGroup _cg = cg; 343 QColorGroup _cg = cg;
344 const QPixmap *pm = listView()->viewport()->backgroundPixmap(); 344 const QPixmap *pm = listView()->viewport()->backgroundPixmap();
345 if (pm && !pm->isNull()) 345 if (pm && !pm->isNull())
346 { 346 {
347 _cg.setBrush( QColorGroup::Base, QBrush(backgroundColor(), *pm) ); 347 _cg.setBrush( QColorGroup::Base, QBrush(backgroundColor(), *pm) );
348 p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() ); 348 p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() );
349 } 349 }
350 else if ( isAlternate() ) 350 else if ( isAlternate() )
351 { 351 {
352 _cg.setColor( QColorGroup::Base, static_cast<OListView*>( listView() )->alternateBackground() ); 352 _cg.setColor( QColorGroup::Base, static_cast<OListView*>( listView() )->alternateBackground() );
353 } 353 }
354 QListViewItem::paintCell( p, _cg, column, width, alignment ); 354 QListViewItem::paintCell( p, _cg, column, width, alignment );
355 355
356 //FIXME: Use styling here! 356 //FIXME: Use styling here!
357 357
358 const QPen& pen = static_cast<OListView*>( listView() )->columnSeparator(); 358 const QPen& pen = static_cast<OListView*>( listView() )->columnSeparator();
359 p->setPen( pen ); 359 p->setPen( pen );
360 p->drawLine( width-1, 0, width-1, height() ); 360 p->drawLine( width-1, 0, width-1, height() );
361} 361}
362 362
363 363
364OListViewItem* OListViewItem::childFactory() 364OListViewItem* OListViewItem::childFactory()
365{ 365{
366 return new OListViewItem( this ); 366 return new OListViewItem( this );
367} 367}
368 368
369 369
370#ifndef QT_NO_DATASTREAM 370#ifndef QT_NO_DATASTREAM
371void OListViewItem::serializeTo( QDataStream& s ) const 371void OListViewItem::serializeTo( QDataStream& s ) const
372{ 372{
373 #warning Caution... the binary format is still under construction... 373 #warning Caution... the binary format is still under construction...
374 qDebug( "storing OListViewItem..." ); 374 qDebug( "storing OListViewItem..." );
375 375
376 // store item text 376 // store item text
377 for ( int i = 0; i < listView()->columns(); ++i ) 377 for ( int i = 0; i < listView()->columns(); ++i )
378 { 378 {
379 s << text( i ); 379 s << text( i );
380 } 380 }
381 381
382 // calculate the number of children to serialize 382 // calculate the number of children to serialize
383 int items = 0; 383 int items = 0;
384 QListViewItem* item = firstChild(); 384 QListViewItem* item = firstChild();
385 while ( item ) 385 while ( item )
386 { 386 {
387 item = item->nextSibling(); 387 item = item->nextSibling();
388 items++; 388 items++;
389 } 389 }
390 390
391 // store number of items and the items itself 391 // store number of items and the items itself
392 s << items; 392 s << items;
393 item = firstChild(); 393 item = firstChild();
394 for ( int i = 0; i < items; ++i ) 394 for ( int i = 0; i < items; ++i )
395 { 395 {
396 s << *static_cast<OListViewItem*>( item ); 396 s << *static_cast<OListViewItem*>( item );
397 item = item->nextSibling(); 397 item = item->nextSibling();
398 } 398 }
399 399
400 qDebug( "OListviewItem stored." ); 400 qDebug( "OListviewItem stored." );
401} 401}
402 402
403 403
404void OListViewItem::serializeFrom( QDataStream& s ) 404void OListViewItem::serializeFrom( QDataStream& s )
405{ 405{
406 #warning Caution... the binary format is still under construction... 406 #warning Caution... the binary format is still under construction...
407 qDebug( "loading OListViewItem..." ); 407 qDebug( "loading OListViewItem..." );
408 408
409 for ( int i = 0; i < listView()->columns(); ++i ) 409 for ( int i = 0; i < listView()->columns(); ++i )
410 { 410 {
411 QString coltext; 411 QString coltext;
412 s >> coltext; 412 s >> coltext;
413 qDebug( "read text '%s' for column %d", (const char*) coltext, i ); 413 qDebug( "read text '%s' for column %d", (const char*) coltext, i );
414 setText( i, coltext ); 414 setText( i, coltext );
415 } 415 }
416 416
417 int items; 417 int items;
418 s >> items; 418 s >> items;
419 qDebug( "read number of items = %d", items ); 419 qDebug( "read number of items = %d", items );
420 420
421 for ( int i = 0; i < items; ++i ) 421 for ( int i = 0; i < items; ++i )
422 { 422 {
423 OListViewItem* item = childFactory(); 423 OListViewItem* item = childFactory();
424 s >> (*item); 424 s >> (*item);
425 } 425 }
426 426
427 qDebug( "OListViewItem loaded." ); 427 qDebug( "OListViewItem loaded." );
428} 428}
429 429
430 430
431QDataStream& operator<<( QDataStream& s, const OListViewItem& lvi ) 431QDataStream& operator<<( QDataStream& s, const OListViewItem& lvi )
432{ 432{
433 lvi.serializeTo( s ); 433 lvi.serializeTo( s );
434} 434}
435 435
436 436
437QDataStream& operator>>( QDataStream& s, OListViewItem& lvi ) 437QDataStream& operator>>( QDataStream& s, OListViewItem& lvi )
438{ 438{
439 lvi.serializeFrom( s ); 439 lvi.serializeFrom( s );
440} 440}
441#endif // QT_NO_DATASTREAM 441#endif // QT_NO_DATASTREAM
442 442
443 443
444/*====================================================================================== 444/*======================================================================================
445 * ONamedListView 445 * ONamedListView
446 *======================================================================================*/ 446 *======================================================================================*/
447 447
448ONamedListView::ONamedListView( QWidget *parent, const char *name ) 448ONamedListView::ONamedListView( QWidget *parent, const char *name )
449 :OListView( parent, name ) 449 :OListView( parent, name )
450{ 450{
451} 451}
452 452
453 453
454ONamedListView::~ONamedListView() 454ONamedListView::~ONamedListView()
455{ 455{
456} 456}
457 457
458 458
459void ONamedListView::addColumns( const QStringList& columns ) 459void ONamedListView::addColumns( const QStringList& columns )
460{ 460{
461 for ( QStringList::ConstIterator it = columns.begin(); it != columns.end(); ++it ) 461 for ( QStringList::ConstIterator it = columns.begin(); it != columns.end(); ++it )
462 { 462 {
463 qDebug( "adding column %s", (const char*) *it ); 463 qDebug( "adding column %s", (const char*) *it );
464 addColumn( *it ); 464 addColumn( *it );
465 } 465 }
466} 466}
467 467
468 468
469int ONamedListView::findColumn( const QString& text ) const
470{
471 //FIXME: If used excessively, this will slow down performance of updates
472 //FIXME: because of the linear search over all column texts.
473 //FIXME: I will optimize later by using a hash map.
474 for ( int i = 0; i < columns(); ++i )
475 if ( columnText( i ) == text )
476 return i;
477 return -1;
478}
479
480
481ONamedListViewItem* ONamedListView::find( int column, const QString& text, int recurse ) const
482{
483 return find( (ONamedListViewItem*) firstChild(), column, text, recurse );
484}
485
486
487ONamedListViewItem* ONamedListView::find( ONamedListViewItem* item, int column, const QString& text, int recurse ) const
488{
489 ONamedListViewItem* result;
490 while ( item && item->text( column ) != text )
491 {
492 qDebug( "checked %s", (const char*) item->text( column ) );
493
494 if ( recurse < 0 || recurse > 0 )
495 {
496 qDebug( "recursion is %d - recursing into...", recurse );
497 result = find( (ONamedListViewItem*) item->firstChild(), column, text, recurse-1 );
498 if ( result ) return result;
499 }
500
501
502 item = (ONamedListViewItem*) item->itemBelow();
503 }
504 if ( item && item->text( column ) == text )
505 return item;
506 else
507 return 0;
508}
509
510
511ONamedListViewItem* ONamedListView::find( const QString& column, const QString& text, int recurse ) const
512{
513 int col = findColumn( column );
514 if ( col != -1 )
515 return find( (ONamedListViewItem*) firstChild(), col, text, recurse );
516 else
517 return 0;
518}
519
520
521ONamedListViewItem* ONamedListView::find( ONamedListViewItem* item, const QString& column, const QString& text, int recurse ) const
522{
523 int col = findColumn( column );
524 if ( col != -1 )
525 return find( item, col, text, recurse );
526 else
527 return 0;
528}
529
530
469/*====================================================================================== 531/*======================================================================================
470 * ONamedListViewItem 532 * ONamedListViewItem
471 *======================================================================================*/ 533 *======================================================================================*/
472 534
473ONamedListViewItem::ONamedListViewItem( QListView* parent, const QStringList& texts ) 535ONamedListViewItem::ONamedListViewItem( QListView* parent, const QStringList& texts )
474 :OListViewItem( parent ) 536 :OListViewItem( parent )
475{ 537{
476 setText( texts ); 538 setText( texts );
477} 539}
478 540
479 541
480ONamedListViewItem::ONamedListViewItem( QListViewItem* parent, const QStringList& texts ) 542ONamedListViewItem::ONamedListViewItem( QListViewItem* parent, const QStringList& texts )
481 :OListViewItem( parent ) 543 :OListViewItem( parent )
482{ 544{
483 setText( texts ); 545 setText( texts );
484} 546}
485 547
486 548
487ONamedListViewItem::ONamedListViewItem( QListView* parent, QListViewItem* after, const QStringList& texts ) 549ONamedListViewItem::ONamedListViewItem( QListView* parent, QListViewItem* after, const QStringList& texts )
488 :OListViewItem( parent, after ) 550 :OListViewItem( parent, after )
489{ 551{
490 setText( texts ); 552 setText( texts );
491} 553}
492 554
493 555
494ONamedListViewItem::ONamedListViewItem( QListViewItem* parent, QListViewItem* after, const QStringList& texts ) 556ONamedListViewItem::ONamedListViewItem( QListViewItem* parent, QListViewItem* after, const QStringList& texts )
495 :OListViewItem( parent, after ) 557 :OListViewItem( parent, after )
496{ 558{
497 setText( texts ); 559 setText( texts );
498} 560}
499 561
500 562
501ONamedListViewItem::~ONamedListViewItem() 563ONamedListViewItem::~ONamedListViewItem()
502{ 564{
503} 565}
504 566
505 567
506void ONamedListViewItem::setText( const QStringList& texts ) 568void ONamedListViewItem::setText( const QStringList& texts )
507{ 569{
508 int col = 0; 570 int col = 0;
509 for ( QStringList::ConstIterator it = texts.begin(); it != texts.end(); ++it ) 571 for ( QStringList::ConstIterator it = texts.begin(); it != texts.end(); ++it )
510 { 572 {
511 qDebug( "setting column %d = text %s", col, (const char*) *it ); 573 qDebug( "setting column %d = text %s", col, (const char*) *it );
512 OListViewItem::setText( col++, *it ); 574 OListViewItem::setText( col++, *it );
513 } 575 }
514 576
515} 577}
516 578
517 579
518void ONamedListViewItem::setText( const QString& column, const QString& text ) 580void ONamedListViewItem::setText( const QString& column, const QString& text )
519{ 581{
520 //FIXME: If used excessively, this will slow down performance of updates 582 //FIXME: If used excessively, this will slow down performance of updates
521 //FIXME: because of the linear search over all column texts. 583 //FIXME: because of the linear search over all column texts.
522 //FIXME: I will optimize later by using a hash map. 584 //FIXME: I will optimize later by using a hash map.
523 for ( int i = 0; i < listView()->columns(); ++i ) 585 int col = ( (ONamedListView*) listView() )->findColumn( column );
524 { 586 if ( col != -1 )
525 if ( listView()->columnText( i ) == column ) 587 OListViewItem::setText( col, text );
526 { 588 else
527 OListViewItem::setText( i, text ); 589 qWarning( "ONamedListViewItem::setText(): Warning! Columntext '%s' not found.", (const char*) column );
528 return; 590}
529 } 591
530 } 592
531 qWarning( "ONamedListViewItem::setText(): Warning! Columntext '%s' not found.", (const char*) column ); 593ONamedListViewItem* ONamedListViewItem::find( int column, const QString& text, int recurse ) const
594{
595 return ( (ONamedListView*) listView() )->find( (ONamedListViewItem*) firstChild(), column, text, recurse );
532} 596}
597
598
599ONamedListViewItem* ONamedListViewItem::find( const QString& column, const QString& text, int recurse ) const
600{
601 int col = ( (ONamedListView*) listView() )->findColumn( column );
602 if ( col != -1 )
603 return ( (ONamedListView*) listView() )->find( (ONamedListViewItem*) firstChild(), col, text, recurse );
604 else
605 return 0;
606}
607
diff --git a/libopie2/opieui/olistview.h b/libopie2/opieui/olistview.h
index 99770bf..1bbdd5b 100644
--- a/libopie2/opieui/olistview.h
+++ b/libopie2/opieui/olistview.h
@@ -116,195 +116,226 @@ class OListView: public QListView
116 virtual void serializeTo( QDataStream& stream ) const; 116 virtual void serializeTo( QDataStream& stream ) const;
117 /** 117 /**
118 * Serialize this object from a @ref QDataStream @a stream 118 * Serialize this object from a @ref QDataStream @a stream
119 */ 119 */
120 virtual void serializeFrom( QDataStream& s ); 120 virtual void serializeFrom( QDataStream& s );
121#endif 121#endif
122 122
123 private: 123 private:
124 QColor m_alternateBackground; 124 QColor m_alternateBackground;
125 bool m_fullWidth; 125 bool m_fullWidth;
126 QPen m_columnSeparator; 126 QPen m_columnSeparator;
127}; 127};
128 128
129#ifndef QT_NO_DATASTREAM 129#ifndef QT_NO_DATASTREAM
130/** 130/**
131 * @relates OListView 131 * @relates OListView
132 * Writes @a listview to the @a stream and returns a reference to the stream. 132 * Writes @a listview to the @a stream and returns a reference to the stream.
133 */ 133 */
134QDataStream& operator<<( QDataStream& stream, const OListView& listview ); 134QDataStream& operator<<( QDataStream& stream, const OListView& listview );
135/** 135/**
136 * @relates OListView 136 * @relates OListView
137 * Reads @a listview from the @a stream and returns a reference to the stream. 137 * Reads @a listview from the @a stream and returns a reference to the stream.
138 */ 138 */
139QDataStream& operator>>( QDataStream& stream, OListView& listview ); 139QDataStream& operator>>( QDataStream& stream, OListView& listview );
140#endif // QT_NO_DATASTREAM 140#endif // QT_NO_DATASTREAM
141 141
142/*====================================================================================== 142/*======================================================================================
143 * OListViewItem 143 * OListViewItem
144 *======================================================================================*/ 144 *======================================================================================*/
145 145
146class OListViewItem: public QListViewItem 146class OListViewItem: public QListViewItem
147{ 147{
148 public: 148 public:
149 /** 149 /**
150 * Constructors. 150 * Constructors.
151 */ 151 */
152 OListViewItem( QListView * parent ); 152 OListViewItem( QListView * parent );
153 OListViewItem( QListViewItem * parent ); 153 OListViewItem( QListViewItem * parent );
154 OListViewItem( QListView * parent, QListViewItem * after ); 154 OListViewItem( QListView * parent, QListViewItem * after );
155 OListViewItem( QListViewItem * parent, QListViewItem * after ); 155 OListViewItem( QListViewItem * parent, QListViewItem * after );
156 156
157 OListViewItem( QListView * parent, 157 OListViewItem( QListView * parent,
158 QString, QString = QString::null, 158 QString, QString = QString::null,
159 QString = QString::null, QString = QString::null, 159 QString = QString::null, QString = QString::null,
160 QString = QString::null, QString = QString::null, 160 QString = QString::null, QString = QString::null,
161 QString = QString::null, QString = QString::null ); 161 QString = QString::null, QString = QString::null );
162 162
163 OListViewItem( QListViewItem * parent, 163 OListViewItem( QListViewItem * parent,
164 QString, QString = QString::null, 164 QString, QString = QString::null,
165 QString = QString::null, QString = QString::null, 165 QString = QString::null, QString = QString::null,
166 QString = QString::null, QString = QString::null, 166 QString = QString::null, QString = QString::null,
167 QString = QString::null, QString = QString::null ); 167 QString = QString::null, QString = QString::null );
168 168
169 OListViewItem( QListView * parent, QListViewItem * after, 169 OListViewItem( QListView * parent, QListViewItem * after,
170 QString, QString = QString::null, 170 QString, QString = QString::null,
171 QString = QString::null, QString = QString::null, 171 QString = QString::null, QString = QString::null,
172 QString = QString::null, QString = QString::null, 172 QString = QString::null, QString = QString::null,
173 QString = QString::null, QString = QString::null ); 173 QString = QString::null, QString = QString::null );
174 174
175 OListViewItem( QListViewItem * parent, QListViewItem * after, 175 OListViewItem( QListViewItem * parent, QListViewItem * after,
176 QString, QString = QString::null, 176 QString, QString = QString::null,
177 QString = QString::null, QString = QString::null, 177 QString = QString::null, QString = QString::null,
178 QString = QString::null, QString = QString::null, 178 QString = QString::null, QString = QString::null,
179 QString = QString::null, QString = QString::null ); 179 QString = QString::null, QString = QString::null );
180 /** 180 /**
181 * Destructor. 181 * Destructor.
182 */ 182 */
183 virtual ~OListViewItem(); 183 virtual ~OListViewItem();
184 /** 184 /**
185 * @returns the background color of the list item. 185 * @returns the background color of the list item.
186 */ 186 */
187 const QColor& backgroundColor(); 187 const QColor& backgroundColor();
188 /** 188 /**
189 * @returns true, if the item is at an odd position and 189 * @returns true, if the item is at an odd position and
190 * thus have to be painted with the alternate background color. 190 * thus have to be painted with the alternate background color.
191 */ 191 */
192 bool isAlternate(); 192 bool isAlternate();
193 /** 193 /**
194 * @note: Reimplemented for internal purposes - the API is not affected 194 * @note: Reimplemented for internal purposes - the API is not affected
195 * 195 *
196 */ 196 */
197 void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int alignment ); 197 void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int alignment );
198 /** 198 /**
199 * Perform object initialization. 199 * Perform object initialization.
200 */ 200 */
201 void init(); 201 void init();
202 /** 202 /**
203 * create a list view item as child of this object 203 * create a list view item as child of this object
204 * @returns the new object 204 * @returns the new object
205 */ 205 */
206 virtual OListViewItem* childFactory(); 206 virtual OListViewItem* childFactory();
207 #ifndef QT_NO_DATASTREAM 207 #ifndef QT_NO_DATASTREAM
208 /** 208 /**
209 * serialize this object to or from a @ref QDataStream 209 * serialize this object to or from a @ref QDataStream
210 * @param s the stream used to serialize this object. 210 * @param s the stream used to serialize this object.
211 */ 211 */
212 virtual void serializeTo( QDataStream& s ) const; 212 virtual void serializeTo( QDataStream& s ) const;
213 213
214 /** 214 /**
215 * serialize this object to or from a @ref QDataStream 215 * serialize this object to or from a @ref QDataStream
216 * @param s the stream used to serialize this object. 216 * @param s the stream used to serialize this object.
217 */ 217 */
218 virtual void serializeFrom( QDataStream& s ); 218 virtual void serializeFrom( QDataStream& s );
219 #endif 219 #endif
220 220
221 private: 221 private:
222 bool m_known; 222 bool m_known;
223 bool m_odd; 223 bool m_odd;
224}; 224};
225 225
226#ifndef QT_NO_DATASTREAM 226#ifndef QT_NO_DATASTREAM
227/** 227/**
228 * @relates QListViewItem 228 * @relates QListViewItem
229 * Writes listview @a item and all subitems recursively to @a stream 229 * Writes listview @a item and all subitems recursively to @a stream
230 * and returns a reference to the stream. 230 * and returns a reference to the stream.
231 */ 231 */
232QDataStream& operator<<( QDataStream& stream, const OListViewItem& item ); 232QDataStream& operator<<( QDataStream& stream, const OListViewItem& item );
233/** 233/**
234 * @relates QListViewItem 234 * @relates QListViewItem
235 * Reads listview @a item from @a stream and returns a reference to the stream. 235 * Reads listview @a item from @a stream and returns a reference to the stream.
236 */ 236 */
237QDataStream& operator>>( QDataStream& stream, OListViewItem& item ); 237QDataStream& operator>>( QDataStream& stream, OListViewItem& item );
238#endif // QT_NO_DATASTREAM 238#endif // QT_NO_DATASTREAM
239 239
240/*====================================================================================== 240/*======================================================================================
241 * ONamedListView 241 * ONamedListView
242 *======================================================================================*/ 242 *======================================================================================*/
243 243
244class ONamedListViewItem;
245
244/** 246/**
245 * @brief An OListView variant with named columns. 247 * @brief An OListView variant with named columns.
246 * 248 *
247 * This class provides a higher-level interface to the columns in an OListView. 249 * This class provides a higher-level interface to an OListView.
248 * 250 *
249 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 251 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
250 */ 252 */
251class ONamedListView: public OListView 253class ONamedListView: public OListView
252{ 254{
253 public: 255 public:
254 /** 256 /**
255 * Constructor. 257 * Constructor.
256 * 258 *
257 * The parameters @a parent and @a name are handled by 259 * The parameters @a parent and @a name are handled by
258 * @ref OListView, as usual. 260 * @ref OListView, as usual.
259 */ 261 */
260 ONamedListView( QWidget* parent = 0, const char* name = 0 ); 262 ONamedListView( QWidget* parent = 0, const char* name = 0 );
261 /** 263 /**
262 * Destructor. 264 * Destructor.
263 */ 265 */
264 virtual ~ONamedListView(); 266 virtual ~ONamedListView();
265 /** 267 /**
266 * Add a number of @a columns to the listview. 268 * Add a number of @a columns to the listview.
267 */ 269 */
268 virtual void addColumns( const QStringList& columns ); 270 virtual void addColumns( const QStringList& columns );
271 /**
272 * @returns the column index matching to @a text or -1 if not found.
273 */
274 virtual int findColumn( const QString& text ) const;
275 /**
276 * @returns the first item which has a @a text in column @a column.
277 * Set @a recurse to indicate how much subchild levels to search, e.g.<ul>
278 * <li>set it to 0 to search only among direct childs,
279 * <li>set it to 1 to search direct childs and all 1st order subchilds
280 * <li>set it to -1 for maximum recursion.
281 * </ul>
282 * @sa ONamedListViewItem::find()
283 */
284 virtual ONamedListViewItem* find( ONamedListViewItem* start, int column, const QString& text, int recurse = -1 ) const;
285 virtual ONamedListViewItem* find( int column, const QString& text, int recurse = -1 ) const;
286
287 virtual ONamedListViewItem* find( ONamedListViewItem* start, const QString& column, const QString& text, int recurse = -1 ) const;
288 virtual ONamedListViewItem* find( const QString& column, const QString& text, int recurse = -1 ) const;
269}; 289};
270 290
271/*====================================================================================== 291/*======================================================================================
272 * ONamedListViewItem 292 * ONamedListViewItem
273 *======================================================================================*/ 293 *======================================================================================*/
274 294
275/** 295/**
276 * @brief An OListView variant with named columns. 296 * @brief An OListView variant with named columns.
277 * 297 *
278 * This class provides a higher-level interface to the columns in an OListViewItem. 298 * This class provides a higher-level interface to an OListViewItem.
279 * 299 *
280 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 300 * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
281 */ 301 */
282class ONamedListViewItem: public OListViewItem 302class ONamedListViewItem: public OListViewItem
283{ 303{
284 public: 304 public:
285 /** 305 /**
286 * Constructor. Accepts the same parameters as a @ref OListViewItem, 306 * Constructor. Accepts the same parameters as a @ref OListViewItem,
287 * plus a @ref QStringList which holds an arbitrary number of @a texts. 307 * plus a @ref QStringList which holds an arbitrary number of @a texts.
288 */ 308 */
289 ONamedListViewItem( QListView* parent, const QStringList& texts ); 309 ONamedListViewItem( QListView* parent, const QStringList& texts );
290 ONamedListViewItem( QListViewItem* parent, const QStringList& texts ); 310 ONamedListViewItem( QListViewItem* parent, const QStringList& texts );
291 ONamedListViewItem( QListView* parent, QListViewItem* after, const QStringList& texts ); 311 ONamedListViewItem( QListView* parent, QListViewItem* after, const QStringList& texts );
292 ONamedListViewItem( QListViewItem* parent, QListViewItem* after, const QStringList& texts ); 312 ONamedListViewItem( QListViewItem* parent, QListViewItem* after, const QStringList& texts );
293 /** 313 /**
294 * Destructor. 314 * Destructor.
295 */ 315 */
296 virtual ~ONamedListViewItem(); 316 virtual ~ONamedListViewItem();
297 /** 317 /**
298 * Sets the text in column @a column to @a text. 318 * Sets the text in column @a column to @a text.
299 * This method differs from @ref QListViewItem::setText() in that it 319 * This method differs from @ref QListViewItem::setText() in that it
300 * accepts a string as column indicator instead of an int. 320 * accepts a string as column indicator instead of an int.
301 */ 321 */
302 virtual void setText( const QString& column, const QString& text ); 322 virtual void setText( const QString& column, const QString& text );
303 /** 323 /**
304 * Sets a number of @a texts for this item. 324 * Sets a number of @a texts for this item.
305 */ 325 */
306 virtual void setText( const QStringList& texts ); 326 virtual void setText( const QStringList& texts );
327 /**
328 * @returns the first child which has a @a text in column @a column.
329 * Set @a recurse to indicate how much subchild levels to search, e.g.<ul>
330 * <li>set it to 0 to search only among direct childs,
331 * <li>set it to 1 to search direct childs and all 1st order subchilds
332 * <li>set it to -1 for maximum recursion.
333 * </ul>
334 * @sa ONamedListView::find()
335 */
336 virtual ONamedListViewItem* find( int column, const QString& text, int recurse = -1 ) const;
337 virtual ONamedListViewItem* find( const QString& column, const QString& text, int recurse = -1 ) const;
307}; 338};
308 339
309 340
310#endif // OLISTVIEW_H 341#endif // OLISTVIEW_H