-rw-r--r-- | noncore/net/wellenreiter/cornucopia/README | 127 | ||||
-rw-r--r-- | noncore/net/wellenreiter/cornucopia/olistview.cpp | 151 | ||||
-rw-r--r-- | noncore/net/wellenreiter/cornucopia/olistview.h | 87 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/gui.pro | 2 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/mainwindow.cpp | 36 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/mainwindow.h | 1 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlist.cpp | 130 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlist.h | 77 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlistitem.cpp | 121 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/scanlistitem.h | 83 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 8 |
11 files changed, 578 insertions, 245 deletions
diff --git a/noncore/net/wellenreiter/cornucopia/README b/noncore/net/wellenreiter/cornucopia/README index 36a6954..486dc67 100644 --- a/noncore/net/wellenreiter/cornucopia/README +++ b/noncore/net/wellenreiter/cornucopia/README @@ -1,3 +1,124 @@ ---------------------------------------------------------------- -Dies ist ein Testballon für opielibs1.2 - Codename: Cornucopia ---------------------------------------------------------------- +/******************************************************************** +/* This is an overview of the opielibs 1.2 project +/********************************************************************/ + + Origin: opielibs is about creating classes to + * optimize Qt classes for the embedded environment + * provide sophisticated abstractions for developers + * provide complete documentation and working examples + * provide end users with a common look and feel + * reduce memory footprint through sharing code + * reduce possible bugs through reusing tested code + +-------------------------------------------------------- +1. General Overview +-------------------------------------------------------- + +Separation into the following libraries: + - libopiecore + - libopieui + - libopiepim + - libopienet + +1.1 Contents of libopiecore [ opiecore ] +-------------------------------------------------------- + + - oprocctrl + - oprocess + - odevice + - odevicebutton + + - oconfig + - oconfiggroupsaver + - ocompletionbase + - ocompletion + - ocomptreenodelist + - ocomptreenode + - ocompletionwrapper + - oglobal + - oglobalsettings + - osortableitem + - osortablevaluelist + +1.2 Contents of libopieui [ opieui ] +-------------------------------------------------------- + + - oapplication + + - ofiledialog + - colordialog + - oclickablelabel + - ocolorbutton + - colorpopupmenu + - otabinfo + - otabbar + - otabwidget + - ofontmenu + - ofontselector + - ofileview + - oticker + + - olistview + - olistviewitem + - oversatileview + - oversatileviewitem + - ocompletionbox + - olineedit + - ocombobox + - ohistorycombo + + - omessagebox + - odialogbase + + - todayconfigwidget (rather into opiepim?) + - orecurrancewidget (rather into opiepim?) + - otimepicker (rather into opiepim?) + +1.3 Contents of libopiepim [ opiepim ] +-------------------------------------------------------- + + - ocheckitem + - todoevent + - todoresource + - todayplugininterface + - todovcalresource + +1.4 Contents of libopiedb [ opiedb ] +-------------------------------------------------------- + + - tododb + - xmltree + +1.5 Contents of libopienet [ opienet ] +-------------------------------------------------------- + + <libmail stuff> + <libbend stuff> + <libftp stuff> + +-------------------------------------------------------- +2.0 Feature Description +-------------------------------------------------------- + +2.1 libopiecore + +... + +2.2 libopieui + +... + +2.2.x OListView, OListViewItem, OListViewFactory + +... + +2.3 libopiepim + +... + +2.4 libopiedb + +... + +2.5 libopienet + diff --git a/noncore/net/wellenreiter/cornucopia/olistview.cpp b/noncore/net/wellenreiter/cornucopia/olistview.cpp index 8bc59de..f2d3730 100644 --- a/noncore/net/wellenreiter/cornucopia/olistview.cpp +++ b/noncore/net/wellenreiter/cornucopia/olistview.cpp @@ -114,24 +114,100 @@ void OListView::setAlternateBackground( const QColor &c ) const QPen& OListView::columnSeparator() const { return m_columnSeparator; } void OListView::setColumnSeparator( const QPen& p ) { m_columnSeparator = p; repaint(); } +#ifndef QT_NO_DATASTREAM +void OListView::serializeTo( QDataStream& s ) const +{ + #warning Caution... the binary format is still under construction... + qDebug( "storing OListView..." ); + + // store number of columns and the labels + s << columns(); + for ( int i = 0; i < columns(); ++i ) + s << columnText( i ); + + // calculate the number of top-level items to serialize + int items = 0; + QListViewItem* item = firstChild(); + while ( item ) + { + item = item->nextSibling(); + items++; + } + + // store number of items and the items itself + s << items; + item = firstChild(); + for ( int i = 0; i < items; ++i ) + { + s << *static_cast<OListViewItem*>( item ); + item = item->nextSibling(); + } + + qDebug( "OListview stored." ); +} + +void OListView::serializeFrom( QDataStream& s ) +{ + #warning Caution... the binary format is still under construction... + qDebug( "loading OListView..." ); + + int cols; + s >> cols; + qDebug( "read number of columns = %d", cols ); + + while ( columns() < cols ) addColumn( QString::null ); + + for ( int i = 0; i < cols; ++i ) + { + QString coltext; + s >> coltext; + qDebug( "read text '%s' for column %d", (const char*) coltext, i ); + setColumnText( i, coltext ); + } + + int items; + s >> items; + qDebug( "read number of items = %d", items ); + + for ( int i = 0; i < items; ++i ) + { + OListViewItem* item = new OListViewItem( this ); + s >> *item; + } + + qDebug( "OListView loaded." ); + +} + +QDataStream& operator<<( QDataStream& s, const OListView& lv ) +{ + lv.serializeTo( s ); +} + +QDataStream& operator>>( QDataStream& s, OListView& lv ) +{ + lv.serializeFrom( s ); +} +#endif // QT_NO_DATASTREAM + //****************************** OListViewItem *********************************************************************** OListViewItem::OListViewItem(QListView *parent) : QListViewItem(parent) { init(); } OListViewItem::OListViewItem(QListViewItem *parent) : QListViewItem(parent) { init(); @@ -236,27 +312,96 @@ bool OListViewItem::isAlternate() /* if (!item.inherits( "OListViewItem" ) ) break; */ } } return m_odd; } void OListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) { QColorGroup _cg = cg; const QPixmap *pm = listView()->viewport()->backgroundPixmap(); if (pm && !pm->isNull()) { - _cg.setBrush(QColorGroup::Base, QBrush(backgroundColor(), *pm)); + _cg.setBrush( QColorGroup::Base, QBrush(backgroundColor(), *pm) ); p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() ); } else if ( isAlternate() ) { _cg.setColor( QColorGroup::Base, static_cast<OListView*>( listView() )->alternateBackground() ); } - QListViewItem::paintCell(p, _cg, column, width, alignment); + QListViewItem::paintCell( p, _cg, column, width, alignment ); - //FIXME: Use styling here? + //FIXME: Use styling here! const QPen& pen = static_cast<OListView*>( listView() )->columnSeparator(); p->setPen( pen ); p->drawLine( width-1, 0, width-1, height() ); } + +#ifndef QT_NO_DATASTREAM +void OListViewItem::serializeTo( QDataStream& s ) const +{ + #warning Caution... the binary format is still under construction... + qDebug( "storing OListViewItem..." ); + + // store item text + for ( int i = 0; i < listView()->columns(); ++i ) + { + s << text( i ); + } + + // calculate the number of children to serialize + int items = 0; + QListViewItem* item = firstChild(); + while ( item ) + { + item = item->nextSibling(); + items++; + } + + // store number of items and the items itself + s << items; + item = firstChild(); + for ( int i = 0; i < items; ++i ) + { + s << *static_cast<OListViewItem*>( item ); + item = item->nextSibling(); + } + + qDebug( "OListviewItem stored." ); +} +void OListViewItem::serializeFrom( QDataStream& s ) +{ + #warning Caution... the binary format is still under construction... + qDebug( "loading OListViewItem..." ); + + for ( int i = 0; i < listView()->columns(); ++i ) + { + QString coltext; + s >> coltext; + qDebug( "read text '%s' for column %d", (const char*) coltext, i ); + setText( i, coltext ); + } + + int items; + s >> items; + qDebug( "read number of items = %d", items ); + + for ( int i = 0; i < items; ++i ) + { + OListViewItem* item = new OListViewItem( this ); + s >> (*item); + } + + qDebug( "OListViewItem loaded." ); +} + +QDataStream& operator<<( QDataStream& s, const OListViewItem& lvi ) +{ + lvi.serializeTo( s ); +} + +QDataStream& operator>>( QDataStream& s, OListViewItem& lvi ) +{ + lvi.serializeFrom( s ); +} +#endif // QT_NO_DATASTREAM diff --git a/noncore/net/wellenreiter/cornucopia/olistview.h b/noncore/net/wellenreiter/cornucopia/olistview.h index 4b9e4b0..9df5500 100644 --- a/noncore/net/wellenreiter/cornucopia/olistview.h +++ b/noncore/net/wellenreiter/cornucopia/olistview.h @@ -24,32 +24,35 @@ -. .:....=;==+<; You should have received a copy of the GNU -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef OLISTVIEW_H #define OLISTVIEW_H -#include <qlistview.h> #include <qcolor.h> +#include <qlistview.h> #include <qpen.h> +#include <qdatastream.h> + +class OListViewFactory; /** - * A @ref QListView variant featuring visual enhancements - * like an alternate background for odd rows and an autostretch - * mode for the width of the widget. + * A @ref QListView variant featuring visual and functional enhancements + * like an alternate background for odd rows, an autostretch mode + * for the width of the widget ( >= Qt 3 only ) and persistence capabilities. * * @author Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> * @short OListView list/tree widget. */ class OListView: public QListView { public: /** * Constructor. * * The parameters @p parent and @p name are handled by * @ref QListView, as usual. @@ -103,31 +106,69 @@ void setColumnSeparator( const QPen &p ); /** * @return the alternate background color */ const QColor& alternateBackground() const; /** * @return the column separator pen */ const QPen& columnSeparator() const; + #ifndef QT_NO_DATASTREAM + /** + * serialize this object to a @ref QDataStream + * @param s the stream used to serialize this object. + */ + virtual void serializeTo( QDataStream& s ) const; + + /** + * serialize this object from a @ref QDataStream + * @param s the stream used to serialize this object. + */ + virtual void serializeFrom( QDataStream& s ); + #endif + + /** + * returns a factory for OListView classes + * creates one on the fly if it doesn't exist + * @return the XML Factory + */ + #ifndef QT_NO_XML + //OListViewFactory* Factory(); + #endif + private: QColor m_alternateBackground; bool m_fullWidth; QPen m_columnSeparator; - + #ifndef QT_NO_XML + //OListViewFactory* m_Factory; + #endif }; +#ifndef QT_NO_DATASTREAM +/** + * \relates QListView + * Writes a listview to the stream and returns a reference to the stream. + */ +QDataStream& operator<<( QDataStream& s, const OListView& lv ); +/** + * \relates QListView + * Reads a listview from the stream and returns a reference to the stream. + */ +QDataStream& operator>>( QDataStream& s, OListView& lv ); +#endif // QT_NO_DATASTREAM + //****************************** OListViewItem ****************************************************************** class OListViewItem: public QListViewItem { public: OListViewItem( QListView * parent ); OListViewItem( QListViewItem * parent ); OListViewItem( QListView * parent, QListViewItem * after ); OListViewItem( QListViewItem * parent, QListViewItem * after ); OListViewItem( QListView * parent, QString, QString = QString::null, @@ -137,32 +178,60 @@ class OListViewItem: public QListViewItem OListViewItem( QListViewItem * parent, QString, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null ); OListViewItem( QListView * parent, QListViewItem * after, QString, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null ); - + OListViewItem( QListViewItem * parent, QListViewItem * after, QString, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null ); - + virtual ~OListViewItem(); - + const QColor& backgroundColor(); bool isAlternate(); void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int alignment ); void init(); + #ifndef QT_NO_DATASTREAM + /** + * serialize this object to or from a @ref QDataStream + * @param s the stream used to serialize this object. + */ + virtual void serializeTo( QDataStream& s ) const; + + /** + * serialize this object to or from a @ref QDataStream + * @param s the stream used to serialize this object. + */ + virtual void serializeFrom( QDataStream& s ); + #endif + private: bool m_known; bool m_odd; }; -#endif +#ifndef QT_NO_DATASTREAM +/** + * \relates QListViewItem + * Writes a listview item and all subitems recursively to the stream + * and returns a reference to the stream. + */ +QDataStream& operator<<( QDataStream &s, const OListViewItem& lvi ); +/** + * \relates QListViewItem + * Reads a listview item from the stream and returns a reference to the stream. + */ +QDataStream& operator>>( QDataStream &s, OListViewItem& lvi ); +#endif // QT_NO_DATASTREAM + +#endif // OLISTVIEW_H diff --git a/noncore/net/wellenreiter/gui/gui.pro b/noncore/net/wellenreiter/gui/gui.pro index 6037661..8861a50 100644 --- a/noncore/net/wellenreiter/gui/gui.pro +++ b/noncore/net/wellenreiter/gui/gui.pro @@ -1,35 +1,33 @@ MOC_DIR = ./tmp OBJECTS_DIR = ./tmp DESTDIR = $(OPIEDIR)/bin TEMPLATE = app CONFIG = qt warn_on debug HEADERS = wellenreiterbase.h \ mainwindow.h \ wellenreiter.h \ - scanlistitem.h \ scanlist.h \ logwindow.h \ hexwindow.h \ configwindow.h \ wlan.h \ cardconfig.h \ manufacturers.h SOURCES = main.cpp \ mainwindow.cpp \ wellenreiterbase.cpp \ wellenreiter.cpp \ - scanlistitem.cpp \ scanlist.cpp \ logwindow.cpp \ hexwindow.cpp \ configwindow.cpp \ wlan.cpp \ cardconfig.cpp \ manufacturers.cpp INCLUDEPATH += $(OPIEDIR)/include ../ DEPENDPATH += $(OPIEDIR)/include ../ LIBS += -L. -lwellenreiter -lcornucopia INTERFACES = configbase.ui diff --git a/noncore/net/wellenreiter/gui/mainwindow.cpp b/noncore/net/wellenreiter/gui/mainwindow.cpp index e388fc5..0ef89d4 100644 --- a/noncore/net/wellenreiter/gui/mainwindow.cpp +++ b/noncore/net/wellenreiter/gui/mainwindow.cpp @@ -12,47 +12,55 @@ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include "configwindow.h" #include "logwindow.h" #include "mainwindow.h" #include "wellenreiter.h" #include "scanlist.h" #include <qcombobox.h> +#include <qdatastream.h> #include <qfile.h> #include <qiconset.h> #include <qmenubar.h> #include <qmessagebox.h> #include <qpopupmenu.h> #include <qstatusbar.h> #include <qtextstream.h> #include <qtoolbutton.h> #ifdef QWS #include <qpe/resource.h> #else #include "resource.h" #endif WellenreiterMainWindow::WellenreiterMainWindow( QWidget * parent, const char * name, WFlags f ) :QMainWindow( parent, name, f ) { cw = new WellenreiterConfigWindow( this ); mw = new Wellenreiter( this ); mw->setConfigWindow( cw ); setCentralWidget( mw ); + // setup application icon + + #ifndef QWS + setIcon( Resource::loadPixmap( "wellenreiter/appicon-trans" ) ); + setIconText( "Wellenreiter/X11" ); + #endif + // setup icon sets infoIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/InfoIcon" ) ); settingsIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/SettingsIcon" ) ); #ifdef QWS searchIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/SearchIcon" ) ); cancelIconSet = new QIconSet( Resource::loadPixmap( "wellenreiter/CancelIcon" ) ); #else startStopIconSet = new QIconSet(); startStopIconSet->setPixmap( Resource::loadPixmap( "wellenreiter/SearchIcon" ), QIconSet::Automatic, QIconSet::Normal, QIconSet::Off ); startStopIconSet->setPixmap( Resource::loadPixmap( "wellenreiter/CancelIcon" ), QIconSet::Automatic, QIconSet::Normal, QIconSet::On ); #endif @@ -90,29 +98,28 @@ WellenreiterMainWindow::WellenreiterMainWindow( QWidget * parent, const char * n // setup menu bar int id; QMenuBar* mb = menuBar(); QPopupMenu* fileSave = new QPopupMenu( mb ); fileSave->insertItem( "&Session", this, SLOT( fileSaveSession() ) ); fileSave->insertItem( "&Log", this, SLOT( fileSaveLog() ) ); QPopupMenu* fileLoad = new QPopupMenu( mb ); fileLoad->insertItem( "&Session", this, SLOT( fileLoadSession() ) ); - fileLoad->insertItem( "&Log", this, SLOT( fileLoadLog() ) ); + //fileLoad->insertItem( "&Log", this, SLOT( fileLoadLog() ) ); QPopupMenu* file = new QPopupMenu( mb ); id = file->insertItem( "&Load", fileLoad ); - file->setItemEnabled( id, false ); file->insertItem( "&Save", fileSave ); QPopupMenu* view = new QPopupMenu( mb ); view->insertItem( "&Configure..." ); QPopupMenu* sniffer = new QPopupMenu( mb ); sniffer->insertItem( "&Configure..." ); sniffer->insertSeparator(); QPopupMenu* demo = new QPopupMenu( mb ); demo->insertItem( "&Add something", this, SLOT( demoAddStations() ) ); @@ -176,25 +183,25 @@ WellenreiterMainWindow::~WellenreiterMainWindow() #ifdef QWS delete searchIconSet; delete cancelIconSet; #else delete startStopIconSet; #endif }; void WellenreiterMainWindow::demoAddStations() { mw->netView()->addNewItem( "managed", "Vanille", "00:00:20:EF:A6:43", true, 6, 80 ); - mw->netView()->addNewItem( "managed", "Vanille", "00:00:1c:EF:A6:23", true, 11, 10 ); + mw->netView()->addNewItem( "managed", "Vanille", "00:30:6D:EF:A6:23", true, 11, 10 ); mw->netView()->addNewItem( "adhoc", "ELAN", "00:A0:F8:E7:16:22", false, 3, 10 ); mw->netView()->addNewItem( "adhoc", "ELAN", "00:AA:01:E7:56:62", false, 3, 15 ); mw->netView()->addNewItem( "adhoc", "ELAN", "00:B0:8E:E7:56:E2", false, 3, 20 ); } void WellenreiterMainWindow::fileSaveLog() { const QString fname( "/tmp/log.txt" ); QFile f( fname ); if ( f.open(IO_WriteOnly) ) { QTextStream t( &f ); @@ -206,35 +213,54 @@ void WellenreiterMainWindow::fileSaveLog() { qDebug( "Problem saving log to file '%s'", (const char*) fname ); } } void WellenreiterMainWindow::fileSaveSession() { const QString fname( "/tmp/session.xml" ); QFile f( fname ); if ( f.open(IO_WriteOnly) ) { - QTextStream t( &f ); - mw->netView()->dump( t ); + QDataStream t( &f ); + t << *mw->netView(); f.close(); qDebug( "Saved session to file '%s'", (const char*) fname ); } else { qDebug( "Problem saving session to file '%s'", (const char*) fname ); } } +void WellenreiterMainWindow::fileLoadSession() +{ + const QString fname( "/tmp/session.xml" ); + QFile f( fname ); + + if ( f.open(IO_ReadOnly) ) + { + QDataStream t( &f ); + t >> *mw->netView(); + f.close(); + qDebug( "Loaded session from file '%s'", (const char*) fname ); + } + else + { + qDebug( "Problem loading session from file '%s'", (const char*) fname ); + } + +} + void WellenreiterMainWindow::closeEvent( QCloseEvent* e ) { if ( mw->isDaemonRunning() ) { QMessageBox::warning( this, "Wellenreiter/Opie", "Sniffing in progress!\nPlease stop sniffing before closing." ); e->ignore(); } else { QMainWindow::closeEvent( e ); } } diff --git a/noncore/net/wellenreiter/gui/mainwindow.h b/noncore/net/wellenreiter/gui/mainwindow.h index 8bfccf3..59f259d 100644 --- a/noncore/net/wellenreiter/gui/mainwindow.h +++ b/noncore/net/wellenreiter/gui/mainwindow.h @@ -42,15 +42,16 @@ class WellenreiterMainWindow: public QMainWindow const QIconSet* cancelIconSet; QToolButton* startStopButton; protected: virtual void closeEvent( QCloseEvent* ); public slots: void showConfigure(); void demoAddStations(); void fileSaveLog(); void fileSaveSession(); + void fileLoadSession(); }; #endif diff --git a/noncore/net/wellenreiter/gui/scanlist.cpp b/noncore/net/wellenreiter/gui/scanlist.cpp index cdc2c48..58a04fb 100644 --- a/noncore/net/wellenreiter/gui/scanlist.cpp +++ b/noncore/net/wellenreiter/gui/scanlist.cpp @@ -5,30 +5,28 @@ ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include "scanlist.h" -#include "scanlistitem.h" #include <assert.h> - #include "manufacturers.h" - +#include <qdatetime.h> #include <qtextstream.h> MScanListView::MScanListView( QWidget* parent, const char* name ) :OListView( parent, name ), _manufacturerdb( 0 ) { setFrameShape( QListView::StyledPanel ); setFrameShadow( QListView::Sunken ); addColumn( tr( "Net/Station" ) ); setColumnAlignment( 0, AlignLeft || AlignVCenter ); addColumn( tr( "B" ) ); @@ -41,46 +39,58 @@ MScanListView::MScanListView( QWidget* parent, const char* name ) setColumnAlignment( 4, AlignCenter ); addColumn( tr( "T" ) ); setColumnAlignment( 5, AlignCenter ); addColumn( tr( "Manufacturer" ) ); setColumnAlignment( 6, AlignCenter ); addColumn( tr( "First Seen" ) ); setColumnAlignment( 7, AlignCenter ); addColumn( tr( "Last Seen" ) ); setColumnAlignment( 8, AlignCenter ); setRootIsDecorated( true ); setAllColumnsShowFocus( true ); }; - + MScanListView::~MScanListView() { }; +void MScanListView::serializeTo( QDataStream& s) const +{ + qDebug( "serializing MScanListView" ); + OListView::serializeTo( s ); +} + +void MScanListView::serializeFrom( QDataStream& s) +{ + qDebug( "serializing MScanListView" ); + OListView::serializeFrom( s ); +} + void MScanListView::setManufacturerDB( ManufacturerDB* manufacturerdb ) { _manufacturerdb = manufacturerdb; } void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) { // FIXME: scanlistitem needs a proper encapsulation and not such a damn dealing with text(...) qDebug( "MScanList::addNewItem( %s / %s / %s [%d]", (const char*) type, (const char*) essid, (const char*) macaddr, channel ); - + // search, if we already have seen this net - + QString s; MScanListItem* network; MScanListItem* item = static_cast<MScanListItem*> ( firstChild() ); while ( item && ( item->text( 0 ) != essid ) ) { qDebug( "itemtext: %s", (const char*) item->text( 0 ) ); item = static_cast<MScanListItem*> ( item->itemBelow() ); } if ( item ) { // animate the item @@ -89,40 +99,40 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo const QPixmap* pixmap = item->pixmap( 0 ); const QPixmap* nextpixmap = ani2; if ( pixmap == ani1 ) nextpixmap = ani2; else if ( pixmap == ani2 ) nextpixmap = ani3; else if ( pixmap == ani3 ) nextpixmap = ani4; else if ( pixmap == ani4 ) nextpixmap = ani1; item->setPixmap( 0, *nextpixmap ); */ - + //qDebug( "current pixmap %d, next %d", pixmap, nextpixmap ); - + // we have already seen this net, check all childs if MAC exists network = item; item = static_cast<MScanListItem*> ( item->firstChild() ); assert( item ); // this shouldn't fail while ( item && ( item->text( 2 ) != macaddr ) ) { qDebug( "subitemtext: %s", (const char*) item->text( 2 ) ); item = static_cast<MScanListItem*> ( item->itemBelow() ); } - + if ( item ) { // we have already seen this item, it's a dupe #ifdef DEBUG qDebug( "%s is a dupe - ignoring...", (const char*) macaddr ); #endif item->receivedBeacon(); return; } } else { @@ -144,24 +154,110 @@ void MScanListView::addNewItem( QString type, QString essid, QString macaddr, bo if ( type == "managed" ) { s.sprintf( "(i) new AP in '%s' [%d]", (const char*) essid, channel ); } else { s.sprintf( "(i) new adhoc station in '%s' [%d]", (const char*) essid, channel ); } } -void MScanListView::dump( QTextStream& t ) const +#ifdef QWS +#include <qpe/resource.h> +#else +#include "resource.h" +#endif + +const int col_type = 0; +const int col_essid = 0; +const int col_sig = 1; +const int col_ap = 2; +const int col_channel = 3; +const int col_wep = 4; +const int col_traffic = 5; +const int col_manuf = 6; +const int col_firstseen = 7; +const int col_lastseen = 8; + +MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr, + bool wep, int channel, int signal ) + :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ), + _type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ), + _channel( channel ), _signal( signal ), _beacons( 0 ) { - qDebug( "dumping scanlist..." ); + qDebug( "creating scanlist item" ); + decorateItem( type, essid, macaddr, wep, channel, signal ); +} - QListViewItemIterator it( const_cast<MScanListView*>( this ) ); - for ( ; it.current(); ++it ) - { - static_cast<MScanListItem*>( it.current() )->dump( t ); - } +MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr, + bool wep, int channel, int signal ) + :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ) +{ + qDebug( "creating scanlist item" ); + decorateItem( type, essid, macaddr, wep, channel, signal ); +} - qDebug( "dump finished." ); +void MScanListItem::serializeTo( QDataStream& s ) const +{ + OListViewItem::serializeTo( s ); +} + +void MScanListItem::serializeFrom( QDataStream& s ) +{ + OListViewItem::serializeFrom( s ); } + +void MScanListItem::decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) +{ + qDebug( "decorating scanlist item %s / %s / %s [%d]", + (const char*) type, + (const char*) essid, + (const char*) macaddr, + channel ); + + // set icon for managed or adhoc mode + QString name; + name.sprintf( "wellenreiter/%s", (const char*) type ); + setPixmap( col_type, Resource::loadPixmap( name ) ); + + // set icon for wep (wireless encryption protocol) + if ( wep ) + setPixmap( col_wep, Resource::loadPixmap( "wellenreiter/cracked" ) ); //FIXME: rename the pixmap! + + // set channel and signal text + + if ( signal != -1 ) + setText( col_sig, QString::number( signal ) ); + if ( channel != -1 ) + setText( col_channel, QString::number( channel ) ); + + setText( col_firstseen, QTime::currentTime().toString() ); + //setText( col_lastseen, QTime::currentTime().toString() ); + + listView()->triggerUpdate(); + + this->type = type; + _type = type; + _essid = essid; + _macaddr = macaddr; + _channel = channel; + _beacons = 0; + _signal = 0; +} + +void MScanListItem::setManufacturer( const QString& manufacturer ) +{ + setText( col_manuf, manufacturer ); +} + +void MScanListItem::receivedBeacon() +{ + _beacons++; + #ifdef DEBUG + qDebug( "MScanListItem %s: received beacon #%d", (const char*) _macaddr, _beacons ); + #endif + setText( col_sig, QString::number( _beacons ) ); + setText( col_lastseen, QTime::currentTime().toString() ); +} + diff --git a/noncore/net/wellenreiter/gui/scanlist.h b/noncore/net/wellenreiter/gui/scanlist.h index f06f251..66c701b 100644 --- a/noncore/net/wellenreiter/gui/scanlist.h +++ b/noncore/net/wellenreiter/gui/scanlist.h @@ -23,24 +23,97 @@ class QString; class ManufacturerDB; class MScanListView: public OListView { Q_OBJECT public: MScanListView( QWidget* parent = 0, const char* name = 0 ); virtual ~MScanListView(); void setManufacturerDB( ManufacturerDB* manufacturerdb ); - void dump( QTextStream& t ) const; + + virtual void serializeTo( QDataStream& s ) const; + virtual void serializeFrom( QDataStream& s ); public slots: void addNewItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ); - + private: ManufacturerDB* _manufacturerdb; }; +//****************************** MScanListItem **************************************************************** + +class MScanListItem: public OListViewItem +{ + public: + MScanListItem::MScanListItem( QListView* parent, + QString type, + QString essid, + QString macaddr, + bool wep, + int channel, + int signal ); + + MScanListItem::MScanListItem( QListViewItem* parent, + QString type, + QString essid, + QString macaddr, + bool wep, + int channel, + int signal ); + + + protected: + virtual void decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ); + + public: + QString type; + + public: + //const QString& type() { return _type; }; + const QString& essid() { return _essid; }; + const QString& macaddr() { return _macaddr; }; + bool wep() { return _wep; }; + int channel() { return _channel; }; + int signal() { return _signal; }; + int beacons() { return _beacons; }; + + void setSignal( int signal ) { /* TODO */ }; + void receivedBeacon(); + + void setManufacturer( const QString& manufacturer ); + + virtual void serializeTo( QDataStream& s ) const; + virtual void serializeFrom( QDataStream& s ); + + private: + QString _type; + QString _essid; + QString _macaddr; + bool _wep; + int _channel; + int _signal; + int _beacons; + +}; + +//****************************** MScanListViewFactory **************************************************************** + +/* + +class MScanListViewFactory : public OListViewFactory +{ +public: + virtual QListView* listViewFactory(); + virtual QListViewItem* listViewItemFactory( QListView* lv ); + virtual QListViewItem* listViewItemFactory( QListViewItem* lvi ); + virtual void setColumnText( int depth, QListViewItem* lvi, int column, const QString& text ); + virtual void setCustomData( int depth, QListViewItem* lvi, const QString& text ); +} +*/ + #endif diff --git a/noncore/net/wellenreiter/gui/scanlistitem.cpp b/noncore/net/wellenreiter/gui/scanlistitem.cpp deleted file mode 100644 index 4aecd2b..0000000 --- a/noncore/net/wellenreiter/gui/scanlistitem.cpp +++ b/dev/null @@ -1,121 +0,0 @@ -/********************************************************************** -** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. -** -** This file is part of Opie Environment. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -**********************************************************************/ - -#include "scanlistitem.h" -#include <assert.h> -#include <qdatetime.h> -#include <qpixmap.h> - -#ifdef QWS -#include <qpe/resource.h> -#else -#include "resource.h" -#endif - -const int col_type = 0; -const int col_essid = 0; -const int col_sig = 1; -const int col_ap = 2; -const int col_channel = 3; -const int col_wep = 4; -const int col_traffic = 5; -const int col_manuf = 6; -const int col_firstseen = 7; -const int col_lastseen = 8; - -MScanListItem::MScanListItem( QListView* parent, QString type, QString essid, QString macaddr, - bool wep, int channel, int signal ) - :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ), - _type( type ), _essid( essid ), _macaddr( macaddr ), _wep( wep ), - _channel( channel ), _signal( signal ), _beacons( 0 ) -{ - qDebug( "creating scanlist item" ); - decorateItem( type, essid, macaddr, wep, channel, signal ); -} - -MScanListItem::MScanListItem( QListViewItem* parent, QString type, QString essid, QString macaddr, - bool wep, int channel, int signal ) - :OListViewItem( parent, essid, QString::null, macaddr, QString::null, QString::null ) -{ - qDebug( "creating scanlist item" ); - decorateItem( type, essid, macaddr, wep, channel, signal ); -} - -void MScanListItem::decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ) -{ - qDebug( "decorating scanlist item %s / %s / %s [%d]", - (const char*) type, - (const char*) essid, - (const char*) macaddr, - channel ); - - // set icon for managed or adhoc mode - QString name; - name.sprintf( "wellenreiter/%s", (const char*) type ); - setPixmap( col_type, Resource::loadPixmap( name ) ); - - // set icon for wep (wireless encryption protocol) - if ( wep ) - setPixmap( col_wep, Resource::loadPixmap( "wellenreiter/cracked" ) ); //FIXME: rename the pixmap! - - // set channel and signal text - - if ( signal != -1 ) - setText( col_sig, QString::number( signal ) ); - if ( channel != -1 ) - setText( col_channel, QString::number( channel ) ); - - setText( col_firstseen, QTime::currentTime().toString() ); - //setText( col_lastseen, QTime::currentTime().toString() ); - - listView()->triggerUpdate(); - - this->type = type; - _type = type; - _essid = essid; - _macaddr = macaddr; - _channel = channel; - _beacons = 0; - _signal = 0; -} - -void MScanListItem::setManufacturer( const QString& manufacturer ) -{ - setText( col_manuf, manufacturer ); -} - -void MScanListItem::receivedBeacon() -{ - _beacons++; - #ifdef DEBUG - qDebug( "MScanListItem %s: received beacon #%d", (const char*) _macaddr, _beacons ); - #endif - setText( col_sig, QString::number( _beacons ) ); - setText( col_lastseen, QTime::currentTime().toString() ); -} - -void MScanListItem::dump( QTextStream& t ) const -{ - qDebug( "dumping scanlistitem at <%d>", this ); - t << "<ITEM type=" << _type; - t << " ESSID='" << _essid; - t << "' MAC=" << _macaddr; - t << " WEP=" << _wep; - t << " CHANNEL=" << _channel; - t << " SIGNAL=" << _signal; - t << " BEACONS=" << _beacons; - t << ">\n"; -} - diff --git a/noncore/net/wellenreiter/gui/scanlistitem.h b/noncore/net/wellenreiter/gui/scanlistitem.h deleted file mode 100644 index 5f6ae40..0000000 --- a/noncore/net/wellenreiter/gui/scanlistitem.h +++ b/dev/null @@ -1,83 +0,0 @@ -/********************************************************************** -** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. -** -** This file is part of Opie Environment. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -**********************************************************************/ - -#ifndef SCANLISTITEM_H -#define SCANLISTITEM_H - -#include <cornucopia/olistview.h> - -#include <qtextstream.h> - -class QString; - -class MScanListItem: public OListViewItem -{ - public: - - MScanListItem::MScanListItem( QListView* parent, - QString type, - QString essid, - QString macaddr, - bool wep, - int channel, - int signal ); - - MScanListItem::MScanListItem( QListViewItem* parent, - QString type, - QString essid, - QString macaddr, - bool wep, - int channel, - int signal ); - - - protected: - - virtual void decorateItem( QString type, QString essid, QString macaddr, bool wep, int channel, int signal ); - - public: - - QString type; - - public: - - //const QString& type() { return _type; }; - const QString& essid() { return _essid; }; - const QString& macaddr() { return _macaddr; }; - bool wep() { return _wep; }; - int channel() { return _channel; }; - int signal() { return _signal; }; - int beacons() { return _beacons; }; - - void setSignal( int signal ) { /* TODO */ }; - void receivedBeacon(); - - void setManufacturer( const QString& manufacturer ); - - void dump( QTextStream& t ) const; - - private: - QString _type; - QString _essid; - QString _macaddr; - bool _wep; - int _channel; - int _signal; - int _beacons; - -}; - -#endif - diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index 1ccf971..dd8a365 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp @@ -114,29 +114,37 @@ Wellenreiter::Wellenreiter( QWidget* parent ) netview->setColumnWidthMode( 1, QListView::Manual ); if ( manufacturerdb ) netview->setManufacturerDB( manufacturerdb ); } Wellenreiter::~Wellenreiter() { // no need to delete child widgets, Qt does it all for us delete manufacturerdb; + + // X11-only - Hmm... Closing the socket here segfaults on exit, + // Maybe because the notifier still has a handle to it!? Seems not to + // occur on Qt/Embedded + + #ifdef QWS if ( daemon_fd != -1 ) { qDebug( "closing comm socket" ); close( daemon_fd ); } + #endif + } void Wellenreiter::setConfigWindow( WellenreiterConfigWindow* cw ) { configwindow = cw; } void Wellenreiter::handleMessage() { // FIXME: receive message and handle it qDebug( "received message from daemon." ); |