| /************************************************************** | 
 |  * | 
 |  * 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 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, | 
 |  * software distributed under the License is distributed on an | 
 |  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
 |  * KIND, either express or implied.  See the License for the | 
 |  * specific language governing permissions and limitations | 
 |  * under the License. | 
 |  * | 
 |  *************************************************************/ | 
 |  | 
 |  | 
 |  | 
 | // MARKER(update_precomp.py): autogen include statement, do not remove | 
 | #include "precompiled_svx.hxx" | 
 | #include <svx/sdr/contact/viewcontactofsdrobj.hxx> | 
 | #include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> | 
 | #include <svx/sdr/contact/viewobjectcontact.hxx> | 
 | #include <svx/svdobj.hxx> | 
 | #include <svx/sdr/contact/displayinfo.hxx> | 
 | #include <vcl/outdev.hxx> | 
 | #include <svx/svdoole2.hxx> | 
 | #include <svx/svdpage.hxx> | 
 | #include <svx/sdr/contact/objectcontact.hxx> | 
 | #include <basegfx/color/bcolor.hxx> | 
 | #include <drawinglayer/primitive2d/markerarrayprimitive2d.hxx> | 
 | #include <svx/sdr/contact/objectcontactofpageview.hxx> | 
 | #include <svx/sdrpagewindow.hxx> | 
 | #include <svx/sdrpaintwindow.hxx> | 
 | #include <svx/sdr/primitive2d/sdrprimitivetools.hxx> | 
 | #include <drawinglayer/primitive2d/objectinfoprimitive2d.hxx> | 
 |  | 
 | ////////////////////////////////////////////////////////////////////////////// | 
 |  | 
 | namespace sdr | 
 | { | 
 | 	namespace contact | 
 | 	{ | 
 | 		// Create a Object-Specific ViewObjectContact, set ViewContact and | 
 | 		// ObjectContact. Always needs to return something. | 
 | 		ViewObjectContact& ViewContactOfSdrObj::CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) | 
 | 		{ | 
 | 			ViewObjectContact* pRetval = new ViewObjectContactOfSdrObj(rObjectContact, *this); | 
 | 			DBG_ASSERT(pRetval, "ViewContactOfSdrObj::CreateObjectSpecificViewObjectContact() failed (!)"); | 
 |  | 
 | 			return *pRetval; | 
 | 		} | 
 |  | 
 | 		ViewContactOfSdrObj::ViewContactOfSdrObj(SdrObject& rObj) | 
 | 		:	ViewContact(), | 
 | 			mrObject(rObj), | 
 | 			meRememberedAnimationKind(SDRTEXTANI_NONE) | 
 | 		{ | 
 | 			// init AnimationKind | 
 | 			if(GetSdrObject().ISA(SdrTextObj)) | 
 | 			{ | 
 | 				SdrTextObj& rTextObj = (SdrTextObj&)GetSdrObject(); | 
 | 				meRememberedAnimationKind = rTextObj.GetTextAniKind(); | 
 | 			} | 
 | 		} | 
 |  | 
 | 		ViewContactOfSdrObj::~ViewContactOfSdrObj() | 
 | 		{ | 
 | 		} | 
 |  | 
 | 		// Access to possible sub-hierarchy | 
 | 		sal_uInt32 ViewContactOfSdrObj::GetObjectCount() const | 
 | 		{ | 
 | 			if(GetSdrObject().GetSubList()) | 
 | 			{ | 
 | 				return GetSdrObject().GetSubList()->GetObjCount(); | 
 | 			} | 
 |  | 
 | 			return 0L; | 
 | 		} | 
 |  | 
 | 		ViewContact& ViewContactOfSdrObj::GetViewContact(sal_uInt32 nIndex) const | 
 | 		{ | 
 | 			DBG_ASSERT(GetSdrObject().GetSubList(), | 
 | 				"ViewContactOfSdrObj::GetViewContact: Access to non-existent Sub-List (!)"); | 
 | 			SdrObject* pObj = GetSdrObject().GetSubList()->GetObj(nIndex); | 
 | 			DBG_ASSERT(pObj, "ViewContactOfSdrObj::GetViewContact: Corrupt SdrObjList (!)"); | 
 | 			return pObj->GetViewContact(); | 
 | 		} | 
 |  | 
 | 		ViewContact* ViewContactOfSdrObj::GetParentContact() const | 
 | 		{ | 
 | 			ViewContact* pRetval = 0L; | 
 | 			SdrObjList* pObjList = GetSdrObject().GetObjList(); | 
 |  | 
 | 			if(pObjList) | 
 | 			{ | 
 | 				if(pObjList->ISA(SdrPage)) | 
 | 				{ | 
 | 					// Is a page | 
 | 					pRetval = &(((SdrPage*)pObjList)->GetViewContact()); | 
 | 				} | 
 | 				else | 
 | 				{ | 
 | 					// Is a group? | 
 | 					if(pObjList->GetOwnerObj()) | 
 | 					{ | 
 | 						pRetval = &(pObjList->GetOwnerObj()->GetViewContact()); | 
 | 					} | 
 | 				} | 
 | 			} | 
 |  | 
 | 			return pRetval; | 
 | 		} | 
 |  | 
 | 		// React on changes of the object of this ViewContact | 
 | 		void ViewContactOfSdrObj::ActionChanged() | 
 | 		{ | 
 | 			// look for own changes | 
 | 			if(GetSdrObject().ISA(SdrTextObj)) | 
 | 			{ | 
 | 				SdrTextObj& rTextObj = (SdrTextObj&)GetSdrObject(); | 
 |  | 
 | 				if(rTextObj.GetTextAniKind() != meRememberedAnimationKind) | 
 | 				{ | 
 | 					// #i38135# now remember new type | 
 | 					meRememberedAnimationKind = rTextObj.GetTextAniKind(); | 
 | 				} | 
 | 			} | 
 |  | 
 | 			// call parent | 
 | 			ViewContact::ActionChanged(); | 
 | 		} | 
 |  | 
 | 		// overload for accessing the SdrObject | 
 | 		SdrObject* ViewContactOfSdrObj::TryToGetSdrObject() const | 
 | 		{ | 
 | 			return &GetSdrObject(); | 
 | 		} | 
 |  | 
 | 		////////////////////////////////////////////////////////////////////////////// | 
 | 		// primitive stuff | 
 |  | 
 | 		// add Gluepoints (if available) | 
 | 		drawinglayer::primitive2d::Primitive2DSequence ViewContactOfSdrObj::createGluePointPrimitive2DSequence() const | 
 | 		{ | 
 | 			drawinglayer::primitive2d::Primitive2DSequence xRetval; | 
 | 			const SdrGluePointList* pGluePointList = GetSdrObject().GetGluePointList(); | 
 |  | 
 | 			if(pGluePointList) | 
 | 			{ | 
 | 				const sal_uInt32 nCount(pGluePointList->GetCount()); | 
 |  | 
 | 				if(nCount) | 
 | 				{ | 
 | 					// prepare point vector | 
 | 					std::vector< basegfx::B2DPoint > aGluepointVector; | 
 |  | 
 | 					// create GluePoint primitives. ATM these are relative to the SnapRect | 
 | 					for(sal_uInt32 a(0L); a < nCount; a++) | 
 | 					{ | 
 | 						const SdrGluePoint& rCandidate = (*pGluePointList)[(sal_uInt16)a]; | 
 | 						const Point aPosition(rCandidate.GetAbsolutePos(GetSdrObject())); | 
 |  | 
 | 						aGluepointVector.push_back(basegfx::B2DPoint(aPosition.X(), aPosition.Y())); | 
 | 					} | 
 |  | 
 | 					if(!aGluepointVector.empty()) | 
 | 					{ | 
 | 						const basegfx::BColor aBackPen(1.0, 1.0, 1.0); | 
 | 						const basegfx::BColor aRGBFrontColor(0.0, 0.0, 1.0); // COL_LIGHTBLUE | 
 | 						const drawinglayer::primitive2d::Primitive2DReference xReference(new drawinglayer::primitive2d::MarkerArrayPrimitive2D( | 
 | 							aGluepointVector, | 
 | 							drawinglayer::primitive2d::createDefaultGluepoint_9x9(aBackPen, aRGBFrontColor))); | 
 | 						xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1); | 
 | 					} | 
 | 				} | 
 | 			} | 
 |  | 
 | 			return xRetval; | 
 | 		} | 
 |  | 
 | 		drawinglayer::primitive2d::Primitive2DSequence ViewContactOfSdrObj::embedToObjectSpecificInformation(const drawinglayer::primitive2d::Primitive2DSequence& rSource) const | 
 | 		{ | 
 | 			if(rSource.hasElements() && | 
 | 				(GetSdrObject().GetName().Len() || | 
 | 				GetSdrObject().GetTitle().Len() || | 
 | 				GetSdrObject().GetDescription().Len())) | 
 | 			{ | 
 | 				const drawinglayer::primitive2d::Primitive2DReference xRef( | 
 | 					new drawinglayer::primitive2d::ObjectInfoPrimitive2D( | 
 | 						rSource, | 
 | 						GetSdrObject().GetName(), | 
 | 						GetSdrObject().GetTitle(), | 
 | 						GetSdrObject().GetDescription())); | 
 |  | 
 | 				return drawinglayer::primitive2d::Primitive2DSequence(&xRef, 1); | 
 | 			} | 
 |  | 
 | 			return rSource; | 
 | 		} | 
 |  | 
 | 	} // end of namespace contact | 
 | } // end of namespace sdr | 
 |  | 
 | ////////////////////////////////////////////////////////////////////////////// | 
 | // eof |