All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
LabelLayerFilterGroupModel.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "ILabelLayerFilterGroupModel.h"
6 #include "Types.h"
7 #include "Labels.h"
8 #include "LabelLayer.h"
9 
10 #include <unordered_map>
11 #include <vector>
12 
13 namespace Eegeo
14 {
15  namespace Labels
16  {
18  {
19  public:
20  LabelLayerFilterGroupModel(const Labels::ILabelLayerRepository& labelLayerRepository);
21 
22  void GetLabelLayerIds(std::vector<LabelLayer::IdType>& out_labelLayerIds) const;
23 
24  void SetFilterGroupMask(u32 filterGroupMask);
25 
26  u32 GetFilterGroupMask() const;
27 
28  void SetFilterGroupsForLayer(const Labels::LabelLayer::IdType& labelLayerId, u32 filterGroupMask);
29 
30  u32 GetFilterGroupsForLayer(const Labels::LabelLayer::IdType& labelLayerId) const;
31 
32  void RegisterChangedCallback(CallbackType& callback);
33 
34  void UnregisterChangedCallback(CallbackType& callback);
35 
36  private:
37 
38  void NotifyChanged() const;
39 
40  const Labels::ILabelLayerRepository& m_labelLayerRepository;
41 
42  typedef std::unordered_map<Labels::LabelLayer::IdType, u32> LayerToFilterGroupMask;
43  LayerToFilterGroupMask m_layerToFilterGroupMask;
44  u32 m_filterGroupMask;
45 
46  std::vector<CallbackType*> m_callbacks;
47  };
48  }
49 }