diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2017-10-16 17:31:23 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2017-10-16 17:31:23 +0200 |
commit | 2d3535a78aa1b3e2714adfa65cd73bd0fe02427e (patch) | |
tree | 0346b78c0f9b268bdfd16cac8da6e8883e72f645 /svx/source/inc | |
parent | f589797f1cb4085f0ba69f3dab2d31e0cbbf701e (diff) |
Move svx include files to common include directory
...that are included from various source directories. Change done in
preparation of loplugin:includeform.
Change-Id: I9191e80aa721c376f17219e4d10eb83929e38e14
Diffstat (limited to 'svx/source/inc')
-rw-r--r-- | svx/source/inc/DefaultShapesPanel.hxx | 77 | ||||
-rw-r--r-- | svx/source/inc/ShapesUtil.hxx | 38 | ||||
-rw-r--r-- | svx/source/inc/cell.hxx | 225 | ||||
-rw-r--r-- | svx/source/inc/celltypes.hxx | 97 | ||||
-rw-r--r-- | svx/source/inc/tablemodel.hxx | 211 |
5 files changed, 648 insertions, 0 deletions
diff --git a/svx/source/inc/DefaultShapesPanel.hxx b/svx/source/inc/DefaultShapesPanel.hxx new file mode 100644 index 000000000000..3759b1d859cd --- /dev/null +++ b/svx/source/inc/DefaultShapesPanel.hxx @@ -0,0 +1,77 @@ +/* -*- 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 . + */ +#ifndef INCLUDED_SVX_SOURCE_INC_DEFAULTSHAPESPANEL_HXX +#define INCLUDED_SVX_SOURCE_INC_DEFAULTSHAPESPANEL_HXX + +#include <vcl/ctrl.hxx> +#include <com/sun/star/frame/XFrame.hpp> + +#include <map> +#include <svx/sidebar/PanelLayout.hxx> +#include <vcl/layout.hxx> +#include <svtools/valueset.hxx> +#include "ShapesUtil.hxx" + +using namespace css; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::frame; + +namespace svx { namespace sidebar { + +/** This panel provides buttons for inserting shapes into a document. +*/ +class DefaultShapesPanel + : public PanelLayout, public SvxShapeCommandsMap +{ +public: + DefaultShapesPanel ( + vcl::Window* pParent, + const css::uno::Reference<css::frame::XFrame>& rxFrame); + static VclPtr<vcl::Window> Create( + vcl::Window* pParent, + const css::uno::Reference<css::frame::XFrame>& rxFrame); + virtual ~DefaultShapesPanel() override; + virtual void dispose() override; + +private: + VclPtr<ValueSet> mpLineArrowSet; + VclPtr<ValueSet> mpCurveSet; + VclPtr<ValueSet> mpConnectorSet; + VclPtr<ValueSet> mpBasicShapeSet; + VclPtr<ValueSet> mpSymbolShapeSet; + VclPtr<ValueSet> mpBlockArrowSet; + VclPtr<ValueSet> mpFlowchartSet; + VclPtr<ValueSet> mpCalloutSet; + VclPtr<ValueSet> mpStarSet; + VclPtr<ValueSet> mp3DObjectSet; + VclPtr<VclScrolledWindow> mpScrollWindow; + Reference< XFrame > mxFrame; + std::map<VclPtr<ValueSet>, std::map<sal_uInt16, rtl::OUString>> mpShapesSetMap; + + void populateShapes(); + void Initialize(); + DECL_LINK( ShapeSelectHdl, ValueSet*, void ); +}; + + +} } // end of namespace sd::sidebar + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file diff --git a/svx/source/inc/ShapesUtil.hxx b/svx/source/inc/ShapesUtil.hxx new file mode 100644 index 000000000000..e6385c9a69d0 --- /dev/null +++ b/svx/source/inc/ShapesUtil.hxx @@ -0,0 +1,38 @@ +/* -*- 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 . + */ +#ifndef INCLUDED_SVX_SOURCE_INC_SHAPESUTIL_HXX +#define INCLUDED_SVX_SOURCE_INC_SHAPESUTIL_HXX +#include <map> +#include <rtl/ustring.hxx> + +namespace svx{ namespace sidebar { + +class SvxShapeCommandsMap +{ +public: + SvxShapeCommandsMap(); + std::map<sal_uInt16, rtl::OUString> mpLineShapes, mpCurveShapes, + mpConnectorShapes, mpBasicShapes, mpSymbolShapes, + mpBlockArrowShapes, mpFlowchartShapes, + mpCalloutShapes, mpStarShapes, mp3DShapes; +}; +}} + +#endif +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file diff --git a/svx/source/inc/cell.hxx b/svx/source/inc/cell.hxx new file mode 100644 index 000000000000..3a061c58475d --- /dev/null +++ b/svx/source/inc/cell.hxx @@ -0,0 +1,225 @@ +/* -*- 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 . + */ + +#ifndef INCLUDED_SVX_SOURCE_INC_CELL_HXX +#define INCLUDED_SVX_SOURCE_INC_CELL_HXX + +#include <com/sun/star/table/XMergeableCell.hpp> +#include <com/sun/star/awt/XLayoutConstrains.hpp> +#include <com/sun/star/beans/XMultiPropertyStates.hpp> +#include <com/sun/star/lang/XEventListener.hpp> + +#include <rtl/ref.hxx> +#include <svl/style.hxx> +#include "svx/sdtaitm.hxx" +#include "tablemodel.hxx" +#include "editeng/unotext.hxx" +#include "svx/svdtext.hxx" + + +class SfxItemSet; +class OutlinerParaObject; +class SdrObject; + +namespace sdr { namespace properties { + class TextProperties; +} } + + +namespace sdr { namespace table { + + +class SVX_DLLPUBLIC Cell : public SdrText, + public SvxUnoTextBase, + public css::table::XMergeableCell, + public css::awt::XLayoutConstrains, + public css::lang::XEventListener, + public ::cppu::OWeakObject +{ + friend class CellUndo; + +public: + SVX_DLLPRIVATE static rtl::Reference< Cell > create( SdrTableObj& rTableObj, OutlinerParaObject* pOutlinerParaObject ); + + // private + SVX_DLLPRIVATE void dispose(); + + // SdrTextShape proxy + bool IsActiveCell(); + bool IsTextEditActive(); + SVX_DLLPRIVATE bool hasText() const; + + SVX_DLLPRIVATE void cloneFrom( const CellRef& rCell ); + + SVX_DLLPRIVATE void setCellRect( ::tools::Rectangle const & rCellRect ) { maCellRect = rCellRect; } + SVX_DLLPRIVATE const ::tools::Rectangle& getCellRect() const { return maCellRect; } + SVX_DLLPRIVATE ::tools::Rectangle& getCellRect() { return maCellRect; } + + OutlinerParaObject* GetEditOutlinerParaObject() const; + SVX_DLLPRIVATE void SetStyleSheet( SfxStyleSheet* pStyleSheet, bool bDontRemoveHardAttr ); + SVX_DLLPRIVATE virtual SfxStyleSheet* GetStyleSheet() const override; + SVX_DLLPRIVATE void TakeTextAnchorRect(tools::Rectangle& rAnchorRect) const; + + SVX_DLLPRIVATE virtual const SfxItemSet& GetItemSet() const override; + SVX_DLLPRIVATE void SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, bool bClearAllItems); + void SetMergedItem(const SfxPoolItem& rItem); + + SVX_DLLPRIVATE sal_Int32 getMinimumWidth(); + SVX_DLLPRIVATE sal_Int32 getMinimumHeight(); + + SVX_DLLPRIVATE long GetTextLeftDistance() const; + SVX_DLLPRIVATE long GetTextRightDistance() const; + SVX_DLLPRIVATE long GetTextUpperDistance() const; + SVX_DLLPRIVATE long GetTextLowerDistance() const; + + SVX_DLLPRIVATE SdrTextVertAdjust GetTextVerticalAdjust() const; + SdrTextHorzAdjust GetTextHorizontalAdjust() const; + + SVX_DLLPRIVATE virtual void SetModel(SdrModel* pNewModel) override; + + SVX_DLLPRIVATE void merge( sal_Int32 nColumnSpan, sal_Int32 nRowSpan ); + SVX_DLLPRIVATE void mergeContent( const CellRef& xSourceCell ); + SVX_DLLPRIVATE void replaceContentAndFormating( const CellRef& xSourceCell ); + + SVX_DLLPRIVATE void setMerged(); + + SVX_DLLPRIVATE void copyFormatFrom( const CellRef& xSourceCell ); + + // XInterface + SVX_DLLPRIVATE virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& Type ) override; + SVX_DLLPRIVATE virtual void SAL_CALL acquire() throw () override; + SVX_DLLPRIVATE virtual void SAL_CALL release() throw () override; + + // XTypeProvider + SVX_DLLPRIVATE virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; + SVX_DLLPRIVATE virtual css::uno::Sequence< ::sal_Int8 > SAL_CALL getImplementationId( ) override; + + // XLayoutConstrains + SVX_DLLPRIVATE virtual css::awt::Size SAL_CALL getMinimumSize() override; + SVX_DLLPRIVATE virtual css::awt::Size SAL_CALL getPreferredSize() override; + SVX_DLLPRIVATE virtual css::awt::Size SAL_CALL calcAdjustedSize( const css::awt::Size& aNewSize ) override; + + // XMergeableCell + SVX_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getRowSpan() override; + SVX_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getColumnSpan() override; + SVX_DLLPRIVATE virtual sal_Bool SAL_CALL isMerged() override; + + // XCell + SVX_DLLPRIVATE virtual OUString SAL_CALL getFormula() override; + SVX_DLLPRIVATE virtual void SAL_CALL setFormula( const OUString& aFormula ) override; + SVX_DLLPRIVATE virtual double SAL_CALL getValue() override; + SVX_DLLPRIVATE virtual void SAL_CALL setValue( double nValue ) override; + SVX_DLLPRIVATE virtual css::table::CellContentType SAL_CALL getType() override; + SVX_DLLPRIVATE virtual sal_Int32 SAL_CALL getError() override; + + // css::beans::XPropertySet + SVX_DLLPRIVATE virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override; + SVX_DLLPRIVATE virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override; + SVX_DLLPRIVATE virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override; + SVX_DLLPRIVATE virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override; + SVX_DLLPRIVATE virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override; + SVX_DLLPRIVATE virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + SVX_DLLPRIVATE virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + + // XMultiPropertySet + SVX_DLLPRIVATE virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues ) override; + SVX_DLLPRIVATE virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames ) override; + SVX_DLLPRIVATE virtual void SAL_CALL addPropertiesChangeListener( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override; + SVX_DLLPRIVATE virtual void SAL_CALL removePropertiesChangeListener( const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override; + SVX_DLLPRIVATE virtual void SAL_CALL firePropertiesChangeEvent( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) override; + + // css::beans::XPropertyState + SVX_DLLPRIVATE virtual css::beans::PropertyState SAL_CALL getPropertyState( const OUString& PropertyName ) override; + SVX_DLLPRIVATE virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) override; + SVX_DLLPRIVATE virtual void SAL_CALL setPropertyToDefault( const OUString& PropertyName ) override; + SVX_DLLPRIVATE virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& aPropertyName ) override; + + // XMultiPropertyStates + SVX_DLLPRIVATE virtual void SAL_CALL setAllPropertiesToDefault() override; + SVX_DLLPRIVATE virtual void SAL_CALL setPropertiesToDefault( const css::uno::Sequence< OUString >& aPropertyNames ) override; + SVX_DLLPRIVATE virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyDefaults( const css::uno::Sequence< OUString >& aPropertyNames ) override; + + // XText + SVX_DLLPRIVATE virtual void SAL_CALL insertTextContent( const css::uno::Reference< css::text::XTextRange >& xRange, const css::uno::Reference< css::text::XTextContent >& xContent, sal_Bool bAbsorb ) override; + SVX_DLLPRIVATE virtual void SAL_CALL removeTextContent( const css::uno::Reference< css::text::XTextContent >& xContent ) override; + + // XSimpleText + SVX_DLLPRIVATE virtual void SAL_CALL insertString( const css::uno::Reference< css::text::XTextRange >& xRange, const OUString& aString, sal_Bool bAbsorb ) override; + SVX_DLLPRIVATE virtual void SAL_CALL insertControlCharacter( const css::uno::Reference< css::text::XTextRange >& xRange, ::sal_Int16 nControlCharacter, sal_Bool bAbsorb ) override; + + // XTextRange + SVX_DLLPRIVATE virtual OUString SAL_CALL getString( ) override; + SVX_DLLPRIVATE virtual void SAL_CALL setString( const OUString& aString ) override; + + // XEventListener + SVX_DLLPRIVATE virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override; + + SVX_DLLPRIVATE virtual void SetOutlinerParaObject( OutlinerParaObject* pTextObject ) override; + + SVX_DLLPRIVATE void AddUndo(); + + using SvxUnoTextRangeBase::setPropertyValue; + using SvxUnoTextRangeBase::getPropertyValue; + + SVX_DLLPRIVATE sdr::properties::TextProperties* CloneProperties( SdrObject& rNewObj, Cell& rNewCell ); + + SVX_DLLPRIVATE static sdr::properties::TextProperties* CloneProperties( sdr::properties::TextProperties const * pProperties, SdrObject& rNewObj, Cell& rNewCell ); + + SVX_DLLPRIVATE void notifyModified(); + + void dumpAsXml(struct _xmlTextWriter * pWriter, sal_Int32 nRow, sal_Int32 nCol) const; + +protected: + SVX_DLLPRIVATE virtual const SfxItemSet& GetObjectItemSet() override; + SVX_DLLPRIVATE virtual void SetObjectItem(const SfxPoolItem& rItem) override; + + SVX_DLLPRIVATE static css::uno::Any GetAnyForItem( SfxItemSet const & aSet, const SfxItemPropertySimpleEntry* pMap ); + +private: + /// @throws css::uno::RuntimeException + SVX_DLLPRIVATE Cell( SdrTableObj& rTableObj, OutlinerParaObject* pOutlinerParaObject ); + SVX_DLLPRIVATE virtual ~Cell() throw() override; + + Cell(Cell const &) = delete; + void operator =(Cell const &) = delete; + + const SvxItemPropertySet* mpPropSet; + + sdr::properties::TextProperties* mpProperties; + + css::table::CellContentType mnCellContentType; + + OUString msFormula; + double mfValue; + ::sal_Int32 mnError; + bool mbMerged; + ::sal_Int32 mnRowSpan; + ::sal_Int32 mnColSpan; + + tools::Rectangle maCellRect; + + css::uno::Reference< css::table::XTable > mxTable; +}; + + +} } + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/inc/celltypes.hxx b/svx/source/inc/celltypes.hxx new file mode 100644 index 000000000000..6296ac42d7da --- /dev/null +++ b/svx/source/inc/celltypes.hxx @@ -0,0 +1,97 @@ +/* -*- 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 . + */ + +#ifndef INCLUDED_SVX_SOURCE_INC_CELLTYPES_HXX +#define INCLUDED_SVX_SOURCE_INC_CELLTYPES_HXX + +#include <rtl/ref.hxx> +#include <vector> + +namespace sdr { namespace table { + +class Cell; +class TableModel; +class TableRow; +class TableColumn; +class TableRows; +class TableColumns; +typedef rtl::Reference< Cell > CellRef; +typedef rtl::Reference< TableModel > TableModelRef; +typedef rtl::Reference< TableRow > TableRowRef; +typedef rtl::Reference< TableColumn > TableColumnRef; +typedef std::vector< CellRef > CellVector; +typedef std::vector< TableRowRef > RowVector; +typedef std::vector< TableColumnRef > ColumnVector; + +class TableDesignUser +{ +public: + virtual bool isInUse() = 0; + +protected: + ~TableDesignUser() {} +}; + +template< typename T > +class RangeIterator +{ +public: + /** creates an iterator from rStart (including) to rEnd (excluding) if + bForward is true or from nEnd (excluding to nStart (including). + rStart must be <= rEnd. + */ + RangeIterator( const T& rStart, const T& rEnd, bool bForward ) + { + if( bForward ) + { + maIter = rStart; + maEnd = rEnd; + } + else + { + maIter = rEnd-1; + maEnd = rStart-1; + } + } + + /* iterates in the configured direction and returns true if rValue + now contains a valid position in the range of this iterator */ + bool next( T& rValue ) + { + if( maIter == maEnd ) + return false; + + rValue = maIter; + if( maIter < maEnd ) + ++maIter; + else + --maIter; + return true; + } + +private: + T maEnd; + T maIter; +}; + +} } + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/inc/tablemodel.hxx b/svx/source/inc/tablemodel.hxx new file mode 100644 index 000000000000..5c1ac7a86e6d --- /dev/null +++ b/svx/source/inc/tablemodel.hxx @@ -0,0 +1,211 @@ +/* -*- 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 . + */ + +#ifndef INCLUDED_SVX_SOURCE_INC_TABLEMODEL_HXX +#define INCLUDED_SVX_SOURCE_INC_TABLEMODEL_HXX + +#include <sal/types.h> +#include <com/sun/star/util/XBroadcaster.hpp> +#include <com/sun/star/table/XTable.hpp> +#include <basegfx/range/b2irectangle.hxx> +#include <basegfx/tuple/b2ituple.hxx> +#include <cppuhelper/compbase.hxx> +#include <cppuhelper/basemutex.hxx> +#include <comphelper/listenernotification.hxx> +#include "celltypes.hxx" + +struct _xmlTextWriter; + +namespace sdr { namespace table { + +class SdrTableObj; + +/** base class for each object implementing an XCellRange */ +class ICellRange +{ +public: + virtual sal_Int32 getLeft() = 0; + virtual sal_Int32 getTop() = 0; + virtual sal_Int32 getRight() = 0; + virtual sal_Int32 getBottom() = 0; + virtual css::uno::Reference< css::table::XTable > getTable() = 0; + +protected: + ~ICellRange() {} +}; + +typedef ::cppu::WeakComponentImplHelper< css::table::XTable, css::util::XBroadcaster > TableModelBase; + +class TableModel : public ::cppu::BaseMutex, + public TableModelBase, + public ICellRange +{ + friend class InsertRowUndo; + friend class RemoveRowUndo; + friend class InsertColUndo; + friend class RemoveColUndo; + friend class TableColumnUndo; + friend class TableRowUndo; + friend class TableColumn; + friend class TableRow; + friend class TableRows; + friend class TableColumns; + friend class TableModelNotifyGuard; + +public: + explicit TableModel( SdrTableObj* pTableObj ); + TableModel( SdrTableObj* pTableObj, const TableModelRef& xSourceTable ); + virtual ~TableModel() override; + + void init( sal_Int32 nColumns, sal_Int32 nRows ); + + SdrTableObj* getSdrTableObj() const { return mpTableObj; } + + /** deletes rows and columns that are completely merged. Must be called between BegUndo/EndUndo! */ + void optimize(); + + /// merges the cell at the given position with the given span + void merge( sal_Int32 nCol, sal_Int32 nRow, sal_Int32 nColSpan, sal_Int32 nRowSpan ); + /// Get the width of all columns in this table. + std::vector<sal_Int32> getColumnWidths(); + + void dumpAsXml(struct _xmlTextWriter * pWriter) const; + + // ICellRange + virtual sal_Int32 getLeft() override; + virtual sal_Int32 getTop() override; + virtual sal_Int32 getRight() override; + virtual sal_Int32 getBottom() override; + virtual css::uno::Reference< css::table::XTable > getTable() override; + + // XTable + virtual css::uno::Reference< css::table::XCellCursor > SAL_CALL createCursor( ) override; + virtual css::uno::Reference< css::table::XCellCursor > SAL_CALL createCursorByRange( const css::uno::Reference< css::table::XCellRange >& rRange ) override; + virtual ::sal_Int32 SAL_CALL getRowCount() override; + virtual ::sal_Int32 SAL_CALL getColumnCount() override; + + // XComponent + virtual void SAL_CALL dispose( ) override; + + // XModifiable + virtual sal_Bool SAL_CALL isModified( ) override; + virtual void SAL_CALL setModified( sal_Bool bModified ) override; + + // XModifyBroadcaster + virtual void SAL_CALL addModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override; + virtual void SAL_CALL removeModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override; + + // XColumnRowRange + virtual css::uno::Reference< css::table::XTableColumns > SAL_CALL getColumns() override; + virtual css::uno::Reference< css::table::XTableRows > SAL_CALL getRows() override; + + // XCellRange + virtual css::uno::Reference< css::table::XCell > SAL_CALL getCellByPosition( ::sal_Int32 nColumn, ::sal_Int32 nRow ) override; + virtual css::uno::Reference< css::table::XCellRange > SAL_CALL getCellRangeByPosition( ::sal_Int32 nLeft, ::sal_Int32 nTop, ::sal_Int32 nRight, ::sal_Int32 nBottom ) override; + virtual css::uno::Reference< css::table::XCellRange > SAL_CALL getCellRangeByName( const OUString& aRange ) override; + + // XPropertySet + virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override; + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override; + virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override; + virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override; + virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override; + virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override; + + // XFastPropertySet + virtual void SAL_CALL setFastPropertyValue( ::sal_Int32 nHandle, const css::uno::Any& aValue ) override; + virtual css::uno::Any SAL_CALL getFastPropertyValue( ::sal_Int32 nHandle ) override; + + // XBroadcaster + virtual void SAL_CALL lockBroadcasts() override; + virtual void SAL_CALL unlockBroadcasts() override; + +protected: + void notifyModification(); + + void insertColumns( sal_Int32 nIndex, sal_Int32 nCount ); + void removeColumns( sal_Int32 nIndex, sal_Int32 nCount ); + void insertRows( sal_Int32 nIndex, sal_Int32 nCount ); + void removeRows( sal_Int32 nIndex, sal_Int32 nCount ); + + sal_Int32 getRowCountImpl() const; + sal_Int32 getColumnCountImpl() const; + + CellRef createCell(); + CellRef getCell( ::sal_Int32 nCol, ::sal_Int32 nRow ) const; + + void UndoInsertRows( sal_Int32 nIndex, sal_Int32 nCount ); + void UndoRemoveRows( sal_Int32 nIndex, RowVector& aNewRows ); + + void UndoInsertColumns( sal_Int32 nIndex, sal_Int32 nCount ); + void UndoRemoveColumns( sal_Int32 nIndex, ColumnVector& aNewCols, CellVector& aCells ); + +private: + /** this function is called upon disposing the component + */ + virtual void SAL_CALL disposing() override; + + /// @throws css::lang::IndexOutOfBoundsException + TableRowRef getRow( sal_Int32 nRow ) const; + /// @throws css::lang::IndexOutOfBoundsException + TableColumnRef getColumn( sal_Int32 nColumn ) const; + + void updateRows(); + void updateColumns(); + + RowVector maRows; + ColumnVector maColumns; + + rtl::Reference< TableColumns > mxTableColumns; + rtl::Reference< TableRows > mxTableRows; + + SdrTableObj* mpTableObj; + + bool mbModified; + bool mbNotifyPending; + + sal_Int32 mnNotifyLock; +}; + +class TableModelNotifyGuard +{ +public: + explicit TableModelNotifyGuard( TableModel* pModel ) + : mxBroadcaster( static_cast< css::util::XBroadcaster* >( pModel ) ) + { + if( mxBroadcaster.is() ) + mxBroadcaster->lockBroadcasts(); + } + + ~TableModelNotifyGuard() + { + if( mxBroadcaster.is() ) + mxBroadcaster->unlockBroadcasts(); + } + +private: + css::uno::Reference< css::util::XBroadcaster > mxBroadcaster; +}; + +} } + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |