xref: /AOO41X/main/vcl/source/control/fixbrd.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_vcl.hxx"
30 
31 #ifndef _SV_RC_H
32 #include <tools/rc.h>
33 #endif
34 #include <vcl/event.hxx>
35 #include <vcl/fixbrd.hxx>
36 
37 
38 
39 // =======================================================================
40 
41 void FixedBorder::ImplInit( Window* pParent, WinBits nStyle )
42 {
43 	mnType			= FIXEDBORDER_TYPE_DOUBLEOUT;
44 	mbTransparent	= sal_True;
45 
46 	nStyle = ImplInitStyle( nStyle );
47 	Control::ImplInit( pParent, nStyle, NULL );
48 	ImplInitSettings();
49 }
50 
51 // -----------------------------------------------------------------------
52 
53 WinBits FixedBorder::ImplInitStyle( WinBits nStyle )
54 {
55 	if ( !(nStyle & WB_NOGROUP) )
56 		nStyle |= WB_GROUP;
57 	return nStyle;
58 }
59 
60 // -----------------------------------------------------------------------
61 
62 void FixedBorder::ImplInitSettings()
63 {
64 	Window* pParent = GetParent();
65 	if ( (pParent->IsChildTransparentModeEnabled() ||
66 		  !(pParent->GetStyle() & WB_CLIPCHILDREN) ) &&
67 		 !IsControlBackground() && mbTransparent )
68 	{
69 		SetMouseTransparent( sal_True );
70 		EnableChildTransparentMode( sal_True );
71 		SetParentClipMode( PARENTCLIPMODE_NOCLIP );
72 		SetPaintTransparent( sal_True );
73 		SetBackground();
74 	}
75 	else
76 	{
77 		SetMouseTransparent( sal_False );
78 		EnableChildTransparentMode( sal_False );
79 		SetParentClipMode( 0 );
80 		SetPaintTransparent( sal_False );
81 
82 		if ( IsControlBackground() )
83 			SetBackground( GetControlBackground() );
84 		else
85 			SetBackground( pParent->GetBackground() );
86 	}
87 }
88 
89 // -----------------------------------------------------------------------
90 
91 FixedBorder::FixedBorder( Window* pParent, WinBits nStyle ) :
92 	Control( WINDOW_FIXEDBORDER )
93 {
94 	ImplInit( pParent, nStyle );
95 }
96 
97 // -----------------------------------------------------------------------
98 
99 FixedBorder::FixedBorder( Window* pParent, const ResId& rResId ) :
100 	Control( WINDOW_FIXEDBORDER )
101 {
102 	rResId.SetRT( RSC_CONTROL );
103 	WinBits nStyle = ImplInitRes( rResId );
104 	ImplInit( pParent, nStyle );
105 	ImplLoadRes( rResId );
106 
107 	if ( !(nStyle & WB_HIDE) )
108 		Show();
109 }
110 
111 // -----------------------------------------------------------------------
112 
113 FixedBorder::~FixedBorder()
114 {
115 }
116 
117 // -----------------------------------------------------------------------
118 
119 void FixedBorder::ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags,
120 							const Point& rPos, const Size& rSize )
121 {
122 	const StyleSettings&	rStyleSettings = GetSettings().GetStyleSettings();
123 	Rectangle				aRect( rPos, rSize );
124 	sal_uInt16					nBorderStyle = mnType;
125 
126 	if ( (nDrawFlags & WINDOW_DRAW_MONO) ||
127 		 (rStyleSettings.GetOptions() & STYLE_OPTION_MONO) )
128 		nBorderStyle |= FRAME_DRAW_MONO;
129 
130     /*
131     // seems only to be used in tools->options around a tabpage (ie, no tabcontrol!)
132     // as tabpages that are not embedded in a tabcontrol should not be drawn natively
133     // the fixedborder must also not be drawn (reason was, that it looks too ugly, dialogs must be redesigned)
134     Window *pWin = pDev->GetOutDevType() == OUTDEV_WINDOW ? (Window*) pDev : NULL;
135     if( !(nBorderStyle & FRAME_DRAW_MONO) && pWin && pWin->IsNativeControlSupported( CTRL_FIXEDBORDER, PART_ENTIRE_CONTROL ) )
136     {
137         ImplControlValue aControlValue;
138         Point aPt;
139         Region aCtrlRegion( Rectangle( aPt, GetOutputSizePixel() ) );
140         ControlState nState = IsEnabled() ? CTRL_STATE_ENABLED : 0;
141         pWin->DrawNativeControl( CTRL_FIXEDBORDER, PART_ENTIRE_CONTROL, aCtrlRegion, nState,
142 	     						aControlValue, rtl::OUString() );
143     }
144     else
145     */
146     {
147 	    DecorationView	aDecoView( pDev );
148 	    aDecoView.DrawFrame( aRect, nBorderStyle );
149     }
150 }
151 
152 // -----------------------------------------------------------------------
153 
154 void FixedBorder::Paint( const Rectangle& )
155 {
156 	ImplDraw( this, 0, Point(), GetOutputSizePixel() );
157 }
158 
159 // -----------------------------------------------------------------------
160 
161 void FixedBorder::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize,
162 						sal_uLong nFlags )
163 {
164 	Point	aPos  = pDev->LogicToPixel( rPos );
165 	Size	aSize = pDev->LogicToPixel( rSize );
166 
167 	pDev->Push();
168 	pDev->SetMapMode();
169 	ImplDraw( pDev, nFlags, aPos, aSize );
170 	pDev->Pop();
171 }
172 
173 // -----------------------------------------------------------------------
174 
175 void FixedBorder::Resize()
176 {
177 	Invalidate();
178 }
179 
180 // -----------------------------------------------------------------------
181 
182 void FixedBorder::StateChanged( StateChangedType nType )
183 {
184 	Control::StateChanged( nType );
185 
186 	if ( (nType == STATE_CHANGE_DATA) ||
187 		 (nType == STATE_CHANGE_UPDATEMODE) )
188 	{
189 		if ( IsUpdateMode() )
190 			Invalidate();
191 	}
192 	else if ( nType == STATE_CHANGE_STYLE )
193 		SetStyle( ImplInitStyle( GetStyle() ) );
194 	else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
195 	{
196 		ImplInitSettings();
197 		Invalidate();
198 	}
199 }
200 
201 // -----------------------------------------------------------------------
202 
203 void FixedBorder::DataChanged( const DataChangedEvent& rDCEvt )
204 {
205 	Control::DataChanged( rDCEvt );
206 
207 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
208 		 (rDCEvt.GetFlags() & SETTINGS_STYLE) )
209 	{
210 		ImplInitSettings();
211 		Invalidate();
212 	}
213 }
214 
215 // -----------------------------------------------------------------------
216 
217 void FixedBorder::SetTransparent( sal_Bool bTransparent )
218 {
219 	if ( mbTransparent != bTransparent )
220 	{
221 		mbTransparent = bTransparent;
222 		ImplInitSettings();
223 		Invalidate();
224 	}
225 }
226 
227 // -----------------------------------------------------------------------
228 
229 void FixedBorder::SetBorderType( sal_uInt16 nType )
230 {
231 	if ( mnType != nType )
232 	{
233 		mnType = nType;
234 		Invalidate();
235 	}
236 }
237