xref: /AOO41X/main/sd/source/ui/dlg/copydlg.cxx (revision 3ce09a58b0d6873449cda31e55c66dba2dbc8f7f)
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 
CopyDlg(::Window * pWindow,const SfxItemSet & rInAttrs,XColorListSharedPtr aColTab,::sd::View * pInView)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 
~CopyDlg()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 
IMPL_LINK(CopyDlg,Reset,void *,EMPTYARG)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 
GetAttr(SfxItemSet & rOutAttrs)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 
IMPL_LINK(CopyDlg,SelectColorHdl,void *,EMPTYARG)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 
IMPL_LINK(CopyDlg,SetViewData,void *,EMPTYARG)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 
IMPL_LINK(CopyDlg,SetDefault,void *,EMPTYARG)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