/* -*- 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 #include #include #include #include #include #include #include #include #include #include #include #include using namespace ::com::sun::star::io; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::awt; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::util; using namespace ::com::sun::star::form; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::script; using namespace ::com::sun::star::container; using namespace ::svxform; FmFormObj::FmFormObj( SdrModel& rSdrModel, const OUString& rModelName) : SdrUnoObj(rSdrModel, rModelName) ,m_nPos(-1) ,m_pLastKnownRefDevice(nullptr) { // normally, this is done in SetUnoControlModel, but if the call happened in the base class ctor, // then our incarnation of it was not called (since we were not constructed at this time). impl_checkRefDevice_nothrow( true ); } FmFormObj::FmFormObj(SdrModel& rSdrModel) : SdrUnoObj(rSdrModel, "") ,m_nPos(-1) ,m_pLastKnownRefDevice(nullptr) { // Stuff that old SetModel also did: impl_checkRefDevice_nothrow(); } FmFormObj::~FmFormObj() { if (m_xEnvironmentHistory.is()) m_xEnvironmentHistory->dispose(); m_xEnvironmentHistory = nullptr; m_aEventsHistory.realloc(0); } void FmFormObj::SetObjEnv(const Reference< XIndexContainer > & xForm, const sal_Int32 nIdx, const Sequence< ScriptEventDescriptor >& rEvts) { m_xParent = xForm; aEvts = rEvts; m_nPos = nIdx; } void FmFormObj::ClearObjEnv() { m_xParent.clear(); aEvts.realloc( 0 ); m_nPos = -1; } void FmFormObj::impl_checkRefDevice_nothrow( bool _force ) { const FmFormModel* pFormModel = dynamic_cast(&getSdrModelFromSdrObject()); if ( !pFormModel || !pFormModel->ControlsUseRefDevice() ) return; OutputDevice* pCurrentRefDevice = pFormModel->GetRefDevice(); if ( ( m_pLastKnownRefDevice.get() == pCurrentRefDevice ) && !_force ) return; Reference< XControlModel > xControlModel( GetUnoControlModel() ); if ( !xControlModel.is() ) return; m_pLastKnownRefDevice = pCurrentRefDevice; if ( !m_pLastKnownRefDevice ) return; try { Reference< XPropertySet > xModelProps( GetUnoControlModel(), UNO_QUERY_THROW ); Reference< XPropertySetInfo > xPropertyInfo( xModelProps->getPropertySetInfo(), UNO_SET_THROW ); static const char sRefDevicePropName[] = "ReferenceDevice"; if ( xPropertyInfo->hasPropertyByName( sRefDevicePropName ) ) { VCLXDevice* pUnoRefDevice = new VCLXDevice; pUnoRefDevice->SetOutputDevice( m_pLastKnownRefDevice ); Reference< XDevice > xRefDevice( pUnoRefDevice ); xModelProps->setPropertyValue( sRefDevicePropName, makeAny( xRefDevice ) ); } } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION("svx"); } } void FmFormObj::impl_isolateControlModel_nothrow() { try { Reference< XChild > xControlModel( GetUnoControlModel(), UNO_QUERY ); if ( xControlModel.is() ) { Reference< XIndexContainer> xParent( xControlModel->getParent(), UNO_QUERY ); if ( xParent.is() ) { sal_Int32 nPos = getElementPos( xParent.get(), xControlModel ); xParent->removeByIndex( nPos ); } } } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION("svx"); } } void FmFormObj::handlePageChange(SdrPage* pOldPage, SdrPage* pNewPage) { FmFormPage* pOldFormPage(dynamic_cast< FmFormPage* >(getSdrPageFromSdrObject())); if ( pOldFormPage ) pOldFormPage->GetImpl().formObjectRemoved( *this ); FmFormPage* pNewFormPage = dynamic_cast( pNewPage ); if ( !pNewFormPage ) { // Maybe it makes sense to create an environment history here : if somebody set's our page to NULL, and we have a valid page before, // me may want to remember our place within the old page. For this we could create a new m_xEnvironmentHistory to store it. // So the next SetPage with a valid new page would restore that environment within the new page. // But for the original Bug (#57300#) we don't need that, so I omit it here. Maybe this will be implemented later. impl_isolateControlModel_nothrow(); SdrUnoObj::handlePageChange(pOldPage, pNewPage); return; } Reference< css::form::XForms > xNewPageForms = pNewFormPage->GetForms(); Reference< XIndexContainer > xNewParent; Sequence< ScriptEventDescriptor> aNewEvents; // calc the new parent for my model (within the new page's forms hierarchy) // do we have a history ? (from :Clone) if ( m_xEnvironmentHistory.is() ) { // the element in m_xEnvironmentHistory which is equivalent to my new parent (which (perhaps) has to be created within pNewPage->GetForms) // is the right-most element in the tree. Reference< XIndexContainer > xRightMostLeaf( m_xEnvironmentHistory, UNO_QUERY_THROW ); try { while ( xRightMostLeaf->getCount() ) { xRightMostLeaf.set( xRightMostLeaf->getByIndex( xRightMostLeaf->getCount() - 1 ), UNO_QUERY_THROW ); } xNewParent.set( ensureModelEnv( xRightMostLeaf, xNewPageForms ), UNO_QUERY_THROW ); // we successfully cloned the environment in m_xEnvironmentHistory, so we can use m_aEventsHistory // (which describes the events of our model at the moment m_xEnvironmentHistory was created) aNewEvents = m_aEventsHistory; } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION("svx"); } } if ( !xNewParent.is() ) { // are we a valid part of our current page forms ? Reference< XIndexContainer > xOldForms; if ( pOldFormPage ) xOldForms.set( pOldFormPage->GetForms(), UNO_QUERY_THROW ); if ( xOldForms.is() ) { // search (upward from our model) for xOldForms Reference< XChild > xSearch( GetUnoControlModel(), UNO_QUERY ); while (xSearch.is()) { if ( xSearch == xOldForms ) break; xSearch.set( xSearch->getParent(), UNO_QUERY ); } if ( xSearch.is() ) // implies xSearch == xOldForms, which means we're a valid part of our current page forms hierarchy { Reference< XChild > xMeAsChild( GetUnoControlModel(), UNO_QUERY ); xNewParent.set( ensureModelEnv( xMeAsChild->getParent(), xNewPageForms ), UNO_QUERY ); if ( xNewParent.is() ) { try { // transfer the events from our (model's) parent to the new (model's) parent, too Reference< XEventAttacherManager > xEventManager(xMeAsChild->getParent(), UNO_QUERY); Reference< XIndexAccess > xManagerAsIndex(xEventManager, UNO_QUERY); if (xManagerAsIndex.is()) { sal_Int32 nPos = getElementPos(xManagerAsIndex, xMeAsChild); if (nPos >= 0) aNewEvents = xEventManager->getScriptEvents(nPos); } else aNewEvents = aEvts; } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION("svx"); } } } } } // now set the page SdrUnoObj::handlePageChange(pOldPage, pNewPage); // place my model within the new parent container if (xNewParent.is()) { Reference< XFormComponent > xMeAsFormComp(GetUnoControlModel(), UNO_QUERY); if (xMeAsFormComp.is()) { // check if I have another parent (and remove me, if necessary) Reference< XIndexContainer > xOldParent(xMeAsFormComp->getParent(), UNO_QUERY); if (xOldParent.is()) { sal_Int32 nPos = getElementPos(xOldParent, xMeAsFormComp); if (nPos > -1) xOldParent->removeByIndex(nPos); } // and insert into the new container xNewParent->insertByIndex(xNewParent->getCount(), makeAny(xMeAsFormComp)); // transfer the events if (aNewEvents.hasElements()) { try { Reference< XEventAttacherManager > xEventManager(xNewParent, UNO_QUERY); Reference< XIndexAccess > xManagerAsIndex(xEventManager, UNO_QUERY); if (xManagerAsIndex.is()) { sal_Int32 nPos = getElementPos(xManagerAsIndex, xMeAsFormComp); DBG_ASSERT(nPos >= 0, "FmFormObj::SetPage : inserted but not present ?"); xEventManager->registerScriptEvents(nPos, aNewEvents); } } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION("svx"); } } } } // delete my history if (m_xEnvironmentHistory.is()) m_xEnvironmentHistory->dispose(); m_xEnvironmentHistory = nullptr; m_aEventsHistory.realloc(0); pNewFormPage->GetImpl().formObjectInserted( *this ); } SdrInventor FmFormObj::GetObjInventor() const { return SdrInventor::FmForm; } sal_uInt16 FmFormObj::GetObjIdentifier() const { return OBJ_UNO; } void FmFormObj::clonedFrom(const FmFormObj* _pSource) { DBG_ASSERT(_pSource != nullptr, "FmFormObj::clonedFrom : invalid source !"); if (m_xEnvironmentHistory.is()) m_xEnvironmentHistory->dispose(); m_xEnvironmentHistory = nullptr; m_aEventsHistory.realloc(0); Reference< XChild > xSourceAsChild(_pSource->GetUnoControlModel(), UNO_QUERY); if (!xSourceAsChild.is()) return; Reference< XInterface > xSourceContainer = xSourceAsChild->getParent(); m_xEnvironmentHistory = css::form::Forms::create( comphelper::getProcessComponentContext() ); ensureModelEnv(xSourceContainer, m_xEnvironmentHistory); m_aEventsHistory = aEvts; // if we were clone there was a call to operator=, so aEvts are exactly the events we need here... } FmFormObj* FmFormObj::CloneSdrObject(SdrModel& rTargetModel) const { FmFormObj* pFormObject = CloneHelper< FmFormObj >(rTargetModel); DBG_ASSERT(pFormObject != nullptr, "FmFormObj::Clone : invalid clone !"); if (pFormObject) pFormObject->clonedFrom(this); return pFormObject; } FmFormObj& FmFormObj::operator= (const FmFormObj& rObj) { if( this == &rObj ) return *this; SdrUnoObj::operator= (rObj); // If UnoControlModel is part of an event environment, // events may assigned to it. Reference< XFormComponent > xContent(rObj.xUnoControlModel, UNO_QUERY); if (xContent.is()) { Reference< XEventAttacherManager > xManager(xContent->getParent(), UNO_QUERY); Reference< XIndexAccess > xManagerAsIndex(xManager, UNO_QUERY); if (xManagerAsIndex.is()) { sal_Int32 nPos = getElementPos( xManagerAsIndex, xContent ); if ( nPos >= 0 ) aEvts = xManager->getScriptEvents( nPos ); } } else aEvts = rObj.aEvts; return *this; } void FmFormObj::NbcReformatText() { impl_checkRefDevice_nothrow(); SdrUnoObj::NbcReformatText(); } namespace { OUString lcl_getFormComponentAccessPath(const Reference< XInterface >& _xElement, Reference< XInterface >& _rTopLevelElement) { Reference< css::form::XFormComponent> xChild(_xElement, UNO_QUERY); Reference< css::container::XIndexAccess> xParent; if (xChild.is()) xParent.set(xChild->getParent(), UNO_QUERY); // while the current content is a form OUString sReturn; while (xChild.is()) { // get the content's relative pos within its parent container sal_Int32 nPos = getElementPos(xParent, xChild); // prepend this current relative pos OUString sCurrentIndex = OUString::number(nPos); if (!sReturn.isEmpty()) { sCurrentIndex += "\\"; sCurrentIndex += sReturn; } sReturn = sCurrentIndex; // travel up xChild.set(xParent, css::uno::UNO_QUERY); if (xChild.is()) xParent.set(xChild->getParent(), UNO_QUERY); } _rTopLevelElement = xParent; return sReturn; } } Reference< XInterface > FmFormObj::ensureModelEnv(const Reference< XInterface > & _rSourceContainer, const Reference& _rTopLevelDestContainer) { Reference< XInterface > xTopLevelSource; OUString sAccessPath = lcl_getFormComponentAccessPath(_rSourceContainer, xTopLevelSource); if (!xTopLevelSource.is()) // something went wrong, maybe _rSourceContainer isn't part of a valid forms hierarchy return Reference< XInterface > (); Reference< XIndexContainer > xDestContainer(_rTopLevelDestContainer, UNO_QUERY_THROW); Reference< XIndexContainer > xSourceContainer(xTopLevelSource, UNO_QUERY); DBG_ASSERT(xSourceContainer.is(), "FmFormObj::ensureModelEnv : the top level source is invalid !"); sal_Int32 nTokIndex = 0; do { OUString aToken = sAccessPath.getToken( 0, '\\', nTokIndex ); sal_uInt16 nIndex = static_cast(aToken.toInt32()); // get the DSS of the source form (we have to find an equivalent for) DBG_ASSERT(nIndexgetCount(), "FmFormObj::ensureModelEnv : invalid access path !"); Reference< XPropertySet > xSourceForm; xSourceContainer->getByIndex(nIndex) >>= xSourceForm; DBG_ASSERT(xSourceForm.is(), "FmFormObj::ensureModelEnv : invalid source form !"); Any aSrcCursorSource, aSrcCursorSourceType, aSrcDataSource; DBG_ASSERT(::comphelper::hasProperty(FM_PROP_COMMAND, xSourceForm) && ::comphelper::hasProperty(FM_PROP_COMMANDTYPE, xSourceForm) && ::comphelper::hasProperty(FM_PROP_DATASOURCE, xSourceForm), "FmFormObj::ensureModelEnv : invalid access path or invalid form (missing props) !"); // the parent access path should refer to a row set try { aSrcCursorSource = xSourceForm->getPropertyValue(FM_PROP_COMMAND); aSrcCursorSourceType = xSourceForm->getPropertyValue(FM_PROP_COMMANDTYPE); aSrcDataSource = xSourceForm->getPropertyValue(FM_PROP_DATASOURCE); } catch(Exception&) { OSL_FAIL("FmFormObj::ensureModelEnv : could not retrieve a source DSS !"); } // calc the number of (source) form siblings with the same DSS Reference< XPropertySet > xCurrentSourceForm, xCurrentDestForm; sal_Int16 nCurrentSourceIndex = 0; sal_Int32 nCurrentDestIndex = 0; while (nCurrentSourceIndex <= nIndex) { bool bEqualDSS = false; while (!bEqualDSS) // (we don't have to check nCurrentSourceIndex here : it's bound by nIndex) { xSourceContainer->getByIndex(nCurrentSourceIndex) >>= xCurrentSourceForm; DBG_ASSERT(xCurrentSourceForm.is(), "FmFormObj::ensureModelEnv : invalid form ancestor (2) !"); bEqualDSS = false; if (::comphelper::hasProperty(FM_PROP_DATASOURCE, xCurrentSourceForm)) { // it is a form try { if ( xCurrentSourceForm->getPropertyValue(FM_PROP_COMMAND) == aSrcCursorSource && xCurrentSourceForm->getPropertyValue(FM_PROP_COMMANDTYPE) == aSrcCursorSourceType && xCurrentSourceForm->getPropertyValue(FM_PROP_DATASOURCE) == aSrcDataSource ) { bEqualDSS = true; } } catch(Exception&) { OSL_FAIL("FmFormObj::ensureModelEnv : exception while getting a sibling's DSS !"); } } ++nCurrentSourceIndex; } DBG_ASSERT(bEqualDSS, "FmFormObj::ensureModelEnv : found no source form !"); // ??? at least the nIndex-th one should have been found ??? // now search the next one with the given DSS (within the destination container) bEqualDSS = false; while (!bEqualDSS && (nCurrentDestIndex < xDestContainer->getCount())) { xDestContainer->getByIndex(nCurrentDestIndex) >>= xCurrentDestForm; DBG_ASSERT(xCurrentDestForm.is(), "FmFormObj::ensureModelEnv : invalid destination form !"); bEqualDSS = false; if (::comphelper::hasProperty(FM_PROP_DATASOURCE, xCurrentDestForm)) { // it is a form try { if ( xCurrentDestForm->getPropertyValue(FM_PROP_COMMAND) == aSrcCursorSource && xCurrentDestForm->getPropertyValue(FM_PROP_COMMANDTYPE) == aSrcCursorSourceType && xCurrentDestForm->getPropertyValue(FM_PROP_DATASOURCE) == aSrcDataSource ) { bEqualDSS = true; } } catch(Exception&) { OSL_FAIL("FmFormObj::ensureModelEnv : exception while getting a destination DSS !"); } } ++nCurrentDestIndex; } if (!bEqualDSS) { // There is at least one more source form with the given DSS than destination forms are. // correct this ... try { // create and insert (into the destination) a copy of the form xCurrentDestForm.set( ::comphelper::getProcessServiceFactory()->createInstance("com.sun.star.form.component.DataForm"), UNO_QUERY_THROW ); ::comphelper::copyProperties( xCurrentSourceForm, xCurrentDestForm ); DBG_ASSERT(nCurrentDestIndex == xDestContainer->getCount(), "FmFormObj::ensureModelEnv : something went wrong with the numbers !"); xDestContainer->insertByIndex(nCurrentDestIndex, makeAny(xCurrentDestForm)); ++nCurrentDestIndex; // like nCurrentSourceIndex, nCurrentDestIndex now points 'behind' the form it actually means } catch(Exception&) { OSL_FAIL("FmFormObj::ensureModelEnv : something went seriously wrong while creating a new form !"); // no more options anymore ... return Reference< XInterface > (); } } } // now xCurrentDestForm is a form equivalent to xSourceForm (which means they have the same DSS and the same number // of left siblings with the same DSS, which counts for all their ancestors, too) // go down xDestContainer.set(xCurrentDestForm, UNO_QUERY); xSourceContainer.set(xSourceForm, UNO_QUERY); DBG_ASSERT(xDestContainer.is() && xSourceContainer.is(), "FmFormObj::ensureModelEnv : invalid container !"); } while ( nTokIndex >= 0 ); return Reference( xDestContainer, UNO_QUERY ); } FmFormObj* FmFormObj::GetFormObject( SdrObject* _pSdrObject ) { FmFormObj* pFormObject = dynamic_cast< FmFormObj* >( _pSdrObject ); if ( !pFormObject ) { SdrVirtObj* pVirtualObject = dynamic_cast< SdrVirtObj* >( _pSdrObject ); if ( pVirtualObject ) pFormObject = dynamic_cast< FmFormObj* >( &pVirtualObject->ReferencedObj() ); } return pFormObject; } const FmFormObj* FmFormObj::GetFormObject( const SdrObject* _pSdrObject ) { const FmFormObj* pFormObject = dynamic_cast< const FmFormObj* >( _pSdrObject ); if ( !pFormObject ) { const SdrVirtObj* pVirtualObject = dynamic_cast< const SdrVirtObj* >( _pSdrObject ); if ( pVirtualObject ) pFormObject = dynamic_cast< const FmFormObj* >( &pVirtualObject->GetReferencedObj() ); } return pFormObject; } void FmFormObj::SetUnoControlModel( const Reference< css::awt::XControlModel >& _rxModel ) { SdrUnoObj::SetUnoControlModel( _rxModel ); FmFormPage* pFormPage(dynamic_cast< FmFormPage* >(getSdrPageFromSdrObject())); if ( pFormPage ) pFormPage->GetImpl().formModelAssigned( *this ); impl_checkRefDevice_nothrow( true ); } bool FmFormObj::EndCreate( SdrDragStat& rStat, SdrCreateCmd eCmd ) { bool bResult = SdrUnoObj::EndCreate(rStat, eCmd); if ( bResult && SdrCreateCmd::ForceEnd == eCmd && rStat.GetView() ) { FmFormPage* pFormPage(dynamic_cast< FmFormPage* >(getSdrPageFromSdrObject())); if (nullptr != pFormPage) { try { Reference< XFormComponent > xContent( xUnoControlModel, UNO_QUERY_THROW ); Reference< XForm > xParentForm( xContent->getParent(), UNO_QUERY ); Reference< XIndexContainer > xFormToInsertInto; if ( !xParentForm.is() ) { // model is not yet part of a form component hierarchy xParentForm.set( pFormPage->GetImpl().findPlaceInFormComponentHierarchy( xContent ), UNO_SET_THROW ); xFormToInsertInto.set( xParentForm, UNO_QUERY_THROW ); } FmFormPageImpl::setUniqueName( xContent, xParentForm ); if ( xFormToInsertInto.is() ) xFormToInsertInto->insertByIndex( xFormToInsertInto->getCount(), makeAny( xContent ) ); } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION("svx"); } } FmFormView* pView( dynamic_cast< FmFormView* >( rStat.GetView() ) ); FmXFormView* pViewImpl = pView ? pView->GetImpl() : nullptr; OSL_ENSURE( pViewImpl, "FmFormObj::EndCreate: no view!?" ); if ( pViewImpl ) pViewImpl->onCreatedFormObject( *this ); } return bResult; } void FmFormObj::BrkCreate( SdrDragStat& rStat ) { SdrUnoObj::BrkCreate( rStat ); impl_isolateControlModel_nothrow(); FmFormView* pView( dynamic_cast< FmFormView* >( rStat.GetView() ) ); FmXFormView* pViewImpl = pView ? pView->GetImpl() : nullptr; OSL_ENSURE( pViewImpl, "FmFormObj::EndCreate: no view!?" ); if ( pViewImpl ) pViewImpl->breakCreateFormObject(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ eature/template_manager_improvements'>feature/template_manager_improvements LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-11-07sw: add .uno:DeleteContentControl commandcodewithvk
This command removes formatting for content controls such as rich text, checkbox, dropdown, picture, and date controls. It deletes only the content control formatting, not the actual content of the section. Here are some todos: - Add test case for delete - undo/redo for this uno command Change-Id: Ib1b3b62ff7d62fd971472eff49a58c5afd786dc8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175927 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.com> (cherry picked from commit 5d4ae3db293b0f9c46cbc09d0391806e1ed7b362) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176067 Tested-by: Jenkins Reviewed-by: vivek javiya <vivek.javiya@collabora.com>
2023-06-10sw content controls: add 'properties' to right-click context menuJustin Luth
Getting to the properties of a content control is buried pretty deep in the menu. Make it quickly available via a right-click, just like what is possible for fields. Change-Id: I6f094590dcfcad81dc623754bf9daf036e41aa3b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152837 Tested-by: Jenkins Reviewed-by: Justin Luth <jluth@mail.com>
2021-02-23tdf#140058 move "No List" position in context menu; add radio buttonSeth Chaiklin
for both text and table in Writer, Writer/Web, and forms Change-Id: I696dbcf3e027a2595e2eed7e9fb9585c352da184 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111176 Tested-by: Jenkins Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org>
2019-02-18tdf#123261 Styles items get checkbox option in menubar and popupmenuandreas kainz
Change-Id: I54d8aa665e290b735e90212f4d7dc47576415bca Reviewed-on: https://gerrit.libreoffice.org/67940 Reviewed-by: Heiko Tietze <tietze.heiko@gmail.com> Tested-by: Heiko Tietze <tietze.heiko@gmail.com>
2018-11-16tdf#121017 context menu swxform text: editstyle is always paragraph styleandreas kainz
Change-Id: I3e53e06ce55c377076234f08ce090c4904db8cb6 Reviewed-on: https://gerrit.libreoffice.org/63451 Reviewed-by: andreas_kainz <kainz.a@gmail.com> Tested-by: andreas_kainz <kainz.a@gmail.com>
2018-11-09tdf#119581 add FormatPaintbrush to text and table popupmenuandreas kainz
Change-Id: Ic88248078cb34a590396a84dd733818108d9dce4 Reviewed-on: https://gerrit.libreoffice.org/63124 Tested-by: Jenkins Reviewed-by: andreas_kainz <kainz.a@gmail.com>
2018-11-08tdf#121018 Split labels for sub menusMaxim Monastirsky
Change-Id: Ia59ecb8f7912157aee23a6f2b5ea4aa178dd20fa Reviewed-on: https://gerrit.libreoffice.org/63051 Tested-by: Jenkins Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
2018-11-01Context Menu: Remove Comment section in sw modulesandreas kainz
Change-Id: Id82af299502f92fe9024ab552505f086dffe9c71 Reviewed-on: https://gerrit.libreoffice.org/62762 Tested-by: Jenkins Reviewed-by: andreas_kainz <kainz.a@gmail.com>
2018-10-29sw modules: finish context menuesandreas kainz
Change-Id: Iacbda858faa758a17245482acc594fcedb6d2366 Reviewed-on: https://gerrit.libreoffice.org/62481 Tested-by: Jenkins Reviewed-by: andreas_kainz <kainz.a@gmail.com>
2018-10-27sw text context menu sync between different sw appsandreas kainz
tiny change in text context menu for writer Change-Id: I1c18f505b13a210c6e8544d9e0f20556fac97bdb Reviewed-on: https://gerrit.libreoffice.org/62242 Tested-by: Jenkins Reviewed-by: andreas_kainz <kainz.a@gmail.com>