2
* Copyright (c) 2009 Kov Chai <tchaikov@gmail.com>
4
* The contents of this file are subject to the terms of either the GNU Lesser
5
* General Public License Version 2.1 only ("LGPL") or the Common Development and
6
* Distribution License ("CDDL")(collectively, the "License"). You may not use this
7
* file except in compliance with the License. You can obtain a copy of the CDDL at
8
* http://www.opensource.org/licenses/cddl1.php and a copy of the LGPLv2.1 at
9
* http://www.opensource.org/licenses/lgpl-license.php. See the License for the
10
* specific language governing permissions and limitations under the License. When
11
* distributing the software, include this License Header Notice in each file and
12
* include the full text of the License in the License file as well as the
15
* NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
17
* For Covered Software in this distribution, this License shall be governed by the
18
* laws of the State of California (excluding conflict-of-law provisions).
19
* Any litigation relating to this License shall be subject to the jurisdiction of
20
* the Federal Courts of the Northern District of California and the state courts
21
* of the State of California, with venue lying in Santa Clara County, California.
25
* If you wish your version of this file to be governed by only the CDDL or only
26
* the LGPL Version 2.1, indicate your decision by adding "[Contributor]" elects to
27
* include this software in this distribution under the [CDDL or LGPL Version 2.1]
28
* license." If you don't indicate a single choice of license, a recipient has the
29
* option to distribute your version of this file under either the CDDL or the LGPL
30
* Version 2.1, or to extend the choice of license to its licensees as provided
31
* above. However, if you add LGPL Version 2.1 code and therefore, elected the LGPL
32
* Version 2 license, then the option applies only if the new code is made subject
33
* to such option by the copyright holder.
36
#include <sunpinyin.h>
37
#include "ibus_portable.h"
38
#include "sunpinyin_lookup_table.h"
40
SunPinyinLookupTable::SunPinyinLookupTable()
41
: Pointer<IBusLookupTable>(ibus_lookup_table_new (9, 0, TRUE, TRUE))
44
SunPinyinLookupTable::~SunPinyinLookupTable()
49
SunPinyinLookupTable::update_candidates(const ICandidateList& cl)
51
const int size = cl.size();
55
const int total = cl.total();
56
// expand the array in lookup_table
57
// we will fill the missing items in when we have them
58
ibus_lookup_table_set_page_size(*this, size);
59
g_array_set_size((*this)->candidates, total);
61
for (int i = 0, begin = 0; i < size; ++i) {
62
const int len = append_candidate(cl, i, begin);
69
//ibus_lookup_table_set_cursor_pos (m_lookup_table, index);
73
SunPinyinLookupTable::cursor_up()
75
ibus_lookup_table_cursor_down(*this);
80
SunPinyinLookupTable::cursor_down()
82
ibus_lookup_table_cursor_down(*this);
87
SunPinyinLookupTable::get_cursor_pos() const
89
return ibus_lookup_table_get_cursor_pos(*this);
92
// an alternative to ibus_lookup_table_append_candidate(m_lookup_table, text);
93
// if we can assume that WinHandler::updateCandiates() is called
94
// in sequence. we can use ibus_lookup_table_append_candidate()
96
ibus_lookup_table_set_candidate(IBusLookupTable *table,
100
g_return_if_fail (IBUS_IS_LOOKUP_TABLE (table));
101
g_return_if_fail (IBUS_IS_TEXT (text));
102
g_assert(index < table->candidates->len);
105
g_array_insert_val (table->candidates, index, text);
109
SunPinyinLookupTable::append_candidate(const ICandidateList& cl,
113
const TWCHAR* cand = 0;
116
cand = cl.candiString(item);
119
len = cl.candiSize(item);
120
ibus::Text text(ibus_text_new_from_ucs4(cand));
121
decorate_candidate(text, cl.candiType(item));
122
int index = get_current_page_start() + item;
123
ibus_lookup_table_set_candidate(*this, index, text);
128
SunPinyinLookupTable::decorate_candidate(ibus::Text text, int type)
131
case ICandidateList::BEST_WORD:
132
ibus_text_append_attribute (text, IBUS_ATTR_TYPE_FOREGROUND,
134
ibus_text_append_attribute (text, IBUS_ATTR_TYPE_UNDERLINE,
135
IBUS_ATTR_UNDERLINE_SINGLE, 0, -1);
137
case ICandidateList::USER_SELECTED_WORD:
139
case ICandidateList::NORMAL_WORD:
145
SunPinyinLookupTable::get_current_page_start() const
147
guint cursor = ibus_lookup_table_get_cursor_pos(*this);
148
guint cursor_in_page = ibus_lookup_table_get_cursor_in_page(*this);
149
return cursor - cursor_in_page;