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