blob: 91d9575006bfd5887219c660e011e65cef4c3e05 (
plain)
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
|
/***************************************************************************
Copyright (C) 2004 by Scott Wheeler <[email protected]>
***************************************************************************/
/***************************************************************************
* *
* 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 *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef FILEHANDLEPROPERTIES_H
#define FILEHANDLEPROPERTIES_H
#include <tqmap.h>
/*
* These ugly macros make possible a property registration system that makes it
* easy to add properties to the FileHandle that can be accessed via the DCOP
* interface.
*
* Properties should actually be added to the filehandle.cpp file. This file
* is just here to separate out some of the macro-related ugliness.
*/
#define AddProperty(name, method) \
namespace FileHandleProperties \
{ \
struct name##Property : public Property \
{ \
virtual TQString value(const FileHandle &f) const \
{ \
return f.method; \
} \
static const int dummy; \
}; \
static name##Property name##Instance; \
const int name##Property::dummy = addToPropertyMap(#name, &name##Instance); \
}
#define AddNumberProperty(name, method) \
namespace FileHandleProperties \
{ \
struct name##Property : public Property \
{ \
virtual TQString value(const FileHandle &f) const \
{ \
return TQString::number(f.method); \
} \
static const int dummy; \
}; \
static name##Property name##Instance; \
const int name##Property::dummy = addToPropertyMap(#name, &name##Instance); \
}
namespace FileHandleProperties
{
struct Property
{
virtual TQString value(const FileHandle &) const
{
return TQString();
}
};
static TQMap<TQCString, const Property *> propertyMap;
static int addToPropertyMap(const TQCString &name, Property *property)
{
propertyMap[name] = property;
return 0;
}
static TQString property(const FileHandle &file, const TQCString &key)
{
return propertyMap.contains(key) ? propertyMap[key]->value(file) : TQString();
}
static TQStringList properties()
{
static TQStringList l;
if(l.isEmpty()) {
TQMap<TQCString, const Property *>::ConstIterator it = propertyMap.begin();
for(; it != propertyMap.end(); ++it)
l.append(TQString(it.key()));
}
return l;
}
}
#endif
|