Tizen 2.1 base
[platform/core/uifw/ise-engine-sunpinyin.git] / src / ime-core / imi_option_event.cpp
1 #include <cassert>
2 #include <algorithm>
3 #include "imi_option_event.h"
4
5 COptionEvent::variant_::variant_(int v)
6     : type(VAL_INTEGER)
7 {
8     data.d_int = v;
9 }
10
11 COptionEvent::variant_::variant_(const std::string& v)
12     : type(VAL_STRING)
13 {
14     data.d_string = v;
15 }
16
17 COptionEvent::variant_::variant_(const std::vector<std::string>& v)
18     : type(VAL_STRING_LIST)
19 {
20     data.d_strings = v;
21 }
22
23 COptionEvent::variant_::variant_(const std::vector<string_pair>& v)
24     : type(VAL_STRING_PAIR_LIST)
25 {
26     data.d_string_pair_list = v;
27 }
28
29 COptionEvent::variant_::variant_(bool v)
30     : type(VAL_BOOL)
31 {
32     data.d_bool = v;
33 }
34
35 int
36 COptionEvent::get_int() const
37 {
38     return value.data.d_int;
39 }
40
41 bool
42 COptionEvent::get_bool() const
43 {
44     return value.data.d_bool;
45 }
46
47 std::string
48 COptionEvent::get_string() const
49 {
50     return value.data.d_string;
51 }
52
53 std::vector<std::string>
54 COptionEvent::get_string_list() const
55 {
56     return value.data.d_strings;
57 }
58
59 std::vector<string_pair>
60 COptionEvent::get_string_pair_list() const
61 {
62     return value.data.d_string_pair_list;
63 }
64
65 IConfigurable::IConfigurable()
66 {
67     AOptionEventBus::instance().registerAsListener(this);
68 }
69
70 IConfigurable::~IConfigurable()
71 {
72     AOptionEventBus::instance().unregisterAsListener(this);
73 }
74
75 void
76 COptionEventBus::registerAsListener(IConfigurable* listener)
77 {
78     Subscribers::iterator found = find(m_listeners.begin(),
79                                        m_listeners.end(),
80                                        listener);
81     if (found == m_listeners.end())
82         m_listeners.push_back(listener);
83     else
84         assert(false && "already subscribed");
85 }
86
87 void
88 COptionEventBus::unregisterAsListener(IConfigurable* listener)
89 {
90     Subscribers::iterator found = find(m_listeners.begin(),
91                                        m_listeners.end(),
92                                        listener);
93     if (found != m_listeners.end())
94         m_listeners.erase(found);
95     else
96         assert(false && "not yet subscribed");
97 }
98
99 void
100 COptionEventBus::publishEvent(const COptionEvent& event)
101 {
102     Subscribers::iterator end = m_listeners.end();
103     for (Subscribers::iterator it = m_listeners.begin();
104          it != end; ++it) {
105         if ((*it)->onConfigChanged(event))
106             break;
107     }
108 }