| Index: ui/views/attributes.cc
|
| diff --git a/ui/views/attributes.cc b/ui/views/attributes.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..16440eed437203cfcf5211cce3238c926e006f90
|
| --- /dev/null
|
| +++ b/ui/views/attributes.cc
|
| @@ -0,0 +1,58 @@
|
| +// Copyright (c) 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ui/views/attributes.h"
|
| +
|
| +namespace views {
|
| +
|
| +AttributeId Attribute::Identity() const {
|
| + return GetAttributeId<Attribute>();
|
| +}
|
| +
|
| +AttributeContainer::AttributeContainer(View* view) : view_(view) {}
|
| +
|
| +AttributeContainer::AttributeContainer() : view_(nullptr) {}
|
| +
|
| +AttributeContainer::~AttributeContainer() {}
|
| +
|
| +bool AttributeContainer::Remove(const AttributeId attributeId) {
|
| + AttributeMap::const_iterator it = map_.find(attributeId);
|
| + bool canRemove = it != map_.cend();
|
| + if (canRemove) {
|
| + Notification(Attribute::NotifyType::AttributeRemoved, it->second.get());
|
| + it->second.get()->RemovedFromView();
|
| + map_.erase(it);
|
| + }
|
| + return canRemove;
|
| +}
|
| +
|
| +void AttributeContainer::Notification(Attribute::NotifyType type,
|
| + Attribute* attribute) {
|
| + for (AttributeMap::const_iterator a = map_.cbegin(); a != map_.cend(); a++) {
|
| + Attribute* attr = a->second.get();
|
| + if (attr != attribute)
|
| + attr->Notification(type, attribute);
|
| + }
|
| +}
|
| +
|
| +void AttributeContainer::ViewNotification(View* view) {
|
| + for (AttributeMap::const_iterator a = map_.cbegin(); a != map_.cend(); a++)
|
| + a->second.get()->ViewNotification(view);
|
| +}
|
| +
|
| +AttributeIdFactory::AttributeIdMap AttributeIdFactory::map_;
|
| +
|
| +AttributeId AttributeIdFactory::GetAttributeId(const char* typeName) {
|
| + std::string type_name = typeName;
|
| + AttributeIdMap::const_iterator it = map_.find(type_name);
|
| + if (it == map_.cend()) {
|
| + std::unique_ptr<AttributeIdHolder> holder =
|
| + base::WrapUnique(new AttributeIdHolder());
|
| + it = map_.insert(AttributeIdMap::value_type(type_name, std::move(holder)))
|
| + .first;
|
| + }
|
| + return it->second.get()->GetAttributeId();
|
| +}
|
| +
|
| +} // namespace views
|
|
|