PreVerify/lib/log4Qt/include/helpers/properties.h
2024-09-09 19:18:28 +08:00

118 lines
3.3 KiB
C++

/******************************************************************************
*
* This file is part of Log4Qt library.
*
* Copyright (C) 2007 - 2020 Log4Qt contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
#ifndef LOG4QT_PROPERTIES_H
#define LOG4QT_PROPERTIES_H
#include "log4qt/log4qtshared.h"
#include <QHash>
#include <QStringList>
class QIODevice;
class QSettings;
namespace Log4Qt
{
/*!
* \brief The class Properties implements a JAVA property hash.
*/
class LOG4QT_EXPORT Properties : public QHash<QString, QString>
{
public:
Properties(Properties *pDefaultProperties = nullptr);
public:
Properties *defaultProperties() const;
QString property(const QString &key) const;
QString property(const QString &key,
const QString &defaultValue) const;
void setDefaultProperties(Properties *defaultProperties);
void setProperty(const QString &key,
const QString &value);
void load(QIODevice *pDevice);
/*!
* Reads all child keys from the QSettings object \a settings and
* inserts them into this object. The value is created using
* QVariant::toString(). Types that do not support toString() are
* resulting in an empty string.
*
* \code
* QSettings settings;
* settings.setValue("Package", "Full");
* settings.setValue("Background", Qt::white);
* settings.setValue("Support", true);
* settings.setValue("Help/Language", "en_UK");
*
* Properties properties
* properties.load(&settings)
*
* // properties (("Package", "Full"), ("Background", ""), ("Support", "true"))
* \endcode
*/
void load(const QSettings &settings);
QStringList propertyNames() const;
private:
void parseProperty(const QString &property,
int line);
static int hexDigitValue(QChar digit);
static QString trimLeft(const QString &line);
private:
Properties *mpDefaultProperties;
static const char msEscapeChar;
static const char *msValueEscapeCodes;
static const char *msValueEscapeChars;
static const char *msKeyEscapeCodes;
static const char *msKeyEscapeChars;
};
inline Properties::Properties(Properties *pDefaultProperties) :
mpDefaultProperties(pDefaultProperties)
{}
inline Properties *Properties::defaultProperties() const
{
return mpDefaultProperties;
}
inline void Properties::setDefaultProperties(Properties *defaultProperties)
{
mpDefaultProperties = defaultProperties;
}
inline void Properties::setProperty(const QString &key,
const QString &value)
{
insert(key, value);
}
} // namespace Log4Qt
Q_DECLARE_TYPEINFO(Log4Qt::Properties, Q_MOVABLE_TYPE);
#endif // LOG4QT_PROPERTIES_H