diff options
author | Mavridis Philippe <mavridisf@gmail.com> | 2021-02-22 14:53:23 +0200 |
---|---|---|
committer | Mavridis Philippe <mavridisf@gmail.com> | 2021-02-22 14:53:23 +0200 |
commit | d7f74c30f3433d999ea701e5cd547a1d3630f073 (patch) | |
tree | 49183ac6ed7ec139b191d573cb8292865ce02c8f | |
parent | f98f551d144bac29b92264f14af4b33f1a0eb2f6 (diff) | |
download | klamav-d7f74c30f3433d999ea701e5cd547a1d3630f073.tar.gz klamav-d7f74c30f3433d999ea701e5cd547a1d3630f073.zip |
CollectionSetup: made reusable.
This commit makes it possible to add multiple instances of the
CollectionSetup widget instances without the program crashing.
Signed-off-by: Mavridis Philippe <mavridisf@gmail.com>
-rw-r--r-- | src/directorylist.cpp | 97 | ||||
-rw-r--r-- | src/directorylist.h | 20 |
2 files changed, 57 insertions, 60 deletions
diff --git a/src/directorylist.cpp b/src/directorylist.cpp index c24d552..aae909d 100644 --- a/src/directorylist.cpp +++ b/src/directorylist.cpp @@ -38,14 +38,9 @@ using Collection::Item; using Collection::DeviceItem; -CollectionSetup* CollectionSetup::s_instance; - - CollectionSetup::CollectionSetup( TQWidget *parent, bool recursive, bool fullMode, TQStringList dirs ) : TQVBox( parent ) { - s_instance = this; - m_dirs = dirs; // (new TQLabel( i18n( @@ -70,9 +65,9 @@ CollectionSetup::CollectionSetup( TQWidget *parent, bool recursive, bool fullMod m_view->addColumn( TQString::null ); m_view->setRootIsDecorated( true ); reinterpret_cast<TQWidget*>(m_view->header())->hide(); - new Item( m_view, i18n( "System Folder" ), "/", "folder_red" ); - new Item( m_view, i18n( "Home Folder" ), TQDir::homeDirPath(), "folder_home" ); - if( fullMode ) new DeviceItem( m_view ); + new Item( m_view, this, i18n( "System Folder" ), "/", "folder_red" ); + new Item( m_view, this, i18n( "Home Folder" ), TQDir::homeDirPath(), "folder_home" ); + if( fullMode ) new DeviceItem( m_view, this); setSpacing( 6 ); } @@ -86,12 +81,13 @@ void CollectionSetup::slotRecursiveToggled(bool on) ////////////////////////////////////////////////////////////////////////////////////////// // CLASS Item ////////////////////////////////////////////////////////////////////////////////////////// -Item::Item( TQListView *parent , const TQString &name, const TQString &path, const TQString &icon ) +Item::Item( TQListView *parent, CollectionSetup *collection, const TQString &name, const TQString &path, const TQString &icon ) : TQCheckListItem( parent, name, TQCheckListItem::CheckBox ) , m_lister( true ) , m_url( "file:" + path ) , m_listed( false ) { + collectionSetup = collection; m_lister.setDirOnlyMode( true ); m_lister.setShowingDotFiles( true ); connect( &m_lister, SIGNAL(newItems( const KFileItemList& )), SLOT(newItems( const KFileItemList& )) ); @@ -105,12 +101,13 @@ Item::Item( TQListView *parent , const TQString &name, const TQString &path, co } -Item::Item( TQListViewItem *parent, const KURL &url ) +Item::Item( TQListViewItem *parent, CollectionSetup *collection, const KURL &url ) : TQCheckListItem( parent, url.fileName(), TQCheckListItem::CheckBox ) , m_lister( true ) , m_url( url ) , m_listed( false ) { + collectionSetup = collection; m_lister.setDirOnlyMode( true ); m_lister.setShowingDotFiles( true ); setText( 1, url.fileName() ); @@ -151,28 +148,28 @@ Item::setOpen( bool b ) void Item::stateChange( bool b ) { - if( CollectionSetup::instance()->recursive() ) + if( collectionSetup->recursive() ) for( TQListViewItem *item = firstChild(); item; item = item->nextSibling() ) static_cast<TQCheckListItem*>(item)->TQCheckListItem::setOn( b ); // Update folder list - TQStringList::Iterator it = CollectionSetup::instance()->m_dirs.find( m_url.path() ); + TQStringList::Iterator it = collectionSetup->m_dirs.find( m_url.path() ); if ( isOn() ) { - if ( it == CollectionSetup::instance()->m_dirs.end() ) + if ( it == collectionSetup->m_dirs.end() ) { - CollectionSetup::instance()->m_dirs << m_url.path(); - CollectionSetup::instance()->m_refcount[ m_url.path() ] = 1; + collectionSetup->m_dirs << m_url.path(); + collectionSetup->m_refcount[ m_url.path() ] = 1; } else - CollectionSetup::instance()->m_refcount[ m_url.path() ]++; + collectionSetup->m_refcount[ m_url.path() ]++; } - else if ( CollectionSetup::instance()->m_refcount.find( m_url.path() ) != CollectionSetup::instance()->m_refcount.end() ) + else if ( collectionSetup->m_refcount.find( m_url.path() ) != collectionSetup->m_refcount.end() ) { - if ( --CollectionSetup::instance()->m_refcount[ m_url.path() ] == 0 ) - { - CollectionSetup::instance()->m_dirs.erase( it ); - CollectionSetup::instance()->m_refcount.remove( m_url.path() ); - } + if ( --collectionSetup->m_refcount[ m_url.path() ] == 0 ) + { + collectionSetup->m_dirs.erase( it ); + collectionSetup->m_refcount.remove( m_url.path() ); + } } // Redraw parent items @@ -193,10 +190,10 @@ Item::newItems( const KFileItemList &list ) //SLOT { for( KFileItemListIterator it( list ); *it; ++it ) { - Item *item = new Item( this, (*it)->url() ); + Item *item = new Item( this, collectionSetup, (*it)->url() ); - item->setOn( CollectionSetup::instance()->recursive() && isOn() || - CollectionSetup::instance()->m_dirs.contains( item->fullPath() ) ); + item->setOn( collectionSetup->recursive() && isOn() || + collectionSetup->m_dirs.contains( item->fullPath() ) ); item->setPixmap( 0, (*it)->pixmap( TDEIcon::SizeSmall ) ); } @@ -209,13 +206,13 @@ Item::paintCell( TQPainter * p, const TQColorGroup & cg, int column, int width, bool dirty = false; // Figure out if a child folder is activated - for ( uint i = 0; i < CollectionSetup::instance()->m_dirs.count(); i++ ) + for ( uint i = 0; i < collectionSetup->m_dirs.count(); i++ ) { - if ( CollectionSetup::instance()->m_dirs[ i ] == m_url.path() ) + if ( collectionSetup->m_dirs[ i ] == m_url.path() ) { dirty = true; } - else if ( CollectionSetup::instance()->m_dirs[ i ].startsWith( m_url.path() ) ) + else if ( collectionSetup->m_dirs[ i ].startsWith( m_url.path() ) ) dirty = true; } @@ -232,11 +229,12 @@ Item::paintCell( TQPainter * p, const TQColorGroup & cg, int column, int width, // CLASS DeviceItem ////////////////////////////////////////////////////////////////////////////////////////// -DeviceItem::DeviceItem( TQListView *parent ) +DeviceItem::DeviceItem( TQListView *parent, CollectionSetup *collection ) : TQCheckListItem( parent, i18n("Devices"), TQCheckListItem::CheckBox ) , m_lister( true ) , m_listed( false ) { + collectionSetup = collection; m_lister.setDirOnlyMode( true ); connect( &m_lister, SIGNAL(newItems( const KFileItemList& )), SLOT(newItems( const KFileItemList& )) ); @@ -254,12 +252,13 @@ DeviceItem::DeviceItem( TQListView *parent ) } -DeviceItem::DeviceItem( TQListViewItem *parent, const TQString &name, const KURL &url ) +DeviceItem::DeviceItem( TQListViewItem *parent, CollectionSetup *collection, const TQString &name, const KURL &url ) : TQCheckListItem( parent, name, TQCheckListItem::CheckBox ) , m_lister( true ) , m_url( url ) , m_listed( false ) { + collectionSetup = collection; if (!kapp->dcopClient()->isAttached()) kapp->dcopClient()->attach(); @@ -329,31 +328,31 @@ DeviceItem::setOpen( bool b ) void DeviceItem::stateChange( bool b ) { - if( CollectionSetup::instance()->recursive() ) + if( collectionSetup->recursive() ) for( TQListViewItem *item = firstChild(); item; item = item->nextSibling() ) static_cast<TQCheckListItem*>(item)->TQCheckListItem::setOn( b ); if (text(1) != "devices") { // Update folder list - TQStringList::Iterator it = CollectionSetup::instance()->m_dirs.find( text(1) ); + TQStringList::Iterator it = collectionSetup->m_dirs.find( text(1) ); if ( isOn() ) { - if ( it == CollectionSetup::instance()->m_dirs.end() ) + if ( it == collectionSetup->m_dirs.end() ) { - CollectionSetup::instance()->m_dirs << text(1); + collectionSetup->m_dirs << text(1); mountDevice(text(2)); - CollectionSetup::instance()->m_refcount[text(1)] = 1; + collectionSetup->m_refcount[text(1)] = 1; } else - CollectionSetup::instance()->m_refcount[text(1)]++; + collectionSetup->m_refcount[text(1)]++; } - else if ( CollectionSetup::instance()->m_refcount.find(text(1)) != CollectionSetup::instance()->m_refcount.end() ) + else if ( collectionSetup->m_refcount.find(text(1)) != collectionSetup->m_refcount.end() ) { - if ( --CollectionSetup::instance()->m_refcount[text(1)] == 0 ) + if ( --collectionSetup->m_refcount[text(1)] == 0 ) { - CollectionSetup::instance()->m_dirs.erase( it ); - CollectionSetup::instance()->m_refcount.remove(text(1)); + collectionSetup->m_dirs.erase( it ); + collectionSetup->m_refcount.remove(text(1)); } } } @@ -378,10 +377,10 @@ DeviceItem::newItems( const KFileItemList &list ) //SLOT { kdDebug() << (*it)->name() << " " << (*it)->url() << " " << (*it)->text() << endl; if (this->listView()->findItem((*it)->name(),0) == 0){ - DeviceItem *item = new DeviceItem( this, (*it)->name(), (*it)->url() ); + DeviceItem *item = new DeviceItem( this, collectionSetup, (*it)->name(), (*it)->url() ); - item->setOn( CollectionSetup::instance()->recursive() && isOn() || - CollectionSetup::instance()->m_dirs.contains( item->fullPath() ) ); + item->setOn( collectionSetup->recursive() && isOn() || + collectionSetup->m_dirs.contains( item->fullPath() ) ); item->setPixmap( 0, (*it)->pixmap( TDEIcon::SizeSmall ) ); } @@ -400,13 +399,13 @@ DeviceItem::paintCell( TQPainter * p, const TQColorGroup & cg, int column, int w if (text(1) != "devices") { // Figure out if a child folder is activated - for ( uint i = 0; i < CollectionSetup::instance()->m_dirs.count(); i++ ) + for ( uint i = 0; i < collectionSetup->m_dirs.count(); i++ ) { - if ( CollectionSetup::instance()->m_dirs[i] == text(1) ) + if ( collectionSetup->m_dirs[i] == text(1) ) { dirty = true; } - else if ( CollectionSetup::instance()->m_dirs[i].startsWith( text(1) + "/" ) ) + else if ( collectionSetup->m_dirs[i].startsWith( text(1) + "/" ) ) dirty = true; } @@ -416,14 +415,14 @@ DeviceItem::paintCell( TQPainter * p, const TQColorGroup & cg, int column, int w for( TQListViewItem *item = firstChild(); item; item = item->nextSibling() ) { DeviceItem *itm = dynamic_cast<DeviceItem*>(item); - for ( uint i = 0; i < CollectionSetup::instance()->m_dirs.count(); i++ ) + for ( uint i = 0; i < collectionSetup->m_dirs.count(); i++ ) { - if ( CollectionSetup::instance()->m_dirs[i] == itm->fullPath() ) + if ( collectionSetup->m_dirs[i] == itm->fullPath() ) { dirty = true; break; } - else if ( CollectionSetup::instance()->m_dirs[i].startsWith( itm->fullPath() ) ) + else if ( collectionSetup->m_dirs[i].startsWith( itm->fullPath() ) ) { dirty = true; break; diff --git a/src/directorylist.h b/src/directorylist.h index 3aaaf0b..79f3b9c 100644 --- a/src/directorylist.h +++ b/src/directorylist.h @@ -37,8 +37,6 @@ Q_OBJECT friend class Collection::Item; public: - static CollectionSetup* instance() { return s_instance; } - CollectionSetup( TQWidget *parent, bool recursive, bool fullMode = true, TQStringList dirs = TQStringList() ); TQStringList dirs() const { return m_dirs; } @@ -59,8 +57,6 @@ public slots: void slotRecursiveToggled(bool on); private: - static CollectionSetup* s_instance; - TQListView *m_view; bool m_recursive; TQCheckBox *m_monitor; @@ -74,11 +70,11 @@ class Item : public TQObject, public TQCheckListItem { Q_OBJECT public: - Item( TQListView *parent, const TQString &name, const TQString &path, const TQString &icon=TQString::null ); - Item( TQListViewItem *parent, const KURL &url ); + Item( TQListView *parent, CollectionSetup *collection, const TQString &name, const TQString &path, const TQString &icon=TQString::null ); + Item( TQListViewItem *parent, CollectionSetup *collection, const KURL &url ); TQCheckListItem *parent() const { return (TQCheckListItem*)TQListViewItem::parent(); } - bool isDisabled() const { return CollectionSetup::instance()->recursive() && parent() && parent()->isOn(); } + bool isDisabled() const { return collectionSetup->recursive() && parent() && parent()->isOn(); } TQString fullPath() const; void setOpen( bool b ); // reimpl. @@ -91,6 +87,7 @@ public slots: void completed() { if( childCount() == 0 ) { setExpandable( false ); repaint(); } } private: + CollectionSetup *collectionSetup; KDirLister m_lister; KURL m_url; bool m_listed; @@ -101,11 +98,11 @@ class DeviceItem : public TQObject, public TQCheckListItem { Q_OBJECT public: - DeviceItem( TQListView *parent ); - DeviceItem( TQListViewItem *parent, const TQString &name, const KURL &url ); + DeviceItem( TQListView *parent, CollectionSetup *collection ); + DeviceItem( TQListViewItem *parent, CollectionSetup *collection, const TQString &name, const KURL &url ); TQCheckListItem *parent() const { return (TQCheckListItem*)TQListViewItem::parent(); } - bool isDisabled() const { return CollectionSetup::instance()->recursive() && parent() && parent()->isOn(); } + bool isDisabled() const { return collectionSetup->recursive() && parent() && parent()->isOn(); } TQString fullPath() const; void setOpen( bool b ); // reimpl. @@ -116,8 +113,9 @@ class DeviceItem : public TQObject, public TQCheckListItem public slots: void newItems( const KFileItemList& ); void completed() { if( childCount() == 0 ) { setExpandable( false ); repaint(); } } - private: + private: void mountDevice(const TQString & device); + CollectionSetup *collectionSetup; KDirLister m_lister; KURL m_url; bool m_listed; |