root/headers/private/shared/SettingsMessage.h
/*
 * Copyright 2008-2010 Stephan Aßmus <superstippi@gmx.de>.
 * Copyright 1998 Eric Shepherd.
 * All rights reserved. Distributed under the terms of the Be Sample Code
 * license.
 */
#ifndef SETTINGS_MESSAGE_H
#define SETTINGS_MESSAGE_H


#include <FindDirectory.h>
#include <Font.h>
#include <List.h>
#include <Locker.h>
#include <Message.h>
#include <Path.h>

class BMessenger;
class BString;


enum {
        SETTINGS_VALUE_CHANGED = '_svc'
};


class SettingsMessage : public BMessage, public BLocker {
public:
                                                                SettingsMessage(directory_which directory,
                                                                        const char* filename);
        virtual                                         ~SettingsMessage();


                        status_t                        InitCheck() const;
                        status_t                        Load();
                        status_t                        Save() const;

                        bool                            AddListener(const BMessenger& listener);
                        void                            RemoveListener(const BMessenger& listener);

                        status_t                        SetValue(const char* name, bool value);
                        status_t                        SetValue(const char* name, int8 value);
                        status_t                        SetValue(const char* name, int16 value);
                        status_t                        SetValue(const char* name, uint16 value);
                        status_t                        SetValue(const char* name, int32 value);
                        status_t                        SetValue(const char* name, uint32 value);
                        status_t                        SetValue(const char* name, int64 value);
                        status_t                        SetValue(const char* name, uint64 value);
                        status_t                        SetValue(const char* name, float value);
                        status_t                        SetValue(const char* name, double value);
                        status_t                        SetValue(const char* name,
                                                                        const char* value);
                        status_t                        SetValue(const char* name,
                                                                        const BString& value);
                        status_t                        SetValue(const char *name,
                                                                        const BPoint& value);
                        status_t                        SetValue(const char* name, const BRect& value);
                        status_t                        SetValue(const char* name,
                                                                        const entry_ref& value);
                        status_t                        SetValue(const char* name,
                                                                        const BMessage& value);
                        status_t                        SetValue(const char* name,
                                                                        const BFlattenable* value);
                        status_t                        SetValue(const char* name,
                                                                        const BFont& value);
                        status_t                        SetValue(const char* name, type_code type,
                                                                        const void* data, ssize_t numBytes);

                        bool                            GetValue(const char* name,
                                                                        bool defaultValue) const;
                        int8                            GetValue(const char* name,
                                                                        int8 defaultValue) const;
                        int16                           GetValue(const char* name,
                                                                        int16 defaultValue) const;
                        uint16                          GetValue(const char* name,
                                                                        uint16 defaultValue) const;
                        int32                           GetValue(const char* name,
                                                                        int32 defaultValue) const;
                        uint32                          GetValue(const char* name,
                                                                        uint32 defaultValue) const;
                        int64                           GetValue(const char* name,
                                                                        int64 defaultValue) const;
                        uint64                          GetValue(const char* name,
                                                                        uint64 defaultValue) const;
                        float                           GetValue(const char* name,
                                                                        float defaultValue) const;
                        double                          GetValue(const char* name,
                                                                        double defaultValue) const;
                        const char*                     GetValue(const char* name,
                                                                        const char* defaultValue) const;
                        BString                         GetValue(const char* name,
                                                                        const BString& defaultValue) const;
                        BPoint                          GetValue(const char *name,
                                                                        BPoint defaultValue) const;
                        BRect                           GetValue(const char* name,
                                                                        BRect defaultValue) const;
                        entry_ref                       GetValue(const char* name,
                                                                        const entry_ref& defaultValue) const;
                        BMessage                        GetValue(const char* name,
                                                                        const BMessage& defaultValue) const;
                        BFont                           GetValue(const char* name,
                                                                        const BFont& defaultValue) const;
                        void*                           GetValue(const char* name, type_code type,
                                                                        ssize_t numBytes,
                                                                        const void** defaultValue)const;

private:
                        void                            _NotifyValueChanged(const char* name) const;

private:
                        BPath                           fPath;
                        status_t                        fStatus;
                        BList                           fListeners;
};

#endif  // SETTINGS_MESSAGE_H