summaryrefslogtreecommitdiffhomepage
path: root/Tobii-EyeX/include/eyex-cpp/StateBag.inl
blob: 83e054a6e4332ce06e9188460b697bc94ef1685e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*********************************************************************************************************************
* Copyright 2013-2014 Tobii Technology AB. All rights reserved.
* StateBag.inl
*********************************************************************************************************************/

#if !defined(__TOBII_TX_CLIENT_CPPBINDINGS_STATEBAG__INL__)
#define __TOBII_TX_CLIENT_CPPBINDINGS_STATEBAG__INL__

/*********************************************************************************************************************/

TX_NAMESPACE_BEGIN

/*********************************************************************************************************************/

inline StateBag::StateBag(const std::shared_ptr<const Context>& spContext, TX_HANDLE hBag)
    : InteractionObject(spContext, hBag)
{}

/*********************************************************************************************************************/

inline std::string StateBag::GetStatePath() const
{
    return GetString(txGetStateBagPath, _hObject);
}

/*********************************************************************************************************************/

template <typename TValue>
inline bool StateBag::TryGetStateValue(TValue* pValue, const std::string& valuePath) const
{    
    std::shared_ptr<Property> spProperty;
    if(!TryGetPropertyForStateValue(&spProperty, valuePath, false))
        return false;

    return spProperty->TryGetValue(pValue);
}

/*********************************************************************************************************************/

template <typename TValue>
inline void StateBag::SetStateValue(const std::string& valuePath, const TValue& value)
{
    std::shared_ptr<Property> spProperty;
    TryGetPropertyForStateValue(&spProperty, valuePath, true);
    spProperty->SetValue(value);
}

/*********************************************************************************************************************/

inline void StateBag::SetAsync(AsyncDataHandler fnCompletion)	
{
    auto spThis = shared_from_this();

    auto callback = [&, spThis, fnCompletion](TX_CONSTHANDLE hAsyncData)
    {                
		GetContext()->InvokeAsyncDataHandler(hAsyncData, fnCompletion);
    };
    
    TX_VALIDATE(Tx::SetStateAsync(GetHandle(), callback));    
}

/*********************************************************************************************************************/

inline bool StateBag::TryGetPropertyForStateValue(std::shared_ptr<Property>* pspProperty, const std::string& valuePath, bool createIfNotExists) const
{
    TX_PROPERTYHANDLE hProperty;
    if (!TX_VALIDATE(txGetPropertyForStateValue(_hObject, &hProperty, valuePath.c_str(), createIfNotExists ? TX_TRUE : TX_FALSE), TX_RESULT_NOTFOUND))
        return false;

    *pspProperty = _spContext->CreateProperty(hProperty);
    return true;
}

/*********************************************************************************************************************/

TX_NAMESPACE_END

/*********************************************************************************************************************/

#endif // !defined(__TOBII_TX_CLIENT_CPPBINDINGS_STATEBAG__INL__)

/*********************************************************************************************************************/