tdf#130857 qt weld: Implement QtInstanceWidget::get_text_height
[LibreOffice.git] / svx / source / unodialogs / textconversiondlgs / chinese_dictionarydialog.cxx
blobd2abde7d9675593059221450bf7a7937efe79136
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 #include "chinese_dictionarydialog.hxx"
22 #include <cppuhelper/bootstrap.hxx>
23 #include <com/sun/star/i18n/TextConversionOption.hpp>
24 #include <com/sun/star/linguistic2/ConversionDictionaryType.hpp>
25 #include <com/sun/star/linguistic2/ConversionPropertyType.hpp>
26 #include <com/sun/star/linguistic2/ConversionDictionaryList.hpp>
27 #include <com/sun/star/linguistic2/XConversionPropertyType.hpp>
28 #include <com/sun/star/util/XFlushable.hpp>
29 #include <com/sun/star/lang/Locale.hpp>
30 #include <o3tl/safeint.hxx>
31 #include <unotools/lingucfg.hxx>
32 #include <unotools/linguprops.hxx>
33 #include <utility>
34 #include <osl/diagnose.h>
36 namespace textconversiondlgs
39 using namespace ::com::sun::star;
40 using namespace ::com::sun::star::uno;
42 DictionaryList::DictionaryList(std::unique_ptr<weld::TreeView> xControl)
43 : m_xControl(std::move(xControl))
44 , m_xIter(m_xControl->make_iterator())
45 , m_pED_Term(nullptr)
46 , m_pED_Mapping(nullptr)
47 , m_pLB_Property(nullptr)
49 m_xControl->make_sorted();
52 OUString DictionaryList::getPropertyTypeName( sal_Int16 nConversionPropertyType ) const
54 if (!m_pLB_Property || !m_pLB_Property->get_count())
55 return OUString();
57 sal_uInt16 nPos = static_cast<sal_uInt16>( nConversionPropertyType )-1;
58 if (nPos < m_pLB_Property->get_count())
59 return m_pLB_Property->get_text(nPos);
60 return m_pLB_Property->get_text(0);
63 void DictionaryList::save()
65 if (!m_xDictionary.is())
66 return;
68 Reference< linguistic2::XConversionPropertyType > xPropertyType( m_xDictionary, uno::UNO_QUERY );
70 sal_Int32 nN;
71 DictionaryEntry* pE;
73 for( nN = m_aToBeDeleted.size(); nN--; )
75 pE = m_aToBeDeleted[nN];
76 m_xDictionary->removeEntry( pE->m_aTerm, pE->m_aMapping );
78 int nRowCount = m_xControl->n_children();
79 for( nN = nRowCount; nN--; )
81 pE = getEntryOnPos( nN );
82 if(pE->m_bNewEntry)
84 try
86 m_xDictionary->addEntry( pE->m_aTerm, pE->m_aMapping );
87 xPropertyType->setPropertyType( pE->m_aTerm, pE->m_aMapping, pE->m_nConversionPropertyType );
89 catch( uno::Exception& )
95 Reference< util::XFlushable > xFlush( m_xDictionary, uno::UNO_QUERY );
96 if( xFlush.is() )
97 xFlush->flush();
100 void DictionaryList::deleteAll()
102 sal_Int32 nN;
103 int nRowCount = m_xControl->n_children();
104 for( nN = nRowCount; nN--; )
105 deleteEntryOnPos( nN );
106 for( nN = m_aToBeDeleted.size(); nN--; )
108 DictionaryEntry* pE = m_aToBeDeleted[nN];
109 delete pE;
111 m_aToBeDeleted.clear();
114 void DictionaryList::refillFromDictionary( sal_Int32 nTextConversionOptions )
116 deleteAll();
118 if(!m_xDictionary.is())
119 return;
121 const Sequence< OUString > aLeftList( m_xDictionary->getConversionEntries( linguistic2::ConversionDirection_FROM_LEFT ) );
123 Reference< linguistic2::XConversionPropertyType > xPropertyType( m_xDictionary, uno::UNO_QUERY );
125 OUString aRight;
126 sal_Int16 nConversionPropertyType;
128 for(const OUString& aLeft : aLeftList)
130 Sequence< OUString > aRightList( m_xDictionary->getConversions(
131 aLeft, 0, aLeft.getLength()
132 , linguistic2::ConversionDirection_FROM_LEFT, nTextConversionOptions ) );
134 if(aRightList.getLength()!=1)
136 OSL_FAIL("The Chinese Translation Dictionary should have exactly one Mapping for each term.");
137 continue;
140 aRight = aRightList[0];
141 nConversionPropertyType = linguistic2::ConversionPropertyType::OTHER;
142 if(xPropertyType.is())
143 nConversionPropertyType = xPropertyType->getPropertyType(aLeft, aRight);
145 DictionaryEntry* pEntry = new DictionaryEntry( aLeft, aRight, nConversionPropertyType );
147 m_xControl->append(m_xIter.get());
148 m_xControl->set_text(*m_xIter, pEntry->m_aTerm, 0);
149 m_xControl->set_text(*m_xIter, pEntry->m_aMapping, 1);
150 m_xControl->set_text(*m_xIter, getPropertyTypeName(pEntry->m_nConversionPropertyType), 2);
151 m_xControl->set_id(*m_xIter, weld::toId(pEntry));
155 DictionaryEntry* DictionaryList::getFirstSelectedEntry() const
157 DictionaryEntry* pRet=nullptr;
158 int nN = m_xControl->get_selected_index();
159 if (nN != -1)
160 pRet = getEntryOnPos( nN );
161 return pRet;
164 DictionaryEntry* DictionaryList::getEntryOnPos(sal_Int32 nPos) const
166 OUString sLBEntry = m_xControl->get_id(nPos);
167 return weld::fromId<DictionaryEntry*>(sLBEntry);
170 DictionaryEntry* DictionaryList::getTermEntry( std::u16string_view rTerm ) const
172 int nRowCount = m_xControl->n_children();
173 for( sal_Int32 nN = nRowCount; nN--; )
175 DictionaryEntry* pE = getEntryOnPos( nN );
176 if( pE && rTerm == pE->m_aTerm )
177 return pE;
179 return nullptr;
182 bool DictionaryList::hasTerm( std::u16string_view rTerm ) const
184 return getTermEntry(rTerm) !=nullptr ;
187 void DictionaryList::addEntry(const OUString& rTerm, const OUString& rMapping,
188 sal_Int16 nConversionPropertyType, int nPos)
190 if( hasTerm( rTerm ) )
191 return;
193 DictionaryEntry* pEntry = new DictionaryEntry( rTerm, rMapping, nConversionPropertyType, true );
194 m_xControl->insert(nPos, m_xIter.get());
195 m_xControl->set_text(*m_xIter, pEntry->m_aTerm, 0);
196 m_xControl->set_text(*m_xIter, pEntry->m_aMapping, 1);
197 m_xControl->set_text(*m_xIter, getPropertyTypeName(pEntry->m_nConversionPropertyType), 2);
198 m_xControl->set_id(*m_xIter, weld::toId(pEntry));
199 m_xControl->select(*m_xIter);
202 void DictionaryList::deleteEntryOnPos( sal_Int32 nPos )
204 DictionaryEntry* pEntry = getEntryOnPos( nPos );
205 m_xControl->remove(nPos);
206 if (pEntry)
208 if( pEntry->m_bNewEntry )
209 delete pEntry;
210 else
211 m_aToBeDeleted.push_back( pEntry );
215 int DictionaryList::deleteEntries( std::u16string_view rTerm )
217 int nPos = -1;
218 int nRowCount = m_xControl->n_children();
219 for (sal_Int32 nN = nRowCount; nN--;)
221 DictionaryEntry* pCurEntry = getEntryOnPos( nN );
222 if( rTerm == pCurEntry->m_aTerm )
224 nPos = nN;
225 m_xControl->remove(nN);
226 if( pCurEntry->m_bNewEntry )
227 delete pCurEntry;
228 else
229 m_aToBeDeleted.push_back( pCurEntry );
232 return nPos;
235 DictionaryEntry::DictionaryEntry( OUString aTerm, OUString aMapping
236 , sal_Int16 nConversionPropertyType
237 , bool bNewEntry )
238 : m_aTerm(std::move( aTerm ))
239 , m_aMapping(std::move( aMapping ))
240 , m_nConversionPropertyType( nConversionPropertyType )
241 , m_bNewEntry( bNewEntry )
243 if( m_nConversionPropertyType == 0 )
244 m_nConversionPropertyType = 1;
247 DictionaryEntry::~DictionaryEntry()
251 IMPL_LINK_NOARG(ChineseDictionaryDialog, SizeAllocHdl, const Size&, void)
253 DictionaryList* pControl = m_xCT_DictionaryToTraditional->get_visible() ?
254 m_xCT_DictionaryToTraditional.get() :
255 m_xCT_DictionaryToSimplified.get();
256 std::vector<int> aWidths;
257 int x1, x2, y, width, height;
258 if (!m_xED_Mapping->get_extents_relative_to(pControl->get_widget(), x1, y, width, height))
259 return;
260 aWidths.push_back(x1);
261 if (!m_xLB_Property->get_extents_relative_to(pControl->get_widget(), x2, y, width, height))
262 return;
263 aWidths.push_back(x2 - x1);
264 m_xCT_DictionaryToTraditional->get_widget().set_column_fixed_widths(aWidths);
265 m_xCT_DictionaryToSimplified->get_widget().set_column_fixed_widths(aWidths);
268 void DictionaryList::init(const Reference< linguistic2::XConversionDictionary>& xDictionary,
269 weld::Entry *pED_Term, weld::Entry *pED_Mapping, weld::ComboBox *pLB_Property)
271 if (m_xDictionary.is())
272 return;
274 m_xDictionary = xDictionary;
276 m_pED_Term = pED_Term;
277 m_pED_Mapping = pED_Mapping;
278 m_pLB_Property = pLB_Property;
280 m_xControl->set_sort_column(0);
281 m_xControl->set_sort_indicator(TRISTATE_TRUE, 0);
283 std::vector<int> aWidths
285 o3tl::narrowing<int>(m_pED_Term->get_preferred_size().Width()),
286 o3tl::narrowing<int>(m_pED_Mapping->get_preferred_size().Width())
288 m_xControl->set_column_fixed_widths(aWidths);
291 void ChineseDictionaryDialog::initDictionaryControl(DictionaryList *pList,
292 const Reference< linguistic2::XConversionDictionary>& xDictionary)
294 //set widgets to track the width of for columns
295 pList->init(xDictionary,
296 m_xED_Term.get(), m_xED_Mapping.get(), m_xLB_Property.get());
299 ChineseDictionaryDialog::ChineseDictionaryDialog(weld::Window* pParent)
300 : GenericDialogController(pParent, u"svx/ui/chinesedictionary.ui"_ustr, u"ChineseDictionaryDialog"_ustr)
301 , m_nTextConversionOptions(i18n::TextConversionOption::NONE)
302 , m_xRB_To_Simplified(m_xBuilder->weld_radio_button(u"tradtosimple"_ustr))
303 , m_xRB_To_Traditional(m_xBuilder->weld_radio_button(u"simpletotrad"_ustr))
304 , m_xCB_Reverse(m_xBuilder->weld_check_button(u"reverse"_ustr))
305 , m_xED_Term(m_xBuilder->weld_entry(u"term"_ustr))
306 , m_xED_Mapping(m_xBuilder->weld_entry(u"mapping"_ustr))
307 , m_xLB_Property(m_xBuilder->weld_combo_box(u"property"_ustr))
308 , m_xCT_DictionaryToSimplified(new DictionaryList(m_xBuilder->weld_tree_view(u"tradtosimpleview"_ustr)))
309 , m_xCT_DictionaryToTraditional(new DictionaryList(m_xBuilder->weld_tree_view(u"simpletotradview"_ustr)))
310 , m_xPB_Add(m_xBuilder->weld_button(u"add"_ustr))
311 , m_xPB_Modify(m_xBuilder->weld_button(u"modify"_ustr))
312 , m_xPB_Delete(m_xBuilder->weld_button(u"delete"_ustr))
314 m_xCT_DictionaryToSimplified->set_size_request(-1, m_xCT_DictionaryToSimplified->get_height_rows(8));
315 m_xCT_DictionaryToTraditional->set_size_request(-1, m_xCT_DictionaryToTraditional->get_height_rows(8));
317 SvtLinguConfig aLngCfg;
318 bool bValue;
319 Any aAny( aLngCfg.GetProperty( UPN_IS_REVERSE_MAPPING ) );
320 if( aAny >>= bValue )
321 m_xCB_Reverse->set_active( bValue );
323 m_xLB_Property->set_active(0);
325 Reference< linguistic2::XConversionDictionary > xDictionary_To_Simplified;
326 Reference< linguistic2::XConversionDictionary > xDictionary_To_Traditional;
327 //get dictionaries
329 if(!m_xContext.is())
330 m_xContext.set( ::cppu::defaultBootstrap_InitialComponentContext() );
331 if(m_xContext.is())
333 Reference< linguistic2::XConversionDictionaryList > xDictionaryList = linguistic2::ConversionDictionaryList::create(m_xContext);
334 Reference< container::XNameContainer > xContainer( xDictionaryList->getDictionaryContainer() );
335 if(xContainer.is())
339 OUString aNameTo_Simplified(u"ChineseT2S"_ustr);
340 OUString aNameTo_Traditional(u"ChineseS2T"_ustr);
341 lang::Locale aLocale;
342 aLocale.Language = "zh";
344 if( xContainer->hasByName( aNameTo_Simplified ) )
345 xDictionary_To_Simplified.set(
346 xContainer->getByName( aNameTo_Simplified ), UNO_QUERY );
347 else
349 aLocale.Country = "TW";
350 xDictionary_To_Simplified =
351 xDictionaryList->addNewDictionary( aNameTo_Simplified
352 , aLocale, linguistic2::ConversionDictionaryType::SCHINESE_TCHINESE
355 if (xDictionary_To_Simplified.is())
356 xDictionary_To_Simplified->setActive( true );
359 if( xContainer->hasByName( aNameTo_Traditional ) )
360 xDictionary_To_Traditional.set(
361 xContainer->getByName( aNameTo_Traditional ), UNO_QUERY );
362 else
364 aLocale.Country = "CN";
365 xDictionary_To_Traditional =
366 xDictionaryList->addNewDictionary( aNameTo_Traditional
367 ,aLocale, linguistic2::ConversionDictionaryType::SCHINESE_TCHINESE);
369 if (xDictionary_To_Traditional.is())
370 xDictionary_To_Traditional->setActive( true );
373 catch(const uno::Exception& )
380 //init dictionary controls
381 initDictionaryControl(m_xCT_DictionaryToSimplified.get(), xDictionary_To_Simplified);
382 initDictionaryControl(m_xCT_DictionaryToTraditional.get(), xDictionary_To_Traditional);
384 //set hdl
385 m_xCT_DictionaryToSimplified->connect_column_clicked(LINK(this, ChineseDictionaryDialog, ToSimplifiedHeaderBarClick));
386 m_xCT_DictionaryToTraditional->connect_column_clicked(LINK(this, ChineseDictionaryDialog, ToTraditionalHeaderBarClick));
388 updateAfterDirectionChange();
390 m_xED_Term->connect_changed( LINK( this, ChineseDictionaryDialog, EditFieldsHdl ) );
391 m_xED_Mapping->connect_changed( LINK( this, ChineseDictionaryDialog, EditFieldsHdl ) );
392 m_xLB_Property->connect_changed( LINK( this, ChineseDictionaryDialog, EditFieldsListBoxHdl ) );
394 m_xRB_To_Simplified->connect_toggled( LINK( this, ChineseDictionaryDialog, DirectionHdl ) );
396 m_xCT_DictionaryToSimplified->connect_changed( LINK( this, ChineseDictionaryDialog, MappingSelectHdl ));
397 m_xCT_DictionaryToTraditional->connect_changed( LINK( this, ChineseDictionaryDialog, MappingSelectHdl ));
399 m_xPB_Add->connect_clicked( LINK( this, ChineseDictionaryDialog, AddHdl ) );
400 m_xPB_Modify->connect_clicked( LINK( this, ChineseDictionaryDialog, ModifyHdl ) );
401 m_xPB_Delete->connect_clicked( LINK( this, ChineseDictionaryDialog, DeleteHdl ) );
403 m_xED_Mapping->connect_size_allocate(LINK(this, ChineseDictionaryDialog, SizeAllocHdl));
404 m_xLB_Property->connect_size_allocate(LINK(this, ChineseDictionaryDialog, SizeAllocHdl));
407 ChineseDictionaryDialog::~ChineseDictionaryDialog()
411 void ChineseDictionaryDialog::setDirectionAndTextConversionOptions( bool bDirectionToSimplified, sal_Int32 nTextConversionOptions /*i18n::TextConversionOption*/ )
413 if( bDirectionToSimplified == m_xRB_To_Simplified->get_active()
414 && nTextConversionOptions == m_nTextConversionOptions )
415 return;
417 m_nTextConversionOptions = nTextConversionOptions;
419 if (bDirectionToSimplified)
420 m_xRB_To_Simplified->set_active(true);
421 else
422 m_xRB_To_Traditional->set_active(true);
423 updateAfterDirectionChange();
426 IMPL_LINK_NOARG(ChineseDictionaryDialog, DirectionHdl, weld::Toggleable&, void)
428 updateAfterDirectionChange();
431 void ChineseDictionaryDialog::updateAfterDirectionChange()
433 Reference< linguistic2::XConversionDictionary > xDictionary;
435 if (m_xRB_To_Simplified->get_active())
437 m_xCT_DictionaryToTraditional->hide();
438 m_xCT_DictionaryToSimplified->show();
439 xDictionary = m_xCT_DictionaryToSimplified->m_xDictionary;
441 else
443 m_xCT_DictionaryToSimplified->hide();
444 m_xCT_DictionaryToTraditional->show();
445 xDictionary = m_xCT_DictionaryToTraditional->m_xDictionary;
448 updateButtons();
451 IMPL_LINK_NOARG(ChineseDictionaryDialog, EditFieldsListBoxHdl, weld::ComboBox&, void)
453 updateButtons();
456 IMPL_LINK_NOARG(ChineseDictionaryDialog, EditFieldsHdl, weld::Entry&, void)
458 updateButtons();
461 IMPL_LINK_NOARG(ChineseDictionaryDialog, MappingSelectHdl, weld::TreeView&, void)
463 DictionaryEntry* pE = getActiveDictionary().getFirstSelectedEntry();
464 if (pE)
466 m_xED_Term->set_text( pE->m_aTerm );
467 m_xED_Mapping->set_text( pE->m_aMapping );
468 sal_Int16 nPos = pE->m_nConversionPropertyType-1;
469 if (nPos<0 || nPos>=m_xLB_Property->get_count())
470 nPos=0;
471 if (m_xLB_Property->get_count())
472 m_xLB_Property->set_active(nPos);
475 updateButtons();
478 bool ChineseDictionaryDialog::isEditFieldsHaveContent() const
480 return !m_xED_Term->get_text().isEmpty() && !m_xED_Mapping->get_text().isEmpty();
483 bool ChineseDictionaryDialog::isEditFieldsContentEqualsSelectedListContent() const
485 DictionaryEntry* pE = getActiveDictionary().getFirstSelectedEntry();
486 if( pE )
488 if (pE->m_aTerm != m_xED_Term->get_text())
489 return false;
490 if (pE->m_aMapping != m_xED_Mapping->get_text())
491 return false;
492 if (pE->m_nConversionPropertyType != m_xLB_Property->get_active() + 1)
493 return false;
494 return true;
496 return false;
499 const DictionaryList& ChineseDictionaryDialog::getActiveDictionary() const
501 if( m_xRB_To_Traditional->get_active() )
502 return *m_xCT_DictionaryToTraditional;
503 return *m_xCT_DictionaryToSimplified;
506 DictionaryList& ChineseDictionaryDialog::getActiveDictionary()
508 if( m_xRB_To_Traditional->get_active() )
509 return *m_xCT_DictionaryToTraditional;
510 return *m_xCT_DictionaryToSimplified;
513 const DictionaryList& ChineseDictionaryDialog::getReverseDictionary() const
515 if( m_xRB_To_Traditional->get_active() )
516 return *m_xCT_DictionaryToSimplified;
517 return *m_xCT_DictionaryToTraditional;
520 DictionaryList& ChineseDictionaryDialog::getReverseDictionary()
522 if( m_xRB_To_Traditional->get_active() )
523 return *m_xCT_DictionaryToSimplified;
524 return *m_xCT_DictionaryToTraditional;
527 void ChineseDictionaryDialog::updateButtons()
529 bool bAdd = isEditFieldsHaveContent() && !getActiveDictionary().hasTerm(m_xED_Term->get_text());
530 m_xPB_Add->set_sensitive( bAdd );
532 m_xPB_Delete->set_sensitive(!bAdd && getActiveDictionary().get_selected_index() != -1);
534 bool bModify = false;
536 DictionaryEntry* pFirstSelectedEntry = getActiveDictionary().getFirstSelectedEntry();
537 bModify = !bAdd && pFirstSelectedEntry && pFirstSelectedEntry->m_aTerm == m_xED_Term->get_text();
538 if( bModify && isEditFieldsContentEqualsSelectedListContent() )
539 bModify = false;
541 m_xPB_Modify->set_sensitive( bModify );
544 IMPL_LINK_NOARG(ChineseDictionaryDialog, AddHdl, weld::Button&, void)
546 if( !isEditFieldsHaveContent() )
547 return;
549 sal_Int16 nConversionPropertyType = m_xLB_Property->get_active() + 1;
551 getActiveDictionary().addEntry( m_xED_Term->get_text(), m_xED_Mapping->get_text(), nConversionPropertyType );
553 if( m_xCB_Reverse->get_active() )
555 getReverseDictionary().deleteEntries( m_xED_Mapping->get_text() );
556 getReverseDictionary().addEntry( m_xED_Mapping->get_text(), m_xED_Term->get_text(), nConversionPropertyType );
559 updateButtons();
562 IMPL_LINK_NOARG(ChineseDictionaryDialog, ModifyHdl, weld::Button&, void)
564 OUString aTerm( m_xED_Term->get_text() );
565 OUString aMapping( m_xED_Mapping->get_text() );
566 sal_Int16 nConversionPropertyType = m_xLB_Property->get_active() + 1;
568 DictionaryList& rActive = getActiveDictionary();
569 DictionaryList& rReverse = getReverseDictionary();
571 DictionaryEntry* pE = rActive.getFirstSelectedEntry();
572 if( pE && pE->m_aTerm != aTerm )
573 return;
575 if( pE )
577 if( pE->m_aMapping != aMapping || pE->m_nConversionPropertyType != nConversionPropertyType )
579 if( m_xCB_Reverse->get_active() )
581 rReverse.deleteEntries( pE->m_aMapping );
582 int nPos = rReverse.deleteEntries( aMapping );
583 rReverse.addEntry( aMapping, aTerm, nConversionPropertyType, nPos );
586 int nPos = rActive.deleteEntries( aTerm );
587 rActive.addEntry( aTerm, aMapping, nConversionPropertyType, nPos );
591 updateButtons();
594 IMPL_LINK_NOARG(ChineseDictionaryDialog, DeleteHdl, weld::Button&, void)
596 DictionaryList& rActive = getActiveDictionary();
597 DictionaryList& rReverse = getReverseDictionary();
599 int nEntry = rActive.get_selected_index();
600 if (nEntry != -1)
602 DictionaryEntry* pEntry = rActive.getEntryOnPos(nEntry);
603 if (pEntry)
605 OUString aMapping = pEntry->m_aMapping;
606 rActive.deleteEntryOnPos(nEntry);
607 if (m_xCB_Reverse->get_active())
608 rReverse.deleteEntries(aMapping);
612 updateButtons();
615 short ChineseDictionaryDialog::run()
617 sal_Int32 nTextConversionOptions = m_nTextConversionOptions;
618 if(m_nTextConversionOptions & i18n::TextConversionOption::USE_CHARACTER_VARIANTS )
619 nTextConversionOptions = nTextConversionOptions^i18n::TextConversionOption::USE_CHARACTER_VARIANTS ;
621 m_xCT_DictionaryToSimplified->refillFromDictionary( nTextConversionOptions );
622 m_xCT_DictionaryToTraditional->refillFromDictionary( m_nTextConversionOptions );
624 short nRet = GenericDialogController::run();
626 if( nRet == RET_OK )
628 //save settings to configuration
629 SvtLinguConfig aLngCfg;
630 aLngCfg.SetProperty( UPN_IS_REVERSE_MAPPING, uno::Any(m_xCB_Reverse->get_active()) );
632 m_xCT_DictionaryToSimplified->save();
633 m_xCT_DictionaryToTraditional->save();
636 m_xCT_DictionaryToSimplified->deleteAll();
637 m_xCT_DictionaryToTraditional->deleteAll();
639 return nRet;
642 void ChineseDictionaryDialog::HeaderBarClick(DictionaryList& rList, int nColumn)
644 bool bSortAtoZ = rList.get_sort_order();
646 //set new arrow positions in headerbar
647 if (nColumn == rList.get_sort_column())
649 bSortAtoZ = !bSortAtoZ;
650 rList.set_sort_order(bSortAtoZ);
652 else
654 rList.set_sort_indicator(TRISTATE_INDET, rList.get_sort_column());
655 rList.set_sort_column(nColumn);
658 //sort lists
659 rList.set_sort_indicator(bSortAtoZ ? TRISTATE_TRUE : TRISTATE_FALSE, nColumn);
662 IMPL_LINK(ChineseDictionaryDialog, ToSimplifiedHeaderBarClick, int, nColumn, void)
664 HeaderBarClick(*m_xCT_DictionaryToSimplified, nColumn);
667 IMPL_LINK(ChineseDictionaryDialog, ToTraditionalHeaderBarClick, int, nColumn, void)
669 HeaderBarClick(*m_xCT_DictionaryToTraditional, nColumn);
672 } //end namespace
674 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */