Added a stub BTextParameter as in Dano, I'd need that for ESDSink at least.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20146 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
François Revol
2007-02-16 23:40:49 +00:00
parent 38979f27b0
commit 0ba2462a6d
2 changed files with 195 additions and 1 deletions
+49 -1
View File
@@ -85,6 +85,7 @@ class BParameter;
class BNullParameter;
class BContinuousParameter;
class BDiscreteParameter;
class BTextParameter;
/* Set these flags on parameters and groups to control how a Theme will */
@@ -192,6 +193,12 @@ public:
media_type m_type,
const char * name,
const char * kind);
BTextParameter * MakeTextParameter(
int32 id,
media_type m_type,
const char * name,
const char * kind,
size_t max_bytes);
BParameterGroup * MakeGroup(
const char * name);
@@ -253,7 +260,8 @@ public:
{
B_NULL_PARAMETER,
B_DISCRETE_PARAMETER,
B_CONTINUOUS_PARAMETER
B_CONTINUOUS_PARAMETER,
B_TEXT_PARAMETER
};
media_parameter_type Type() const;
@@ -307,6 +315,7 @@ private:
friend class BNullParameter;
friend class BContinuousParameter;
friend class BDiscreteParameter;
friend class BTextParameter;
friend class BParameterGroup;
friend class BParameterWeb;
@@ -520,4 +529,43 @@ virtual status_t _Reserved_NullParameter_7(void *);
};
class BTextParameter :
public BParameter
{
public:
size_t MaxBytes() const;
virtual type_code ValueType();
virtual ssize_t FlattenedSize() const;
virtual status_t Flatten(void *buffer, ssize_t size) const;
virtual status_t Unflatten(type_code c, const void *buf, ssize_t size);
private:
/* Mmmh, stuffing! */
virtual status_t _Reserved_TextParameter_0(void *);
virtual status_t _Reserved_TextParameter_1(void *);
virtual status_t _Reserved_TextParameter_2(void *);
virtual status_t _Reserved_TextParameter_3(void *);
virtual status_t _Reserved_TextParameter_4(void *);
virtual status_t _Reserved_TextParameter_5(void *);
virtual status_t _Reserved_TextParameter_6(void *);
virtual status_t _Reserved_TextParameter_7(void *);
friend class BParameterGroup;
uint32 mMaxBytes;
uint32 _reserved_control_junction_[8];
BTextParameter(
int32 id,
media_type m_type,
BParameterWeb * web,
const char * name,
const char * kind,
size_t max_bytes);
~BTextParameter();
};
#endif /* _CONTROL_WEB_H */
+146
View File
@@ -782,6 +782,21 @@ BParameterGroup::MakeNullParameter(int32 id, media_type mediaType, const char *n
}
BTextParameter *
BParameterGroup::MakeTextParameter(int32 id, media_type mediaType, const char *name,
const char *kind, size_t max_bytes)
{
CALLED();
ASSERT(mControls != NULL);
BTextParameter *parameter = new BTextParameter(id, mediaType, mWeb, name, kind, max_bytes);
parameter->mGroup = this;
mControls->AddItem(parameter);
return parameter;
}
BContinuousParameter *
BParameterGroup::MakeContinuousParameter(int32 id, media_type mediaType,
const char *name, const char *kind, const char *unit,
@@ -1246,6 +1261,9 @@ BParameterGroup::MakeControl(int32 type)
case BParameter::B_CONTINUOUS_PARAMETER:
return new BContinuousParameter(-1, B_MEDIA_NO_TYPE, NULL, NULL, NULL, NULL, 0, 0, 0);
case BParameter::B_TEXT_PARAMETER:
return new BTextParameter(-1, B_MEDIA_NO_TYPE, NULL, NULL, NULL, NULL);
default:
ERROR("BParameterGroup::MakeControl unknown type %ld\n", type);
return NULL;
@@ -2386,6 +2404,125 @@ BNullParameter::~BNullParameter()
}
// #pragma mark -
/*************************************************************
* public BTextParameter
*************************************************************/
size_t
BTextParameter::MaxBytes() const
{
// NULL parameters have no value type
return mMaxBytes;
}
type_code
BTextParameter::ValueType()
{
// NULL parameters have no value type
return 0;
}
ssize_t
BTextParameter::FlattenedSize() const
{
return BParameter::FlattenedSize() + sizeof(mMaxBytes);
}
status_t
BTextParameter::Flatten(void *buffer, ssize_t size) const
{
if (buffer == NULL) {
ERROR("BTextParameter::Flatten(): buffer is NULL\n");
return B_NO_INIT;
}
ssize_t parameterSize = BParameter::FlattenedSize();
if (size < static_cast<ssize_t>(parameterSize + sizeof(mMaxBytes))) {
ERROR("BContinuousParameter::Flatten(): size to small\n");
return B_NO_MEMORY;
}
status_t status = BParameter::Flatten(buffer, size);
if (status != B_OK) {
ERROR("BTextParameter::Flatten(): BParameter::Flatten() failed\n");
return status;
}
// add our data to the general flattened BParameter
skip_in_buffer(&buffer, parameterSize);
write_to_buffer<uint32>(&buffer, mMaxBytes);
return B_OK;
}
status_t
BTextParameter::Unflatten(type_code code, const void *buffer, ssize_t size)
{
// we try to check if the buffer size is long enough to hold an object
// as early as possible.
if (!AllowsTypeCode(code)) {
ERROR("BTextParameter::Unflatten wrong type code\n");
return B_BAD_TYPE;
}
if (buffer == NULL) {
ERROR("BTextParameter::Unflatten buffer is NULL\n");
return B_NO_INIT;
}
if (size < static_cast<ssize_t>(sizeof(mMaxBytes))) {
ERROR("BTextParameter::Unflatten size too small\n");
return B_ERROR;
}
status_t status = BParameter::Unflatten(code, buffer, size);
if (status != B_OK) {
ERROR("BTextParameter::Unflatten(): BParameter::Unflatten failed\n");
return status;
}
ssize_t parameterSize = BParameter::FlattenedSize();
skip_in_buffer(&buffer, parameterSize);
if (size < static_cast<ssize_t>(parameterSize + sizeof(mMaxBytes))) {
ERROR("BTextParameter::Unflatten(): buffer too small\n");
return B_BAD_VALUE;
}
mMaxBytes = read_from_buffer_swap32<uint32>(&buffer, SwapOnUnflatten());
return B_OK;
}
/*************************************************************
* private BTextParameter
*************************************************************/
BTextParameter::BTextParameter(int32 id, media_type mediaType, BParameterWeb *web,
const char *name, const char *kind, size_t max_bytes)
: BParameter(id, mediaType, B_NULL_PARAMETER, web, name, kind, NULL)
{
mMaxBytes = max_bytes;
}
BTextParameter::~BTextParameter()
{
}
// #pragma mark -
// reserved functions
@@ -2444,4 +2581,13 @@ status_t BNullParameter::_Reserved_NullParameter_5(void *) { return B_ERROR; }
status_t BNullParameter::_Reserved_NullParameter_6(void *) { return B_ERROR; }
status_t BNullParameter::_Reserved_NullParameter_7(void *) { return B_ERROR; }
status_t BTextParameter::_Reserved_TextParameter_0(void *) { return B_ERROR; }
status_t BTextParameter::_Reserved_TextParameter_1(void *) { return B_ERROR; }
status_t BTextParameter::_Reserved_TextParameter_2(void *) { return B_ERROR; }
status_t BTextParameter::_Reserved_TextParameter_3(void *) { return B_ERROR; }
status_t BTextParameter::_Reserved_TextParameter_4(void *) { return B_ERROR; }
status_t BTextParameter::_Reserved_TextParameter_5(void *) { return B_ERROR; }
status_t BTextParameter::_Reserved_TextParameter_6(void *) { return B_ERROR; }
status_t BTextParameter::_Reserved_TextParameter_7(void *) { return B_ERROR; }