[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: extragear/multimedia/amarok/src
From: Ian Monroe <ian.monroe () gmail ! com>
Date: 2009-02-21 14:52:00
Message-ID: 1235227920.290879.5960.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 929528 by ianmonroe:
*enable foreach for the SmartPointerList
*use templates so you don't need casting
M +1 -1 CMakeLists.txt
M +3 -3 GlobalCurrentTrackActions.cpp
M +1 -1 GlobalCurrentTrackActions.h
M +100 -16 SmartPointerList.cpp
M +45 -8 SmartPointerList.h
M +6 -6 Systray.cpp
M +1 -1 Systray.h
M +5 -13 widgets/MainToolbar.cpp
M +1 -1 widgets/MainToolbar.h
--- trunk/extragear/multimedia/amarok/src/CMakeLists.txt #929527:929528
@@ -515,7 +515,7 @@
MountPointManager.cpp
PaletteHandler.cpp
PopupDropperFactory.cpp
- SmartPointerList.cpp
+ #SmartPointerList.cpp don't include this file, its a template!
Systray.cpp
widgets/hintlineedit.cpp
widgets/kdatecombo.cpp
--- trunk/extragear/multimedia/amarok/src/GlobalCurrentTrackActions.cpp \
#929527:929528 @@ -43,7 +43,7 @@
void GlobalCurrentTrackActions::addAction( QAction * action )
{
- m_actions.addPointer( action );
+ m_actions.append( action );
}
QList< QAction * > GlobalCurrentTrackActions::actions()
@@ -52,8 +52,8 @@
QList<QAction*> validActions;
- for( int i = 0; i < m_actions.size(); i++ )
- validActions.append( (QAction*) m_actions[i] );
+ foreach( QObject* action, m_actions )
+ validActions.append( (QAction*) action );
return validActions;
}
--- trunk/extragear/multimedia/amarok/src/GlobalCurrentTrackActions.h #929527:929528
@@ -50,7 +50,7 @@
GlobalCurrentTrackActions();
~GlobalCurrentTrackActions();
- SmartPointerList m_actions;
+ SmartPointerList<QAction*> m_actions;
};
#endif
--- trunk/extragear/multimedia/amarok/src/SmartPointerList.cpp #929527:929528
@@ -1,5 +1,6 @@
/***************************************************************************
* Copyright (c) 2009 Mark Kretschmann <kretschmann@kde.org> *
+ * (c) 2009 Ian Monroe <ian@monroe.nu> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
@@ -17,45 +18,128 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#include "SmartPointerList.h"
+//!!! this file is included into SmartPointerList.h !!!
#include "Debug.h"
+template<typename T>
+SmartPointerList<T>::SmartPointerList()
+ : QList<T>()
+ , m_remover( new SmartPointerListRemover<T>( this ) )
+ , m_ownsRemover( true )
+{
+}
-SmartPointerList::SmartPointerList( QObject* parent )
- : QObject( parent )
+template<typename T>
+SmartPointerList<T>::SmartPointerList( const SmartPointerList<T>& that )
+ : QList<T>( that )
+ , m_remover( that.m_remover )
+ , m_ownsRemover( false )
{
- DEBUG_BLOCK
}
-SmartPointerList::~SmartPointerList()
+template<typename T>
+SmartPointerList<T>::~SmartPointerList()
{
- DEBUG_BLOCK
+ if( m_remover && m_ownsRemover )
+ {
+ m_remover->deleteLater();
+ }
}
-
+template<typename T>
void
-SmartPointerList::addPointer( QObject* pointer )
+SmartPointerList<T>::append( const T& pointer )
{
DEBUG_BLOCK
debug() << "Adding Pointer: " << pointer;
debug() << "Current size of list: " << size();
-
- connect( pointer, SIGNAL( destroyed( QObject* ) ), SLOT( removePointer( QObject* \
) ) );
- append( pointer );
+ if( m_remover )
+ QObject::connect( pointer, SIGNAL( destroyed( QObject* ) ), m_remover, \
SLOT(removePointer(QObject*)) ); + else
+ warning() << "The remover has been deleted.";
+ QList<T>::append( pointer );
}
+template<typename T>
+SmartPointerListRemover<T>::SmartPointerListRemover( QList<T>* list )
+ : QObject( 0 )
+ , m_list( list )
+{
+}
+
+template<typename T>
+SmartPointerListRemover<T>::~SmartPointerListRemover()
+{
+}
+
+template<typename T>
void
-SmartPointerList::removePointer( QObject* pointer ) // SLOT
+SmartPointerListRemover<T>::removePointer( QObject* pointer ) // SLOT
{
DEBUG_BLOCK
+ m_list->removeAll( qobject_cast<T>( pointer ) );
+}
- debug() << "Current size of list: " << size();
+//moc doesn't like templates
+//the following is just a copy-and-paste out of a Qt 4.5 moc,
+//adapted to templates
- removeAll( pointer );
-}
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_SmartPointerListRemover[] = {
+ // content:
+ 2, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 1, 12, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
-#include "SmartPointerList.moc"
+ // slots: signature, parameters, type, tag, flags
+ 33, 25, 24, 24, 0x0a,
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_SmartPointerListRemover[] = {
+ "SmartPointerListRemover\0\0pointer\0"
+ "removePointer(QObject*)\0"
+};
+template<typename T>
+const QMetaObject SmartPointerListRemover<T>::staticMetaObject = {
+ { &QObject::staticMetaObject, qt_meta_stringdata_SmartPointerListRemover,
+ qt_meta_data_SmartPointerListRemover, 0 }
+};
+template<typename T>
+const QMetaObject *SmartPointerListRemover<T>::metaObject() const
+{
+ return &staticMetaObject;
+}
+template<typename T>
+void *SmartPointerListRemover<T>::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_SmartPointerListRemover))
+ return static_cast<void*>(const_cast< SmartPointerListRemover*>(this));
+ return QObject::qt_metacast(_clname);
+}
+template<typename T>
+int SmartPointerListRemover<T>::qt_metacall(QMetaObject::Call _c, int _id, void \
**_a) +{
+ _id = QObject::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ switch (_id) {
+ case 0: removePointer((*reinterpret_cast< QObject*(*)>(_a[1]))); break;
+ default: ;
+ }
+ _id -= 1;
+ }
+ return _id;
+}
+QT_END_MOC_NAMESPACE
+
--- trunk/extragear/multimedia/amarok/src/SmartPointerList.h #929527:929528
@@ -1,5 +1,6 @@
/***************************************************************************
* Copyright (c) 2009 Mark Kretschmann <kretschmann@kde.org> *
+ * (c) 2009 Ian Monroe <ian@monroe.nu> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
@@ -22,25 +23,61 @@
#include <QList> // baseclass
#include <QObject> // baseclass
+#include <QPointer>
+#include "amarok_export.h"
+
+template<typename T>
+class SmartPointerListRemover;
+
+
/**
A QList for storing pointers to QObjects, that automatically removes the \
pointers when objects are deleted. @author Mark Kretschmann <kretschmann@kde.org>
*/
-class SmartPointerList : public QObject, public QList<QObject*>
+template<typename T>
+class AMAROK_EXPORT SmartPointerList : private QList<T>
{
- Q_OBJECT
+ public:
+ SmartPointerList();
+ SmartPointerList( const SmartPointerList<T>& ); //only use for temp vars
+ ~SmartPointerList();
+ void append( const T& pointer );
-public:
- SmartPointerList( QObject* parent = 0 );
- ~SmartPointerList();
+ using QList<T>::count;
+ using QList<T>::size;
+ using QList<T>::const_iterator;
+ using QList<T>::begin;
+ using QList<T>::end;
+ using QList<T>::at;
+ using QList<T>::value;
+
+ using QList<T>::clear; //no reason to bother disconnecting
+ private:
+ QPointer<SmartPointerListRemover<T> > m_remover;
+ bool m_ownsRemover; //under the theory that copy constructors are used in
+ //'foreach' constructs and are quite temporary
+};
- void addPointer( QObject* pointer );
+template<typename T>
+class SmartPointerListRemover : public QObject
+{
+ public: //Q_OBJECT
+ static const QMetaObject staticMetaObject;
+ virtual const QMetaObject *metaObject() const;
+ virtual void *qt_metacast(const char *);
+ virtual int qt_metacall(QMetaObject::Call, int, void **);
-protected Q_SLOTS:
- void removePointer( QObject* pointer );
+ public:
+ SmartPointerListRemover( QList<T>* list );
+ ~SmartPointerListRemover();
+ public Q_SLOTS:
+ void removePointer( QObject* pointer );
+ private:
+ QList<T>* m_list;
};
+#include "SmartPointerList.cpp"
#endif
--- trunk/extragear/multimedia/amarok/src/Systray.cpp #929527:929528
@@ -398,15 +398,15 @@
void
Amarok::TrayIcon::setupMenu()
{
- for( int i = 0; i < m_extraActions.size(); i ++ )
- contextMenu()->removeAction( (QAction*) m_extraActions[i] );
+ foreach( QAction* action, m_extraActions )
+ contextMenu()->removeAction( action );
if( !m_track )
return;
m_extraActions.clear();
foreach( QAction *action, The::globalCurrentTrackActions()->actions() )
- m_extraActions.addPointer( action );
+ m_extraActions.append( action );
if ( m_track->hasCapabilityInterface( Meta::Capability::CurrentTrackActions ) )
{
@@ -415,7 +415,7 @@
{
QList<PopupDropperAction *> currentTrackActions = cac->customActions();
foreach( PopupDropperAction *action, currentTrackActions )
- m_extraActions.addPointer( action );
+ m_extraActions.append( action );
}
}
@@ -425,8 +425,8 @@
contextMenu()->removeAction( actionCollection()->action( "file_quit" ) );
contextMenu()->removeAction( actionCollection()->action( "minimizeRestore" ) \
);
- for( int i = 0; i < m_extraActions.size(); i ++ )
- contextMenu()->addAction( (QAction*) m_extraActions[i] );
+ foreach( QAction* action, m_extraActions )
+ contextMenu()->addAction( action );
contextMenu()->addSeparator();
--- trunk/extragear/multimedia/amarok/src/Systray.h #929527:929528
@@ -68,7 +68,7 @@
QPixmap m_baseIcon, m_grayedIcon, m_icon;
QPixmap m_playOverlay, m_pauseOverlay;
- SmartPointerList m_extraActions;
+ SmartPointerList<QAction*> m_extraActions;
};
}
--- trunk/extragear/multimedia/amarok/src/widgets/MainToolbar.cpp #929527:929528
@@ -125,12 +125,8 @@
void MainToolbar::handleAddActions()
{
-#if 0
- foreach( QObject* action, m_additionalActions )
- m_addControlsToolbar->removeAction( (QAction*) action );
-#endif
- for( int i = 0; i < m_additionalActions.size(); i++ )
- m_addControlsToolbar->removeAction( (QAction*) m_additionalActions[i] );
+ foreach( QAction* action, m_additionalActions )
+ m_addControlsToolbar->removeAction( action );
m_additionalActions.clear();
@@ -147,7 +143,7 @@
{
QList<PopupDropperAction *> currentTrackActions = cac->customActions();
foreach( PopupDropperAction *action, currentTrackActions )
- m_additionalActions.addPointer( action );
+ m_additionalActions.append( action );
m_addControlsToolbar->adjustSize();
@@ -156,12 +152,8 @@
}
}
- for( int i = 0; i < m_additionalActions.size(); i++ )
- m_addControlsToolbar->addAction( (QAction*) m_additionalActions[i] );
-#if 0
- foreach( QObject* action, m_additionalActions )
- m_addControlsToolbar->addAction( (QAction*) action );
-#endif
+ foreach( QAction* action, m_additionalActions )
+ m_addControlsToolbar->addAction( action );
repaint ( 0, 0, -1, -1 ); // make sure that the add info area is shown or hidden \
at once. }
--- trunk/extragear/multimedia/amarok/src/widgets/MainToolbar.h #929527:929528
@@ -64,7 +64,7 @@
int m_addActionsOffsetX;
bool m_ignoreCache;
- SmartPointerList m_additionalActions;
+ SmartPointerList<QAction*> m_additionalActions;
};
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic