xref: /trunk/main/sd/source/ui/dlg/copydlg.cxx (revision c7be74b1)
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_sd.hxx"
26 
27 #ifdef SD_DLLIMPLEMENTATION
28 #undef SD_DLLIMPLEMENTATION
29 #endif
30 
31 #include "copydlg.hxx"
32 #include <svx/dlgutil.hxx>
33 #include <sfx2/module.hxx>
34 #include <svx/xcolit.hxx>
35 #include <svx/xflclit.hxx>
36 #include <svx/xdef.hxx>
37 #include <svx/xfillit0.hxx>
38 #include <svx/xenum.hxx>
39 
40 #include <sfx2/app.hxx>
41 
42 
43 
44 #include "sdattr.hxx"
45 
46 #include "copydlg.hrc"
47 #include "View.hxx"
48 #include "sdresid.hxx"
49 #include "drawdoc.hxx"
50 #include "res_bmp.hrc"
51 
52 namespace sd {
53 
54 #define TOKEN (sal_Unicode(';'))
55 
56 /*************************************************************************
57 |*
58 |* Dialog zum Kopieren von Objekten
59 |*
60 \************************************************************************/
61 
62 CopyDlg::CopyDlg(
63     ::Window* pWindow,
64     const SfxItemSet& rInAttrs,
65     XColorListSharedPtr aColTab,
66     ::sd::View* pInView )
67     : SfxModalDialog     ( pWindow, SdResId( DLG_COPY ) ),
68       maFtCopies           ( this, SdResId( FT_COPIES ) ),
69       maNumFldCopies       ( this, SdResId( NUM_FLD_COPIES ) ),
70       maBtnSetViewData     ( this, SdResId( BTN_SET_VIEWDATA ) ),
71       maGrpMovement        ( this, SdResId( GRP_MOVEMENT ) ),
72       maFtMoveX            ( this, SdResId( FT_MOVE_X ) ),
73       maMtrFldMoveX        ( this, SdResId( MTR_FLD_MOVE_X ) ),
74       maFtMoveY            ( this, SdResId( FT_MOVE_Y ) ),
75       maMtrFldMoveY        ( this, SdResId( MTR_FLD_MOVE_Y ) ),
76       maFtAngle            ( this, SdResId( FT_ANGLE ) ),
77       maMtrFldAngle        ( this, SdResId( MTR_FLD_ANGLE ) ),
78       maGrpEnlargement     ( this, SdResId( GRP_ENLARGEMENT ) ),
79       maFtWidth            ( this, SdResId( FT_WIDTH ) ),
80       maMtrFldWidth        ( this, SdResId( MTR_FLD_WIDTH ) ),
81       maFtHeight           ( this, SdResId( FT_HEIGHT ) ),
82       maMtrFldHeight       ( this, SdResId( MTR_FLD_HEIGHT ) ),
83       maGrpColor           ( this, SdResId( GRP_COLOR ) ),
84       maFtStartColor       ( this, SdResId( FT_START_COLOR ) ),
85       maLbStartColor       ( this, SdResId( LB_START_COLOR ) ),
86       maFtEndColor         ( this, SdResId( FT_END_COLOR ) ),
87       maLbEndColor         ( this, SdResId( LB_END_COLOR ) ),
88       maBtnOK              ( this, SdResId( BTN_OK ) ),
89       maBtnCancel          ( this, SdResId( BTN_CANCEL ) ),
90       maBtnHelp            ( this, SdResId( BTN_HELP ) ),
91       maBtnSetDefault      ( this, SdResId( BTN_SET_DEFAULT ) ),
92       mrOutAttrs			( rInAttrs ),
93       maColorTab			( aColTab ),
94 	  maUIScale(pInView->GetDoc()->GetUIScale()),
95       mpView				( pInView )
96 {
97 	FreeResource();
98 
99     // Set up the view data button (image and accessible name).
100 	maBtnSetViewData.SetModeImage( Image( SdResId( IMG_PIPETTE_H ) ), BMP_COLOR_HIGHCONTRAST );
101     maBtnSetViewData.SetAccessibleName (maBtnSetViewData.GetQuickHelpText());
102 
103 	// Farbtabellen
104 	DBG_ASSERT( maColorTab.get(), "Keine gueltige ColorTable uebergeben!" );
105 	maLbStartColor.Fill( maColorTab );
106 	maLbEndColor.CopyEntries( maLbStartColor );
107 
108 	maLbStartColor.SetSelectHdl( LINK( this, CopyDlg, SelectColorHdl ) );
109 	maBtnSetViewData.SetClickHdl( LINK( this, CopyDlg, SetViewData ) );
110 	maBtnSetDefault.SetClickHdl( LINK( this, CopyDlg, SetDefault ) );
111 
112 
113 	FieldUnit eFUnit( SfxModule::GetCurrentFieldUnit() );
114 
115 	SetFieldUnit( maMtrFldMoveX, eFUnit, sal_True );
116 	SetFieldUnit( maMtrFldMoveY, eFUnit, sal_True );
117 	SetFieldUnit( maMtrFldWidth, eFUnit, sal_True );
118 	SetFieldUnit( maMtrFldHeight, eFUnit, sal_True );
119 
120 	Reset(0L);
121 }
122 
123 /*************************************************************************
124 |*
125 |* Dtor
126 |*
127 \************************************************************************/
128 
129 CopyDlg::~CopyDlg()
130 {
131 	String& rStr = GetExtraData();
132 
133 	rStr = UniString::CreateFromInt64( maNumFldCopies.GetValue() );
134 	rStr.Append( TOKEN );
135 
136 	rStr += UniString::CreateFromInt64( maMtrFldMoveX.GetValue() );
137 	rStr.Append( TOKEN );
138 
139 	rStr += UniString::CreateFromInt64( maMtrFldMoveY.GetValue() );
140 	rStr.Append( TOKEN );
141 
142 	rStr += UniString::CreateFromInt64( maMtrFldAngle.GetValue() );
143 	rStr.Append( TOKEN );
144 
145 	rStr += UniString::CreateFromInt64( maMtrFldWidth.GetValue() );
146 	rStr.Append( TOKEN );
147 
148 	rStr += UniString::CreateFromInt64( maMtrFldHeight.GetValue() );
149 	rStr.Append( TOKEN );
150 
151 	rStr += UniString::CreateFromInt32( (long)maLbStartColor.GetSelectEntryColor().GetColor() );
152 	rStr.Append( TOKEN );
153 
154 	rStr += UniString::CreateFromInt32( (long)maLbEndColor.GetSelectEntryColor().GetColor() );
155 }
156 
157 /*************************************************************************
158 |*
159 |* Liest uebergebenen Item-Set oder wertet den INI-String aus
160 |*
161 \************************************************************************/
162 
163 IMPL_LINK( CopyDlg, Reset, void*, EMPTYARG )
164 {
165 	const SfxPoolItem* pPoolItem = NULL;
166 	String aStr( GetExtraData() );
167 
168 	if( aStr.GetTokenCount( TOKEN ) < 8 )
169 	{
170 		if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_NUMBER, sal_True, &pPoolItem ) )
171 			maNumFldCopies.SetValue( ( ( const SfxUInt16Item* ) pPoolItem )->GetValue() );
172 		else
173 			maNumFldCopies.SetValue( 1L );
174 
175 		long nMoveX = 500L;
176 		if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_MOVE_X, sal_True, &pPoolItem ) )
177 			nMoveX = ( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() );
178 		SetMetricValue( maMtrFldMoveX, Fraction(nMoveX) / maUIScale, SFX_MAPUNIT_100TH_MM);
179 
180 		long nMoveY = 500L;
181 		if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_MOVE_Y, sal_True, &pPoolItem ) )
182 			nMoveY = ( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() );
183 		SetMetricValue( maMtrFldMoveY, Fraction(nMoveY) / maUIScale, SFX_MAPUNIT_100TH_MM);
184 
185 		if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_ANGLE, sal_True, &pPoolItem ) )
186 			maMtrFldAngle.SetValue( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() );
187 		else
188 			maMtrFldAngle.SetValue( 0L );
189 
190 		long nWidth = 0L;
191 		if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_WIDTH, sal_True, &pPoolItem ) )
192 			nWidth = ( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() );
193 		SetMetricValue( maMtrFldWidth, Fraction(nWidth) / maUIScale, SFX_MAPUNIT_100TH_MM);
194 
195 		long nHeight = 0L;
196 		if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_HEIGHT, sal_True, &pPoolItem ) )
197 			nHeight = ( ( ( const SfxInt32Item* ) pPoolItem )->GetValue() );
198 		SetMetricValue( maMtrFldHeight, Fraction(nHeight) / maUIScale, SFX_MAPUNIT_100TH_MM);
199 
200 		if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_START_COLOR, sal_True, &pPoolItem ) )
201 		{
202 			Color aColor = ( ( const XColorItem* ) pPoolItem )->GetColorValue();
203 			maLbStartColor.SelectEntry( aColor );
204 			maLbEndColor.SelectEntry( aColor );
205 		}
206 		else
207 		{
208 			maLbStartColor.SetNoSelection();
209 			maLbEndColor.SetNoSelection();
210 			maLbEndColor.Disable();
211 			maFtEndColor.Disable();
212 		}
213 	}
214 	else
215 	{
216 		long nTmp;
217 		nTmp = (long)aStr.GetToken( 0, TOKEN ).ToInt32();
218 		maNumFldCopies.SetValue( nTmp );
219 
220 		nTmp = (long)aStr.GetToken( 1, TOKEN ).ToInt32();
221 		maMtrFldMoveX.SetValue( nTmp );
222 
223 		nTmp = (long)aStr.GetToken( 2, TOKEN ).ToInt32();
224 		maMtrFldMoveY.SetValue( nTmp );
225 
226 		nTmp = (long)aStr.GetToken( 3, TOKEN ).ToInt32();
227 		maMtrFldAngle.SetValue( nTmp );
228 
229 		nTmp = (long)aStr.GetToken( 4, TOKEN ).ToInt32();
230 		maMtrFldWidth.SetValue( nTmp );
231 
232 		nTmp = (long)aStr.GetToken( 5, TOKEN ).ToInt32();
233 		maMtrFldHeight.SetValue( nTmp );
234 
235 		nTmp = (long)aStr.GetToken( 6, TOKEN ).ToInt32();
236 		maLbStartColor.SelectEntry( Color( nTmp ) );
237 
238 		nTmp = (long)aStr.GetToken( 7, TOKEN ).ToInt32();
239 		maLbEndColor.SelectEntry( Color( nTmp ) );
240 	}
241 
242 	return 0;
243 }
244 
245 /*************************************************************************
246 |*
247 |* Fuellt uebergebenen Item-Set mit Dialogbox-Attributen
248 |*
249 \************************************************************************/
250 
251 void CopyDlg::GetAttr( SfxItemSet& rOutAttrs )
252 {
253 	long nMoveX = Fraction( GetCoreValue( maMtrFldMoveX, SFX_MAPUNIT_100TH_MM) ) * maUIScale;
254 	long nMoveY = Fraction( GetCoreValue( maMtrFldMoveY, SFX_MAPUNIT_100TH_MM) ) * maUIScale;
255 	long nHeight = Fraction( GetCoreValue( maMtrFldHeight, SFX_MAPUNIT_100TH_MM) ) * maUIScale;
256 	long nWidth  = Fraction( GetCoreValue( maMtrFldWidth, SFX_MAPUNIT_100TH_MM) ) * maUIScale;
257 
258 	rOutAttrs.Put( SfxUInt16Item( ATTR_COPY_NUMBER, (sal_uInt16) maNumFldCopies.GetValue() ) );
259 	rOutAttrs.Put( SfxInt32Item( ATTR_COPY_MOVE_X, nMoveX ) );
260 	rOutAttrs.Put( SfxInt32Item( ATTR_COPY_MOVE_Y, nMoveY ) );
261 	rOutAttrs.Put( SfxInt32Item( ATTR_COPY_ANGLE, static_cast<sal_Int32>(maMtrFldAngle.GetValue()) ) );
262 	rOutAttrs.Put( SfxInt32Item( ATTR_COPY_WIDTH, nWidth ) );
263 	rOutAttrs.Put( SfxInt32Item( ATTR_COPY_HEIGHT, nHeight ) );
264 
265 	if( maLbStartColor.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
266 	{
267 		XColorItem aXColorItem( ATTR_COPY_START_COLOR, maLbStartColor.GetSelectEntry(),
268 									maLbStartColor.GetSelectEntryColor() );
269 		rOutAttrs.Put( aXColorItem );
270 	}
271 	if( maLbEndColor.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
272 	{
273 		XColorItem aXColorItem( ATTR_COPY_END_COLOR, maLbEndColor.GetSelectEntry(),
274 									maLbEndColor.GetSelectEntryColor() );
275 		rOutAttrs.Put( aXColorItem );
276 	}
277 }
278 
279 /*************************************************************************
280 |*
281 |* Enabled und selektiert Endfarben-LB
282 |*
283 \************************************************************************/
284 
285 IMPL_LINK( CopyDlg, SelectColorHdl, void *, EMPTYARG )
286 {
287 	sal_uInt16 nPos = maLbStartColor.GetSelectEntryPos();
288 
289 	if( nPos != LISTBOX_ENTRY_NOTFOUND &&
290 		!maLbEndColor.IsEnabled() )
291 	{
292 		maLbEndColor.SelectEntryPos( nPos );
293 		maLbEndColor.Enable();
294 		maFtEndColor.Enable();
295 	}
296 	return 0;
297 }
298 
299 /*************************************************************************
300 |* Setzt Werte der Selektion
301 \************************************************************************/
302 
303 IMPL_LINK( CopyDlg, SetViewData, void*, EMPTYARG )
304 {
305 	Rectangle aRect = mpView->GetAllMarkedRect();
306 
307 	SetMetricValue( maMtrFldMoveX, Fraction( aRect.GetWidth() ) /
308 									maUIScale, SFX_MAPUNIT_100TH_MM);
309 	SetMetricValue( maMtrFldMoveY, Fraction( aRect.GetHeight() ) /
310 									maUIScale, SFX_MAPUNIT_100TH_MM);
311 
312 	// Farb-Attribut setzen
313 	const SfxPoolItem*	pPoolItem = NULL;
314 	if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_START_COLOR, sal_True, &pPoolItem ) )
315 	{
316 		Color aColor = ( ( const XColorItem* ) pPoolItem )->GetColorValue();
317 		maLbStartColor.SelectEntry( aColor );
318 	}
319 
320 	return 0;
321 }
322 
323 /*************************************************************************
324 |* Setzt Werte auf Standard
325 \************************************************************************/
326 
327 IMPL_LINK( CopyDlg, SetDefault, void*, EMPTYARG )
328 {
329 	maNumFldCopies.SetValue( 1L );
330 
331 	long nValue = 500L;
332 	SetMetricValue( maMtrFldMoveX, Fraction(nValue) / maUIScale, SFX_MAPUNIT_100TH_MM);
333 	SetMetricValue( maMtrFldMoveY, Fraction(nValue) / maUIScale, SFX_MAPUNIT_100TH_MM);
334 
335 	nValue = 0L;
336 	maMtrFldAngle.SetValue( nValue );
337 	SetMetricValue( maMtrFldWidth, Fraction(nValue) / maUIScale, SFX_MAPUNIT_100TH_MM);
338 	SetMetricValue( maMtrFldHeight, Fraction(nValue) / maUIScale, SFX_MAPUNIT_100TH_MM);
339 
340 	// Farb-Attribut setzen
341 	const SfxPoolItem*	pPoolItem = NULL;
342 	if( SFX_ITEM_SET == mrOutAttrs.GetItemState( ATTR_COPY_START_COLOR, sal_True, &pPoolItem ) )
343 	{
344 		Color aColor = ( ( const XColorItem* ) pPoolItem )->GetColorValue();
345 		maLbStartColor.SelectEntry( aColor );
346 		maLbEndColor.SelectEntry( aColor );
347 	}
348 
349 	return 0;
350 }
351 
352 
353 } // end of namespace sd
354