// -*- c++ -*-

/*
 *  Copyright (C) 2003, Ian Reinhart Geiser <geiseri@kde.org>
 *
 *  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.
 */

#ifndef KJSEMBED_CONFIG_IMP_H
#define KJSEMBED_CONFIG_IMP_H

#include <tqdatetime.h>
#include <tqfont.h>
#include <tqvariant.h>
#include <tqpoint.h>
#include <tqrect.h>
#include <tqsize.h>
#include <tqcolor.h>
#include <tqstringlist.h>

#include "bindingobject.h"

#ifndef QT_ONLY
class KConfig;
#else
class TQSettings;
#endif

namespace KJSEmbed {
namespace Bindings {

class Config : public BindingObject
{
    Q_OBJECT
    Q_PROPERTY( bool forceGlobal READ forceGlobal WRITE setForceGlobal )
    Q_PROPERTY( bool dollarExpansion READ isDollarExpansion WRITE setDollarExpansion )
    Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly )
    Q_PROPERTY( bool readDefaults READ readDefaults WRITE setReadDefaults )

public:
    Config( TQObject *parent=0, const char *name=0);
    /*
    Config( TQObject *parent, const char *name,  const TQString& confName );
    */
    virtual ~Config();

    void setForceGlobal( bool force );
    bool forceGlobal() const;
    void setDollarExpansion( bool _bExpand  );
    bool isDollarExpansion() const;
    void setReadOnly(bool _ro);
    bool isReadOnly() const;
    void setReadDefaults(bool b);
    bool readDefaults() const;

public slots:

	// Group
    void setDesktopGroup();
    void setGroup(const TQString&);
    TQString group();
    TQStringList groupList();
    TQString locale();

    void rollback( bool bDeep  );
    void sync();
    bool hasKey( const TQString& key ) const;
    bool entryIsImmutable(const TQString &key) const;
    void revertToDefault(const TQString &key);
    bool hasDefault(const TQString &key) const;

    void setFileWriteMode(int mode);
    TQString readEntry(const TQString& pKey, const TQString& aDefault ) const;
    TQVariant readPropertyEntry( const TQString& pKey, const TQVariant &var) const;
    TQStringList readListEntry( const TQString& pKey ) const;
    TQString readPathEntry( const TQString& pKey, const TQString & aDefault) const;
    TQStringList readPathListEntry( const TQString& pKey ) const;
    int readNumEntry( const TQString& pKey, int nDefault  ) const;
    uint readUnsignedNumEntry( const TQString& pKey, uint nDefault  ) const;
    long readLongNumEntry( const TQString& pKey, long nDefault  ) const;
    double readDoubleNumEntry( const TQString& pKey, double nDefault  ) const;
    TQFont readFontEntry( const TQString& pKey, const TQFont* pDefault) const;
    bool readBoolEntry( const TQString& pKey, const bool bDefault  ) const;
    TQRect readRectEntry( const TQString& pKey, const TQRect* pDefault) const;
    TQPoint readPointEntry( const TQString& pKey, const TQPoint* pDefault) const;
    TQSize readSizeEntry( const TQString& pKey, const TQSize* pDefault) const;
    TQColor readColorEntry( const TQString& pKey, const TQColor* pDefault) const;
    TQDateTime readDateTimeEntry( const TQString& pKey, const TQDateTime* pDefault) const;
    TQString readEntryUntranslated( const TQString& pKey, const TQString& aDefault  ) const;

    void writeEntry( const TQString& pKey, const TQString& pValue );
    void writePropertyEntry( const TQString& pKey, const TQVariant& pValue );
    void writeListEntry( const TQString& pKey, const TQStringList &rValue );
    void writeNumEntry( const TQString& pKey, int nValue );
    void writeUnsignedNumEntry( const TQString& pKey, uint nValue );
    void writeLongNumEntry( const TQString& pKey, unsigned long nValue );
    void writeDoubleNumEntry( const TQString& pKey, double nValue );
    void writeBoolEntry( const TQString& pKey, bool bValue );
    void writeFontEntry( const TQString& pKey, const TQFont& rFont );
    void writeColorEntry( const TQString& pKey, const TQColor& rColor );
    void writeDateTimeEntry( const TQString& pKey, const TQDateTime& rDateTime  );
    void writeRectEntry( const TQString& pKey, const TQRect& rValue );
    void writePointEntry( const TQString& pKey, const TQPoint& rValue );
    void writeSizeEntry( const TQString& pKey, const TQSize& rValue );
    void writePathEntry( const TQString& pKey, const TQString & path );
    void writePathListEntry( const TQString& pKey, const TQStringList &rValue);
    void deleteEntry( const TQString& pKey, bool bNLS , bool bGlobal );
    bool deleteGroup( const TQString& group, bool bDeep , bool bGlobal  );

private:
#ifndef QT_ONLY
    KConfig *m_config;
#else
    TQSettings *m_config;
    TQString m_name;
    bool m_forceGlobal;
#endif
};
}
}

#endif
