kde-playground/kdepimlibs/ktnef/ktnefproperty.cpp
2015-04-14 21:49:29 +00:00

156 lines
3.5 KiB
C++

/*
ktnefproperty.cpp
Copyright (C) 2002 Michael Goffioul <kdeprint@swing.be>
This file is part of KTNEF, the KDE TNEF support library/program.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
/**
* @file
* This file is part of the API for handling TNEF data and
* defines the KTNEFProperty class.
*
* @author Michael Goffioul
*/
#include "ktnefproperty.h"
#include "mapi.h"
#include <QtCore/QDateTime>
#include <ctype.h>
using namespace KTnef;
class KTNEFProperty::Private
{
public:
int _key;
int _type;
QVariant _value;
QVariant _name;
};
KTNEFProperty::KTNEFProperty()
: d( new Private )
{
}
KTNEFProperty::KTNEFProperty( int key_, int type_, const QVariant &value_,
const QVariant &name_ )
: d( new Private )
{
d->_key = key_;
d->_type = type_;
d->_value = value_;
d->_name = name_;
}
KTNEFProperty::KTNEFProperty( const KTNEFProperty &p )
: d( new Private )
{
*d = *p.d;
}
KTNEFProperty::~KTNEFProperty()
{
delete d;
}
KTNEFProperty &KTNEFProperty::operator=( const KTNEFProperty &other )
{
if ( this != &other ) {
*d = *other.d;
}
return *this;
}
QString KTNEFProperty::keyString() const
{
if ( d->_name.isValid() ) {
if ( d->_name.type() == QVariant::String ) {
return d->_name.toString();
} else {
return mapiNamedTagString( d->_name.toUInt(), d->_key );
}
} else {
return mapiTagString( d->_key );
}
}
QString KTNEFProperty::formatValue( const QVariant &value, bool beautify )
{
if ( value.type() == QVariant::ByteArray ) {
// check the first bytes (up to 8) if they are
// printable characters
QByteArray arr = value.toByteArray();
bool printable = true;
for ( int i=qMin( arr.size(), 8 )-1; i>=0 && printable; i-- ) {
printable = ( isprint( arr[ i ] ) != 0 );
}
if ( !printable ) {
QString s;
int i;
int txtCount = beautify ? qMin( arr.size(), 32 ) : arr.size();
for ( i=0; i < txtCount; ++i ) {
s.append( QString().sprintf( "%02X", ( uchar )arr[ i ] ) );
if ( beautify ) {
s.append( " " );
}
}
if ( i < arr.size() ) {
s.append( "... (size=" + QString::number( arr.size() ) + ')' );
}
return s;
}
}
//else if ( value.type() == QVariant::DateTime )
// return value.toDateTime().toString();
return value.toString();
}
QString KTNEFProperty::valueString() const
{
return formatValue( d->_value );
}
int KTNEFProperty::key() const
{
return d->_key;
}
int KTNEFProperty::type() const
{
return d->_type;
}
QVariant KTNEFProperty::value() const
{
return d->_value;
}
QVariant KTNEFProperty::name() const
{
return d->_name;
}
bool KTNEFProperty::isVector() const
{
return d->_value.type() == QVariant::List;
}