/*! \file pipropertystorage.h * \brief Storage of properties for GUI usage * * This file declare PIPropertyStorage */ /* PIP - Platform Independent Primitives Storage of properties for GUI usage Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef PIPROPERTYSTORAGE_H #define PIPROPERTYSTORAGE_H #include "pivariant.h" class PIPropertyStorage { public: PIPropertyStorage() {} struct Property { Property(const PIString & n = PIString(), const PIString & c = PIString(), const PIVariant & v = PIVariant(), int f = 0): name(n), comment(c), value(v), flags(f) {} PIString name; PIString comment; PIVariant value; int flags; }; PIPropertyStorage(const PIVector & pl) {props = pl;} typedef PIVector::const_iterator const_iterator; typedef PIVector::iterator iterator; typedef Property value_type; iterator begin() {return props.begin();} const_iterator begin() const {return props.begin();} iterator end() {return props.end();} const_iterator end() const {return props.end();} int length() const {return props.length();} int size() const {return props.size();} bool isEmpty() const {return props.isEmpty();} Property & front() {return props.front();} const Property & front() const {return props.front();} Property & back() {return props.back();} const Property & back() const {return props.back();} void removeAt(int i) {props.remove(i);} void clear() {props.clear();} PIPropertyStorage copy() const {return PIPropertyStorage(*this);} int propertiesCount() const {return props.size();} PIVector & properties() {return props;} const PIVector & properties() const {return props;} const PIPropertyStorage & propertyStorage() const {return *this;} bool isPropertyExists(const PIString & _name) const; void clearProperties() {props.clear();} void addProperty(const Property & p); void addProperty(const PIString & _name, const PIVariant & _def_value, const PIString & _comment = PIString(), int _flags = 0) {addProperty(Property(_name, _comment, _def_value, _flags));} void removeProperty(const PIString & _name); void removePropertiesByFlag(int flag); void updateProperties(const PIVector & properties_, int flag_ignore = 0); Property propertyByName(const PIString & name) const; PIVariant propertyValueByName(const PIString & name) const; void setPropertyValue(const PIString & name, const PIVariant & value); void setPropertyComment(const PIString & name, const PIString & comment); void setPropertyFlags(const PIString & name, int flags); PIPropertyStorage & operator <<(const PIPropertyStorage::Property & p) {props << p; return *this;} PIPropertyStorage & operator <<(const PIVector & p) {props << p; return *this;} PIPropertyStorage & operator <<(const PIPropertyStorage & p) {props << p.props; return *this;} Property & operator[](int i) {return props[i];} const Property & operator[](int i) const {return props[i];} Property & operator[](const PIString & name); const Property operator[](const PIString & name) const; static Property parsePropertyLine(PIString l); protected: PIVector props; }; inline PIByteArray & operator <<(PIByteArray & s, const PIPropertyStorage::Property & v) {s << v.name << v.value << v.comment << v.flags; return s;} inline PIByteArray & operator >>(PIByteArray & s, PIPropertyStorage::Property & v) {s >> v.name >> v.value >> v.comment >> v.flags; return s;} inline PIByteArray & operator <<(PIByteArray & s, const PIPropertyStorage & v) {s << v.properties(); return s;} inline PIByteArray & operator >>(PIByteArray & s, PIPropertyStorage & v) {s >> v.properties(); return s;} #endif // PIPROPERTYSTORAGE_H