diff options
Diffstat (limited to 'svx/source/tbxctrls/tbunosearchcontrollers.cxx')
-rw-r--r-- | svx/source/tbxctrls/tbunosearchcontrollers.cxx | 139 |
1 files changed, 137 insertions, 2 deletions
diff --git a/svx/source/tbxctrls/tbunosearchcontrollers.cxx b/svx/source/tbxctrls/tbunosearchcontrollers.cxx index b385b976d4b8..db1a1698adc0 100644 --- a/svx/source/tbxctrls/tbunosearchcontrollers.cxx +++ b/svx/source/tbxctrls/tbunosearchcontrollers.cxx @@ -72,6 +72,7 @@ constexpr OUString COMMAND_DOWNSEARCH = u".uno:DownSearch"_ustr; constexpr OUString COMMAND_UPSEARCH = u".uno:UpSearch"_ustr; constexpr OUStringLiteral COMMAND_FINDALL = u".uno:FindAll"; constexpr OUString COMMAND_MATCHCASE = u".uno:MatchCase"_ustr; +constexpr OUString COMMAND_MATCHDIACRITICS = u".uno:MatchDiacritics"_ustr; constexpr OUString COMMAND_SEARCHFORMATTED = u".uno:SearchFormattedDisplayString"_ustr; class CheckButtonItemWindow final : public InterimItemWindow @@ -93,6 +94,12 @@ public: return m_xWidget->get_active(); } + void set_active(bool bActive) + { + if (m_xWidget) + m_xWidget->set_active(bActive); + } + virtual void dispose() override { m_xWidget.reset(); @@ -128,6 +135,7 @@ void impl_executeSearch( const css::uno::Reference< css::uno::XComponentContext OUString sFindText; bool aMatchCase = false; + bool aMatchDiacritics = false; bool bSearchFormatted = false; if ( pToolBox ) { @@ -150,6 +158,11 @@ void impl_executeSearch( const css::uno::Reference< css::uno::XComponentContext CheckButtonItemWindow* pItemWin = static_cast<CheckButtonItemWindow*>(pToolBox->GetItemWindow(id)); if (pItemWin) aMatchCase = pItemWin->get_active(); + } else if ( sItemCommand == COMMAND_MATCHDIACRITICS ) + { + CheckButtonItemWindow* pItemWin = static_cast<CheckButtonItemWindow*>(pToolBox->GetItemWindow(id)); + if (pItemWin) + aMatchDiacritics = pItemWin->get_active(); } else if ( sItemCommand == COMMAND_SEARCHFORMATTED ) { CheckButtonItemWindow* pItemWin = static_cast<CheckButtonItemWindow*>(pToolBox->GetItemWindow(id)); @@ -162,9 +175,10 @@ void impl_executeSearch( const css::uno::Reference< css::uno::XComponentContext TransliterationFlags nFlags = TransliterationFlags::NONE; if (!aMatchCase) nFlags |= TransliterationFlags::IGNORE_CASE; + if (!aMatchDiacritics) + nFlags |= TransliterationFlags::IGNORE_DIACRITICS_CTL; if (SvtCTLOptions::IsCTLFontEnabled()) - nFlags |= TransliterationFlags::IGNORE_DIACRITICS_CTL - | TransliterationFlags::IGNORE_KASHIDA_CTL; + nFlags |= TransliterationFlags::IGNORE_KASHIDA_CTL; auto aArgs( comphelper::InitPropertySequence( { { "SearchItem.SearchString", css::uno::Any( sFindText ) }, @@ -825,6 +839,8 @@ public: // XStatusListener virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& rEvent ) override; + virtual void SAL_CALL click() override; + private: VclPtr<CheckButtonItemWindow> m_xMatchCaseControl; }; @@ -893,6 +909,117 @@ void SAL_CALL MatchCaseToolboxController::statusChanged( const css::frame::Featu { } +void SAL_CALL MatchCaseToolboxController::click() +{ + if (m_xMatchCaseControl) + { + bool bCurrent = m_xMatchCaseControl->get_active(); + m_xMatchCaseControl->set_active(!bCurrent); + } +} + +typedef cppu::ImplInheritanceHelper< ::svt::ToolboxController, css::lang::XServiceInfo> MatchDiacriticsToolboxController_Base; +class MatchDiacriticsToolboxController : public MatchDiacriticsToolboxController_Base +{ +public: + MatchDiacriticsToolboxController( const css::uno::Reference< css::uno::XComponentContext >& rxContext ); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + + // XComponent + virtual void SAL_CALL dispose() override; + + // XInitialization + virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) override; + + // XToolbarController + virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) override; + + // XStatusListener + virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& rEvent ) override; + + virtual void SAL_CALL click() override; + +private: + VclPtr<CheckButtonItemWindow> m_xMatchDiacriticsControl; +}; + +MatchDiacriticsToolboxController::MatchDiacriticsToolboxController( const css::uno::Reference< css::uno::XComponentContext >& rxContext ) + : MatchDiacriticsToolboxController_Base( rxContext, + css::uno::Reference< css::frame::XFrame >(), + COMMAND_MATCHDIACRITICS ) + , m_xMatchDiacriticsControl(nullptr) +{ +} + +// XServiceInfo +OUString SAL_CALL MatchDiacriticsToolboxController::getImplementationName() +{ + return u"com.sun.star.svx.MatchDiacriticsToolboxController"_ustr; +} + +sal_Bool SAL_CALL MatchDiacriticsToolboxController::supportsService( const OUString& ServiceName ) +{ + return cppu::supportsService(this, ServiceName); +} + +css::uno::Sequence< OUString > SAL_CALL MatchDiacriticsToolboxController::getSupportedServiceNames() +{ + return { u"com.sun.star.frame.ToolbarController"_ustr }; +} + +// XComponent +void SAL_CALL MatchDiacriticsToolboxController::dispose() +{ + SolarMutexGuard aSolarMutexGuard; + + SearchToolbarControllersManager::createControllersManager().freeController(m_xFrame, m_aCommandURL); + + svt::ToolboxController::dispose(); + + m_xMatchDiacriticsControl.disposeAndClear(); +} + +// XInitialization +void SAL_CALL MatchDiacriticsToolboxController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) +{ + svt::ToolboxController::initialize(aArguments); + + SearchToolbarControllersManager::createControllersManager().registryController(m_xFrame, css::uno::Reference< css::frame::XStatusListener >(this), m_aCommandURL); +} + +css::uno::Reference< css::awt::XWindow > SAL_CALL MatchDiacriticsToolboxController::createItemWindow( const css::uno::Reference< css::awt::XWindow >& xParent ) +{ + css::uno::Reference< css::awt::XWindow > xItemWindow; + + VclPtr<vcl::Window> pParent = VCLUnoHelper::GetWindow( xParent ); + if ( pParent ) + { + ToolBox* pToolbar = static_cast<ToolBox*>(pParent.get()); + m_xMatchDiacriticsControl = VclPtr<CheckButtonItemWindow>::Create(pToolbar, SvxResId(RID_SVXSTR_FINDBAR_MATCHDIACRITICS)); + } + xItemWindow = VCLUnoHelper::GetInterface(m_xMatchDiacriticsControl); + + return xItemWindow; +} + +// XStatusListener +void SAL_CALL MatchDiacriticsToolboxController::statusChanged( const css::frame::FeatureStateEvent& ) +{ +} + +void SAL_CALL MatchDiacriticsToolboxController::click() +{ + if (m_xMatchDiacriticsControl) + { + bool bCurrent = m_xMatchDiacriticsControl->get_active(); + m_xMatchDiacriticsControl->set_active(!bCurrent); + } +} + typedef cppu::ImplInheritanceHelper< ::svt::ToolboxController, css::lang::XServiceInfo> SearchFormattedToolboxController_Base; class SearchFormattedToolboxController : public SearchFormattedToolboxController_Base { @@ -1483,6 +1610,14 @@ com_sun_star_svx_MatchCaseToolboxController_get_implementation( } extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * +com_sun_star_svx_MatchDiacriticsToolboxController_get_implementation( + css::uno::XComponentContext *context, + css::uno::Sequence<css::uno::Any> const &) +{ + return cppu::acquire(new MatchDiacriticsToolboxController(context)); +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_svx_SearchFormattedToolboxController_get_implementation( css::uno::XComponentContext *context, css::uno::Sequence<css::uno::Any> const &) |