Git init
[framework/uifw/isf.git] / ism / src / scim_filter_module.cpp
1 /*
2  * Smart Common Input Method
3  *
4  * Copyright (c) 2005 James Su <suzhe@tsinghua.org.cn>
5  *
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this program; if not, write to the
19  * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20  * Boston, MA  02111-1307  USA
21  *
22  * $Id: scim_filter_module.cpp,v 1.5 2005/05/24 12:22:51 suzhe Exp $
23  *
24  */
25
26 #define Uses_SCIM_FILTER_MODULE
27 #include "scim_private.h"
28 #include "scim.h"
29
30 namespace scim {
31
32 FilterModule::FilterModule ()
33     : m_filter_init (0),
34       m_filter_create_filter (0),
35       m_filter_get_filter_info (0),
36       m_number_of_filters (0)
37 {
38 }
39
40 FilterModule::FilterModule (const String &name, const ConfigPointer &config)
41     : m_filter_init (0),
42       m_filter_create_filter (0),
43       m_filter_get_filter_info (0),
44       m_number_of_filters (0)
45 {
46     load (name, config);
47 }
48
49 bool
50 FilterModule::load (const String &name, const ConfigPointer &config)
51 {
52     try {
53         if (!m_module.load (name, "Filter"))
54             return false;
55
56         m_filter_init =
57             (FilterModuleInitFunc) m_module.symbol ("scim_filter_module_init");
58
59         m_filter_create_filter =
60             (FilterModuleCreateFilterFunc) m_module.symbol ("scim_filter_module_create_filter");
61
62         m_filter_get_filter_info =
63             (FilterModuleGetFilterInfoFunc) m_module.symbol ("scim_filter_module_get_filter_info");
64
65         if (!m_filter_init || !m_filter_create_filter || !m_filter_get_filter_info ||
66             (m_number_of_filters = m_filter_init (config)) == 0) {
67             m_module.unload ();
68             m_filter_init = 0;
69             m_filter_create_filter = 0;
70             m_filter_get_filter_info = 0;
71             return false;
72         }
73     } catch (...) {
74         m_module.unload ();
75         m_filter_init = 0;
76         m_filter_create_filter = 0;
77         m_filter_get_filter_info = 0;
78         return false;
79     }
80
81     return true;
82 }
83
84 bool
85 FilterModule::unload ()
86 {
87     return m_module.unload ();
88 }
89
90 bool
91 FilterModule::valid () const
92 {
93     return (m_module.valid () && m_filter_init && m_number_of_filters > 0 &&
94             m_filter_create_filter && m_filter_get_filter_info);
95 }
96
97 FilterFactoryPointer
98 FilterModule::create_filter (unsigned int index) const
99 {
100     if (valid () && index < m_number_of_filters)
101         return m_filter_create_filter (index);
102
103     return FilterFactoryPointer (0);
104 }
105
106 bool
107 FilterModule::get_filter_info (unsigned int index, FilterInfo &info) const
108 {
109     if (valid () && index < m_number_of_filters)
110         return m_filter_get_filter_info (index, info);
111
112     return false;
113 }
114
115 unsigned int
116 FilterModule::number_of_filters () const
117 {
118     return m_number_of_filters;
119 }
120
121
122 int scim_get_filter_module_list (std::vector <String>& engine_list)
123 {
124     return scim_get_module_list (engine_list, "Filter");
125 }
126
127
128 } // namespace scim
129
130 /*
131 vi:ts=4:nowrap:ai:expandtab
132 */