split Device class to allow keeping download state

right now there's just one object for each Device type througout the whole
app. This forbids keeping actual state in the Device object during
download/cleanup.

This patch puts the list of supported Devices into a seperate class.
Actual Device objects are now created dynamically.

This is necessary for the upcoming Download changes.
This commit is contained in:
Rainer Clasen
2011-07-22 00:15:24 +02:00
parent 39e57b93fe
commit dbfbe50df6
9 changed files with 128 additions and 50 deletions

View File

@@ -18,7 +18,9 @@
#include "Device.h"
typedef QMap<QString,Device*> DevicesMap;
#define tr(s) QObject::tr(s)
typedef QMap<QString,DevicesPtr> DevicesMap;
static DevicesMap *devicesPtr;
@@ -26,28 +28,34 @@ inline DevicesMap &
devices()
{
if (devicesPtr == NULL)
devicesPtr = new QMap<QString,Device*>;
devicesPtr = new QMap<QString,DevicesPtr>;
return *devicesPtr;
}
Device::~Device()
{
if( dev->isOpen() )
dev->close();
}
QList<QString>
Device::deviceTypes()
Devices::typeNames()
{
return devices().keys();
}
Device &
Device::device(const QString &deviceType)
DevicesPtr
Devices::getType(const QString &deviceTypeName )
{
assert(devices().contains(deviceType));
return *devices().value(deviceType);
assert(devices().contains(deviceTypeName));
return devices().value(deviceTypeName);
}
bool
Device::addDevice(const QString &deviceType, Device *device)
Devices::addType(const QString &deviceTypeName, DevicesPtr p )
{
assert(!devices().contains(deviceType));
devices().insert(deviceType, device);
assert(!devices().contains(deviceTypeName));
devices().insert(deviceTypeName, p);
return true;
}