Files
@ r9859:8c15dba58099
Branch filter:
Location: cpp/openttd-patchpack/source/src/driver.h
r9859:8c15dba58099
2.0 KiB
text/x-c
(svn r14004) -Codechange: Clean of drop down lists.
Move empty item drawing to base ListItem Draw() function.
Remove String() from base class.
Pass correct width to Draw().
Move empty item drawing to base ListItem Draw() function.
Remove String() from base class.
Pass correct width to Draw().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | /* $Id$ */
/** @file driver.h Base for all drivers (video, sound, music, etc). */
#ifndef DRIVER_H
#define DRIVER_H
#include "debug.h"
#include "core/enum_type.hpp"
#include "string_func.h"
#include <map>
bool GetDriverParamBool(const char * const *parm, const char *name);
int GetDriverParamInt(const char * const *parm, const char *name, int def);
class Driver {
public:
virtual const char *Start(const char * const *parm) = 0;
virtual void Stop() = 0;
virtual ~Driver() { }
enum Type {
DT_BEGIN = 0,
DT_SOUND = 0,
DT_MUSIC,
DT_VIDEO,
DT_END,
};
};
DECLARE_POSTFIX_INCREMENT(Driver::Type);
class DriverFactoryBase {
private:
Driver::Type type;
const char *name;
int priority;
struct StringCompare {
bool operator () (const char *a, const char *b) const
{
return strcmp(a, b) < 0;
}
};
typedef std::map<const char *, DriverFactoryBase *, StringCompare> Drivers;
static Drivers &GetDrivers()
{
static Drivers &s_drivers = *new Drivers();
return s_drivers;
}
static Driver **GetActiveDriver(Driver::Type type)
{
static Driver *s_driver[3] = { NULL, NULL, NULL };
return &s_driver[type];
}
static const char *GetDriverTypeName(Driver::Type type)
{
static const char *driver_type_name[] = { "sound", "music", "video" };
return driver_type_name[type];
}
protected:
void RegisterDriver(const char *name, Driver::Type type, int priority);
public:
DriverFactoryBase() :
name(NULL)
{}
virtual ~DriverFactoryBase();
/** Shuts down all active drivers
*/
static void ShutdownDrivers()
{
for (Driver::Type dt = Driver::DT_BEGIN; dt < Driver::DT_END; dt++) {
Driver *driver = *GetActiveDriver(dt);
if (driver != NULL) driver->Stop();
}
}
static const Driver *SelectDriver(const char *name, Driver::Type type);
static char *GetDriversInfo(char *p, const char *last);
/**
* Get a nice description of the driver-class.
*/
virtual const char *GetDescription() = 0;
/**
* Create an instance of this driver-class.
*/
virtual Driver *CreateInstance() = 0;
};
#endif /* DRIVER_H */
|