|
|
|
/***************************************************************************
|
|
|
|
Copyright (C) 2004 by Scott Wheeler <wheeler@kde.org>
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* 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
|