130 lines
4.2 KiB
C
130 lines
4.2 KiB
C
|
/**
|
||
|
* PANDA 3D SOFTWARE
|
||
|
* Copyright (c) Carnegie Mellon University. All rights reserved.
|
||
|
*
|
||
|
* All use of this software is subject to the terms of the revised BSD
|
||
|
* license. You should have received a copy of this license along
|
||
|
* with this source code in a file named "LICENSE."
|
||
|
*
|
||
|
* @file configVariableCore.h
|
||
|
* @author drose
|
||
|
* @date 2004-10-15
|
||
|
*/
|
||
|
|
||
|
#ifndef CONFIGVARIABLECORE_H
|
||
|
#define CONFIGVARIABLECORE_H
|
||
|
|
||
|
#include "dtoolbase.h"
|
||
|
#include "configFlags.h"
|
||
|
#include "configPageManager.h"
|
||
|
#include "pnotify.h"
|
||
|
|
||
|
#include <vector>
|
||
|
|
||
|
class ConfigDeclaration;
|
||
|
|
||
|
/**
|
||
|
* The internal definition of a ConfigVariable. This object is shared between
|
||
|
* all instances of a ConfigVariable that use the same variable name.
|
||
|
*
|
||
|
* You cannot create a ConfigVariableCore instance directly; instead, use the
|
||
|
* make() method, which may return a shared instance. Once created, these
|
||
|
* objects are never destructed.
|
||
|
*/
|
||
|
class EXPCL_DTOOL_PRC ConfigVariableCore : public ConfigFlags {
|
||
|
private:
|
||
|
ConfigVariableCore(const std::string &name);
|
||
|
ConfigVariableCore(const ConfigVariableCore &templ, const std::string &name);
|
||
|
~ConfigVariableCore();
|
||
|
|
||
|
PUBLISHED:
|
||
|
INLINE const std::string &get_name() const;
|
||
|
INLINE bool is_used() const;
|
||
|
|
||
|
INLINE ValueType get_value_type() const;
|
||
|
INLINE const std::string &get_description() const;
|
||
|
INLINE int get_flags() const;
|
||
|
INLINE bool is_closed() const;
|
||
|
INLINE int get_trust_level() const;
|
||
|
INLINE bool is_dynamic() const;
|
||
|
INLINE const ConfigDeclaration *get_default_value() const;
|
||
|
|
||
|
void set_value_type(ValueType value_type);
|
||
|
void set_flags(int flags);
|
||
|
void set_description(const std::string &description);
|
||
|
void set_default_value(const std::string &default_value);
|
||
|
INLINE void set_used();
|
||
|
|
||
|
ConfigDeclaration *make_local_value();
|
||
|
bool clear_local_value();
|
||
|
INLINE bool has_local_value() const;
|
||
|
|
||
|
bool has_value() const;
|
||
|
size_t get_num_declarations() const;
|
||
|
const ConfigDeclaration *get_declaration(size_t n) const;
|
||
|
MAKE_SEQ(get_declarations, get_num_declarations, get_declaration);
|
||
|
|
||
|
INLINE size_t get_num_references() const;
|
||
|
INLINE const ConfigDeclaration *get_reference(size_t n) const;
|
||
|
MAKE_SEQ(get_references, get_num_references, get_reference);
|
||
|
|
||
|
INLINE size_t get_num_trusted_references() const;
|
||
|
INLINE const ConfigDeclaration *get_trusted_reference(size_t n) const;
|
||
|
MAKE_SEQ(get_trusted_references, get_num_trusted_references, get_trusted_reference);
|
||
|
|
||
|
INLINE size_t get_num_unique_references() const;
|
||
|
INLINE const ConfigDeclaration *get_unique_reference(size_t n) const;
|
||
|
MAKE_SEQ(get_unique_references, get_num_unique_references, get_unique_reference);
|
||
|
MAKE_SEQ_PROPERTY(declarations, get_num_declarations, get_declaration);
|
||
|
|
||
|
void output(std::ostream &out) const;
|
||
|
void write(std::ostream &out) const;
|
||
|
|
||
|
MAKE_PROPERTY(name, get_name);
|
||
|
MAKE_PROPERTY(used, is_used);
|
||
|
MAKE_PROPERTY(closed, is_closed);
|
||
|
MAKE_PROPERTY(trust_level, get_trust_level);
|
||
|
MAKE_PROPERTY(dynamic, is_dynamic);
|
||
|
|
||
|
MAKE_PROPERTY(value_type, get_value_type, set_value_type);
|
||
|
MAKE_PROPERTY(description, get_description, set_description);
|
||
|
MAKE_PROPERTY(default_value, get_default_value, set_default_value);
|
||
|
|
||
|
MAKE_SEQ_PROPERTY(references, get_num_references, get_reference);
|
||
|
MAKE_SEQ_PROPERTY(trusted_references, get_num_trusted_references, get_trusted_reference);
|
||
|
MAKE_SEQ_PROPERTY(unique_references, get_num_unique_references, get_unique_reference);
|
||
|
|
||
|
private:
|
||
|
void add_declaration(ConfigDeclaration *decl);
|
||
|
void remove_declaration(ConfigDeclaration *decl);
|
||
|
|
||
|
INLINE void check_sort_declarations() const;
|
||
|
void sort_declarations();
|
||
|
|
||
|
private:
|
||
|
std::string _name;
|
||
|
bool _is_used;
|
||
|
ValueType _value_type;
|
||
|
std::string _description;
|
||
|
int _flags;
|
||
|
ConfigDeclaration *_default_value;
|
||
|
ConfigDeclaration *_local_value;
|
||
|
|
||
|
typedef std::vector<const ConfigDeclaration *> Declarations;
|
||
|
Declarations _declarations;
|
||
|
Declarations _trusted_declarations;
|
||
|
Declarations _untrusted_declarations;
|
||
|
Declarations _unique_declarations;
|
||
|
bool _declarations_sorted;
|
||
|
bool _value_queried;
|
||
|
|
||
|
friend class ConfigDeclaration;
|
||
|
friend class ConfigVariableManager;
|
||
|
};
|
||
|
|
||
|
INLINE std::ostream &operator << (std::ostream &out, const ConfigVariableCore &variable);
|
||
|
|
||
|
#include "configVariableCore.I"
|
||
|
|
||
|
#endif
|