1
0
Fork 0
libreoffice/cui/source/options/optjsearch.cxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

395 lines
17 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <tools/debug.hxx>
#include <unotools/searchopt.hxx>
#include <i18nutil/transliteration.hxx>
#include "optjsearch.hxx"
SvxJSearchOptionsPage::SvxJSearchOptionsPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet)
: SfxTabPage(pPage, pController, u"cui/ui/optjsearchpage.ui"_ustr, u"OptJSearchPage"_ustr, &rSet)
, m_xMatchCase(m_xBuilder->weld_check_button(u"matchcase"_ustr))
, m_xMatchFullHalfWidth(m_xBuilder->weld_check_button(u"matchfullhalfwidth"_ustr))
, m_xMatchHiraganaKatakana(m_xBuilder->weld_check_button(u"matchhiraganakatakana"_ustr))
, m_xMatchContractions(m_xBuilder->weld_check_button(u"matchcontractions"_ustr))
, m_xMatchMinusDashChoon(m_xBuilder->weld_check_button(u"matchminusdashchoon"_ustr))
, m_xMatchRepeatCharMarks(m_xBuilder->weld_check_button(u"matchrepeatcharmarks"_ustr))
, m_xMatchVariantFormKanji(m_xBuilder->weld_check_button(u"matchvariantformkanji"_ustr))
, m_xMatchOldKanaForms(m_xBuilder->weld_check_button(u"matcholdkanaforms"_ustr))
, m_xMatchDiziDuzu(m_xBuilder->weld_check_button(u"matchdiziduzu"_ustr))
, m_xMatchBavaHafa(m_xBuilder->weld_check_button(u"matchbavahafa"_ustr))
, m_xMatchTsithichiDhizi(m_xBuilder->weld_check_button(u"matchtsithichidhizi"_ustr))
, m_xMatchHyuiyuByuvyu(m_xBuilder->weld_check_button(u"matchhyuiyubyuvyu"_ustr))
, m_xMatchSesheZeje(m_xBuilder->weld_check_button(u"matchseshezeje"_ustr))
, m_xMatchIaiya(m_xBuilder->weld_check_button(u"matchiaiya"_ustr))
, m_xMatchKiku(m_xBuilder->weld_check_button(u"matchkiku"_ustr))
, m_xMatchProlongedSoundMark(m_xBuilder->weld_check_button(u"matchprolongedsoundmark"_ustr))
, m_xIgnorePunctuation(m_xBuilder->weld_check_button(u"ignorepunctuation"_ustr))
, m_xIgnoreWhitespace(m_xBuilder->weld_check_button(u"ignorewhitespace"_ustr))
, m_xIgnoreMiddleDot(m_xBuilder->weld_check_button(u"ignoremiddledot"_ustr))
, nTransliterationFlags(TransliterationFlags::NONE)
, bSaveOptions(true)
{
}
SvxJSearchOptionsPage::~SvxJSearchOptionsPage()
{
}
std::unique_ptr<SfxTabPage> SvxJSearchOptionsPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rSet)
{
return std::make_unique<SvxJSearchOptionsPage>(pPage, pController, *rSet);
}
void SvxJSearchOptionsPage::SetTransliterationFlags( TransliterationFlags nSettings )
{
bool bVal(nSettings & TransliterationFlags::IGNORE_CASE);
m_xMatchCase ->set_active( bVal ); //! treat as equal uppercase/lowercase
bVal = bool(nSettings & TransliterationFlags::IGNORE_WIDTH);
m_xMatchFullHalfWidth ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::IGNORE_KANA);
m_xMatchHiraganaKatakana ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreSize_ja_JP);
m_xMatchContractions ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreMinusSign_ja_JP);
m_xMatchMinusDashChoon ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreIterationMark_ja_JP);
m_xMatchRepeatCharMarks ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreTraditionalKanji_ja_JP);
m_xMatchVariantFormKanji ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreTraditionalKana_ja_JP);
m_xMatchOldKanaForms ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreZiZu_ja_JP);
m_xMatchDiziDuzu ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreBaFa_ja_JP);
m_xMatchBavaHafa ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreTiJi_ja_JP);
m_xMatchTsithichiDhizi ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreHyuByu_ja_JP);
m_xMatchHyuiyuByuvyu ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreSeZe_ja_JP);
m_xMatchSesheZeje ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreIandEfollowedByYa_ja_JP);
m_xMatchIaiya ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreKiKuFollowedBySa_ja_JP);
m_xMatchKiku ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreSeparator_ja_JP);
m_xIgnorePunctuation ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreSpace_ja_JP);
m_xIgnoreWhitespace ->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreProlongedSoundMark_ja_JP);
m_xMatchProlongedSoundMark->set_active( bVal );
bVal = bool(nSettings & TransliterationFlags::ignoreMiddleDot_ja_JP);
m_xIgnoreMiddleDot ->set_active( bVal );
nTransliterationFlags = nSettings;
}
TransliterationFlags SvxJSearchOptionsPage::GetTransliterationFlags_Impl()
{
TransliterationFlags nTmp = TransliterationFlags::NONE;
if (m_xMatchCase->get_active()) //! treat as equal uppercase/lowercase
nTmp |= TransliterationFlags::IGNORE_CASE;
if (m_xMatchFullHalfWidth->get_active())
nTmp |= TransliterationFlags::IGNORE_WIDTH;
if (m_xMatchHiraganaKatakana->get_active())
nTmp |= TransliterationFlags::IGNORE_KANA;
if (m_xMatchContractions->get_active())
nTmp |= TransliterationFlags::ignoreSize_ja_JP;
if (m_xMatchMinusDashChoon->get_active())
nTmp |= TransliterationFlags::ignoreMinusSign_ja_JP;
if (m_xMatchRepeatCharMarks->get_active())
nTmp |= TransliterationFlags::ignoreIterationMark_ja_JP;
if (m_xMatchVariantFormKanji->get_active())
nTmp |= TransliterationFlags::ignoreTraditionalKanji_ja_JP;
if (m_xMatchOldKanaForms->get_active())
nTmp |= TransliterationFlags::ignoreTraditionalKana_ja_JP;
if (m_xMatchDiziDuzu->get_active())
nTmp |= TransliterationFlags::ignoreZiZu_ja_JP;
if (m_xMatchBavaHafa->get_active())
nTmp |= TransliterationFlags::ignoreBaFa_ja_JP;
if (m_xMatchTsithichiDhizi->get_active())
nTmp |= TransliterationFlags::ignoreTiJi_ja_JP;
if (m_xMatchHyuiyuByuvyu->get_active())
nTmp |= TransliterationFlags::ignoreHyuByu_ja_JP;
if (m_xMatchSesheZeje->get_active())
nTmp |= TransliterationFlags::ignoreSeZe_ja_JP;
if (m_xMatchIaiya->get_active())
nTmp |= TransliterationFlags::ignoreIandEfollowedByYa_ja_JP;
if (m_xMatchKiku->get_active())
nTmp |= TransliterationFlags::ignoreKiKuFollowedBySa_ja_JP;
if (m_xIgnorePunctuation->get_active())
nTmp |= TransliterationFlags::ignoreSeparator_ja_JP;
if (m_xIgnoreWhitespace->get_active())
nTmp |= TransliterationFlags::ignoreSpace_ja_JP;
if (m_xMatchProlongedSoundMark->get_active())
nTmp |= TransliterationFlags::ignoreProlongedSoundMark_ja_JP;
if (m_xIgnoreMiddleDot->get_active())
nTmp |= TransliterationFlags::ignoreMiddleDot_ja_JP;
nTransliterationFlags = nTmp;
return nTransliterationFlags;
}
void SvxJSearchOptionsPage::Reset( const SfxItemSet* )
{
SvtSearchOptions aOpt;
// read settings from configuration
m_xMatchCase ->set_active(!aOpt.IsMatchCase() ); //! treat as equal uppercase/lowercase
m_xMatchFullHalfWidth ->set_active( aOpt.IsMatchFullHalfWidthForms() );
m_xMatchHiraganaKatakana ->set_active( aOpt.IsMatchHiraganaKatakana() );
m_xMatchContractions ->set_active( aOpt.IsMatchContractions() );
m_xMatchMinusDashChoon ->set_active( aOpt.IsMatchMinusDashChoon() );
m_xMatchRepeatCharMarks ->set_active( aOpt.IsMatchRepeatCharMarks() );
m_xMatchVariantFormKanji ->set_active( aOpt.IsMatchVariantFormKanji() );
m_xMatchOldKanaForms ->set_active( aOpt.IsMatchOldKanaForms() );
m_xMatchDiziDuzu ->set_active( aOpt.IsMatchDiziDuzu() );
m_xMatchBavaHafa ->set_active( aOpt.IsMatchBavaHafa() );
m_xMatchTsithichiDhizi ->set_active( aOpt.IsMatchTsithichiDhizi() );
m_xMatchHyuiyuByuvyu ->set_active( aOpt.IsMatchHyuiyuByuvyu() );
m_xMatchSesheZeje ->set_active( aOpt.IsMatchSesheZeje() );
m_xMatchIaiya ->set_active( aOpt.IsMatchIaiya() );
m_xMatchKiku ->set_active( aOpt.IsMatchKiku() );
m_xIgnorePunctuation ->set_active( aOpt.IsIgnorePunctuation() );
m_xIgnoreWhitespace ->set_active( aOpt.IsIgnoreWhitespace() );
m_xMatchProlongedSoundMark ->set_active( aOpt.IsIgnoreProlongedSoundMark() );
m_xIgnoreMiddleDot ->set_active( aOpt.IsIgnoreMiddleDot() );
nTransliterationFlags = GetTransliterationFlags_Impl();
DBG_ASSERT( nTransliterationFlags == aOpt.GetTransliterationFlags(),
"Transliteration settings different" );
m_xMatchCase ->save_state();
m_xMatchFullHalfWidth ->save_state();
m_xMatchHiraganaKatakana ->save_state();
m_xMatchContractions ->save_state();
m_xMatchMinusDashChoon ->save_state();
m_xMatchRepeatCharMarks ->save_state();
m_xMatchVariantFormKanji ->save_state();
m_xMatchOldKanaForms ->save_state();
m_xMatchDiziDuzu ->save_state();
m_xMatchBavaHafa ->save_state();
m_xMatchTsithichiDhizi ->save_state();
m_xMatchHyuiyuByuvyu ->save_state();
m_xMatchSesheZeje ->save_state();
m_xMatchIaiya ->save_state();
m_xMatchKiku ->save_state();
m_xIgnorePunctuation ->save_state();
m_xIgnoreWhitespace ->save_state();
m_xMatchProlongedSoundMark ->save_state();
m_xIgnoreMiddleDot ->save_state();
}
OUString SvxJSearchOptionsPage::GetAllStrings()
{
OUString sAllStrings;
OUString labels[] = { u"label1"_ustr, u"label2"_ustr };
for (const auto& label : labels)
{
if (const auto pString = m_xBuilder->weld_label(label))
sAllStrings += pString->get_label() + " ";
}
OUString checkButton[] = { u"matchcase"_ustr,
u"matchfullhalfwidth"_ustr,
u"matchhiraganakatakana"_ustr,
u"matchcontractions"_ustr,
u"matchminusdashchoon"_ustr,
u"matchrepeatcharmarks"_ustr,
u"matchvariantformkanji"_ustr,
u"matcholdkanaforms"_ustr,
u"ignorepunctuation"_ustr,
u"ignorewhitespace"_ustr,
u"matchdiziduzu"_ustr,
u"matchbavahafa"_ustr,
u"matchtsithichidhizi"_ustr,
u"matchhyuiyubyuvyu"_ustr,
u"matchseshezeje"_ustr,
u"matchiaiya"_ustr,
u"matchkiku"_ustr,
u"matchprolongedsoundmark"_ustr,
u"ignoremiddledot"_ustr };
for (const auto& check : checkButton)
{
if (const auto pString = m_xBuilder->weld_check_button(check))
sAllStrings += pString->get_label() + " ";
}
return sAllStrings.replaceAll("_", "");
}
bool SvxJSearchOptionsPage::FillItemSet( SfxItemSet* )
{
TransliterationFlags nOldVal = nTransliterationFlags;
nTransliterationFlags = GetTransliterationFlags_Impl();
bool bModified = nOldVal != nTransliterationFlags;
if (!bSaveOptions)
return bModified;
bModified = false;
SvtSearchOptions aOpt;
bool bNewVal, bChanged;
bNewVal = m_xMatchCase->get_active(); //! treat as equal uppercase/lowercase
bChanged = m_xMatchCase->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchCase(!bNewVal );
bModified = true;
}
bNewVal = m_xMatchFullHalfWidth->get_active();
bChanged = m_xMatchFullHalfWidth->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchFullHalfWidthForms( bNewVal );
bModified = true;
}
bNewVal = m_xMatchHiraganaKatakana->get_active();
bChanged = m_xMatchHiraganaKatakana->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchHiraganaKatakana( bNewVal );
bModified = true;
}
bNewVal = m_xMatchContractions->get_active();
bChanged = m_xMatchContractions->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchContractions( bNewVal );
bModified = true;
}
bNewVal = m_xMatchMinusDashChoon->get_active();
bChanged = m_xMatchMinusDashChoon->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchMinusDashChoon( bNewVal );
bModified = true;
}
bNewVal = m_xMatchRepeatCharMarks->get_active();
bChanged = m_xMatchRepeatCharMarks->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchRepeatCharMarks( bNewVal );
bModified = true;
}
bNewVal = m_xMatchVariantFormKanji->get_active();
bChanged = m_xMatchVariantFormKanji->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchVariantFormKanji( bNewVal );
bModified = true;
}
bNewVal = m_xMatchOldKanaForms->get_active();
bChanged = m_xMatchOldKanaForms->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchOldKanaForms( bNewVal );
bModified = true;
}
bNewVal = m_xMatchDiziDuzu->get_active();
bChanged = m_xMatchDiziDuzu->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchDiziDuzu( bNewVal );
bModified = true;
}
bNewVal = m_xMatchBavaHafa->get_active();
bChanged = m_xMatchBavaHafa->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchBavaHafa( bNewVal );
bModified = true;
}
bNewVal = m_xMatchTsithichiDhizi->get_active();
bChanged = m_xMatchTsithichiDhizi->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchTsithichiDhizi( bNewVal );
bModified = true;
}
bNewVal = m_xMatchHyuiyuByuvyu->get_active();
bChanged = m_xMatchHyuiyuByuvyu->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchHyuiyuByuvyu( bNewVal );
bModified = true;
}
bNewVal = m_xMatchSesheZeje->get_active();
bChanged = m_xMatchSesheZeje->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchSesheZeje( bNewVal );
bModified = true;
}
bNewVal = m_xMatchIaiya->get_active();
bChanged = m_xMatchIaiya->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchIaiya( bNewVal );
bModified = true;
}
bNewVal = m_xMatchKiku->get_active();
bChanged = m_xMatchKiku->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetMatchKiku( bNewVal );
bModified = true;
}
bNewVal = m_xIgnorePunctuation->get_active();
bChanged = m_xIgnorePunctuation->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetIgnorePunctuation( bNewVal );
bModified = true;
}
bNewVal = m_xIgnoreWhitespace->get_active();
bChanged = m_xIgnoreWhitespace->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetIgnoreWhitespace( bNewVal );
bModified = true;
}
bNewVal = m_xMatchProlongedSoundMark->get_active();
bChanged = m_xMatchProlongedSoundMark->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetIgnoreProlongedSoundMark( bNewVal );
bModified = true;
}
bNewVal = m_xIgnoreMiddleDot->get_active();
bChanged = m_xIgnoreMiddleDot->get_state_changed_from_saved();
if (bChanged)
{
aOpt.SetIgnoreMiddleDot( bNewVal );
bModified = true;
}
if (bModified)
aOpt.Commit();
return bModified;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */