1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svx.hxx"
26 
27 #include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx>
28 #include <svx/sdr/contact/viewcontactofsdrobj.hxx>
29 #include <svx/sdr/contact/objectcontact.hxx>
30 #include <svx/sdr/contact/displayinfo.hxx>
31 #include <svx/svdobj.hxx>
32 #include <svx/svdoole2.hxx>
33 #include <svx/svdview.hxx>
34 
35 #include "fmobj.hxx"
36 
37 //////////////////////////////////////////////////////////////////////////////
38 
39 namespace sdr
40 {
41 	namespace contact
42 	{
getSdrObject() const43 		const SdrObject& ViewObjectContactOfSdrObj::getSdrObject() const
44 		{
45 			return static_cast< ViewContactOfSdrObj& >(GetViewContact()).GetSdrObject();
46 		}
47 
ViewObjectContactOfSdrObj(ObjectContact & rObjectContact,ViewContact & rViewContact)48 		ViewObjectContactOfSdrObj::ViewObjectContactOfSdrObj(ObjectContact& rObjectContact, ViewContact& rViewContact)
49 		:	ViewObjectContact(rObjectContact, rViewContact)
50 		{
51 		}
52 
~ViewObjectContactOfSdrObj()53 		ViewObjectContactOfSdrObj::~ViewObjectContactOfSdrObj()
54 		{
55 		}
56 
isPrimitiveVisible(const DisplayInfo & rDisplayInfo) const57 		bool ViewObjectContactOfSdrObj::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const
58 		{
59 			const SdrObject& rObject = getSdrObject();
60 
61 			// Test layer visibility
62 			if(!rDisplayInfo.GetProcessLayers().IsSet(rObject.GetLayer()))
63 			{
64 				return false;
65 			}
66 
67 			if(GetObjectContact().isOutputToPrinter() )
68 			{
69 				// Test if print output but not printable
70 				if( !rObject.IsPrintable())
71 					return false;
72 			}
73 			else
74 			{
75 				// test is object is not visible on screen
76 				if( !rObject.IsVisible() )
77 					return false;
78 			}
79 
80 			// Test for hidden object on MasterPage
81 			if(rDisplayInfo.GetSubContentActive() && rObject.IsNotVisibleAsMaster())
82 			{
83 				return false;
84 			}
85 
86 			// Test for Calc object hiding (for OLE and Graphic it's extra, see there)
87 			const SdrPageView* pSdrPageView = GetObjectContact().TryToGetSdrPageView();
88 
89 			if(pSdrPageView)
90 			{
91 				const SdrView& rSdrView = pSdrPageView->GetView();
92 				const bool bHideOle(rSdrView.getHideOle());
93 				const bool bHideChart(rSdrView.getHideChart());
94 				const bool bHideDraw(rSdrView.getHideDraw());
95 				const bool bHideFormControl(rSdrView.getHideFormControl());
96 
97 				if(bHideOle || bHideChart || bHideDraw || bHideFormControl)
98 				{
99 					if(OBJ_OLE2 == rObject.GetObjIdentifier())
100 					{
101 						if(((SdrOle2Obj&)rObject).IsChart())
102 						{
103 							// chart
104 							if(bHideChart)
105 							{
106 								return false;
107 							}
108 						}
109 						else
110 						{
111 							// OLE
112 							if(bHideOle)
113 							{
114 								return false;
115 							}
116 						}
117 					}
118 					else if(OBJ_GRAF == rObject.GetObjIdentifier())
119 					{
120 						// graphic handled like OLE
121 						if(bHideOle)
122 						{
123 							return false;
124 						}
125 					}
126 					else
127 					{
128 						const bool bIsFormControl = dynamic_cast< const FmFormObj * >( &rObject ) != 0;
129 						if(bIsFormControl && bHideFormControl)
130 						{
131 							return false;
132 						}
133 						// any other draw object
134 						if(!bIsFormControl && bHideDraw)
135 						{
136 							return false;
137 						}
138 					}
139 				}
140 			}
141 
142 			return true;
143 		}
144 	} // end of namespace contact
145 } // end of namespace sdr
146 
147 //////////////////////////////////////////////////////////////////////////////
148 // eof
149