mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-24 02:42:51 +00:00
283 lines
8.3 KiB
C++
283 lines
8.3 KiB
C++
/*
|
|
configuration.h - wraps gpgme configuration components
|
|
Copyright (C) 2010 Klarälvdalens Datakonsult AB
|
|
|
|
This file is part of GPGME++.
|
|
|
|
GPGME++ 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.
|
|
|
|
GPGME++ 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 GPGME++; see the file COPYING.LIB. If not, write to the
|
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
// -*- c++ -*-
|
|
#ifndef __GPGMEPP_CONFIGURATION_H__
|
|
#define __GPGMEPP_CONFIGURATION_H__
|
|
|
|
#include <gpgme++/global.h>
|
|
|
|
#include <gpgme++/gpgmefw.h>
|
|
|
|
#include <boost/shared_ptr.hpp>
|
|
#include <boost/weak_ptr.hpp>
|
|
#include <boost/type_traits/remove_pointer.hpp>
|
|
#if 0
|
|
#include <boost/variant.hpp>
|
|
#include <boost/optional.hpp>
|
|
#endif
|
|
|
|
#include <iosfwd>
|
|
#include <vector>
|
|
#include <string>
|
|
#include <algorithm>
|
|
|
|
namespace GpgME {
|
|
namespace Configuration {
|
|
|
|
typedef boost::shared_ptr< boost::remove_pointer<gpgme_conf_comp_t>::type > shared_gpgme_conf_comp_t;
|
|
typedef boost::weak_ptr< boost::remove_pointer<gpgme_conf_comp_t>::type > weak_gpgme_conf_comp_t;
|
|
|
|
class Argument;
|
|
class Option;
|
|
class Component;
|
|
|
|
enum Level {
|
|
Basic,
|
|
Advanced,
|
|
Expert,
|
|
Invisible,
|
|
Internal,
|
|
|
|
NumLevels
|
|
};
|
|
|
|
enum Type {
|
|
NoType,
|
|
StringType,
|
|
IntegerType,
|
|
UnsignedIntegerType,
|
|
|
|
FilenameType = 32,
|
|
LdapServerType,
|
|
KeyFingerprintType,
|
|
PublicKeyType,
|
|
SecretKeyType,
|
|
AliasListType,
|
|
|
|
MaxType
|
|
};
|
|
|
|
enum Flag {
|
|
Group = ( 1 << 0 ),
|
|
Optional = ( 1 << 1 ),
|
|
List = ( 1 << 2 ),
|
|
Runtime = ( 1 << 3 ),
|
|
Default = ( 1 << 4 ),
|
|
DefaultDescription = ( 1 << 5 ),
|
|
NoArgumentDescription = ( 1 << 6 ),
|
|
NoChange = ( 1 << 7 ),
|
|
|
|
LastFlag = NoChange
|
|
};
|
|
|
|
//
|
|
// class Component
|
|
//
|
|
|
|
class GPGMEPP_EXPORT Component {
|
|
public:
|
|
Component() : comp() {}
|
|
explicit Component( const shared_gpgme_conf_comp_t & comp )
|
|
: comp( comp ) {}
|
|
|
|
// copy ctor is ok
|
|
|
|
const Component & operator=( const Component & other ) {
|
|
if ( this != &other ) {
|
|
Component( other ).swap( *this );
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
void swap( Component & other ) {
|
|
using std::swap;
|
|
swap( this->comp, other.comp );
|
|
}
|
|
|
|
bool isNull() const {
|
|
return !comp;
|
|
}
|
|
|
|
static std::vector<Component> load( Error & err );
|
|
Error save() const;
|
|
|
|
const char * name() const;
|
|
const char * description() const;
|
|
const char * programName() const;
|
|
|
|
Option option( unsigned int index ) const;
|
|
Option option( const char * name ) const;
|
|
|
|
unsigned int numOptions() const;
|
|
|
|
std::vector<Option> options() const;
|
|
|
|
GPGMEPP_MAKE_SAFE_BOOL_OPERATOR( !isNull() )
|
|
private:
|
|
shared_gpgme_conf_comp_t comp;
|
|
};
|
|
|
|
//
|
|
// class Option
|
|
//
|
|
|
|
class GPGMEPP_EXPORT Option {
|
|
public:
|
|
Option() : comp(), opt( 0 ) {}
|
|
Option( const shared_gpgme_conf_comp_t & comp, gpgme_conf_opt_t opt )
|
|
: comp( comp ), opt( opt ) {}
|
|
|
|
const Option & operator=( const Option & other ) {
|
|
if ( this != &other ) {
|
|
Option( other ).swap( *this );
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
void swap( Option & other ) {
|
|
using std::swap;
|
|
swap( this->comp, other.comp );
|
|
swap( this->opt, other.opt );
|
|
}
|
|
|
|
bool isNull() const {
|
|
return comp.expired() || !opt;
|
|
}
|
|
|
|
Component parent() const;
|
|
|
|
unsigned int flags() const;
|
|
|
|
Level level() const;
|
|
|
|
const char * name() const;
|
|
const char * description() const;
|
|
const char * argumentName() const;
|
|
|
|
Type type() const;
|
|
Type alternateType() const;
|
|
|
|
Argument defaultValue() const;
|
|
const char * defaultDescription() const;
|
|
|
|
Argument noArgumentValue() const;
|
|
const char * noArgumentDescription() const;
|
|
|
|
/*! The value that is in the config file (or null, if it's not set). */
|
|
Argument activeValue() const;
|
|
/*! The value that is in this object, ie. either activeValue(), newValue(), or defaultValue() */
|
|
Argument currentValue() const;
|
|
|
|
Argument newValue() const;
|
|
bool set() const;
|
|
bool dirty() const;
|
|
|
|
Error setNewValue( const Argument & argument );
|
|
Error resetToDefaultValue();
|
|
Error resetToActiveValue();
|
|
|
|
Argument createNoneArgument( bool set ) const;
|
|
Argument createStringArgument( const char * value ) const;
|
|
Argument createStringArgument( const std::string & value ) const;
|
|
Argument createIntArgument( int value ) const;
|
|
Argument createUIntArgument( unsigned int value ) const;
|
|
|
|
Argument createNoneListArgument( unsigned int count ) const;
|
|
Argument createStringListArgument( const std::vector<const char *> & value ) const;
|
|
Argument createStringListArgument( const std::vector<std::string> & value ) const;
|
|
Argument createIntListArgument( const std::vector<int> & values ) const;
|
|
Argument createUIntListArgument( const std::vector<unsigned int> & values ) const;
|
|
|
|
GPGMEPP_MAKE_SAFE_BOOL_OPERATOR( !isNull() )
|
|
private:
|
|
weak_gpgme_conf_comp_t comp;
|
|
gpgme_conf_opt_t opt;
|
|
};
|
|
|
|
//
|
|
// class Argument
|
|
//
|
|
|
|
class GPGMEPP_EXPORT Argument {
|
|
friend class ::GpgME::Configuration::Option;
|
|
Argument( const shared_gpgme_conf_comp_t & comp, gpgme_conf_opt_t opt, gpgme_conf_arg_t arg, bool owns );
|
|
public:
|
|
Argument() : comp(), opt( 0 ), arg( 0 ) {}
|
|
//Argument( const shared_gpgme_conf_comp_t & comp, gpgme_conf_opt_t opt, gpgme_conf_arg_t arg );
|
|
Argument( const Argument & other );
|
|
~Argument();
|
|
|
|
const Argument & operator=( const Argument & other ) {
|
|
if ( this != &other ) {
|
|
Argument( other ).swap( *this );
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
void swap( Argument & other ) {
|
|
using std::swap;
|
|
swap( this->comp, other.comp );
|
|
swap( this->opt, other.opt );
|
|
swap( this->arg, other.arg );
|
|
}
|
|
|
|
bool isNull() const {
|
|
return comp.expired() || !opt || !arg;
|
|
}
|
|
|
|
Option parent() const;
|
|
|
|
unsigned int numElements() const;
|
|
|
|
bool boolValue() const;
|
|
const char * stringValue( unsigned int index=0 ) const;
|
|
int intValue( unsigned int index=0 ) const;
|
|
unsigned int uintValue( unsigned int index=0 ) const;
|
|
|
|
unsigned int numberOfTimesSet() const;
|
|
std::vector<const char *> stringValues() const;
|
|
std::vector<int> intValues() const;
|
|
std::vector<unsigned int> uintValues() const;
|
|
|
|
GPGMEPP_MAKE_SAFE_BOOL_OPERATOR( !isNull() )
|
|
private:
|
|
weak_gpgme_conf_comp_t comp;
|
|
gpgme_conf_opt_t opt;
|
|
gpgme_conf_arg_t arg;
|
|
};
|
|
|
|
GPGMEPP_EXPORT std::ostream & operator<<( std::ostream & os, Level level );
|
|
GPGMEPP_EXPORT std::ostream & operator<<( std::ostream & os, Type type );
|
|
GPGMEPP_EXPORT std::ostream & operator<<( std::ostream & os, Flag flag );
|
|
GPGMEPP_EXPORT std::ostream & operator<<( std::ostream & os, const Component & component );
|
|
GPGMEPP_EXPORT std::ostream & operator<<( std::ostream & os, const Option & option );
|
|
GPGMEPP_EXPORT std::ostream & operator<<( std::ostream & os, const Argument & argument );
|
|
|
|
} // namespace Configuration
|
|
} // namespace GpgME
|
|
|
|
GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION( Configuration::Component )
|
|
GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION( Configuration::Option )
|
|
GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION( Configuration::Argument )
|
|
|
|
#endif // __GPGMEPP_CONFIGURATION_H__
|