| /************************************************************** |
| * |
| * 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 acessing 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_7x7(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 |