summaryrefslogtreecommitdiff
path: root/sw/source/core/docnode/ndnotxt.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/docnode/ndnotxt.cxx')
-rw-r--r--sw/source/core/docnode/ndnotxt.cxx308
1 files changed, 308 insertions, 0 deletions
diff --git a/sw/source/core/docnode/ndnotxt.cxx b/sw/source/core/docnode/ndnotxt.cxx
new file mode 100644
index 000000000000..c244e14267c4
--- /dev/null
+++ b/sw/source/core/docnode/ndnotxt.cxx
@@ -0,0 +1,308 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+
+
+#include <hintids.hxx>
+#include <tools/poly.hxx>
+#include <svl/stritem.hxx>
+#include <svx/contdlg.hxx>
+#include <vcl/svapp.hxx>
+#include <docary.hxx>
+#include <doc.hxx>
+#include <fmtcol.hxx>
+#include <ndnotxt.hxx>
+#include <ndgrf.hxx>
+#include <ndole.hxx>
+#include <ndindex.hxx>
+#include <hints.hxx> // fuer SwFmtChg
+#include <istyleaccess.hxx>
+#include <SwStyleNameMapper.hxx>
+
+#include <frmfmt.hxx> // #i73249#
+
+SwNoTxtNode::SwNoTxtNode( const SwNodeIndex & rWhere,
+ const sal_uInt8 nNdType,
+ SwGrfFmtColl *pGrfColl,
+ SwAttrSet* pAutoAttr ) :
+ SwCntntNode( rWhere, nNdType, pGrfColl ),
+ pContour( 0 ),
+ bAutomaticContour( sal_False ),
+ bContourMapModeValid( sal_True ),
+ bPixelContour( sal_False )
+{
+ // soll eine Harte-Attributierung gesetzt werden?
+ if( pAutoAttr )
+ SetAttr( *pAutoAttr );
+}
+
+
+SwNoTxtNode::~SwNoTxtNode()
+{
+ delete pContour;
+}
+
+
+// erzeugt fuer alle Ableitungen einen AttrSet mit Bereichen
+// fuer Frame- und Grafik-Attributen
+void SwNoTxtNode::NewAttrSet( SwAttrPool& rPool )
+{
+ OSL_ENSURE( !mpAttrSet.get(), "AttrSet ist doch gesetzt" );
+ SwAttrSet aNewAttrSet( rPool, aNoTxtNodeSetRange );
+
+ // put names of parent style and conditional style:
+ const SwFmtColl* pFmtColl = GetFmtColl();
+ String sVal;
+ SwStyleNameMapper::FillProgName( pFmtColl->GetName(), sVal, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, sal_True );
+ SfxStringItem aFmtColl( RES_FRMATR_STYLE_NAME, sVal );
+ aNewAttrSet.Put( aFmtColl );
+
+ aNewAttrSet.SetParent( &GetFmtColl()->GetAttrSet() );
+ mpAttrSet = GetDoc()->GetIStyleAccess().getAutomaticStyle( aNewAttrSet, IStyleAccess::AUTO_STYLE_NOTXT );
+}
+
+// Dummies fuer das Laden/Speichern von persistenten Daten
+// bei Grafiken und OLE-Objekten
+
+
+sal_Bool SwNoTxtNode::RestorePersistentData()
+{
+ return sal_True;
+}
+
+
+sal_Bool SwNoTxtNode::SavePersistentData()
+{
+ return sal_True;
+}
+
+
+void SwNoTxtNode::SetContour( const PolyPolygon *pPoly, sal_Bool bAutomatic )
+{
+ delete pContour;
+ if ( pPoly )
+ pContour = new PolyPolygon( *pPoly );
+ else
+ pContour = 0;
+ bAutomaticContour = bAutomatic;
+ bContourMapModeValid = sal_True;
+ bPixelContour = sal_False;
+}
+
+
+void SwNoTxtNode::CreateContour()
+{
+ OSL_ENSURE( !pContour, "Contour available." );
+ pContour = new PolyPolygon(SvxContourDlg::CreateAutoContour(GetGraphic()));
+ bAutomaticContour = sal_True;
+ bContourMapModeValid = sal_True;
+ bPixelContour = sal_False;
+}
+
+const PolyPolygon *SwNoTxtNode::HasContour() const
+{
+ if( !bContourMapModeValid )
+ {
+ const MapMode aGrfMap( GetGraphic().GetPrefMapMode() );
+ sal_Bool bPixelGrf = aGrfMap.GetMapUnit() == MAP_PIXEL;
+ const MapMode aContourMap( bPixelGrf ? MAP_PIXEL : MAP_100TH_MM );
+ if( bPixelGrf ? !bPixelContour : aGrfMap != aContourMap )
+ {
+ OSL_ENSURE( !bPixelGrf || aGrfMap == aContourMap,
+ "scale factor for pixel unsupported" );
+ OutputDevice* pOutDev =
+ (bPixelGrf || bPixelContour) ? Application::GetDefaultDevice()
+ : 0;
+ sal_uInt16 nPolyCount = pContour->Count();
+ for( sal_uInt16 j=0; j<nPolyCount; j++ )
+ {
+ Polygon& rPoly = (*pContour)[j];
+
+ sal_uInt16 nCount = rPoly.GetSize();
+ for( sal_uInt16 i=0 ; i<nCount; i++ )
+ {
+ if( bPixelGrf )
+ rPoly[i] = pOutDev->LogicToPixel( rPoly[i],
+ aContourMap );
+ else if( bPixelContour )
+ rPoly[i] = pOutDev->PixelToLogic( rPoly[i], aGrfMap );
+ else
+ rPoly[i] = OutputDevice::LogicToLogic( rPoly[i],
+ aContourMap,
+ aGrfMap );
+ }
+ }
+ }
+ ((SwNoTxtNode *)this)->bContourMapModeValid = sal_True;
+ ((SwNoTxtNode *)this)->bPixelContour = sal_False;
+ }
+
+ return pContour;
+}
+
+void SwNoTxtNode::GetContour( PolyPolygon &rPoly ) const
+{
+ OSL_ENSURE( pContour, "Contour not available." );
+ rPoly = *HasContour();
+}
+
+void SwNoTxtNode::SetContourAPI( const PolyPolygon *pPoly )
+{
+ delete pContour;
+ if ( pPoly )
+ pContour = new PolyPolygon( *pPoly );
+ else
+ pContour = 0;
+ bContourMapModeValid = sal_False;
+}
+
+sal_Bool SwNoTxtNode::GetContourAPI( PolyPolygon &rContour ) const
+{
+ if( !pContour )
+ return sal_False;
+
+ rContour = *pContour;
+ if( bContourMapModeValid )
+ {
+ const MapMode aGrfMap( GetGraphic().GetPrefMapMode() );
+ const MapMode aContourMap( MAP_100TH_MM );
+ OSL_ENSURE( aGrfMap.GetMapUnit() != MAP_PIXEL ||
+ aGrfMap == MapMode( MAP_PIXEL ),
+ "scale factor for pixel unsupported" );
+ if( aGrfMap.GetMapUnit() != MAP_PIXEL &&
+ aGrfMap != aContourMap )
+ {
+ sal_uInt16 nPolyCount = rContour.Count();
+ for( sal_uInt16 j=0; j<nPolyCount; j++ )
+ {
+ Polygon& rPoly = (*pContour)[j];
+
+ sal_uInt16 nCount = rPoly.GetSize();
+ for( sal_uInt16 i=0 ; i<nCount; i++ )
+ {
+ rPoly[i] = OutputDevice::LogicToLogic( rPoly[i], aGrfMap,
+ aContourMap );
+ }
+ }
+ }
+ }
+
+ return sal_True;
+}
+
+sal_Bool SwNoTxtNode::IsPixelContour() const
+{
+ sal_Bool bRet;
+ if( bContourMapModeValid )
+ {
+ const MapMode aGrfMap( GetGraphic().GetPrefMapMode() );
+ bRet = aGrfMap.GetMapUnit() == MAP_PIXEL;
+ }
+ else
+ {
+ bRet = bPixelContour;
+ }
+
+ return bRet;
+}
+
+
+Graphic SwNoTxtNode::GetGraphic() const
+{
+ Graphic aRet;
+ if ( GetGrfNode() )
+ {
+ ((SwGrfNode*)this)->SwapIn( sal_True );
+ aRet = ((SwGrfNode*)this)->GetGrf();
+ }
+ else
+ {
+ OSL_ENSURE( GetOLENode(), "new type of Node?" );
+ aRet = *((SwOLENode*)this)->SwOLENode::GetGraphic();
+ }
+ return aRet;
+}
+
+// #i73249#
+void SwNoTxtNode::SetTitle( const String& rTitle, bool bBroadcast )
+{
+ // Title attribute of <SdrObject> replaces own AlternateText attribute
+ SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(GetFlyFmt());
+ OSL_ENSURE( pFlyFmt,
+ "<SwNoTxtNode::SetTitle(..)> - missing <SwFlyFrmFmt> instance" );
+ if ( !pFlyFmt )
+ {
+ return;
+ }
+
+ pFlyFmt->SetObjTitle( rTitle, bBroadcast );
+}
+
+const String SwNoTxtNode::GetTitle() const
+{
+ const SwFlyFrmFmt* pFlyFmt = dynamic_cast<const SwFlyFrmFmt*>(GetFlyFmt());
+ OSL_ENSURE( pFlyFmt,
+ "<SwNoTxtNode::GetTitle(..)> - missing <SwFlyFrmFmt> instance" );
+ if ( !pFlyFmt )
+ {
+ return aEmptyStr;
+ }
+
+ return pFlyFmt->GetObjTitle();
+}
+
+void SwNoTxtNode::SetDescription( const String& rDescription, bool bBroadcast )
+{
+ SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(GetFlyFmt());
+ OSL_ENSURE( pFlyFmt,
+ "<SwNoTxtNode::SetDescription(..)> - missing <SwFlyFrmFmt> instance" );
+ if ( !pFlyFmt )
+ {
+ return;
+ }
+
+ pFlyFmt->SetObjDescription( rDescription, bBroadcast );
+}
+
+const String SwNoTxtNode::GetDescription() const
+{
+ const SwFlyFrmFmt* pFlyFmt = dynamic_cast<const SwFlyFrmFmt*>(GetFlyFmt());
+ OSL_ENSURE( pFlyFmt,
+ "<SwNoTxtNode::GetDescription(..)> - missing <SwFlyFrmFmt> instance" );
+ if ( !pFlyFmt )
+ {
+ return aEmptyStr;
+ }
+
+ return pFlyFmt->GetObjDescription();
+}
+// <--
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */