Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <cuires.hrc>
21 : #include <dialmgr.hxx>
22 : #include <sfx2/app.hxx>
23 : #include <sfx2/module.hxx>
24 : #include <sfx2/request.hxx>
25 :
26 : #include <svx/connctrl.hxx>
27 : #include <svx/dialogs.hrc>
28 : #include <svx/dlgutil.hxx>
29 : #include <svx/ofaitem.hxx>
30 : #include <svx/svdattr.hxx>
31 : #include <svx/svdoedge.hxx>
32 : #include <svx/svdview.hxx>
33 : #include <svx/sxekitm.hxx>
34 : #include <svx/sxelditm.hxx>
35 : #include <svx/sxenditm.hxx>
36 :
37 : #include "connect.hxx"
38 : #include "paragrph.hrc"
39 :
40 : static const sal_uInt16 pRanges[] =
41 : {
42 : SDRATTR_EDGE_FIRST,
43 : SDRATTR_EDGE_LAST,
44 : 0
45 : };
46 :
47 : /*************************************************************************
48 : |*
49 : |* dialog for changing connectors
50 : |*
51 : \************************************************************************/
52 :
53 0 : SvxConnectionDialog::SvxConnectionDialog( vcl::Window* pParent, const SfxItemSet& rInAttrs,
54 : const SdrView* pSdrView )
55 0 : : SfxSingleTabDialog(pParent, rInAttrs)
56 : {
57 0 : SvxConnectionPage* _pPage = new SvxConnectionPage( get_content_area(), rInAttrs );
58 :
59 0 : _pPage->SetView( pSdrView );
60 0 : _pPage->Construct();
61 :
62 0 : SetTabPage( _pPage );
63 0 : SetText(CUI_RESSTR( RID_SVXSTR_CONNECTOR ));
64 0 : }
65 :
66 : /*************************************************************************
67 : |*
68 : |* Dtor
69 : |*
70 : \************************************************************************/
71 :
72 0 : SvxConnectionDialog::~SvxConnectionDialog()
73 : {
74 0 : }
75 :
76 : /*************************************************************************
77 : |*
78 : |* page for changing connectors
79 : |*
80 : \************************************************************************/
81 :
82 0 : SvxConnectionPage::SvxConnectionPage( vcl::Window* pWindow, const SfxItemSet& rInAttrs )
83 : : SfxTabPage(pWindow ,"ConnectorTabPage" ,"cui/ui/connectortabpage.ui"
84 : ,&rInAttrs)
85 : , rOutAttrs(rInAttrs)
86 0 : , aAttrSet(*rInAttrs.GetPool())
87 0 : , pView(NULL)
88 : {
89 0 : get(m_pLbType,"LB_TYPE");
90 :
91 0 : get(m_pFtLine1,"FT_LINE_1");
92 0 : get(m_pMtrFldLine1,"MTR_FLD_LINE_1");
93 0 : get(m_pFtLine2,"FT_LINE_2");
94 0 : get(m_pMtrFldLine2,"MTR_FLD_LINE_2");
95 0 : get(m_pFtLine3,"FT_LINE_3");
96 0 : get(m_pMtrFldLine3,"MTR_FLD_LINE_3");
97 :
98 0 : get(m_pMtrFldHorz1,"MTR_FLD_HORZ_1");
99 0 : get(m_pMtrFldVert1,"MTR_FLD_VERT_1");
100 0 : get(m_pMtrFldHorz2,"MTR_FLD_HORZ_2");
101 0 : get(m_pMtrFldVert2,"MTR_FLD_VERT_2");
102 :
103 0 : get(m_pCtlPreview,"CTL_PREVIEW");
104 :
105 0 : SfxItemPool* pPool = rOutAttrs.GetPool();
106 : DBG_ASSERT( pPool, "Wo ist der Pool" );
107 0 : eUnit = pPool->GetMetric( SDRATTR_EDGENODE1HORZDIST );
108 :
109 0 : FillTypeLB();
110 :
111 0 : const FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
112 0 : SetFieldUnit( *m_pMtrFldHorz1, eFUnit );
113 0 : SetFieldUnit( *m_pMtrFldHorz2, eFUnit );
114 0 : SetFieldUnit( *m_pMtrFldVert1, eFUnit );
115 0 : SetFieldUnit( *m_pMtrFldVert2, eFUnit );
116 0 : SetFieldUnit( *m_pMtrFldLine1, eFUnit );
117 0 : SetFieldUnit( *m_pMtrFldLine2, eFUnit );
118 0 : SetFieldUnit( *m_pMtrFldLine3, eFUnit );
119 0 : if( eFUnit == FUNIT_MM )
120 : {
121 0 : m_pMtrFldHorz1->SetSpinSize( 50 );
122 0 : m_pMtrFldHorz2->SetSpinSize( 50 );
123 0 : m_pMtrFldVert1->SetSpinSize( 50 );
124 0 : m_pMtrFldVert2->SetSpinSize( 50 );
125 0 : m_pMtrFldLine1->SetSpinSize( 50 );
126 0 : m_pMtrFldLine2->SetSpinSize( 50 );
127 0 : m_pMtrFldLine3->SetSpinSize( 50 );
128 : }
129 :
130 : // disable 3D border
131 0 : m_pCtlPreview->SetBorderStyle(WindowBorderStyle::MONO);
132 :
133 0 : Link aLink( LINK( this, SvxConnectionPage, ChangeAttrHdl_Impl ) );
134 0 : m_pMtrFldHorz1->SetModifyHdl( aLink );
135 0 : m_pMtrFldVert1->SetModifyHdl( aLink );
136 0 : m_pMtrFldHorz2->SetModifyHdl( aLink );
137 0 : m_pMtrFldVert2->SetModifyHdl( aLink );
138 0 : m_pMtrFldLine1->SetModifyHdl( aLink );
139 0 : m_pMtrFldLine2->SetModifyHdl( aLink );
140 0 : m_pMtrFldLine3->SetModifyHdl( aLink );
141 0 : m_pLbType->SetSelectHdl( aLink );
142 0 : }
143 :
144 : /*************************************************************************
145 : |*
146 : |* Dtor
147 : |*
148 : \************************************************************************/
149 :
150 0 : SvxConnectionPage::~SvxConnectionPage()
151 : {
152 0 : }
153 :
154 : /*************************************************************************
155 : |*
156 : |* reads passed Item-Set
157 : |*
158 : \************************************************************************/
159 :
160 0 : void SvxConnectionPage::Reset( const SfxItemSet* rAttrs )
161 : {
162 0 : const SfxPoolItem* pItem = GetItem( *rAttrs, SDRATTR_EDGENODE1HORZDIST );
163 0 : const SfxItemPool* pPool = rAttrs->GetPool();
164 :
165 : // SdrEdgeNode1HorzDistItem
166 0 : if( !pItem )
167 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE1HORZDIST );
168 0 : if( pItem )
169 : {
170 0 : long nValue = static_cast<const SdrEdgeNode1HorzDistItem*>( pItem )->GetValue();
171 0 : SetMetricValue( *m_pMtrFldHorz1, nValue, eUnit );
172 : }
173 : else
174 0 : m_pMtrFldHorz1->SetEmptyFieldValue();
175 :
176 0 : m_pMtrFldHorz1->SaveValue();
177 :
178 : // SdrEdgeNode2HorzDistItem
179 0 : pItem = GetItem( *rAttrs, SDRATTR_EDGENODE2HORZDIST );
180 0 : if( !pItem )
181 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE2HORZDIST );
182 0 : if( pItem )
183 : {
184 0 : long nValue = static_cast<const SdrEdgeNode2HorzDistItem*>( pItem )->GetValue();
185 0 : SetMetricValue( *m_pMtrFldHorz2, nValue, eUnit );
186 : }
187 : else
188 0 : m_pMtrFldHorz2->SetEmptyFieldValue();
189 :
190 0 : m_pMtrFldHorz2->SaveValue();
191 :
192 : // SdrEdgeNode1VertDistItem
193 0 : pItem = GetItem( *rAttrs, SDRATTR_EDGENODE1VERTDIST );
194 0 : if( !pItem )
195 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE1VERTDIST );
196 0 : if( pItem )
197 : {
198 0 : long nValue = static_cast<const SdrEdgeNode1VertDistItem*>( pItem )->GetValue();
199 0 : SetMetricValue( *m_pMtrFldVert1, nValue, eUnit );
200 : }
201 : else
202 0 : m_pMtrFldVert1->SetEmptyFieldValue();
203 :
204 0 : m_pMtrFldVert1->SaveValue();
205 :
206 : // SdrEdgeNode2VertDistItem
207 0 : pItem = GetItem( *rAttrs, SDRATTR_EDGENODE2VERTDIST );
208 0 : if( !pItem )
209 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE2VERTDIST );
210 0 : if( pItem )
211 : {
212 0 : long nValue = static_cast<const SdrEdgeNode2VertDistItem*>( pItem )->GetValue();
213 0 : SetMetricValue( *m_pMtrFldVert2, nValue, eUnit );
214 : }
215 : else
216 0 : m_pMtrFldVert2->SetEmptyFieldValue();
217 :
218 0 : m_pMtrFldVert2->SaveValue();
219 :
220 : // SdrEdgeLine1DeltaItem
221 0 : pItem = GetItem( *rAttrs, SDRATTR_EDGELINE1DELTA );
222 0 : if( !pItem )
223 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINE1DELTA );
224 0 : if( pItem )
225 : {
226 0 : long nValue = static_cast<const SdrMetricItem*>( pItem )->GetValue();
227 0 : SetMetricValue( *m_pMtrFldLine1, nValue, eUnit );
228 : }
229 : else
230 0 : m_pMtrFldLine1->SetEmptyFieldValue();
231 :
232 0 : m_pMtrFldLine1->SaveValue();
233 :
234 : // SdrEdgeLine2DeltaItem
235 0 : pItem = GetItem( *rAttrs, SDRATTR_EDGELINE2DELTA );
236 0 : if( !pItem )
237 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINE2DELTA );
238 0 : if( pItem )
239 : {
240 0 : long nValue = static_cast<const SdrMetricItem*>( pItem )->GetValue();
241 0 : SetMetricValue( *m_pMtrFldLine2, nValue, eUnit );
242 : }
243 : else
244 0 : m_pMtrFldLine2->SetEmptyFieldValue();
245 :
246 0 : m_pMtrFldLine2->SaveValue();
247 :
248 : // SdrEdgeLine3DeltaItem
249 0 : pItem = GetItem( *rAttrs, SDRATTR_EDGELINE3DELTA );
250 0 : if( !pItem )
251 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINE3DELTA );
252 0 : if( pItem )
253 : {
254 0 : long nValue = static_cast<const SdrMetricItem*>( pItem )->GetValue();
255 0 : SetMetricValue( *m_pMtrFldLine3, nValue, eUnit );
256 : }
257 : else
258 0 : m_pMtrFldLine3->SetEmptyFieldValue();
259 :
260 0 : m_pMtrFldLine3->SaveValue();
261 :
262 : // SdrEdgeLineDeltaAnzItem
263 0 : pItem = GetItem( *rAttrs, SDRATTR_EDGELINEDELTAANZ );
264 0 : if( !pItem )
265 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINEDELTAANZ );
266 0 : if( pItem )
267 : {
268 0 : sal_uInt16 nValue = static_cast<const SdrEdgeLineDeltaAnzItem*>( pItem )->GetValue();
269 0 : if( nValue <= 2 )
270 : {
271 0 : m_pFtLine3->Enable( false );
272 0 : m_pMtrFldLine3->Enable( false );
273 0 : m_pMtrFldLine3->SetEmptyFieldValue();
274 : }
275 0 : if( nValue <= 1 )
276 : {
277 0 : m_pFtLine2->Enable( false );
278 0 : m_pMtrFldLine2->Enable( false );
279 0 : m_pMtrFldLine2->SetEmptyFieldValue();
280 : }
281 0 : if( nValue == 0 )
282 : {
283 0 : m_pFtLine1->Enable( false );
284 0 : m_pMtrFldLine1->Enable( false );
285 0 : m_pMtrFldLine1->SetEmptyFieldValue();
286 : }
287 : }
288 :
289 : // SdrEdgeKindItem
290 0 : pItem = GetItem( *rAttrs, SDRATTR_EDGEKIND );
291 0 : if( !pItem )
292 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGEKIND );
293 0 : if( pItem )
294 : {
295 0 : SdrEdgeKind nValue = static_cast<const SdrEdgeKindItem*>( pItem )->GetValue();
296 0 : m_pLbType->SelectEntryPos( sal::static_int_cast< sal_uInt16 >(nValue) );
297 : }
298 : else
299 0 : m_pLbType->SetNoSelection();
300 0 : m_pLbType->SaveValue();
301 0 : }
302 :
303 : /*************************************************************************
304 : |*
305 : |* fills the passed Item-Set width Dialogbox attributes
306 : |*
307 : \************************************************************************/
308 :
309 0 : bool SvxConnectionPage::FillItemSet( SfxItemSet* rAttrs)
310 : {
311 0 : bool bModified = false;
312 : sal_Int32 nValue;
313 :
314 0 : if( m_pMtrFldHorz1->IsValueChangedFromSaved() )
315 : {
316 0 : nValue = GetCoreValue( *m_pMtrFldHorz1, eUnit );
317 0 : rAttrs->Put( SdrEdgeNode1HorzDistItem( nValue ) );
318 0 : bModified = true;
319 : }
320 :
321 0 : if( m_pMtrFldHorz2->IsValueChangedFromSaved() )
322 : {
323 0 : nValue = GetCoreValue( *m_pMtrFldHorz2, eUnit );
324 0 : rAttrs->Put( SdrEdgeNode2HorzDistItem( nValue ) );
325 0 : bModified = true;
326 : }
327 :
328 0 : if( m_pMtrFldVert1->IsValueChangedFromSaved() )
329 : {
330 0 : nValue = GetCoreValue( *m_pMtrFldVert1, eUnit );
331 0 : rAttrs->Put( SdrEdgeNode1VertDistItem( nValue ) );
332 0 : bModified = true;
333 : }
334 :
335 0 : if( m_pMtrFldVert2->IsValueChangedFromSaved() )
336 : {
337 0 : nValue = GetCoreValue( *m_pMtrFldVert2, eUnit );
338 0 : rAttrs->Put( SdrEdgeNode2VertDistItem( nValue ) );
339 0 : bModified = true;
340 : }
341 :
342 0 : if( m_pMtrFldLine1->IsValueChangedFromSaved() )
343 : {
344 0 : nValue = GetCoreValue( *m_pMtrFldLine1, eUnit );
345 0 : rAttrs->Put( makeSdrEdgeLine1DeltaItem( nValue ) );
346 0 : bModified = true;
347 : }
348 :
349 0 : if( m_pMtrFldLine2->IsValueChangedFromSaved() )
350 : {
351 0 : nValue = GetCoreValue( *m_pMtrFldLine2, eUnit );
352 0 : rAttrs->Put( makeSdrEdgeLine2DeltaItem( nValue ) );
353 0 : bModified = true;
354 : }
355 :
356 0 : if( m_pMtrFldLine3->IsValueChangedFromSaved() )
357 : {
358 0 : nValue = GetCoreValue( *m_pMtrFldLine3, eUnit );
359 0 : rAttrs->Put( makeSdrEdgeLine3DeltaItem( nValue ) );
360 0 : bModified = true;
361 : }
362 :
363 :
364 0 : sal_Int32 nPos = m_pLbType->GetSelectEntryPos();
365 0 : if( m_pLbType->IsValueChangedFromSaved() )
366 : {
367 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
368 : {
369 0 : rAttrs->Put( SdrEdgeKindItem( (SdrEdgeKind) nPos ) );
370 0 : bModified = true;
371 : }
372 : }
373 :
374 0 : return( bModified );
375 : }
376 :
377 0 : void SvxConnectionPage::Construct()
378 : {
379 : DBG_ASSERT( pView, "Keine gueltige View Uebergeben!" );
380 :
381 0 : m_pCtlPreview->SetView( pView );
382 0 : m_pCtlPreview->Construct();
383 0 : }
384 :
385 : /*************************************************************************
386 : |*
387 : |* creates the page
388 : |*
389 : \************************************************************************/
390 :
391 0 : SfxTabPage* SvxConnectionPage::Create( vcl::Window* pWindow,
392 : const SfxItemSet* rAttrs )
393 : {
394 0 : return( new SvxConnectionPage( pWindow, *rAttrs ) );
395 : }
396 :
397 0 : const sal_uInt16* SvxConnectionPage::GetRanges()
398 : {
399 0 : return( pRanges );
400 : }
401 :
402 0 : IMPL_LINK( SvxConnectionPage, ChangeAttrHdl_Impl, void *, p )
403 : {
404 0 : if( p == m_pMtrFldHorz1 )
405 : {
406 0 : sal_Int32 nValue = GetCoreValue( *m_pMtrFldHorz1, eUnit );
407 0 : aAttrSet.Put( SdrEdgeNode1HorzDistItem( nValue ) );
408 : }
409 :
410 0 : if( p == m_pMtrFldHorz2 )
411 : {
412 0 : sal_Int32 nValue = GetCoreValue( *m_pMtrFldHorz2, eUnit );
413 0 : aAttrSet.Put( SdrEdgeNode2HorzDistItem( nValue ) );
414 : }
415 :
416 0 : if( p == m_pMtrFldVert1 )
417 : {
418 0 : sal_Int32 nValue = GetCoreValue( *m_pMtrFldVert1, eUnit );
419 0 : aAttrSet.Put( SdrEdgeNode1VertDistItem( nValue ) );
420 : }
421 :
422 0 : if( p == m_pMtrFldVert2 )
423 : {
424 0 : sal_Int32 nValue = GetCoreValue( *m_pMtrFldVert2, eUnit );
425 0 : aAttrSet.Put( SdrEdgeNode2VertDistItem( nValue ) );
426 : }
427 :
428 0 : if( p == m_pMtrFldLine1 )
429 : {
430 0 : sal_Int32 nValue = GetCoreValue( *m_pMtrFldLine1, eUnit );
431 0 : aAttrSet.Put( makeSdrEdgeLine1DeltaItem( nValue ) );
432 : }
433 :
434 0 : if( p == m_pMtrFldLine2 )
435 : {
436 0 : sal_Int32 nValue = GetCoreValue( *m_pMtrFldLine2, eUnit );
437 0 : aAttrSet.Put( makeSdrEdgeLine2DeltaItem( nValue ) );
438 : }
439 :
440 0 : if( p == m_pMtrFldLine3 )
441 : {
442 0 : sal_Int32 nValue = GetCoreValue( *m_pMtrFldLine3, eUnit );
443 0 : aAttrSet.Put( makeSdrEdgeLine3DeltaItem( nValue ) );
444 : }
445 :
446 :
447 0 : if( p == m_pLbType )
448 : {
449 0 : sal_Int32 nPos = m_pLbType->GetSelectEntryPos();
450 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
451 : {
452 0 : aAttrSet.Put( SdrEdgeKindItem( (SdrEdgeKind) nPos ) );
453 : }
454 : }
455 :
456 0 : m_pCtlPreview->SetAttributes( aAttrSet );
457 :
458 0 : if( p == m_pLbType )
459 : {
460 : // get the number of line displacements
461 0 : sal_uInt16 nCount = m_pCtlPreview->GetLineDeltaAnz();
462 :
463 0 : m_pFtLine3->Enable( nCount > 2 );
464 0 : m_pMtrFldLine3->Enable( nCount > 2 );
465 0 : if( nCount > 2 )
466 0 : m_pMtrFldLine3->SetValue( m_pMtrFldLine3->GetValue() );
467 : else
468 0 : m_pMtrFldLine3->SetEmptyFieldValue();
469 :
470 0 : m_pFtLine2->Enable( nCount > 1 );
471 0 : m_pMtrFldLine2->Enable( nCount > 1 );
472 0 : if( nCount > 1 )
473 0 : m_pMtrFldLine2->SetValue( m_pMtrFldLine2->GetValue() );
474 : else
475 0 : m_pMtrFldLine2->SetEmptyFieldValue();
476 :
477 0 : m_pFtLine1->Enable( nCount > 0 );
478 0 : m_pMtrFldLine1->Enable( nCount > 0 );
479 0 : if( nCount > 0 )
480 0 : m_pMtrFldLine1->SetValue( m_pMtrFldLine1->GetValue() );
481 : else
482 0 : m_pMtrFldLine1->SetEmptyFieldValue();
483 :
484 : }
485 :
486 0 : return( 0L );
487 : }
488 :
489 0 : void SvxConnectionPage::FillTypeLB()
490 : {
491 : // fill ListBox with connector names
492 0 : const SfxPoolItem* pItem = GetItem( rOutAttrs, SDRATTR_EDGEKIND );
493 0 : const SfxItemPool* pPool = rOutAttrs.GetPool();
494 :
495 0 : if( !pItem )
496 0 : pItem = &pPool->GetDefaultItem( SDRATTR_EDGEKIND );
497 0 : if( pItem )
498 : {
499 0 : const SdrEdgeKindItem* pEdgeKindItem = static_cast<const SdrEdgeKindItem*>( pItem );
500 0 : sal_uInt16 nCount = pEdgeKindItem->GetValueCount();
501 0 : OUString aStr;
502 :
503 0 : for( sal_uInt16 i = 0; i < nCount; i++ )
504 : {
505 0 : aStr = pEdgeKindItem->GetValueTextByPos( i );
506 0 : m_pLbType->InsertEntry( aStr );
507 0 : }
508 : }
509 0 : }
510 0 : void SvxConnectionPage::PageCreated(const SfxAllItemSet& aSet)
511 : {
512 0 : SFX_ITEMSET_ARG(&aSet,pOfaPtrItem,OfaPtrItem,SID_OBJECT_LIST,false);
513 0 : if (pOfaPtrItem)
514 0 : SetView( static_cast<SdrView *>(pOfaPtrItem->GetValue()) );
515 :
516 0 : Construct();
517 0 : }
518 :
519 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|