/* -*- 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 #include #include #include #include #include #include #include #include #include #include #define PSH (&m_pView->GetWrtShell()) using namespace ::com::sun::star; // interactive separation SwHyphWrapper::SwHyphWrapper( SwView* pVw, uno::Reference< linguistic2::XHyphenator > const &rxHyph, bool bStart, bool bOther, bool bSelect ) : SvxSpellWrapper( pVw->GetEditWin().GetFrameWeld(), rxHyph, bStart, bOther ), m_pView( pVw ), m_nPageCount( 0 ), m_nPageStart( 0 ), m_bInSelection( bSelect ), m_bInfoBox( false ) { uno::Reference< linguistic2::XLinguProperties > xProp( GetLinguPropertySet() ); m_bAutomatic = xProp.is() && xProp->getIsHyphAuto(); } void SwHyphWrapper::SpellStart( SvxSpellArea eSpell ) { if( SvxSpellArea::Other == eSpell && m_nPageCount ) { ::EndProgress( m_pView->GetDocShell() ); m_nPageCount = 0; m_nPageStart = 0; } m_pView->HyphStart( eSpell ); } void SwHyphWrapper::SpellContinue() { // for automatic separation, make actions visible only at the end std::unique_ptr pWait; if( m_bAutomatic ) { PSH->StartAllAction(); pWait.reset(new SwWait( *m_pView->GetDocShell(), true )); } uno::Reference< uno::XInterface > xHyphWord = m_bInSelection ? PSH->HyphContinue( nullptr, nullptr ) : PSH->HyphContinue( &m_nPageCount, &m_nPageStart ); SetLast( xHyphWord ); // for automatic separation, make actions visible only at the end if( m_bAutomatic ) { PSH->EndAllAction(); pWait.reset(); } } void SwHyphWrapper::SpellEnd() { PSH->HyphEnd(); SvxSpellWrapper::SpellEnd(); } bool SwHyphWrapper::SpellMore() { PSH->Push(); m_bInfoBox = true; PSH->Combine(); return false; } void SwHyphWrapper::InsertHyphen( const sal_Int32 nPos ) { if( nPos) SwEditShell::InsertSoftHyph(nPos + 1); // does nPos == 1 really mean // insert hyphen after first char? // (instead of nPos == 0) else PSH->HyphIgnore(); } SwHyphWrapper::~SwHyphWrapper() { if( m_nPageCount ) ::EndProgress( m_pView->GetDocShell() ); if( m_bInfoBox && !Application::IsHeadlessModeEnabled() ) { std::unique_ptr xInfoBox(Application::CreateMessageDialog(m_pView->GetEditWin().GetFrameWeld(), VclMessageType::Info, VclButtonsType::Ok, SwResId(STR_HYP_OK))); xInfoBox->run(); } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */